From 2355299d9c7590a24b22a79a379a108e0c43f248 Mon Sep 17 00:00:00 2001 From: yqh Date: Tue, 12 Aug 2025 18:13:35 +0800 Subject: [PATCH] hw3_CSharp --- .vs/Homework/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 83597 bytes ...89fb9349-a0a3-4232-993a-edfba8f19b6b.vsidx | Bin 0 -> 3529 bytes ...da4f42ba-3c78-4845-9eaf-4fd51ddb2a09.vsidx | Bin 0 -> 18029 bytes .vs/Homework/v17/.futdcache.v2 | Bin 0 -> 132 bytes .vs/Homework/v17/.suo | Bin 0 -> 31744 bytes .vs/Homework/v17/DocumentLayout.backup.json | 37 + .vs/Homework/v17/DocumentLayout.json | 37 + .../homework.metadata.v9.bin | Bin 0 -> 1013 bytes .../homework.projects.v9.bin | Bin 0 -> 78611 bytes .vs/ProjectEvaluation/homework.strings.v9.bin | Bin 0 -> 119278 bytes Homework/Homework.csproj | 3 +- Homework/Homework.csproj.user | 9 + Homework/Program.cs | 738 ++++--- Homework/Properties/launchSettings.json | 18 + Homework/bin/Debug/net8.0/Homework.deps.json | 23 + Homework/bin/Debug/net8.0/Homework.dll | Bin 0 -> 13312 bytes Homework/bin/Debug/net8.0/Homework.exe | Bin 0 -> 138752 bytes Homework/bin/Debug/net8.0/Homework.pdb | Bin 0 -> 14312 bytes .../Debug/net8.0/Homework.runtimeconfig.json | 12 + ...CoreApp,Version=v8.0.AssemblyAttributes.cs | 4 + .../obj/Debug/net8.0/Homework.AssemblyInfo.cs | 23 + .../net8.0/Homework.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 13 + .../Debug/net8.0/Homework.GlobalUsings.g.cs | 8 + .../obj/Debug/net8.0/Homework.assets.cache | Bin 0 -> 227 bytes .../Homework.csproj.BuildWithSkipAnalyzers | 0 .../Homework.csproj.CoreCompileInputs.cache | 1 + .../Homework.csproj.FileListAbsolute.txt | 15 + Homework/obj/Debug/net8.0/Homework.dll | Bin 0 -> 13312 bytes .../net8.0/Homework.genruntimeconfig.cache | 1 + Homework/obj/Debug/net8.0/Homework.pdb | Bin 0 -> 14312 bytes .../obj/Debug/net8.0/Homework.sourcelink.json | 1 + Homework/obj/Debug/net8.0/apphost.exe | Bin 0 -> 138752 bytes Homework/obj/Debug/net8.0/ref/Homework.dll | Bin 0 -> 7680 bytes Homework/obj/Debug/net8.0/refint/Homework.dll | Bin 0 -> 7680 bytes .../Debug/net9.0/Homework.GlobalUsings.g.cs | 16 +- .../obj/Debug/net9.0/Homework.assets.cache | Bin 228 -> 227 bytes .../obj/Homework.csproj.nuget.dgspec.json | 143 +- Homework/obj/Homework.csproj.nuget.g.props | 30 +- Homework/obj/project.assets.json | 155 +- Homework/obj/project.nuget.cache | 14 +- dotnet-install.sh | 1888 +++++++++++++++++ 42 files changed, 2739 insertions(+), 451 deletions(-) create mode 100644 .vs/Homework/DesignTimeBuild/.dtbcache.v2 create mode 100644 .vs/Homework/FileContentIndex/89fb9349-a0a3-4232-993a-edfba8f19b6b.vsidx create mode 100644 .vs/Homework/FileContentIndex/da4f42ba-3c78-4845-9eaf-4fd51ddb2a09.vsidx create mode 100644 .vs/Homework/v17/.futdcache.v2 create mode 100644 .vs/Homework/v17/.suo create mode 100644 .vs/Homework/v17/DocumentLayout.backup.json create mode 100644 .vs/Homework/v17/DocumentLayout.json create mode 100644 .vs/ProjectEvaluation/homework.metadata.v9.bin create mode 100644 .vs/ProjectEvaluation/homework.projects.v9.bin create mode 100644 .vs/ProjectEvaluation/homework.strings.v9.bin create mode 100644 Homework/Homework.csproj.user create mode 100644 Homework/Properties/launchSettings.json create mode 100644 Homework/bin/Debug/net8.0/Homework.deps.json create mode 100644 Homework/bin/Debug/net8.0/Homework.dll create mode 100644 Homework/bin/Debug/net8.0/Homework.exe create mode 100644 Homework/bin/Debug/net8.0/Homework.pdb create mode 100644 Homework/bin/Debug/net8.0/Homework.runtimeconfig.json create mode 100644 Homework/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs create mode 100644 Homework/obj/Debug/net8.0/Homework.AssemblyInfo.cs create mode 100644 Homework/obj/Debug/net8.0/Homework.AssemblyInfoInputs.cache create mode 100644 Homework/obj/Debug/net8.0/Homework.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 Homework/obj/Debug/net8.0/Homework.GlobalUsings.g.cs create mode 100644 Homework/obj/Debug/net8.0/Homework.assets.cache create mode 100644 Homework/obj/Debug/net8.0/Homework.csproj.BuildWithSkipAnalyzers create mode 100644 Homework/obj/Debug/net8.0/Homework.csproj.CoreCompileInputs.cache create mode 100644 Homework/obj/Debug/net8.0/Homework.csproj.FileListAbsolute.txt create mode 100644 Homework/obj/Debug/net8.0/Homework.dll create mode 100644 Homework/obj/Debug/net8.0/Homework.genruntimeconfig.cache create mode 100644 Homework/obj/Debug/net8.0/Homework.pdb create mode 100644 Homework/obj/Debug/net8.0/Homework.sourcelink.json create mode 100644 Homework/obj/Debug/net8.0/apphost.exe create mode 100644 Homework/obj/Debug/net8.0/ref/Homework.dll create mode 100644 Homework/obj/Debug/net8.0/refint/Homework.dll create mode 100644 dotnet-install.sh diff --git a/.vs/Homework/DesignTimeBuild/.dtbcache.v2 b/.vs/Homework/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..b62ade63c61581c87c1c46e4e850e18989b385a2 GIT binary patch literal 83597 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 literal 0 HcmV?d00001 diff --git a/.vs/Homework/FileContentIndex/89fb9349-a0a3-4232-993a-edfba8f19b6b.vsidx b/.vs/Homework/FileContentIndex/89fb9349-a0a3-4232-993a-edfba8f19b6b.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..fe43f0cc778afb36b402c51994a23eacb54ff8ed GIT binary patch literal 3529 zcmYk7X?wh0YMNN#}IXhDpHwj`K+dk>*1~jQ}Jr0Rcp4Y z)2*deHQkt5ny=LtTh&x~cDlKcY0TI5Hk!Npd;15g?VD<`*;uGG7w2lN>YnMP`pj&( zwzxP~-`VQf)oRq|qJM3#ul=W^xXLech@s25Bc01QhkYcR!x%iB&K>I9igQPpbIKH> z7{Z02gAD}x3;qtXedNKm_xOoWT$mCu154w=y4VKNu9$zhy&@uEBNbv0fK4I>nlKM+ z_`Sy~HjE4Qa=RATej--%F))0YKCIiefrUEEpJ=PE9cv*T&JDIVOu<}Vf*-;L{2maG zNPoLxMzq~PMEbOd!CYj32kRpE|5dO_OvfmeST-95!r=F_ydSrip0EIH7*l*U#9$V# z)s_Utl+8uLM7!{=c77y*?fuB$W0uHXEil>REi)V;uif4&k;s!Ayo-KBZ=ZNQu=ZWWw7l;>%7l~1Equ3+H z#9pya>=!Q<2gE_~5^X5fT$~Um#cd*gk$KLxi&gO&k-yv=-yu$k)8cjFjCj3R6K@cA zinHRJxJ%qE?h)t3y4VmG#2dw?*b*1TCGjS4uXwX~i+HPen|Ql;hj^#BPh1vP#Jj}1 z#e2ki#rwqj#RtR(#fQX)#Yef+3iL*yL&)UU>vx05DE>Y8e{hkCpgN3}X%}=F9+Ez+SS}2UZfg5qMK>tL4l= zqljaEo{x&nDVmm{T!B@kOzG#D8%1Q^o&jxkg6cgJu>ClnQXVriQ1&m6m=Nk?*-v&V zV#+5Lq7&>Icg&|$u<8r8UsfBy!`!ULYaVvd?2?U^P!&58Lb+1GPIwWu#dJCt&8Nb> z@J-MEAt!_@vY#kW;gjf`F`_l zui!7hTI@7WEBnn8lY??KYS!kIpghZb5+ysARMtVw*%?jQuRz95Y97i=?GJyd*6D`- OFZua~ky<1gf)xfF6hd&b)JIvX0 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 literal 0 HcmV?d00001 diff --git a/.vs/Homework/v17/.futdcache.v2 b/.vs/Homework/v17/.futdcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..9f26533e948128e833863409d1649b4980701a0b GIT binary patch literal 132 zcmZQ%U|?`|wu%WYPAw{qNh~fcj&aFPF3nBND=Cg~4$ep{D)7k9O)bwa$~H1EGL3<8 z;0(Rw;)0_5EGD2iyw3S~X_@JzMTsSu`FX4^sY#{j9056rC29FZxonPkmCga7TCbY& QfJ(vOM)4laj+=Km0KASZM*si- literal 0 HcmV?d00001 diff --git a/.vs/Homework/v17/.suo b/.vs/Homework/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..730e38b79006b45825434290dbbc6ad9e6a391f6 GIT binary patch literal 31744 zcmeHPYiwK99ltJ*^}(Z1#-Ok*l=2wFu46li6S}U6lMrarh9*rrFl;yWP3p#v;Ois} zNk@5ZOzgt|O&XIJ2&AzMX+xXFhe-?}#t?h}X&=zEO{{ER5FeNjn)amo{qDIZzP^54 z+aZbRJ=Xs|&OPV+&+~u&uj9Agyx=cSJ-_v&Vhg*JGn9`{ZBWj(#Ct5y%4S8`g!grT zk58RC#ZUZ>M>jN44;)Z3_~n!qrC&+oo>k^Kl#av2%2`WezN1R6;WvKw{W~}P$#V(P zy|hgv9tOsYa#Xnq*eCGRuN1zaupLnO0Bx;aVG{6Y@ zLIr4Mx^lPe$~q76pM?axmrG}j@5Re&X2gDF23V3x0_`VES}^w^CTq=D;#uOq4BwpM zpF-N4xtPz#^Z%I961biT=i%FD%yRizwsAe;NEbc_I2Uj+U@L%W7%s;%`}ebeO94Ir z>-TxU1pt=aXb7MjYZ*bjhXCz>4nQX$4Cn%M18xB91Y8KP<~!Y=S91L;>)rK_>8Grv z^)KhYqyzS~xe@i1w18>P#5>pj1_0MTA{liJ$w9Q~XDec3nX!jlEb$p|O(c%iRe65haG7kb-8>!*TR=799Hs`aWsM zCJ8*H5wjO}72hMc&mcz3m|bHRu87Km_B=nq-ueGKwo_1ZyyD z>631A{auUloUT8jKF7pAYLqu@%sL&<#HSgfs~L1*R%uiG%JpXI;@fp~w4c0;EUA+G zJqFwzkR-`#mJ8RS{jK6gBlv5fzb^eR9+-OR{}0XezuNR)%66sh z+@l#!9RPLxq}i15sTZWafI2?P^VF$P-lt4YnVITT;QU6EXAoYLL3s4708JzrD z3xITU8-V-KcEDADs{z*lxTkyxa2nIJjYQ-6=eC_T>ZQuO;3C({72c%BLuPBJWLF z!cYnS7_eo*4~_!!I98wF4w)m4*dsgx0tYJSv^0EQ^r?EG%Po3gFfwcFVB|721N#n}}@ZU>g?-c)iDC~K&KxzNe zK!J0H#6c-!(im;h)oP&y_&J}sA3DWPdMnEvLqAK|Y8+#63_A&XpR#xiPu0RUj6e57 z?wL;UPa-Yr%+L#*8Au)}%&IKzBj^Puc2AL;^LU+y`>?bD$oNY4qxi_Zoq=mx2VS|l zN3iB73FpvyT1E@0jmTrYa{jU1GFZQrdrsg3_cn$ejI;^~Y#x|MU&s$rtY>0p# z2;$cR9-|A_PRN5{krgl|xi+bDAsw>z3gzz$ zQO%cOr1?&9F>)xmZ%oH|j5BPmc_%KViA_+P{RO&)DI@DHIDDPsoA7tqFX z^Pm;@$uri{|D>1X)fnvU7xY+YJ?IJ0gSjvbu8+MhwKO89xJvzFE%?tyR=NJT+PU(m z%_0_JK7cr`eU9`kSOpxH1g`qhD#_OX`X5gVUdbQV)BnUzEf=XD_cv;vsNG|I#0;DO zZl;j?4iH&F2>7KP&?)|}AV2pYhQe7sik1qUlk^A48kDJ6?23PWyi+ z(rz@H!F^wcWHJO?G2rG5%)k>Thuwc4sM9F!q|sT^N|5IR=a7y&h8QW%QO;P-TOV@g zbLh(8fv3-#*z)LmfBo~j&!4&HiGM!uuU{;le^TFk`O&R^-1F9j1}T>PC+}wUs@|N| zK|w!J@`=D3Bnl}_M?J~ooMmG8&u@JbA3o8#P-`Eg)I|D@?8CRp{N?(f9DeG7$vdpW zj_?fbk?!blHZz%3Q!N9Dq^3vXnOs`SMfLbpH0<;HLVkaABtE4_hZ3=DM$b&-eEa%G zeTa(Y)a;~|vws;iVh2#5HkZjx-ISitvRXQ(`9yO2{OA7T(*M(k{ztJ=b%W+cu@}%`@%WbBr>g zg$i1oel@TLbS=1Il=FMYSlzXMdCa-^9&e|6c0dN`F~z zDT|d#TP?29{G{E)Px#K_W1Ex{fB5L}!NJ~Yc;$D>aWcP%o8B$IIk`7l{||osn}uzM z66ttmZbZxF66r~OTld0onpqqNITx%MoW?Pa)3i?0*||5XFN|GMlyxQ#@+*LluLKt% zxxY&JDQUJCbDvx&HF5OC$>Ev4FB$Nbg3AoxiR&|kAN3QYO7n;tLu?chs_;$`lI(~X z%U#c`2vTyNNVDidw(iq%}{0KC>lRqZKdK(F&LUZyx@i_TJ^@|4*RI z@80`tPg+gR>k0j_N1sVUQ}FT|yQw5cc=YL1B8^wtvBj%;%<}ppbymx&lgwbI_(>#_ zOlq-QB9nfksIZ?V)tsj1#?<7DB})aNt25Br-Y%pcQ33mP(XP;0$q9YYraiAG9^Tmg zz}xTqebbXazwh@?J+kf6eed1z&f71mixcM=b}O+h=dZT*r)QGMT}tpsE;rr1V}~9) zqNP;bms(Qp#4@QJacx#hW~R05j+8z=lSsyQ1pNM>$m2xr%!`A?B4;mXE0jZ*BSrQgStxnuU+1iZKqb# zUN>n6w)O}0|MYL+Sl843K4@9@Lh9yOKkj}RjD*Bf%HC|n&1cDf%094vFZI3~k<$KP z)p%Hy9j)f7(@?KU{=c=&Sy3D6Po(^_bL(@rTlJ^hk<0lXm+}8K`0p!FrqlkPv9x~~ z{C_>1`?bhlvq*oP2N#58@c%N}za3>cZU5a!OT7_;tN$1MAocevt^cPV;A-msPoVkk z{tpsIQ&z1C?N7n}Uz+|eshl;J{#Vj|((h(nQ`3KU{ToWR`quwLcfI=R_5V0=^2!%p zSbyM`@7?_3#%DKt?`P^o$;bcw@%#5)*2=9#GG_9=#`u4C{WpC6tEtz2DV?CJ|7#Y_ zW#jt4wV;314ev|pVVgyROerA;ovV&}tZv=wYV^Im=EvY55Nhfc&^IMzwBQxYpk}Z? z*vBAdXjo({{u`@F+mV2kC5-vRmHb+hwn6+8*AzyC9tgB2DM~$dm9?<8>BW|8>d}}5 zb>-^Fq8$lX>Ny&(H|fk`TjAcv_vE{xGo~ib zvmM12Z8XJE@HFK8k+&n%Ylfp5{4k*2{FVJut9Jo?w{9~|&<}4A>(9INR{6=AhtEbRYN$gr zJi_9~v36N#{z=BjJJA%SW#12BR}ufrLeClU!}On-Uh?HtlrNj-&29j%uP6)fF^vEM zxQ1}XqYdc$aS|{D?#+v9AAGulcAI`k->j0kVPeW-Th-!2pCWO=EKG=)r43C{W zUSYMhV&yC;T{m&^h-udwXBd~WZa1I>%iUU@&Ejb&+9EZau;=-~d8GwCIgC>!KJ1UQ zsEZRsy+|2H4f4IulTXXpLLbIQ{&!Zbb)m;_4|a2MBeN(ag1Yl$C`W=Goz{|tl*s>3 z$hSr0rynP6>D$}+cWsctZn`4sSTz(c|@ZgaYB9 zzdh8^89M&RGSybkBxmRllhxq=l9<)H8>kZ~mxt7gA+g)-&&K<+?{x0O)sR!|+^Vbp zTRGoXsb!K9-0~2mjd>R{&n}$g;^8QhHaj~SmCwILl6rX#67>3$D6>`70-b8dxZkS< zL+xHr{jj&IBR=76*VKt%S4h)>9bG=SM0Ezki-O$dulUyk8>3D?a&kEge3s|?tL2xZ zoOyYMfx(*J*sm(IU*v!v4-a=19yhDpr)K*Xj&mPZ;QS!}0YV2iGiETF^qck@o^29~ zyo>h#0I!GNbe5n0Fqi|cM1Ldd&Evor1y8xX=pQIb<1d$={rorZE%;PYPCG0mbBJ0)bDzlx9(2QUc2YN=|e(-QGEV=HFt4Tr(C|G4%ayZy%D)G?B|_8-^&e_Z|l^63BR d!y^An(yG6A_5bwn;s1TP`hRIFSWEi<{{uXGjP?Kk literal 0 HcmV?d00001 diff --git a/.vs/Homework/v17/DocumentLayout.backup.json b/.vs/Homework/v17/DocumentLayout.backup.json new file mode 100644 index 0000000..1c4a49b --- /dev/null +++ b/.vs/Homework/v17/DocumentLayout.backup.json @@ -0,0 +1,37 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{FCF2C4E1-EB48-4D53-A8D7-EF81464309F4}|Homework\\Homework.csproj|c:\\users\\asus\\documents\\csharphomework2025\\homework\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{FCF2C4E1-EB48-4D53-A8D7-EF81464309F4}|Homework\\Homework.csproj|solutionrelative:homework\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 0, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Program.cs", + "DocumentMoniker": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Program.cs", + "RelativeDocumentMoniker": "Homework\\Program.cs", + "ToolTip": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Program.cs", + "RelativeToolTip": "Homework\\Program.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAPAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-11T06:57:39.763Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/Homework/v17/DocumentLayout.json b/.vs/Homework/v17/DocumentLayout.json new file mode 100644 index 0000000..8473f59 --- /dev/null +++ b/.vs/Homework/v17/DocumentLayout.json @@ -0,0 +1,37 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{FCF2C4E1-EB48-4D53-A8D7-EF81464309F4}|Homework\\Homework.csproj|c:\\users\\asus\\documents\\csharphomework2025\\homework\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{FCF2C4E1-EB48-4D53-A8D7-EF81464309F4}|Homework\\Homework.csproj|solutionrelative:homework\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 0, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Program.cs", + "DocumentMoniker": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Program.cs", + "RelativeDocumentMoniker": "Homework\\Program.cs", + "ToolTip": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Program.cs", + "RelativeToolTip": "Homework\\Program.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-11T06:57:39.763Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/ProjectEvaluation/homework.metadata.v9.bin b/.vs/ProjectEvaluation/homework.metadata.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..92f75852e1cc233caa74d3e292747c3dff066e82 GIT binary patch literal 1013 zcmYL|X-HI26vyw(F=j49SyUQPkVRni#T<<`Qd450EO*C!DsxH4CAZAn(oqL(G1M#s zi!?>@OQ29lDwPo#gb*!`U(zp;Q4vycFW7(H8+^n3=AL)%|19_1d5kf6nzN&WqjjI= zj8+-NnW&{9ow;ji#$}XYIwqsxx<-q8?AFB(b4Gbx&twc|G8XP;^4<2TZ`XI1QFPOt zN98qJVqmVL$8ldfmH0SLZz5mkxD_%UK?$6EH(Q=NOmjw2PqW+YYD5?P%?wm4CPEeB zMSjCil_=3b^`AXkR!+IDCu*`J$db{4H;p<}rA&b<6{K+*zn`x*n~vuUPG5?nl$x>~ z&D-ERgHR{^$oQtTDXMAr?-y#~v)DZcGJzTD^PC>;G;C6ip2bO=npXS#qoh zv!Tra0eU7%$baFbuOg4Y@N(hqfZIX+Ym=43$_sGiaiaA*EUu3jXg;U6^93>P5OJ5@ z$L>`Mh*)A9LjRRcVW5SSS2?JTBT@546WeNzm?(lEiP){;+qL~L(>1eoWey^RSm5Fb zOD_bg$$yP!wpCQt;;EKE%On`APW?(vjuP%R@DIY)ldOLfMHREkSi5|t!i=X0` z5JIjJ9VF8lk96YRgoy?QmP~zaldVXllT%y&@hSJ)B!hI+I&2Ga=kk$uT>C+kEWla_ zia?VWlf_ssf)a2T`@!G9qe6HKtu#ZMMOnx2sTtiK?G6k9kF1= zhN4Ilq>40Aq=;xPcE4+q%w)o|k8;j?IOlxtn}71m^}FvWnaoVG*?s2rQl61crBZeK z-_-YAZ{|f;y)|a~3u7>;euuJCw%2NWz_Q8r9ClQrw~jmSTEp;6FKu{MKA$o?+f4Oq z_-^i*?;Y|?&Px#*Ue-K%_05x8eoLD2oSbL-)Qx;oUWuHS^=V0S>e^~G)-GBqd`n4M z+HBl$>EOOU`z4f-w5<91$BLHAd8Pdl%9}6WUrN?iLHbtIYpW#NP+6x{a$ZHhgsNt$ z-J_kBKI_+3E$3DCX?5MVhV-qe(^`_&)@dC{_tI%yN$cr!Z%OwtQ+@Y+_>P@RL_gHe zdG-7@G|*{7NgL_3v84OzbU#U(=yZQco9grcNt@{{Yc5-MpiU2x^kAJHB54aV^}vPW zoG1OBJXF%d%v7hE6E;rqY0I3~!auiGI&Gcv4)f{ZdI@c$Z(F^#cB0()I6NYtWy5zi5;^wYqs@nzG>9dM4cl&E|_rEsxFjE7ctv~v;VhZp1 z*SUL{sk!%0`5?Hce#^zwKTW5n=e%C=^EtyzU0L?@J0}!V<(Xz`p9`PAwK(%xe{DWn zue)epp7Yn{bIp|T;+7rLqNa)SIZwZQ=gUidfle=!^dg;JENO3Z$@Z>tdAdXn!b{Eh z_jQx>vYgl3A1r-z-@cOeGu=_My`GurcQN6d%L-5LK#`x9g^N@&RjYA;;~GJR(QQczyIeD#zJlI-QX7#``5q)am1rPSWWUl1|p? zl$GWwyr|I+=NuSkkLC@v9X@0rS>+}UlU)1SKIq!Mj_hp^FB7I-g z>1&d{uG2Rpovzb2C7q$S_bu7pw{`lCr0?oAP5`OC$+fMLKic6KpMqzzbx3EM!1f3m?J$AC*!!azy>DP^EE|CBLM zmVe3_D9=9?3{>QwN(L(PPZa}I`KOw}!c9~+P=kMJ8eYmoEd#YF>KNF|aM%H;%cpe1 z$mM)dPYUd9U>`QCz68Rx0UzC!YeQW$(nVuk?5hO!V|h)a#Qp}F5*#3bsGyk=rh(>$ zSCX~iK(-SH(e>a6;1B~Xhz>QpiGGW4n1PlAtsVcA(AIjo+PD-lPOP;5*-bkO3+CHQB-Hc zE3f*uOJG6Q;4*cK%kFX6BQAT!Wv{qAEiO-w%QNEg%(y%&F3*n3bK>$`!>bsa56+bFhY4FQL3tIpZ?QK2nOw)0d#14lXC?FM;USD|9g+ z5V(^4O2>hb#8n0c5e*K})nedXLoh_;r?^%LmVBKqu2+HsZKxEY)Ek&@m;|EM8+9>U z7dPqRW+ie4ZZW(eL6@+A5z0bwt1d<=!S>yz1a7C}9ZFK%sRSMG(#0q#aJPZcbRDC> zJqGS2xX|JS9P%uO9HUQkX{LGjaK>lC(V+oJX+uJs+GUUJ%#)MOt4nyqe)4 ze3|kUDec0gDWL zN3huNju(ws!bW^=U@6hE2<5PxU_}U4@&a(cuhJx~KZJ5Mt!(6vfebF)8pG=#N?%JG zUDs(6>j^f5;3w9;(ZJ6{zl3NL(XR$J6K&DZRs-9Jehblddi`!-2hksf$1y2-m*P+T zq&8E;4~YHYm~2 zBwXG_OK5-%D5*)5qP=toM9-8lQI@D&gv2S94)SvV4W;mUqY;a3Y1VERvo#&>Ge^fsV)xCMKdYT+{A$_0Vahei1ow?3Xl8$F8QP;p(O5kido)bu%%Q1GIiSvmr2+@T^7n!)2sCSg< z63R=Z#APP>5cCbR^y4VQJ~)zBQ(hCv zA(Yof@;b`vBRQ1vhPWK2B%jf5R06~4dQ&8Cro2T-wrE5sOx$W>Buki&0YGZWE(f$QT9gF>x=!eG2eB#RCLm6?o9ZLj(_--gwrFal9sv zm>5s=sOep&n(|m6FoFHa#!Qs?g?L;FOfvBVb50HbrkG9+PZCU39#5HgnqZm)BL6c| zc$@Jojn7Ff7JadtKd%72#e?GuIuN(H7Zs?=2LP7wvH~^u2te?v011a&LiH`_AR$!KiPY6C$;4>4S6MUh-Y!hD+ zd?kUG!W`SB=;_|C*)7P2G&_?}mtw~?hp z%cM^p%PCic9xH?EzDiodr-vUjGgj08#}KRu=G|INVjb=4b+CcprvL;ujE%bZSqYxU zFG^q&bNwnMHk;T&uvLL=CVnH>uE6gmb`bobz@H{O0!Wa@PRd*)^OUKyoO}Fi&d>Tv zQkYU;I`8=6!@mM{8X1DD1UWdAu9PT|MoEHF5{PSCS_zb)t*n$NmqvMl3Tc0C@>X6k zjYsxi95@O0rE&bg{oKno5BK(rCtf&C}jUwIm%Vt$fcw+rd)ia0q3K zxI9!!9F|5)+FPZ)CxfEUn(}aEZ<9t_f_4(*aRlX&N_v}lkC%#b1V_<)v;^XM9-{<~ zrR} #45fBs)-^C?!rx<79$UB*>#9<*7>Yigl6#ozv(-Yu9x6CMAz- zMNcKri;ky7@^s2Glw|YIRDw00r36bnTMC?$#<|RQo*alcKaC3rE(|PhXG;SieS+$tXwk^3Z_J%H|E5S?srW7g6V6L~~@@*-_ zsCY*TJ^|2mrj&RujrR#YkU%(psEd!3U|T-c#VlQXqKi+JU}>L8fzQ+Uf_2SS;L9|= zBABDV*J*r1FjoT6ns0S6PZ#s0z=AXuGT$Nz^7xK&v65{15-IR~8cS(iCV{AAxe{1G z+e#&ATcrex`9TRKMm#~8eCdRl(A5j?&TCH zZ=nJ~MFlEZs7z2rfvOg&5mZ;8hJ~60wIuLHqBeCMOFs1QocEFfbuHARb#Ddsu~46& zfdt|bHMBgwtn^=BHKMJtk}PUpCFr=HE}AGoxBZnsQxTa2 zx;R7^EtJ5a%yn2KTT-@?(i?@=)Q4N%oxvz-W1%fUJIfmtfFmp%NzmT%MhD<13r7TSu#5T4;BQs7bxm(kis0e(L0OVCdO(IJ;B!Bgq41T9zSVn85prNuV@ z16jybx^?cnv6$M@Aa3}sa;?1oSd3*?Pq z?%|e`!cEM3vlTv`3+G#OF+vL5YGEW@Z<9c{-mU~s{Ek52PIl^D7Dmze?huV;z4RCp z%6sT>uZ8>Qalb494_FvW@Sp+@S$LRWoC1$n7*Fu11fm6xDdB%Mn_ziQiSwQ)x>$Ue zdprV|WZ?2%9=|aVGw=-y(`kRx@}>u1hK08X-d5lp3-1!lw7eOEe?>;M3sbKa0!H~W2a&BCH8<+Fqa(-Mch|7g>xhO8bizF6XSi-*g-tyj4eYMo`_zg%7%Yvb@T$Aj{ z6`JI?<$R8a09IM}fyJ#35U=u&7S<4~wY*P7k?VpUUvGJ{RdpM5@sln#D#2=gmIA+6 z*u*k_Re-J9Ot8iB_|1zLTYPP_m0+6!d^zcx<<0doh+g}$PO~R#f3ETTVY(YuN zQjsi8S;h`t^p&+8l(SKusDkaSUq)ZPJNU-J8`eQcw=?-9(U`pVY8MnmRr6y|Tt^06<$ ze$qo!*F+clD}knTJRp+ID4R=(18p2caIge<975SbNjC9NC2$yREu};&8?6ZrSD=lJ zwgl}Y5KHtCQiz{P97$_?1&*?DG{G?vh?6+h_SX5GoX2sr9Un^sqhSO7yh({UdtWMhd5i!|CF{H@+#H z!IZ~WY@2bWjk9c?+1cW7jyRkv4wd*@l=C=J`0D_Xsk)KoZ&h%CjSFpDBuH<5FLkkj zi*59_afyvfZCqxfkBz=IzhtDt3Zo?Y*|^+Be;ZfW7+~W{8v|`zWn++y!8We8`R!u{ z*Vy8_$RReawQ-$|>ur8zV_~Sx_xQNM#xNTFhiRM2boL z<6#@)Y&>FPyp2a~JZ58paF{3#kBh@3ad<);CX2)2yt%eEF@?=|(#BMque=TR_7KBv zj;CxqZSw~Vm}cV{;ry&PJSPs%i^B`z@S-@pBn~f&!z<$ODzEWtHhwU(q9ttD>wbIK zyf^$7E;DRQxACTp88+Us@wUyc9{35@#=GL0&J<<5Cl2q6!w2HQiy}jJ1Al;|q~)DEeo%NPQ^|Ux~vUarjysz7dDH;_$6F%oB&nY`}aQ3q*RM zI4lx}XGJ;RiPU12zQo4&BE3``mJuwsu|lL*ibKjyH^(ZTwvE+M@<(ARC0e>hq}GZ< z9U<3=)OvAf!IC!E_=#y38*PJM@(wa8rToMY{A|}rWd#e8R+Mz2WXW_+IQ(K`lbsU2 zxkmn zfGek*EY-}YQqzT8CyE~f1hr1$N93>pRv}kADm4?8n$=yMOmJFSscz&NE49S#yUJ2` zqXDwizjbZROTb$%`@Lj_S1ag&9X3j3f@J9o%7n?s_&PsKmdl`gL@R{JiWyW2la({5 z!lWp;HL7OZU2CYC`I{Q56|A9pR6~uR23C+lO;uH`Oo=^TmFTV78Prj=?)C4gwXR;P zQ?y&1zw6d|1-o_cs9X0@-HQ4dG*GA5Fg(RZ(I{ycRn|BfB}~duLI*iYNW)Q*!oDn2 zbRo@hxa_BD)i0*3vq`}^_mApivOt}r|9qWI3)Xo+R40=K>LmTg>y$IFSyZPs1Di*6 z9vIcB%|OxuGw`57Gf=BRn}LOE&}N`k!*0*OJz7<wn*12bAV2grv?%5f5XjG>*0}qR4V9SCtkhH)IY*lCmYBgvx zuy7694Ag4a?HRa7t15N|?(tf8nSsH>i&m>P0}FSnHUqV8)n;I8{ldwc(BaY0__s~F zHU;b4v(v6^!8-TUvrFv}>Z=HD>|>)f;R@7RKM z?%DZwTvVqv|BjF5-w6fh9~}zJzYc#n|Fo*K`B%6qZT@LhY4h(yt*WA*0rzNC#m>Jy zUTeYmr`4*>zrx+B&A*ePE2z!CllA$x!w%NyQwolej?ox7wcr?`!#_Mmw5qf*Qn)H@ zjA&Ku_88ftRTVo%_IRxY$B0&|Hbx3}t2RbDMOU!6G157Fht(w-BVD7<{(PS%hJgQ> zzgvdyo9ta*(R9zCNBB~JFPVCVNxnns6(;#X=(GYwXrH^ZBKWaN7Qqj}e^Z3^;HVYB z=R#RTtG_71@=rv&_i07&kwq49dQe2v0YN@(&T9F%)XIEZNk!{-&8J;QEgz>}p?qg# zaAqc`PkX_4Rt9H>UCRzXCrqB3!FjSiEuYrQT0Zu&%y)j_d|KCP`Pj98lTYhUEg$<+ z=DR?v@4^f&DtdkwXV5!3ze~d8r5Ri%&ri#zou8JE=O^>^(em{b130tm0M_oB+FR0o z(F?B2)tw6cGq^&w;vXq(Kvde5QE3AUm!_SQ);6A#d}pPVcGcgOrd>&`G+xQwFKti; zgEQu?{l?C^TK0wJp|$>+OhFH=Ma6h%qo^1UZT=PGq0KbiV@L+q7Ce{h%%&RW^e-w7I%|j8Qd7waU_O^_M3{a-yGU+DaJk`wBK5cePn1qpcwmY zp`Fje1>1LfXm4DMUAFIz$bP4OezJXc6=Rp}8&!;5w(ss@?6Q5Mi?Kh#rC0R&kris4Ff~`gM=zLXYPo56&RnqGm7$o`XV-x%6|j_kka_D!Mv*T~*0nv3nQIkazy>|6Ex+d}(qk$rn$ z=W@gS0S?FSp~u+BBV2VbF78ou)xo22kD{v%CdNIAt~z)k?oo8r!IZd1(Nzai;~qs< z9XuWPD7xz4nYc&MRR_<-J&LY6cp>glbk*U46YKS&>keLxdlX%H@J8ID=-PuBagU;_ z58jD;6kUJtUfiST3WN{i9!1w6%!+#yU4`&j+@t6^#3d-!V?|dYd=>X7x)$M^xJS{| z2=n3|Mb{%NjC&Mak+3-KQFKkh(zr*_RS7HN9!1wB{1Epjx-wx++@t8)g!OTcqN@`& z#yyIzPuLXqD7r#%af)5JqH7ek#XX9yQhY|LeFSy{k5Nnw2!0I2RKFnA2!CYor~kOr z2wn#KzZCJrwJ&yNkPEUkK|X_2)_)T7(}tEdgLG4*v#|W%JvHU8PMKgK&5+3=8#wrB zM@zd}x`dW4sijM4>C!>Ea~uBjPdxf{MwzVtoX2$6HvILUfL+Cp0>#50)7{$eSAha{ z6F(CSVfQvD>$kGI_~Bp(d$!>(2Zd)(@l(POj&Flx{>8Y)$jDb&jH7iMKqTcqn~>AkdcT`gTtOYg0v z_tDbzwR8h5-B3$6($bB!^uAG=oyL~!C)-=w?;DaPl3;(8YAV{#Z4$hJWpRK=bKeY= zZpJbtZ?2^ejMA)Yd|4b6l*d&6V0bPni-QBUrfglm{tabuh$z1W^Y+J~SsW%*%b02v zQ>|m_@R({7Q*C|KE{h{XnMcM{`fKCb!PR=MAPvFzOf*gfXiBY-_)p1lHiTFmqG z0G<)TGyU4n3gFqX?B@jV+!#DBfak~H1p&M;guxkI6u^rE=yyl&09~S?O9OP7hWZ4k zuZH>s=yDD956~4F8W5l>H8e0lS7~TafCg*m>HuA%p&aD~Q$u$JXq1NT4$$ZTVT|9hdjfcG z2=DXZ{Q-O+<~cTi55_zn3gE*r&v5~KB<49jfRDyJ9}D1wnCHX*J|4nJev_UE;N+O+ zlmI>%gHr?eR17{Hz-h5Ep9$czG0*1+2e!oXVgkPqq+j$M2KpoRr2xIGp;rR*s)k+* z(CYyTr}-NJoF2kpxU?V~gg3L8;p0L4r(`Dl#jXGrt6l-zx-dSxFcu49fkNJv_?@67 zsh}nA7RECRh=<_AEItyw{jslRW$}qnpZe;vEIt?N3t!F7;!B~v^3|Ly zz82~mspbmxt*_=~F`v6}F7U;|EH`1{I=jeM-(|6wrWw3>4Z)Jo^u2Fdn#HoL_%ZU3 z6qaZCi+A5=MHVY5Uh~CPD=2G~pW%lrR%cE8=!-Rh-&$X+3kqggL$N;V`u8=F!Ui^y zbht?WBpSSt{zLI|7QYC!NvdB1zY*A+#TM34#xlGS*qY_uiQ=c`BlwGTQI2olR*aq7 zZgRs-{FcS`ptOnjJ&PSYdv4Z9!yj4vne~hD4W2U0;r}mb2GCI3&#^O}BS(Yimx=rj zsaTFY4cuOkhL=p=;5TJFQjXsg{`;u-c{~+&QWK{!9^8l~?U>9m9{dNXKm9Q{J_Vb< zx<|$lIP1WnH(Xzpa8OdHQobt9ZER#oWgY&jMp!D-hOdYV=o7F{eMVU9K2FRJ&E_$@lO6f(moFAJ80mbp@T*a8avq6 z!F~>!IN0AoQwIk)Xy%}~g99BL2gf+vn+wM}+?58$IXK?I36A*xk`4||ba0Y`lO3GmpreCR9du$JJLuw| ztAo4K=;oligB}igI_Tx#GzX_UIK#o24$g9Lwu5sVoa^8`2j@Guz`=$5=VShlk%Qh2 zE^%V2e&!6-N79W?&Lq{IvB-9I~eU?jDvgl54jHR zb8tVm)pRhH{}trmAxBK+haHULhFT8BJ9yN=V@_>Ma4^xq;|?Y{c*4PC2U8q8>0qjZ zryM-(V48zx96ambIS0=>c!B>X=-?#>FFSaJJ6-TU5gokF|8;dR-NBm0p(E9~`Xae`PvY<6y0W zbq>}$*x=wN?%K#+aPW(RP28^0!Da_r9Bg&4&B1S61Gqb*gB=e3;8f>yWeXkbbdYn9 z=YI{lFkF}}(k?6)w#$FGMaD(eh2z3?QNl$@7o}X3c2UMfSr_G8ly_0VMMW2tTvT>Z z#YI&Y)m&6}QNu+|7qwi}c2UR0UM}josOMsD7yGza&pi!XG;q<-MI#rDUF_>(KNn40 z?C+wfivwIVbJ5(zfi4bmaj=U+T(od;sEfl~v~rETpZ!zNEhvS z0%G51ZsTy2TLMSBIL5`XE{=0?yo(cDbZ~K^i<4ZO?3y^mMMsxkir94Kzxn-Lh7?^n zt?1fucU;A{F&^W>loD}aroXw+yWxR@F1&qgnbIxml-|yXwFLV5-&z$oLZ^2_ch& zkohkTAu})uA@d&#A>(->-c1rmCW#~CZ+TE$9GMHmeh5h%nIw)3xBHTjYP9`fOGjJL zavMFlGhwx8A5v1e6>arsFU2H|OcF;%MmX9(+R?IMG;T=4aq~~au4x*LRTe3uDjg7w zRVL+F)#@bu$Lmbu$V3;7Tb=I4WG{AyX6`vyV2NoST{dkiRc(pc{aSa~p*h%NTdUQH z220^u>lHlLy`zOqi{zBVkr9s$e#EJN&kQ^?8a~>Fxrar=r)4zj%S9KGR1VsT(S>ZK zZ^tfUscAK6_rSt6XaiKMVYlyrd$g)zXW$;Mb(a~K#F0^Rq`bdfL{M~4Epy(ErIfhW+yeW}eq ztuM7%f1=vrKZvg>W_`i=r(Hp9{uQoOn|~)oS5TXOC+qVsi6c{Bwd@%6+uvNR+Ir+y z8E^KKXufG{Gz*n$^r_K&)5gf|*IIClXtio%q;Rd;80i$9YjI;Fi6avRVD26T#NlnW zXSiY~ab(Vl;?}f`;=!D+#e+E`ig%+uOKADnpGh2EM12%SvPxpg_|IE4!S8p(+LpwW3Hu|AYn8;53Hu|AbCtxD3Hu|A zdzHkLVSn&OmBf@mUG60>X3gH3!_6htl#urTK(F=dLzlsPSlDU-yM zQG0523HkzE8C5xnDHFv;Nn*+*F=hB)JpMevlLn@8%igCX$a~zx_-Up5ATrOy<$pe= z%xD+fA`LSQZ&7d-?-_WX-~)b|R@47O!)q%9zicd-G5A0E9zRz3au!`biOWwTIfj7% z?r{TWCxy@G{JG&h7L9C|3vTb*BD+0QPf)6=(_*Ye}Wx@f42@9nT>yxwTUIvSha5#k!`YdT&Z z>_^hX^m?ma-CvJ4(^MA+=pu9`0#+gVa^&rHj*)!0F6&hLRlKXDU(Gz*$P*Y&xD3NSw|PZLa& zKrEQgNa1b9vot;@wYYEJZuTztfH_*gaQ5f`5je5$~B z7oQV+p}=etUlM#JftSJ@>aV31ee{hKm}}x&TIWe1mht&Y&~O zixSwxT)#?*%_g=GY*k>JiQfpeD^Mgj&7&?ndO&*Qv6C_vNfCE76@~Ap%=!%_DNHFa z-9Vbp#g+ng8X1DD1UWdAu9PT|MoEHF5{PSCS_zb)t*n$NmqvMl3TbbAu*_FXqY^=7 z3Gx`prdE*|0$DXKt0~DFe03#w8a1Rq%`|GU+}aZ4QHOG`NYm&s_r_qJhu4!*#&>`qX*ua)}bOTq*@FOQR2q=^G93ew3F>dk+06uaGj2 z0hCuN$)W}-!Ah=@0)x^ROxLT^-cWWIu3__NA0q8SB*AI81}DL3jQ_&mG!tEX!O=TA z7`^-y__&L&2<9m8bsFCg%#}b4=x=o~PZ#s0z=AXuGT$Nz^7xLjnBX*%_=G^~GUd!l zmMei3w5?QkGMr{kTVs0WAhWO8`Ivf z;GXz%8ov;1Qt@PdO=B~`776m$O1UkPzfo?N62GUhgWwMdMA!W(1z5LuzVsx>19aXg zrD#r$Ag@5mf?@Fy!SaR&?Mqv*2y6v17P1760#CRoK~PeHpuwdqZ$!AXiw2jL5@jru zrF%IACcCIWP*H&?E-DjLQQ%1z)d;F9FqJO|2x>{-jYMtgI+pwZ!gJnBiX=D<r_x^uTCUK=fI#3% zi+8DkEaWQPI>_>075c9wnR9SlULBX$L=r(9uCD!?JP$yoo_&VWLg4ZG-PUCgUV@P{3N8hk8o%S~^Z+ZY` zSa^%zZ3SM;;9Y{5mN&!q5D&`l>EeAQSn>x_;01oHXTFauPsCseKCRBu#sB)?G%vdT zsf+M4qSF@!Cokoqxcn}Xc*(^QcHQ@u_nzvyrIyDpTXI;&!Z_oWYm#NJ&?HLIzA^$> zW#I=Fw>m()=s#LmL$KEJJ{3i-3);8d@@A{*Ht6CfU2If>)%+|4ezCBLW&WxFTeX>B zi{)+L{)5Wb6KvOcod}k~fLN&Ejy2IE)a7Tg73dINWZVxWiUK zYF=~6UKfWq#Nlq?GFlwQh{HYNaIZMrCl2?E!&Hk0Pn^R8LXPF6dCV+I+OQhs6xezxnR{QuGpl9t#RIY>HDvSd0Z=r1-l*(u?WYvlha ziC^s$Hgl{k;=mk_En+aI@Q5$+7QdcPVe778YWULxZw zoOTZ^T&s2u)N0l4fvxpz`sI!9@aVj>DX?d6d~FKWxo4+c+k$oOscDylsR?dY+Dyhjdn93M_>nsaQ)A;OHwjbopuemoVQOSQyd8x>Ny6033&X_B zk3ygF@CF*gsJ%`>W?H$4MUF=U6Yb9HQ}>B5~jxMj51k&&E`U# zgsDlw)NmNADO=b7xUiut4$0>8XyJ#HIW&vIglZX6tzxQmOeJAz^60@HVWg3sVepxg zv#q!xQm+7>7Q!SMoQFK}ceVQNG~t34B@W;%lz55b37 zd?Xh5H+?lLi%*1_;j7QG_*|&Bd^J0ZFNJ#BS97xXTBvuVnk&@1zM7ZC{46(1;RPIm zg<0;;!ihf9H+`4IVwz@{!n7nbz2}>jX0a@r=ACFr3d^(n4YyBMWU-RsH9x~vD=6!I z-xP+a`M?)z0>8C>o$G>vS=Laj&jzo-L<$?&NYddV{gY_$hs-<_KWFiaP#;P4Yv4Bm zo3q%GHTi$RhBpFRv*>4tpPi53uh&I6zI|IUb{xVVp-;qbS!@qVn~2}D*uk^so_I9; zk;R``zZl=(DZ?E8leA_44YmCoJL5TWG>Cqg$p4m#<;c^(tp;g$$@C3=Q^q6Z_)Wny zo~Ez31DZIE@!$qhX~$%i@vt0b5nnrxPr>Fd@R4x@&N^`DjgS4jB^;C#YL>4`J18Sd zD(monHo{VwE~oLSR>aF|yh4y(fQk+}`_JeLP{~1M$M2kFsN(QflYUk|T{Up`)77+e U5~d~zQjvpk|(y+ERt2c@2hx#CzvcE31s3(7P`6{1V9$Lcr^hQYr1oWoyhzEWHXVO z{e77rQQf^Wv$NMoHnY-dO}1K-nI2@aeUYBDwhuDNOeQm}_DQDK)w9fG(t{rMFVN4A zh%de?GjVZ7X6h~?Gvn~^@bK{P@bK{XUq1gke`j{~tMco>^Mi6F=mzDvR<*nCH9J9h zc5$uZx4&tvd+%HRyTWK;qHKQHFZpWF_FKO>GUqLKSARd#+?;*+`X>PR(r>N$mGz;= z^@bOeYpqVx>y(4qyK*T%njaq>EicyI1?6Y;s^1D)E1mrF`K3IPDEXikIhn})W@ms2 zcplicgU{`^KS_YJtqy%x54x4c&|;@stGCMNf1y0vT3_!r>z&Q=v&Bc3IHJ-S?`UmcPlp!zi|c+-tPHWd><2|0d2P z`DS<3>*QCZ-5*;Dpq1aC(HMo|*~Ce?{5`4spMH{{$Tr7qVZGh*!R)qr-W|WPWIys& zTE6F$dER}3p17HU*B@J~W4*~5@2xa{?>9T`wC!Y>J5U~*%8w>`#WUpSt-D-AIH0}V zhJ}_><%PLsjwR%9U z*;$aw=gWO+ukHzAbKXj&+vqHGy!Ak^yk!T^2+Mr3(DOl%i2#}fW0N#|)NR%pUQGp& zwh7q)N@=md^)6i>WQfqY6n4#GMbqHRMx_HmWjN+e241mZo4bzCn|ia>dLN(@iv~5J zT&(5ED1w7l^L8C!;-$q_*ROg{>rK@WdP#*S-f6Yhwt*urx%s6^@Gi(dsdviDtYCy~ z#qvcg{JOXBg8a$^FjxbPZS=&UrK|vnrV=HjH?=MFCIMp5Mt0aE49z#)N5 zYmMx@M^7vLdV~@??a>w*`TfqgZsv!s@4fQct@N4Xuuin3^suu%E{uZe#URm=(&!I6 z>+z#{XSrK_2dy+sbT}Q36qKg@?e#YTsaJO+1*OT#HhOFJh}jC6>{z9RhdnwKibSIb zx;5YKI&Lp3)pxYd6U?Rt#w=QIWl!*e9!I;c5WSyl3B5%158KBwuNuId7rg7V+F9xj z7VBt1A#1w_-ue6k{FfZ|D4Yk%S$zviga0782_0C|jP+pft}4clLp871uUn=qr_RRi z57OdhfX#|&D=&@BG%JnGA7I=NirpHd&~`+>na0ua+yYf!J{An`^(Uq&nlv2^Jo*`k zDfWWNWDj1XM(_6Uv6wJG*?=NMsqzdkB(RmAiv$g_$dV)jo-`**-*diE;s7I8btOAj2s5- zg@Mr~e&_{h_iD{i=T?aX|w+4pdvjbB+8^)gDYYoMriFnKS zrohY9wlG)81|9%O0&M=1+W~_k;E8IE!ORU1%cS@T=< zTDdq*MaGJwv8Ly~%^UQdDL7%p;AyK`fu+5dWZf19<#>CB?Ji_x^inJbLZRLY$d){j zFO3#QGuv=^)`+P2c%c9EA(=jg-n}dKFl7Yy=Zf)Pn+*|rJpgD9H6gz)o#E3 z_OfsHWhY*ff;NtELDexF?>TiDPX|}+djQ$}vobz0eX+9As5iaYN_EZZ#g7IibS8)- zwswTJ<{9y*-Yi$vYm?&+yQsNMse9_y-KUl2YPYiL$p8d7KQZTbv2`e7XsV{$Pb2=v zLz_1Oh>uiOs4^@IT5sacEX7_!0+h7#KjN*T9 z#~9o8%HqqUu1tz+a%5q6t*-*2@#j@WO-_n``BpJsX?H}(I z+ib8$(`>8evE@0ayIvG-vLVblB1~9X$&*X&9c?dmPMYs4>kZTXz21wCTXYUf;+uu% zb1&X3Ix`n^E?a%2yg^oo;%IT~p;N>KQnc;aO6-6bU+vsFzuU{TnAFpiM(aI0H-ye% zhCYrLM%tp>r}mrelB^Hh(5eG=v*@ii8qdUgl33|k4s9~1>Xvb)8cZeJxTpm7y_h0`_ zVf4mZ*7K1FKL6rx5Fcj5{0tie(s0|el^C>e+jdwkmSaY(Vkb|0R#_&DYOygm{ac{b zU|0RvbsC2b6Y2~R>wxW;X0tytJlVDSuI}05YS^OZZ`7;aGw3*0=O|c&c!c6he_EBN z+g(W0fKA)>d#|2pb$4}J87G$6Jw#@2s4=BdE45BJp)u{$HGqz=lwW>o$+ty!b**3B z6Xc?+>X4nY)>%DTAj$MQp%D2=!J;$gwY?^+kJU}65v@kIgDW+LYTxvrT8QibfO?(R zZO?8>W2*+?Z@^n{f^g5x=qPjy95pjwBBubbbeb_>e5}{9`=3eYB>OXi=Vz$-n_^k#xM)~U%R|MZ1yyy-GVqoui9ru;(4a8QP z*?F%9^Pt~xueQ|8-`yEAMSbCWO`d2;Gl@2~H+E5ATW@wdUaHO%inzr0YCTfW^m&^X z6e6&;+-TAa*k9D^!ja+cI#&-W%MEX_11GAAUvn1cxc0W#W00fE)Zj3aHr^fghmTJ@ zUvIsc(fZlo$fpBX-^L8Du=!t8X8dmVFp;;M9X9;Vf<>^dLM zB78&u(inOUe(5J(bNBseUo1n4c^zCs(;bTC*1`R0vtc|RgqD#Zp~G<61L-~P*+yLq zbbKP0cGKIGfY}OBAbveagMjazxb+r7>W*&4u9y2=q$BxQ#ocEsd+$m$slnMQUUT;s z8EQcdi8OwOdV?=A831T&q?V_Cwf4p;67>TM4Z}&x zW)x|XW6`?3eAu(L?!CnmwGrN5Q%Mlo`UgQVQN6PRAquB8xl5PO++7cb{By4pHp{a8 zO%H_*R+DYR?dA5|kL25FREOY?cE39cd3gt;qad79DB`Y}cAcbO#Y((hifZQVwgi;j zw?T(Z0AC7UrTvN7ptFi4JqC8FeTFT42jfx=dli*X2D8{D-M-~}-O`A1tHdF4t&r5T z&bstWgVYsuW8lgh$%CpciC; zv(JyBp_Te-7rS2QA^SOA-2p1HF!yO;bfR!P^eg1{4jbUW=Sz&+pa;jc9u9#&B|I)M zIBZrI5dN*^xsI6Uu=Zl4=RdTeX4E^n5(l4|FgXV#p576I3Z2wWZ2=dT92N+XKT)ZkMPdMF3?62nqk2~N9h zK5jK?Q0Gocn$T~tv)S+tOp?SO6$EKiRKUNsRI@w~zmB9KGjH8>^$D%+9szTkA}$V@ z_S-?yIB(~AtaBMrZ#Rt3ridVOlgdId=gr`jcJPbL?l@<66qhgyB+|c^7Qy&%_357gwY6>ct~r9;HtC4#n`w#PRDwsI*Ock+)jogo zbDc;>-aK3U`J(O=T}nmWFv#WuGT5vL)wQkH5pjei*ye`d|6esI2Q}(*v?xy7EU$N zzAndBF(V}~Chef0ir&-KDs32FRw%kCRy5ifZFoKqoS}n+E^UB2Yj5e#sI$_b8m7%M z4r(H`qw@bjRvV8Isq-~l=6r^Y)$_#)eakHW%3E)3cynFauwc0j-Yzr|Ogeay0iWF2 zo_U=Lw(pgU{Npjq&)SNm#^ z+JqiOT=jyb7UBDrzhBp?-@q%NVXQusO*?q9#|KAw_dfl~Yk1KAjzxC%!RKc892};3 zriIQyU2=XxJNg>h(eS?c58feB8fp8qZ(^))l$x4p;2tDJ!9Rc%Y`xt%Jn#E0p8`ty z9lA3k!QWM;((WmD#BA~CS3(h_#5}4uDpl|9jiDR&hi<&Rk;@$=b%gSQHZssH(q!w+ zI@q)-A@vtG*O##}UZWWw>8JL9DKR|s*^4%=-b3kH`rRzZ#`ZFU5cMbc!}RaIsW&<7 zJBe}{XC#Tq#rj=XF^H^JmG@MUko&`}TXzkxMX%yl*GNVLxoDx&DMf||?UZyw{-Mu^ zpyUGrLj)cWpfNZ@EZo@eM1-o6cV_Wjy)9BS6s=#x5_xl=R;1HLDR$JYbLqHT2`xV< zsGgi@;C9;UW>8u29yMCkcfr{uAA9mQ6`$6{U?yPJ0JHgY&RZzu+xW~Xk&l;6Y zN;zjHsmlKsO~&||{(R;AwhI%*Q@HClvFn4H--csM)w?*m=2hPzo*td#&{a7W*z_eg z(?#5V$g^st(b&W~Y>%2v;|e<14>dDi{IS&=u>ZBA9XJi?7*6xt2!&R93_Qi8k-MwTn%crS($#Xo4$;D%@i*kz0P;t!pWMKNq-=qKgUK$i?(PlLI#YT9FVAuGt@=w*pWwl>?~i0NTV!1 zw*ty&ly+iMJbU?XaBx?{_EJN@V~Y1HA;R_o_FbTiV`9`p0-RlEZXiQZn$;QXst@DP zi%3G^^h#DMZLo6yCj+Oc`DOsy8o0EM2pX%44J>=K#do0P0G%sd&_t0hC{442+S`Yq zMi-O-Gwt@X%7^-T*O=;tm11FjOyugw?dQly*Ak_pQ*d7)KXx}PWBleaK%#JdbSPOo z3iATDJVFQcut7Ih^M&!^B=)6++hI*2tzA{4)qk2r?ZA2KB@xW!iC<~2vF%{82e0<1 zc3qK6FG35~$&e?N#s}Zmn#(u#%aXD}yXO=8=9lq!L- zWNJ|ji=`6Kcg#rX1x?6yStw{?<@2>hqt~sREdjb=n^7$QLG1eliX2qJIzHj?%~Mi&yhAFJE?V-Ia47EO-G{{0=lL*mdMZAgFGE z;W0bzQk+Wl$a)0%^d45<0Ndksr4z4=^R5+W-nPwK)5OBGnoVPm8F4Yv16Xq3xph~B zO#q%+T3KIgdsRews;UM+`xRChay?+&9tc7h(*uOk0Jn6Tp56n&K^lSp;<1tgU@^>) z<1qnvz~c#e%n(OhML&Cv6APNSCvfVx5J2&-c3JhzoxpZSXSwJitSyZm)gd6ouKwW+ zsj`}4rsohqMGEDPhbks%&bfoo(AHXha0u!0Eq9Q|qq%w1@a9sz)9?;rVXSqlox|9s z=qnz%Bjy`{Iu{MzioWrSB!`VQfTbt8jFN357CqGl<{|+U%cORWOC=1IwASPAB`KwNlz8Lwq5ZJD1)JE>EVxHIxpK zPKBJyT@bLz@@vVSq2FYJk5edFH!S}s|5AW@yZTzc(8;RxVKGl%pimFdEy%jiQQQRy&Toelv#xOZ<8s5975#FMi2zmDt*t-Exu(Z`%C7HCAYOCYPexVsaGw%LCMjFOV*G93pmX7W9NHvgnv()2X& zbC7Sn=OBR>;RkhqXosy=S|d?S#W~aM--L8v;pcA%ybC*bQ>K4{Jg&ey&sL{oG|Q7F z-DqP0Skgp|BYV_q#LV9O!hSPaPAJ^187#c6PxQM3e9>EFpcg*Am<_Ir{LO_XA9_<2 zU7Ui2W)#$?w6*wLW&n)=W*vMLN-8EibNrF6>MjPXkWAahpk16>pX;YF`;NjV&ZPjBn~tmAjqqFxo%Cf?vpw z4(|gKK+kw*nk)eWhaxnp>TR^nf~e%Qb1!Jw7>;U^yG|`TU3c*9HIeaNyj54 z$`}mng4nOp@B!4qUJ(8hgZ0oYr=3lb;k+SBtY3%FnC>{SQOLy2o>C0w$)jaB2bJVC zbgPI;a<%v7@}jkw>RZD0$n6$rnVG56eE6h!g4k9gY1ylq^>n#tW?#JF;6hf;P0a`e zRHFIderTm4(*}!r$FLE-iE!NLyF%mO5|EE2nVveHUp?TeuZ51daWy`fi2izCHig;l zSmdeFR;<2^7moR0xn&X87hi%gbBrX>YLCQ+-z4e(r-K=~Y$l%zO}I zoJHhEvp3mon<7CU)W}Llg<(}$xjEB#U)c=6iqG*%xlbowi`^C2XBL{I64TlpoEJeZ zZXuMqh{)LMmEf|QZl}9uUT`yKEA7fM&ICFz3f}qMcps;hnq+72Y!fyyq0(25um#9jfFD_xXW_eqU zj`A}jWFDqBNVyZD(F8A=m(W+z;K*zQoyT8Tnc2X31zEEG+fPCz(}+hcR)e~M12ukd ze92pHle#n=mJYv#${U6Jd{*(_b=v}irLR+G8crAM@b>VYxA2NH&Zu#~M_{#wn>df> zgIo7D(yK16_j?^_PX4|Q+uj<^bO7$dV98{#LZK`T!$5{~z zl;l)8glonKg*^^;y;F*Sj|(R%k#7qZ(_zrF3YN+mwG*i0_M)-fUz%U9+d(uv7Y`O3 zt;*O&lS4i83#|M&ShBEa`e@_1^BEamj5JVcL(Iru4UN>;-uo4sqY=&?O|C<^A&-k0 zf0gXHAt%glR2p3#{+zAHJ2Tf{oVzm^h+k#O8!P6bas71OC)d{yK{Hxk$Y_Nb&Y00| zlkuhNObXMT*CdMK`Hrx-nUWos8K+=Gp2lvQKAzT>{ffVN#*UGU9?5~=8YR+fMB0m$ zIat!3;Rj@#dH@_%v%^f4whEt&o=xl#mMY7^H_#(eGmJJdG$YDtn%ldUVXIW~eM>tM zgRQN$c>2JBTh$dHd1QM_M}maSbFbU+D-9#|0((mR06iU~oauNnSeC_bS2~0XL~uq5 z%D5!&pq0csSH99S|F|_7z}IEf^N+Cw3|}5MDjO~TzKVg6oqLGXpVJh^AxO3Jy1mpQ zp5l!;`{RWGLNVC`6xtme&=kgIE9K1?olJCYBn^zrnv@QdGTP0oU>Z*C9UT(lzLl|C zSTbexE~~t0gZxw(grCPyBXCMQP5XD1$w%*>T0MoN># ziOKngv!&A9>>p0XsxH(Hh(ta?ItR|NJX0X4Mb*-@s57vakPtT21Ja>v-7%wqrPe($ zyIy;}z}@}Op?aruImP*#QO7O`@iF7NO%}FH71H!J_s^o=4XAO%6rTSb+227gPy?np zIOA0t@XRIoOnRi0`KDgOks9ec+7fb&^2wU7v!28*eqePWZBf^&{XFXZc7weF{L}Qp zI_Io^eRqRyg?_t1x9rw-gKo_&?FQY7A7MAh%^AI77k7gZxEZ@ax2t=<8;oGId%M91 z*!10?+s}Wx<9h*ijgM*}@&tsq>SE?DicoW-(j@ZCu>Zj-E_O#6xAnx@%D8`%Xu(lt z6M3ff3yB<^&0pXe@X+kb*Y|Ow^gbMz?$5k>RxHq8I5R;fG}}RQZW-hx?^H79?_!}5 zsMb0dv1QUp>s}lP4;S-ea4=YiTXhmws}|?J4a!idYpwS|d1Gu8t^j4S#lv{{`1_&p zd})X;Y?M#lx{IRYqx_5abwja!A)7O;R(bTB`s&&|1*dFpemC>~d_qRWSe;Z_SW3kV zyI`)_hF`GRSc0t`(wMqq@Xel0O44H;!*q_*&%&G-mBFi+Bb4EjW^YM1gn5H{;g9NG zqc+#|(GjAQc*I}{yWnuZeMR|e^2)${{aA+_g4vRZLZ;VomyBnvX8oP#|GdvQggz9> zf(En@bokFcA?F42W`V{^c->J;4lLQNhPk!+jn{x(2KN==TVf^-SjJ>q?*^0S_7pc4 zg$^duppnbPyfbhPO0@oD=r4AR8BQ(Qa3m+~Y`e&*e~-c1fyftWMU^Ie@wlbBc6l}U zI6nz%1PT4&Deh3E&Bx@2XqLa`z^M>aHa zr$$N`;Q=Rn7tJtGed{KGQn_QwrV1N;^A;+8qqRv_I@I1z%AMVhu`-rBmCQP0E|ceB z+2Ko1m>?u{_5E*d+ReKxO-pmw4YFm=bP~@nnQ3UUg4`vOgm`P!cQ4@aZ}axy&Ecc4 z?wqLN)cC|81RP&P*wL0R;0gFUWsPS|VqEKnoP7k|#&DVJI> zCFX-_rA=IxyauJBCm*E#wxm($}~l%lv0 zJMWU|IUNNfDvOQ^VvCsXW=wL*s>JuNx6^d!3Zh5FzPDm&P0cqV9#vbpAD!;g0tc&M zw1MNfL|<^FNO}rW6?JHQJ01Euf^V9SeD>Jp>}mZvMjLx)yyJg3;8nhu2@&xE94AJHeVZQUB6F#Wrw3bUP`uQyGk2ML% zIo^M11#9ICj&m}3wZcr*z~+#=2Hw-9wO3xHMmuS$99#m=+e*({v$#eOJoDCC}|bXV97#l*Oo&tAJ!e1ZNDDopfw%iFb$1rnn1f9 zZyPt1u_EwEVA%8}5;}Iq8}vxq432{Un73V+a@nu;b9i0yZI#?b6=C5W6g_7O4(dgg z(cu%-zV%ALo6F_(|`VR>RUdc!AUC@ zAa}Rtttco{l2b{)z&b)AIp#jAYlZ3?+; z21rZ(2lh7>JKR7~Q_ZtEl0i1_b#om7KJmmh-Rfnz&X#kVZ*)Bv=lJOm&Q&Idr-Ush z{t=6q9u1i2O|*Kqgn?wYOt!AQGeX*>O%3S>4Z)^be03#=Vv92z-=m#lrNJ7bt@aXb z86nkW@NA~Rj0*@i(92X2Iz`H;$|B-T;}o)fDS-dEb@u4bN3>;EHnn`1+cV7I5)p5# zYdHBWEFdzCUg3g20+CrPOo{Z|D505#wkA)wD7YByvs;Bnh~N>@Me3f2r%T*MGeR;M z0y&{S#rWuikR;hEz?Pi)NXpq&HJnWb2I+vFiD zmZD+71(p^`{6K^H3sW zyy1(@X>e~SJ$gX9-q&<+!KIin4v>52%cwb(d~FcftW1YSjnE*%7K;8+B+*EKhvd1k zLUJNE3J`1V1Lx89o%O+DAztpHi?CgW2;)13&fqY6Zyu%1IaeV0SJK$X(qAt< zw~IBwK-0n3A zZD(#6uxVYEyvr%`#@4@X>Zh0*BOqm{$ylfG} z$X})KzhlBtHEhQ(nDWYB5@fCiru2st-DrY z8~TxjvWLM6rmPt8#Bz#*r&#*@2TUfp9vI~M(bpKrFuT>|J+G@#=uc?iGiUSb$DxHR z_?2OVovcDSXDrcm=G_l*&=Mgk=J6{#fiAilm^d9^XHPcJe`^O`q3q78G&E$o9!4^; zGtn|ICao_QCPWqgfcp(}eZm$nK;ri#;MW-hW42gocEM&FC^kVCcIvUc{9!YZ3N_dM z)Ga4M#C>oq1KK@-EPppmGrLSkyYV#WhT55O<;7Tk!UBI4Q%_Zt^X}K6%Sx$*{b*B9 zxkCbEUzmxNk?TmtEM!2k0aY5i5<`@;ER$XW17p|i;Ape%iB+mc1GeaEC4X`@OlS4f z?%-(L$*=+t^wn%o@cp^-%wVUu=5G$(0Ogn1JN#A3k=6C_$<3xP5iDM%67OV0S~ljHp=4MGr$ z9X2WQ7^e1BLfYDF84%60sc)C+>-2ExdOIUO22|)q2Ef@0ZlhT^G%DG!dC=q8DTx-` zTj5QplXSuvPX?rDGAV_>c~5EXW}|LqBbgCnx2@tJch=I0IQ*X`oGDz*M9+lS7cFn* z)J&)2*OzfEEx`T4za&SNUeWtAJSv9ofcbH3Qi7!Ku|F&^&msw;N6$++w zKOI~WZ6ZB|l1VSGUWLO$hM{7`Z1+ztq68*1=Fo>tKKebZDc^ct`!anO<=X%<#&^&E zAFX6IBOea4Egdt$;}QWyezpZ^BrymseFw4Ir<4&K9KgPDulF)b|H>c^mgOZPrKA;I zp_WLqFROzPpaS&901!>{Qq+hul6!Vdmm&`aqm#uI-ggmUmpeNT#}ZsSs6~=n27v)2 zs_8JMu5oBH2wS3?GQdN<=1dW3$oj0AkWXRZq>_a`!Ol%mmI2fBp6F z>`fDxDw6!&qu~cKu-_n_9vR}vHbUrz(LEUPg%z9#@hzL8@(f3Bu2%=D^Y85}gp7#l z9(G&|t)zr*03us*TXZl3pOV(VO*7cV1Wwu-{j$~W(jm4CFqXv*ols(RAtEJ)lMV}X zZv9UK^cl{ZfqbukY(A?Iks5q}X31kL^^Uxz(&`o_n|upQ6b#B2wm8PHET-0^6rQq0PwV15Wsd-( z#pIAO3R^c3e4-f5IUhZ2wb&>l4GnSe^bYkLAlq%nMc9bHCBGZMY_?*>t90$ZwqwW)akk8H-;%i0NV#B`-Q4vNg&rX88iOTwrANWr(=qJKZ$mydBfP}zB%?3SH4rdJ zd^yvQ&lv#rxFt3o3~*p@<`m6BOXw1JWUs;sOAoxrVb?_X=!O3k+E_5KwBDJ+(1?|P z+Sbs#3{|GpJ z;i}LvME*mIukD$UL$tET!R?{%!4L zX}ev++Xd+shdGPFgN9KmJueZZ6Nu!`ha&F zmb}WkUMeTUMZJnJO46LBB8u2|2r(Pbn*-!hkt_GDa??dnpc`g}5*1=}&C&$ip9 z7(xj|6LQD#`&qD2H6^wkFstuKJ%$TFyNpMPw#s2r5$7l2;L@4`{V+@*122}FRg#V0 z2aU+UJw^z@7tLpNSQ>HH66_M3cdKIiP}NBH*W7fw^OIMI334QVVYTU))N51~!R@DVETDKTz&nEOfZA0qxPrUI(YW#Uf+g6zGsu$?WSAUpRHTF&$g_~ngeBG2lj`xSyo>w*X zzm7xyE(0K)eOsIm-Jl;_DQ}v|U5tP=bCY=XGUe#Int^bh82BndP~d75Xs$(pJKbs* zlt~kr5D3iSGT77t7Rp2^MEQtd#8T;OB+0nnPT1v3LmE&iv&i!DNfSFB;~)$ar*oDH zMheEf<^h#IgkqmmNm8Fi|BI!iB znx1R;`j71fCeP~?N28XQM!PT<|IsIdfQR=%uO19ESJNSwUgmD3=ezUqWn$#81=D$J zCku_=+xe-PsjE4^WwJS2eEch8HtNQpP1M@PE8?nI~}-ESdViG*ZkHn zAE)Fb4OeeXII5f}$=XGj9`1fvE2;2iH+O<*;G|qIw<}ujn+=eOws-ud=sfJ_*5vZs zgSQptX!I#jqM?=#B+FjwM69fJ4{t>t;`U~`SmyRY13Di5eClm@jRRuZITj{U9HO<1 zndMw~bEYPOg6f#2@h5o>C$bHrhVKQVR8%|D4h8?kjwhGZu=?Sg^rt0VUGSh8tL$jZaVQz#cx|yfbDM#Cgn#K| zt!(E4TVnag#D+DJOfeQZmXLmy=i{2{5X~~go5@LC4Q88&S+v2E` z$Bq;0JP%tgwE@2PO7YofMs)b3GIveL13l7-7^AY8eC4l*ol5tuR%9sy>MNecy1B^} zHSf^t&Pqx4qGu6cP>c{h&T5)9_DEhn!E4k!-gCiKWIB%gad;0xOqTT@I6ben6>=0r zq)%P`5jI~;IeAh7DK@L>iLV#P6Z+Ib6UUy65RfOE)8+}m%wCoVE+orf`RjVY(}bv~ zwK|BDSq^IN$|YE&#z#lXa1nJh3zpnSDtAQRD%+>vZ}kv)w$M#G-;ESwk!dMQhj{dK zI9{i}m|k@0@w3Ib``?Iy*59c z-Z`6}R{yHajnpQ&n9 zLcVZ$j=2xsn6&MPaq%#$OTF? z)MhI?o=F_=+$m>0*0i(qXqMoOb2Ago?johiv9aV4@_eh{x=~8y-7mWgtHq6cuF2x4 ztYMX0=rtsceH_s=Hlcn~(6rh(nHmQzY&he8xBemu#?Urw%bqpFO7Lkjon&Vfu;WGD zO_b7226at{5`yWHowL@h;(i8?PAp$v)LruN#u1-oD8Ga#%OM23jhHfK-@yL2;`LsjC%ilhjoUOB5+RKhXOQ+Tr9+^GZ=~4 zQCxDFm=YB(t4Mf;07Kd%ej}b~chmBPE-*Ti-8eZ>-?!l@4?u0QlGR4165btiom{ndKp-Qiq~O3r1EfY+w-z-%)sVF?qt5xP4ss zY`*a4f7`7z0{iHRC8w69=MZSM!P^J00M~0X@IedU$9Vyrh$I+HbMdaB%TQQBRSrf= zVWCCy2=2vo5tI}a2UdpHu<(E>If{C#3B9=5=+?}|)Bs_T7n-7I(fkS7@2+SvubV+- z#f#B?(T#`u-_a-xS{Qw^EBesP^SLcQDMWR4VR}#9BoPU8LXi`#DJFLa=wU@(2VY(U^)cK~tenRJ_$>o^ zdx|Sia%QM6b43wsva(0`4Grl5)=0vao^h)gm4cA*LN8gVm!@SfB=-*lHH zi!O)1_8YP6r43PndUtOX-(2$bQ7M`QVmlFPjNNK5Ji%QA}zV4(f>h9N60Z~CAU|->-^e~OEJb> zScJCrQOV#7+%4fu8m4wg{@xAbA_VCL{xcGuLx{A`>k8&;KVAH~;AKUoZmXeuLziXs zCVYW`)(_(ws+${I&raaap0^e|h=H)2OIQf3=3%BA4J}UW%b7L$4!MLxb7GG_m#VA{~Dv+His`ndpoOlWj`` zU+Us4-1ExYz+1R2Sn1Pf+%mt+;ioNNf!IUU7mJBP_Y4r- z3#&2*n^Uj`Llo9c3-8P9*(T0%}TcGH1QOlv~#$ z5(?>hJ5m0n=dY|++M*^aFaLIct@j{D8|08s)-wWY4JT2b$011GP>@^}7Ocoj9{JMw z$Ka6e*oMf0q=TeqPR>E^#_n`cTs~}*W)DE!Q+t9MJvxU1AhY?07j ztT{-vc8~*`^(!$%k8lp(Rs$lLVwYOVBzAE$f(QE$%_8mcIu&*dJIQ*uF4o=@tB>AF zPL{c3L>Pw@A}tE?p}{V^zcoJMp~V*)nDlo))ZC<&TnWu&8zVns3j+}{*fK>k8#f|^ zZkqegtd-ju3)vhieTYV9Fuv(ScM z_3jQ2;fcWEx7d!+*)kiLQ;HYB{4tAhN-4~daDxd$Qa`DD)ZCq8XP* zq%<_C)up#n45c9SERJ&Z;wV=yj&k+lDAy~Fa=qdx*DDHHi(}mS_^5o0aYN%{Tw#2S zD~ykEh4BJ6G%nN~FEF|jQg32Ze{p*gqYPz2nw^klC#2a4X?8-IosdDD7-Oubqz_Y4 zZ%XP-Nrfq?FeMeHw89v-Hzin434&9C;FJviR6&Xe7nB6glF+3jc$TCEcrO$8lmv81 z_^c!?l%$1{P@*Iam87APP@+`eK9r={k~CW?FeOUby6|AB!1OE$E0%;6OTvmJVa1ZL zVyVc;mxLorMIMz>kw>Le6ez-`C1KOjxb#7|wItkH5^gOCx0c2Q%D6xo7bwEJCE?wY z@NQ{BdL%4d5*EfCDyGteKoL$ZO$ZcW=#nsWNf^2$3|$h2E(t@IgrQ5q&?RB$(xgCP zh6X*6&ga;14i1qP7q{9cHiw~*J42@q>ore*x8xrdm zAd%!leo2urCP4uWQXVSG2LmezE(JlNAgvdq^@6lskk$**dO=z*2C zz>HETFi+rvyHa2-z%OZ*M;f)c(*+)B{F0J9()cC7c%<=*X;$EoMsv~?9%=j%DB4XP zX(Te~3Ov&ICC&0k;}?^zz#|Q$nIJ_WPf^HIlo1ozgPw4EB4+T5+barribDA!PoP3k zNKh0K6nU;7k=rZsTmc~jm>^#i-Z2T+?C=ew*Uz%)u*KT6jvYP0hkc1@j>gG3Y3Qe<)J`% zC{P|U6!^*!F0w4)gQ1M`h~XDQ86Ta9+|H%D&kMBxo^$Sv+$B0-QN@Y8Uwpsi2f2Gz zcj;Re7XGO1L-)kFODQG~&7*VO>|8am4e!#Hvjg2dWmgUNuIF$qo@v)f`L1+urz3br zTkAes&aHy`LK?E|P&39-b^~^e?wx zl|2KruZkT^d2%R+Fq63}uFfILz0A3Lh)-2!ohq$bPD^uS?8 zrg1ulHQd~9TC4MUwB0r4b`1OyBNke52rHST0h!;jbIsf{M~B!i;wngXc^XoXLpgQ@ zMpAfO3|Q$lx(Pe?yAC3sq!W^+<3-Mr4ums@_zt_z%)FeKX+BpDSg0Msl>oTZfkkp> z)Pll0?IuoVsn7}&Yx*tS6QbYD!)!p99wJ6oi-36>P+y}*-kVC}-8>vNRS0^%Ju8ul ziUC_sriVC&WepB!#^n3F8??P@$hPM*GJZzGCLt|d@n8UZpqV{MR%3W z(ZVTBbCM3hWQFdNy$asme3H$e#JI7qQC~jq{8p;4TiuzeI2BIoC-?Y_64@;n+y-S_ z?@?-S+MW{#MW%-y!NthK1{wYg)pxmps=%OvvLP{#Mt&X*#AKFlcH8e(Pm6_(N>oP^blR#L=Y`@&(KGo zgmU(z3KlzU)1jjng@y+LKQ#SYYn$J46S*Pq-qvf4ZMn)so}S7c%CGa^LC7{VJw5aX zx7KzLoyJ*cCaxyZqYQb1{JGM0YhEK|2Ie}AUn#DzZ`KewLpTZE(orwLkQ>-p=Oiqm z|hWj~L30Dnw(!i44E5r!ESTK;lnT<;@^5*E26kG0VoYq+Q^cl*Sfq_&^W z2@vq9DY>+Sh4#sF(R3sFj#N!?_%DQI@FT1`Kgel;1s~{wiS>XHGDjebmTX2pi7b)a z^)$qDSX(V{?vueiSH5I3keiSisj0Pb*{r;Ggfznj8TP= z*&e~Ev@N~>JLO=NAPZP5)*;anF{km&x`J_P8Rd4>7*cV7prx<^!`T`9s7tXuW6&c8 zTM%Es(>7Zky0*EpLalnzz(qY`vDsGsUsbU!(DWtk@T~EUX5(Fg4bS)M)@Lg^J5P~@ z?sw`dxIe4Q{wXDhxoC{V0#60Lo*)PBR(RYu2^!O$@qry4DqloNw>tiTNul8C-N{aIX$bR$k@kKttw{w=T zsl9tu`Jv?>M1g0OZk>F=>66BR9LeeXJU9cl#-V@HTV9kxt#$$gdE!U~*y@%}>N$5f z13rIW3F;&GvwlR$!9Nb^jGAe6j%j_pA9((eP>nqI=&HD$7uB3*CY|q7M;2gHXd`wX zxz3pj21|Z@ech{_)KLEs>&TeUjgvu$i1lO&CwRU1+!PcZlbJ?Vqy4r-9pGb$4yko8RqIQE=e2;O+h z?h6W6-5<0P@P+BX++h7|W|?n-c>62swaM}QkPXGcryGU*=%*X-_Mkr#pKc%)8U2}n zC|#zl&ruRk*t(X+u-pV^^p^?^NxT?Me7S~pCFh*b9D-`L;TP=K;Q&7jekc(vX^22g zvaR86bU*<^-9qH$>i&Mwta_IdX{6m4rWei3PJg%ZA({{kT*IA>hVV>a5=5djez&;z zu6s~lwLGm9fH$jUovY$$s7sbE&A}|>iBF?{o#)8>2M%rlSrj?Ion7;)?=I`2#}gKc z>^eVVAv6rGg_#hmaL4BRA@du!6UM&g64RD4I4lmrIN@$J4`Pflv)8XK1Q5q0y)g=w)8vjAuJ#^> z%xocBB7-!%<0>anyVI(+8lT$-L=LJ!;ATwN5DDw6s_&@4IY7?0LFXX0DMYr@kx>LK zSLz=QL;R9xroF#jLf5XSl}1POH2P?5eabZlP#1RAqGepOPO1dgF+d;M0Yu*;4|n6) zwB*$e1iT+N51lM}jTOV1wWG%Go;9BR&k-=h$7V_=iyaMS5ydWdP`{kD+2ZXd$v5SL zG^EUT;4d4KwjK9y$;<&P^DDc|SdSU(gVG#<&M;=O7qk0*1aJ`~Eco19T+tu8i{;D- zb`lE&ElY=3&2$8U@>xrK!}@eXdf!-nbU*&(CyuFILdW6&C5}xV6~@yGO`;Dx_*y48)tNdw-li* z#(oM4FlugJ#!D!|R|Nfx-0)hzOOiY|D85 zefn!&BR|PsJJ=pJ^BjAVYI}`oNr80Bk7~;MdQ&0OHv+()IF^bw&G20mg5tx`4_as$ zGOJ!CIEe&{qm~JgHVL*VsO^*E@CkKDq+i2H6!7m%?rV|6i3 z5&F#}fcmM8lltDfRVeEF@Q+0L3e+bjI6)Hsye9F2aK!!LbUQk0s8?Y$1#IEmDHZ3w z|NN8pu|cNaG;D@@oIwvqD#3nXRygELm^jlYcx6wwh|4}Y@Mm;`7U7}W4mYThn7l|D zTuF>;9?BfeWTMX{5gjAIhBks@;QsvB)YK$&!lTZQ;<&kBO0!cg3X`xV^|G-KF8`@; z;8FtFrf~QN;G{M9aC97UR15Nt;y4L4Tz}e+fBDe^^tUkjAO8)D0u}%=RB>)`xPu0s zm?mpXcU2@1Jwcqb0Zh%3F-gsmQ6Rccg6{YSy3^lc@qhS4x<@^;->mpb%mGdaCjxyl zlW2P)c!zZV>%V1lo2U=MW{p`QD;%>#Rybx@x%Ttwb%6ekP5rC?&y1OCHTe*qS1Kkg z13B|7hFQH?He@Us6A&(IOcGh)m?W}PngL)Hs!pZdEwm9b0NEAqemTRZ$Q9px0$ z&Rl0H5cR@)fH;=)t1g+R&niQZp?qof{OVg8qX zRMpS-D0?xi78}O1(HtGeKeEGw4mgOrno4!lw>D z2x;STyOu!sKfaUkV##p*zy1U#C#o0XTTox8hrU~WS`u+Lov~;heT|oorcnjwkVfmd zDdDOZs-Sit%$^eoma0a+e{OqXjz6gPxK!>nf_uGb0ApawbpQX}3-vuVV}U+1iQPII z-N5OUu!C%~T;*drGCD*+N{LfFl0+npCZORR4O{v!>i$m$)%i7TzEeH>y)^kL5&qxr zA;IIK=>I2ty*2`S<8hU@PZ5ZMX33?<{Kzjnr406y4Nl4rDy0JQB<*u?NnixF!y^2W zq1P}t9QGK~J`NA4LR5|6tF2C4Jx)HWHzBjuA?%`%3X=u9frrCBeiX;G5nO8s8{r=|YqU5H>!h~NKTOt`=+FXU zOmuDi;Tk9C&IIfNll!29yI=~Ft}Vg-VmS5}143Pp{17Zqbf|#)-nS93?w)lGGuPwe zffDd8pE>-b7sXd7O7RUn3G-^Y7C<+QnW!%qr3qQ#i3(AUGVr#W?+xMCVH`!^(jiBb za8zUD?4N1WD?t{Ru?U#4NY%0QN@Sl2+ooUPwgtbkD!DB|`Hob|Y^e}wsgMqv3{N3K z_?1=6MFHEY^kU!(iSmIj=_SC`QUYJnOMpM51iqw~0250Ie7Q)-o4rb8j8Ag6Ocsr^ zyM@8e%&KFFs$NY)k0>~Vxnp>TD6#2bv#jZJX&=;v+6{m>O{2aL}t~= zMAgY?)ya&iVDwm3q_|b_GqY-Za4;P%(Ma1WpW$15bfu9d2iQ;&KKJP$xfjCPoEL48PIhDk6im{x^#&RkROC)k* zQ$4VpO2ZO~*+eWQ(JL`}rEK&{Y3L!5(JPI0eimL}%3L#Z)6r5!fX0^AcriQ0;^p>3 z|LT4?BP%-TViHV?>_3NA>z%dka=zMHzrNP#w1cl6Jn$>;^OD?!qgxfub8zXP5{Kw~ z9pB-N69tBCkpb4IFt9Je#v;+RsMrZa&!K>P9X#!U_)e|$gBt;2<*$23Yu-k_Lb1sx z^->7J4TVJzjxL+nSoxN}dU76E`Ea8TJbn|a)!fg%a0eFQ&*uRSf53H>ZyVuoGRX6_ zhkEsM&02VISigZfzdf$spW~X>H=xN0{k^mX(`F4Pzvto!qT3#v5tl-8A%vqK_GEOv zbQ3*Yw;mxb(awS3er2F1N6N z(f&d!Ny&zS3@fAOqdhM;Wt8+V>7VU49=vIh5R&DsyKY)>MJ9ya zvotjMS4#ty74Hg;H4?_cPD26S{W7Blu7Ou^!QhL`;BUM}gEuq-*A5*U^>z+!R`%@m zoL6m-OQ1{`xqQ@X2*7A~dCZ2!?g?8p{Fx2B_e>5x1fBS{XC>o{Nbi{N^S>Oneif|R zvzodisc)Rr0j3CMQU|B?tcvJLc;CGPhokyxlipROAWWe6ixp*{>5~agIv(SeBkl;D zO&#^?eMk08+UT8586ooca!27p7NrrmM?5=|)V$i8V%Pgp<>>5-XW?`?Dvqq`H+B*` zHl@9$oFJkKeW(kKM~W(>k20Zs1t|;6e<)8?HoNo`GY*a|LOB5%0Uf zBiQRy*8VOA9FvMnQ$x();iFzLUq&!XfnOKwA}a1?S+B~3#mjCJWtBALAJ#^`!7~-q z2EFXSi>1Cw^#RWm<3^K~r1yo%Ws{c4z)Y{rTt>ZjdyF=wEFER#3CCgt$9Q2JihXsSFD@#sTutevtaNeoWA9bemHgz2RrMiVg?9W=9<#8%kFCo)r4 z!UzkG4~Si)(q0d?DinI|mLhhushCpr4|_b)hBbKrT^3`+>A{~0#eJ`3C>H6}f;~ps zY_ioD#Hb?DgM(@|jnnG>#mACn*qq|F7we!<$=Fc!64d1mMCGwzSx1TMRrzDF32Vg( z)cdkYdbPj*vB>V;D@-8&b%b$J=-#vT@AsJ1WuvFJ+mzoe%gjYk&*u4_Kt2}h@We|{ zzc1^gSNmw%9`3pF8^8&~`)YfcH9z`3fUes{WzE3*fMnG_-D8F~3zDvd3Dha#NY5oH ztKvWUSkfjmoTc;b&-(SCAApZ0H$i;b1gCeSuiWfe`(v?@ip+#&)0d61D(?C0)rO7C z_G$^-={baO3S^7@{*Wl35ueRPTiI*<&E*WdDYPa1Ev@c9-s`CiTeo!@lT$TgB@eH4 zaxd^4>p(*@Fu;HCH`g_H2lH&l{c@r0`5cN3mh~}UuRI>8LFZ6^NdIupN619$$#lKo z9#JIML8OB1QEza2zFfL^WcZ43zg}#kU%lY%y|8e`%W_`KyJc&_Vo-n|OO;P}LvVNc zs`Ba8&ZtC>7`XOa>=`wa_Ivc~c{*-CiSS;^-mrJ|VeJ~d-C?4T>fv;xw;w)|PVJtX z^N@}8>tCYAN85NA$|f-AyYb4b`LRyv?4-9&3QX+2r*s+h_I!bf&xH&;e%g;&4B<2C z@3pDKbVDayl=u_C zN?<&&FiOa`^ciG|7=LB_3>vz8Ww}khP2urO+})Izkcxi=#=QMBBfUQ_}Wk^ z8iQ*?sntJPFI0NCUNYjb#k}8l8S7nr`ajs~{hnFJvd(*)zRdPp)dqm^(Pnk>5Xk9C z-&x(W_MRIQ%$V5ejHt{ww{to$fJxnWpU10q_gMW;xL@)-h*CV;ikM#eqs@Y3^9g%s z-&rsKjH@#>xUS-wMFn>Yj5{{-9KVfmO+Uk^< z%qk=NY+O>=vDK+|Yq{RU8z#%$Rf<`U_t?v(Bt7MT+b?8Gz5tOUR%P;90WEQS#s}Wl z?K`42A|wisSAI^bUJ0K8NP&-sOmJZap_J>0?P<2_csSEd7GHSw9yX0|1Lg+;|K`eD z=)CD)IUBPo$NbK}ZWrKZ?jfvwd-HXBsYO4Y;bn1zT93S;`JA5KXdtK|A$b?ioTvw= zE;^wfBt2r9**VG7s??-3#eD_K+)AM9)79rrWW3J1go9i&B!x=r<~Sr(AcmL;%0Ar{ z%4#deXX&jj&k|((XA!gG2bjm# z5ny`-Jbl_(SYdVLv~M!u;&sTqCt#m9S{};Q$8!ln^aUl~v-MIwwt*4Jl--&XJ;qTZbgB$_@+bZ^{ zWELUEA47CC!U?d;eLxKJTP#h@OD%HR>U2fEKEUeXmU9P)@Qin8TWDsBcA%MyVGxoe z-u4kYLi8X`tXewa;QA&l0=Mtlu>7||lz+)MN9_aQnBvmdIuxW)>rn}S?);Z|G z42pp-C%Dv8OB+JxYwI_jpP}cZp>ueFKFlVsNG;%Y0WRKPogv?J4l!>b+`e^}UNl(2 z^#yLsW|$emJ)Y{(26H1F-13(w5D8+9ko)y!qqTa*hOZ{z9e(*Ohf8f<+i&59LeTQ@ znqAjB>f;@8;sU-{ig&X~oD&-SJGY+;9jO4s`f`Krn0lX4`%D=Dp)wSQ3 zf8SYI|NYre*@fPLsgJPGowYyZ=NWyZ5TO+JMXJow5NeEeYvBdL)^yhX_^Yq%TD$1A z@xBYn&f=MeoV2x-3WU{->;XoVQw}3~`L16aAI{J1Y2wi>dEUvY>joKqm zpLe7qsW2Dnj$B>7^fnSQ-hJ!hf_gp?L(-c9=AED5Uk-)$YQtHL%aFxF{w4T^w=BW$ z$MXnS;aoe^(S~dV#E$o&lU2gGqdq_pTxoAsyFM;r4+1d1u)Z$05Pv^LVZf94Ij!g6 zj?8nrUL6DxekFv3WG%b6O3!Cld>Vt5%Fl10Z}f^8hH$gl0~Htc03%^VIU|#&1p>6( zzztB(&qj@}GG}Ge-B=9B`g*IGS)^WBZ9>k~s{suip2@&-6@wJ!#bJ$*sVh3CA^{loj*hsHD@PQe}%r*%|{uf=( z-=zEHS$n)`Mm$c+wCHt>*)E+(ig#CRc=2T`87vmu!HhZx(2lq~HlPSK?GLbq+Q42}<75luX(!lV zO`(5Tej<3lVuN(bgddY=V=x@hGke)vsSs)THUK8v!b>RM1C&LKrA*<>My921J6jl^ZsVppZPC6ILz%JbA%NF9FL`*ym~1%`QBD`Zq!*~Mlhxjp=@GW^ z(a|#8wSq7x3kABP$jx}Lo8Ol$8qv-*^KK+^b^_?|broQ*R zUHI=|1O%y_P&9kfy?DRKO@C30*LdKQHc8evm>Yy#ad^l1SxpdK!+4#2f{;_)Rj?$s zN9IM|;K@wwH(iRLwo>UfI))|G=+^Q9)Hj@tjFjC0oHY$v`-e->g&*I#dJthKX|j|HIWN@kMuN{Yk9%*R_ApSQjL09 zv*mR{;%MQT>5`6c+@IoZpL{WGLixSfryvE^z80Qch>e8K0%V`dJvdDx7aCZJ(}Fuf zF738&T9J)$cm#8p;A^2VB)a4$C#qsC`J2()2u}xyybMLfEn)&&G>Lv4d`waGRro7-7-8_c(IIQx|o3#6XO8 z(sP`6`d5;L%z^@mL;+k8T9Nwn3<20`FnSz?+~e-C`Te}LX}xax-YRqi3H?U+#@bfJ z<)pH+?M-mr3=>b$F#VhkSStxI+1aszks@e%?j3y4B>aw z;zL|X|-5lvvCH)5l0+2n;Gda~A<+vly=SMG{zj zIVtl%yGc69DIzq4tdn$p5rJ|*69x2Wa~A4d*Y~dLLJyrUJfbzl82kbJ!pI-7a~D4j zn+c2W2nX(y#TZ}Vw#j>&r}gRw7J4TL5^e*+A4nvxWtG?@(@~k}bo}~qx8p&o;E)Ik zTd0?)=vGm$Es3btA6Ba}dpll1b>J{rFG^n*0k#2R7@tSvd|{eP$%9U^4(A1&Vuaq3 zDa9^9r1J@|nP8!iz~qz8n5?ip%ncL2$YfqJrN!}!77&v~5}Bk8L={#OC=~5YCUati zC0U=j^afXLu5Ja)I4UdJx7dO*;?3ytxFkdC%UbAd5*Jx0n7g`dWcCQEv^N=NT5Amq*{DGFt?#~$| z&n$vCoaX>1;i|JOx^ftmI~)?$Tve|P>_*Mn0b)~gh92HI4NG3U#WO6fYv2$EjT`9{ zcXtCfGpO&Dxz~Fn+@fFhp?aijpAmG+4y94qEr69=H-a?P_(5pa(;R9%5Lu2}OJc^S z&8f^G(o&KqOcCwMrHLHWs_$k&WQa@T`)Ga zHU=ua;lh^*sA$+8HAOMNMm=336AY{ZFjoW@LL)T~vITWoU6_E1O|v_HUHs5++n3Y+ zfVx7>e+hg57%uZ(%>m*2cuIisms<3fO|Jnq#iaX$#iA(8bEQ*BXlGUEEWwUsCq!_9 zhaCO-pmOFkaW>x{gytwSBshqw0cr?z4J;v$*Qon~G1DNvvQ5f#K0dVfWR&NCHKRn6wIw zDTO|p&7E8B4iki@4Fk(4Ml1aH0h+3jtLmZf>v?=tO55%b(#IKYSPnu->>qMh)0J1y z8hA{vV5Vo6Iup&J$YtxMKlUYaD`Y!)E=-qCqV^4lLtoPtX# zIa9KR03ak^N&#aA6HWxn66!KAmz9JsR#qO-Gks*t4e4vfhK=u9&-T|0i;^{jX_aK= zBFkBjmcD+KNTA=aSrC{khUs^GE;Qk=S&S04;|UU0=^ zLTIdGrw^-(IR^sFulgIr9{a6zQ6_0R`Yo)<>?Sb@(PN@BGr_Y8zGk<>ck1bsOM|7v zVGd*$D!lg;oU^px4Jnz6sGSj8O5T*Bq6^IkRL7hbDUC;?dY2xzup>`M^{!O3mE1?8 zde<2SuL#PoybT=A!J^-Cu&y+8X4Aoma=@nDum<;Jb7|;f|}nN|I*2h=Rd;*$&-=aaC7sIa*B!y z|D2Qm((_l~nnIP2aWdcB!R-hCT(}2y8@ocur~+WLq+>R^x#!Z8VSnbWHKsMqW9HbU z7Pn`&q%f#w%*QO3=?}fuUzX?isB3jS!AT!&3=^VKfEBww(B(aDmVb3n_y=k5p+(4 zJ5HQ>J6lN1x*1c+=u2AVn3@02yFuHlVu|2cO}Y?<-Sg?H2#avE9?g*neL|&>t?((m zeSMIwOFg)E56?=PTlx6)8M5-oy?2<(GWi`Ba zg?dMjo}XKM%WKg=f{jEe?0dn7gIui|(0fjhZ;qRZl{LK|<@qmn96n`ME)SI-0k_I} zZE~EvbyQyC5ipBKehzmC;jXPt3r?Z3zCdT(NKEB?0O5lXX*@{u&T*n)d*owyu`OdM z5QFfqqc`uc29X2ALiV*M(*x|`V8d`x1_Qt~BaZ=U2W82Yvx_)FLwE6neQtXY zHy)rJ>;9}4aFF<(8P*cepWe7`RP!{XlE3b-vk$(mDL)a7NefsNl z*5kbjY1NyFbV$pFkl~ms0XyobB_xy%f4|+<`t|ph+Z%lcX?m!yosS~T(1P~2@!`#wA`aQpfHB!C+rx7UMBec`Ic8u7=?(?vhzRTc zq)FpQq4S@_fekuo`%R#QUaEQI>5JK!r!y~K&dn^% z5W72Fk8Dj&DIT`X$#H|UJ-@Me-$Vf!*Mw9qFrhWVz&jcytqWRQwKoM`%CU!i@i|Y~ zd4xUte_Ok@mNtSYjIH#g^uhK)O6d&>66%E6TXu~|*<0E|z@nAD1Z0zJ)RIPVy^{LY zU(sLN@67JbW_GG*^g$ALCuh!_x$QaUn{RW!w_s#x{00vTLi!^_cpEDl8!I`nfIqnm zzwN9%{;}PCE?95?uLm3kGDirZy}>61-;ki_jg!;KV80B}2}Zv6-?#iQUXS8n=kq#p zbM)u!a{352w_@1t12@6GPpEHDV5$A8y z-FIx5g3~Q+ib_m6_%&695N?<4?ZeT@IRg6Cvv-dUDN&{dGh8URT2ns0m=%dB{ zlhxIE`brx^xlKN4eK@OLF{n4lj?GfdDmT>}WUn>3v!lwm@h*-hR7j%k;a>9sZ^*v+ z7vm&58Q@n)OO7uQ$H-1`oHs?dLS+r2(JgU7C29q4<<=T2sJ;X`rwsjx49ITm`mWJ& zEyg=u#Oz=#V1d($nHRe}FnAC;k%iXZULdzxArG8@8MbFI+cGWYMJ8un$MK^uFs*3K zypup@&2p2L%Nb8woY~xUndiEFHgZkV7$(+mm>3YatvA^Z&Cu`zpM_zk#cVsWnP-?T zb3CsT*%9|W2-E>NIZ}uEsOEIvZiCVEKmZ7Rt-)W!s$cUh=d1w}tlUeAcd-9NuD=#F znNzkL<%!4=H3vjFwyZT$gdlt5FwJc3x2y7oiI5&;!c4Vj=6&TJ=YW@iIPoAVc;I~| zy+|9HiKHdV^@TFl7`gJS8Zmv~ffvA6q|ejy4$j*Fr<2KL=;QSwXOr8_JqTR}H)j{i zf0m3=8@ak`MkS)^>?te375A1#=tV zaL9QRj_j4VmUAPQ_|5X3O59uDql;ZlW#6qAx<6~KB2i_{)mK^U_}D0wO`qJ*JCAnF z`h{SX7?xDS4VC*<(U%NN bP04yGTXMTnXs^l#sMz`cq<%_~ijD6dTSV#P literal 0 HcmV?d00001 diff --git a/Homework/Homework.csproj b/Homework/Homework.csproj index fd4bd08..b186ee9 100644 --- a/Homework/Homework.csproj +++ b/Homework/Homework.csproj @@ -2,9 +2,10 @@ Exe - net9.0 + net8.0 enable enable + 0263fb07-2244-4f32-bcd4-45a1046a2b57 diff --git a/Homework/Homework.csproj.user b/Homework/Homework.csproj.user new file mode 100644 index 0000000..e7b749a --- /dev/null +++ b/Homework/Homework.csproj.user @@ -0,0 +1,9 @@ + + + + ProjectDebugger + + + WSL + + \ No newline at end of file diff --git a/Homework/Program.cs b/Homework/Program.cs index b728a41..a2e0fa5 100644 --- a/Homework/Program.cs +++ b/Homework/Program.cs @@ -1,271 +1,469 @@ -// See https://aka.ms/new-console-template for more information -using System; -using System.Collections.Generic; -using System.IO; - -namespace StudentManagementSystem -{ - // 成绩等级枚举 - public enum Grade - { - // TODO: 定义成绩等级 F(0), D(60), C(70), B(80), A(90) - - } - - // 泛型仓储接口 - public interface IRepository - { - // TODO: 定义接口方法 - // Add(T item) - // Remove(T item) 返回bool - // GetAll() 返回List - // Find(Func predicate) 返回List - - } - - // 学生类 - public class Student : IComparable - { - // TODO: 定义字段 StudentId, Name, Age - - - public Student(string studentId, string name, int age) - { - // TODO: 实现构造方法,包含参数验证(空值检查) - - } - - public override string ToString() - { - // TODO: 返回格式化的学生信息字符串 - - } - - // TODO: 实现IComparable接口,按学号排序 - // 提示:使用string.Compare方法 - public int CompareTo(Student? other) - { - - } - - public override bool Equals(object? obj) - { - return obj is Student student && StudentId == student.StudentId; - } - - public override int GetHashCode() - { - return StudentId?.GetHashCode() ?? 0; - } - } - - // 成绩类 - public class Score - { - // TODO: 定义字段 Subject, Points - - - public Score(string subject, double points) - { - // TODO: 实现构造方法,包含参数验证 - - } - - public override string ToString() - { - // TODO: 返回格式化的成绩信息 - - } - } - - // 学生管理类 - public class StudentManager : IRepository - { - // TODO: 定义私有字段存储学生列表 - // 提示:使用List存储 - - - public void Add(Student item) - { - // TODO: 实现添加学生的逻辑 - // 1. 参数验证 - // 2. 添加到列表 - - } - - public bool Remove(Student item) - { - // TODO: 实现Remove方法 - - } - - public List GetAll() - { - // TODO: 返回学生列表的副本 - - } - - public List Find(Func predicate) - { - // TODO: 使用foreach循环查找符合条件的学生 - - } - - // 查找年龄在指定范围内的学生 - public List GetStudentsByAge(int minAge, int maxAge) - { - // TODO: 使用foreach循环和if判断实现年龄范围查询 - - } - } - - // 成绩管理类 - public class ScoreManager - { - // TODO: 定义私有字段存储成绩字典 - // 提示:使用Dictionary>存储 - - - public void AddScore(string studentId, Score score) - { - // TODO: 实现添加成绩的逻辑 - // 1. 参数验证 - // 2. 初始化学生成绩列表(如不存在) - // 3. 添加成绩 - - } - - public List GetStudentScores(string studentId) - { - // TODO: 获取指定学生的所有成绩 - - } - - public double CalculateAverage(string studentId) - { - // TODO: 计算指定学生的平均分 - // 提示:使用foreach循环计算总分,然后除以科目数 - - } - - // TODO: 使用模式匹配实现成绩等级转换 - public Grade GetGrade(double score) - { - - } - - public List<(string StudentId, double Average)> GetTopStudents(int count) - { - // TODO: 使用简单循环获取平均分最高的学生 - // 提示:可以先计算所有学生的平均分,然后排序取前count个 - - } - - public Dictionary> GetAllScores() - { - return new Dictionary>(scores); - } - } - - // 数据管理类 - public class DataManager - { - public void SaveStudentsToFile(List students, string filePath) - { - // TODO: 实现保存学生数据到文件 - // 提示:使用StreamWriter,格式为CSV - try - { - // 在这里实现文件写入逻辑 - - } - catch (Exception ex) - { - Console.WriteLine($"保存文件时发生错误: {ex.Message}"); - } - } - - public List LoadStudentsFromFile(string filePath) - { - List students = new List(); - - // TODO: 实现从文件读取学生数据 - // 提示:使用StreamReader,解析CSV格式 - try - { - // 在这里实现文件读取逻辑 - - } - catch (Exception ex) - { - Console.WriteLine($"读取文件时发生错误: {ex.Message}"); - } - - return students; - } - } - - // 主程序 - class Program - { - static void Main(string[] args) - { - Console.WriteLine("=== 学生成绩管理系统 ===\n"); - - // 创建管理器实例 - var studentManager = new StudentManager(); - var scoreManager = new ScoreManager(); - var dataManager = new DataManager(); - - try - { - // 1. 学生数据(共3个学生) - Console.WriteLine("1. 添加学生信息:"); - studentManager.Add(new Student("2021001", "张三", 20)); - studentManager.Add(new Student("2021002", "李四", 19)); - studentManager.Add(new Student("2021003", "王五", 21)); - Console.WriteLine("学生信息添加完成"); - - // 2. 成绩数据(每个学生各2门课程) - Console.WriteLine("\n2. 添加成绩信息:"); - scoreManager.AddScore("2021001", new Score("数学", 95.5)); - scoreManager.AddScore("2021001", new Score("英语", 87.0)); - - scoreManager.AddScore("2021002", new Score("数学", 78.5)); - scoreManager.AddScore("2021002", new Score("英语", 85.5)); - - scoreManager.AddScore("2021003", new Score("数学", 88.0)); - scoreManager.AddScore("2021003", new Score("英语", 92.0)); - Console.WriteLine("成绩信息添加完成"); - - // 3. 测试年龄范围查询 - Console.WriteLine("\n3. 查找年龄在19-20岁的学生:"); - // TODO: 调用GetStudentsByAge方法并显示结果 - - - // 4. 显示学生成绩统计 - Console.WriteLine("\n4. 学生成绩统计:"); - // TODO: 遍历所有学生,显示其成绩、平均分和等级 - - - // 5. 显示排名(简化版) - Console.WriteLine("\n5. 平均分最高的学生:"); - // TODO: 调用GetTopStudents(1)方法显示第一名 - - - // 6. 文件操作 - Console.WriteLine("\n6. 数据持久化演示:"); - // TODO: 保存和读取学生文件 - - - } - catch (Exception ex) - { - Console.WriteLine($"程序执行过程中发生错误: {ex.Message}"); - } - - Console.WriteLine("\n程序执行完毕,按任意键退出..."); - Console.ReadKey(); - } - } +// See https://aka.ms/new-console-template for more information +using System; +using System.Collections.Generic; +using System.IO; + +namespace StudentManagementSystem +{ + // 成绩等级枚举 + public enum Grade + { + // TODO: 定义成绩等级 F(0), D(60), C(70), B(80), A(90) + F = 0, + D = 60, + C = 70, + B = 80, + A = 90 + } + + // 泛型仓储接口(主要给Student类使用) + public interface IRepository + { + // TODO: 定义接口方法 + // Add(T item) + // Remove(T item) 返回bool + // GetAll() 返回List + // Find(Func predicate) 返回List + void Add(T item); + + bool Remove(T item); + + List GetAll(); + + List Find(Func predicate); + } + + // 学生类 + public class Student : IComparable + { + // TODO: 定义字段 StudentId, Name, Age + public string StudentId; + public string Name; + public int Age; + + public Student(string studentId, string name, int age) + { + // TODO: 实现构造方法,包含参数验证(空值检查) + try + { + if (string.IsNullOrWhiteSpace(studentId)) + throw new ArgumentException("StudentId 不能为空"); + if (string.IsNullOrWhiteSpace(name)) + throw new ArgumentException("Name 不能为空"); + if (age < 0) + throw new ArgumentException("Age 不能为负数"); + + this.StudentId = studentId; + this.Name = name; + this.Age = age; + } + catch (ArgumentException ex) + { + Console.WriteLine($"参数错误: {ex.Message}"); + throw; + } + } + + public override string ToString() + { + // TODO: 返回格式化的学生信息字符串 + return $"ID: {StudentId}, Name: {Name}, Age: {Age}"; + } + + // TODO: 实现IComparable接口,按学号排序 + // 提示:使用string.Compare方法 + public int CompareTo(Student? other) + { + if (other == null) return 1; + return string.Compare(this.StudentId, other.StudentId, StringComparison.Ordinal); + } + + public override bool Equals(object? obj) + { + return obj is Student student && StudentId == student.StudentId; + } + + public override int GetHashCode() + { + return StudentId?.GetHashCode() ?? 0; + } + } + + // 成绩类 + public class Score + { + // TODO: 定义字段 Subject, Points + public string Subject; + public double Points; + + public Score(string subject, double points) + { + // TODO: 实现构造方法,包含参数验证 + try + { + if (string.IsNullOrWhiteSpace(subject)) + throw new ArgumentException("Subject 不能为空"); + if (points < 0) + throw new ArgumentException("Points 不能为负数"); + + this.Subject = subject; + this.Points = points; + } + catch (ArgumentException ex) + { + Console.WriteLine($"参数错误: {ex.Message}"); + throw; + } + } + + public override string ToString() + { + // TODO: 返回格式化的成绩信息 + return $"Subject: {Subject}, Points: {Points}"; + } + } + + // 学生管理类 + public class StudentManager : IRepository + { + // TODO: 定义私有字段存储学生列表 + // 提示:使用List存储 + private List studentsList = new List(); + + public void Add(Student item) + { + // TODO: 实现添加学生的逻辑 + // 1. 参数验证 + // 2. 添加到列表 + try + { + if (item == null) + throw new ArgumentException("Student 对象不能为空"); + if (string.IsNullOrWhiteSpace(item.StudentId)) + throw new ArgumentException("StudentId 不能为空"); + if (string.IsNullOrWhiteSpace(item.Name)) + throw new ArgumentException("Name 不能为空"); + if (item.Age < 0) + throw new ArgumentException("Age 不能为负数"); + + studentsList.Add(item); + } + catch (ArgumentException ex) + { + Console.WriteLine($"参数错误: {ex.Message}"); + throw; + } + } + + public bool Remove(Student item) + { + // TODO: 实现Remove方法 + return studentsList.Remove(item); + } + + public List GetAll() + { + // TODO: 返回学生列表的副本 + return studentsList; + } + + public List Find(Func predicate) // 查找所有符合条件(待定义)的学生 + { + // TODO: 使用foreach循环查找符合条件的学生 + List result = new List(); + + foreach (var student in studentsList) { + // 调用 predicate 委托(调用时才会执行具体条件,比如 Age >= 18) + if (predicate(student)) + { + result.Add(student); + } + } + + return result; + } + + // 查找年龄在指定范围内的学生 + public List GetStudentsByAge(int minAge, int maxAge) + { + // TODO: 使用foreach循环和if判断实现年龄范围查询 + List result = new List(); + + foreach (Student student in studentsList) { + if (student.Age >= minAge && student.Age <= maxAge) { + result.Add(student); + } + } + + return result; + } + } + + // 成绩管理类 + public class ScoreManager + { + // TODO: 定义私有字段存储成绩字典 + // 提示:使用Dictionary>存储 + private Dictionary> scoresDict = new Dictionary>(); // 一个同学有多个成绩 + + public void AddScore(string studentId, Score score) + { + // TODO: 实现添加成绩的逻辑 + // 1. 参数验证 + // 2. 初始化学生成绩列表(如不存在) + // 3. 添加成绩 + try + { + if (string.IsNullOrWhiteSpace(studentId)) + throw new ArgumentException("StudentId 不能为空"); + if (score == null) + throw new ArgumentException("Score 对象不能为空"); + if (string.IsNullOrWhiteSpace(score.Subject)) + throw new ArgumentException("Subject 不能为空"); + if (score.Points < 0) + throw new ArgumentException("Points 不能为负数"); + + if (!scoresDict.ContainsKey(studentId)) + { + scoresDict[studentId] = new List(); + } + + scoresDict[studentId].Add(score); + } + catch (ArgumentException ex) + { + Console.WriteLine($"参数错误: {ex.Message}"); + throw; + } + } + + public List GetStudentScores(string studentId) + { + // TODO: 获取指定学生的所有成绩 + if (scoresDict.ContainsKey(studentId)) + { + return new List(scoresDict[studentId]); // 返回副本,防止外部修改 + } + return new List(); // 如果没找到,返回空列表 + } + + public double CalculateAverage(string studentId) + { + // TODO: 计算指定学生的平均分 + // 提示:使用foreach循环计算总分,然后除以科目数 + if (!scoresDict.ContainsKey(studentId) || scoresDict[studentId].Count == 0) return 0; + + double sum = 0; + foreach (var score in scoresDict[studentId]) + { + sum += score.Points; + } + + return sum / scoresDict[studentId].Count; + } + + // TODO: 使用模式匹配实现成绩等级转换 + public Grade GetGrade(double score) + { + switch ((int)score) // 转成 int 避免浮点判断误差 + { + case >= 90: + return Grade.A; + case >= 80: + return Grade.B; + case >= 70: + return Grade.C; + case >= 60: + return Grade.D; + default: + return Grade.F; + } + } + + public List<(string StudentId, double Average)> GetTopStudents(int count) + { + // TODO: 使用简单循环获取平均分最高的学生 + // 提示:可以先计算所有学生的平均分,然后排序取前count个 + var averages = new List<(string StudentId, double Average)>(); + + foreach (var kvp in scoresDict) + { + double avg = CalculateAverage(kvp.Key); + averages.Add((kvp.Key, avg)); + } + + averages.Sort((a, b) => b.Average.CompareTo(a.Average)); // 降序 + return averages.Take(count).ToList(); + } + + public Dictionary> GetAllScores() + { + return new Dictionary>(scoresDict); + } + } + + // 数据管理类 + public class DataManager + { + public void SaveStudentsToFile(List students, string filePath) + { + // TODO: 实现保存学生数据到文件 + // 提示:使用StreamWriter,格式为CSV + try + { + // 在这里实现文件写入逻辑 + using (StreamWriter writer = new StreamWriter(filePath)) + { + // 写表头 + writer.WriteLine("StudentId,Name,Age"); + + // 写每个学生数据 + foreach (var student in students) + { + writer.WriteLine($"{student.StudentId},{student.Name},{student.Age}"); + } + } + Console.WriteLine("学生数据已保存到文件。"); + } + catch (Exception ex) + { + Console.WriteLine($"保存文件时发生错误: {ex.Message}"); + } + } + + public List LoadStudentsFromFile(string filePath) + { + List students = new List(); + + // TODO: 实现从文件读取学生数据 + // 提示:使用StreamReader,解析CSV格式 + try + { + // 在这里实现文件读取逻辑 + using (StreamReader reader = new StreamReader(filePath)) + { + string? line; + bool isFirstLine = true; + + while ((line = reader.ReadLine()) != null) + { + // 跳过表头 + if (isFirstLine) + { + isFirstLine = false; + continue; + } + + var parts = line.Split(','); + if (parts.Length == 3) + { + string studentId = parts[0]; + string name = parts[1]; + if (int.TryParse(parts[2], out int age)) + { + students.Add(new Student(studentId, name, age)); + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine($"读取文件时发生错误: {ex.Message}"); + } + + return students; + } + } + + // 主程序 + class Program + { + static void Main(string[] args) + { + Console.WriteLine("=== 学生成绩管理系统 ===\n"); + + // 创建管理器实例 + var studentManager = new StudentManager(); + var scoreManager = new ScoreManager(); + var dataManager = new DataManager(); + + try + { + // 1. 学生数据(共3个学生) + Console.WriteLine("1. 添加学生信息:"); + studentManager.Add(new Student("2021001", "张三", 20)); + studentManager.Add(new Student("2021002", "李四", 19)); + studentManager.Add(new Student("2021003", "王五", 21)); + Console.WriteLine("学生信息添加完成"); + + // 2. 成绩数据(每个学生各2门课程) + Console.WriteLine("\n2. 添加成绩信息:"); + scoreManager.AddScore("2021001", new Score("数学", 95.5)); + scoreManager.AddScore("2021001", new Score("英语", 87.0)); + + scoreManager.AddScore("2021002", new Score("数学", 78.5)); + scoreManager.AddScore("2021002", new Score("英语", 85.5)); + + scoreManager.AddScore("2021003", new Score("数学", 88.0)); + scoreManager.AddScore("2021003", new Score("英语", 92.0)); + Console.WriteLine("成绩信息添加完成"); + + // 3. 测试年龄范围查询 + Console.WriteLine("\n3. 查找年龄在19-20岁的学生:"); + // TODO: 调用GetStudentsByAge方法并显示结果 + var ageFiltered = studentManager.GetStudentsByAge(19, 20); + foreach (var student in ageFiltered) + { + Console.WriteLine(student); + } + + // 4. 显示学生成绩统计 + Console.WriteLine("\n4. 学生成绩统计:"); + // TODO: 遍历所有学生,显示其成绩、平均分和等级 + foreach (var student in studentManager.GetAll()) { + var scoreList = scoreManager.GetStudentScores(student.StudentId); + var average = scoreManager.CalculateAverage(student.StudentId); + var grade = scoreManager.GetGrade(average); + + Console.WriteLine($"{student}"); // 隐式调用 student 对象的 ToString() 方法 + Console.WriteLine($"成绩: {string.Join(", ", scoreList.Select(s => s.ToString()))}"); + Console.WriteLine($"平均分: {average:F1}, 等级: {grade}"); + Console.WriteLine(); + } + + // 5. 显示排名(简化版) + Console.WriteLine("\n5. 平均分最高的学生:"); + // TODO: 调用GetTopStudents(1)方法显示第一名 + var topStudent = scoreManager.GetTopStudents(1).FirstOrDefault(); + if (topStudent != default) + { + var student = studentManager.Find(s => s.StudentId == topStudent.StudentId).First(); + Console.WriteLine($"{student} - 平均分: {topStudent.Average:F1}"); + } + + // 6. 文件操作 + Console.WriteLine("\n6. 数据持久化演示:"); + // TODO: 保存和读取学生文件 + string filePath = "students.csv"; + dataManager.SaveStudentsToFile(studentManager.GetAll(), filePath); + Console.WriteLine($"学生数据已保存到 {filePath}"); + + var loadedStudents = dataManager.LoadStudentsFromFile(filePath); + Console.WriteLine($"从文件加载的学生数据:"); + foreach (var student in loadedStudents) + { + Console.WriteLine(student); + } + + } + catch (Exception ex) + { + Console.WriteLine($"程序执行过程中发生错误: {ex.Message}"); + } + + Console.WriteLine("\n程序执行完毕,按任意键退出..."); + Console.ReadKey(); + } + } } \ No newline at end of file diff --git a/Homework/Properties/launchSettings.json b/Homework/Properties/launchSettings.json new file mode 100644 index 0000000..12a1f50 --- /dev/null +++ b/Homework/Properties/launchSettings.json @@ -0,0 +1,18 @@ +{ + "profiles": { + "Homework": { + "commandName": "Project" + }, + "WSL": { + "commandName": "WSL", + "launchBrowser": true, + "launchUrl": "https://localhost:5001", + "environmentVariables": { + "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000", + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "executablePath": "/home/yqh0725/.dotnet/dotnet", + "distributionName": "Ubuntu-24.04" + } + } +} \ No newline at end of file diff --git a/Homework/bin/Debug/net8.0/Homework.deps.json b/Homework/bin/Debug/net8.0/Homework.deps.json new file mode 100644 index 0000000..8646ce1 --- /dev/null +++ b/Homework/bin/Debug/net8.0/Homework.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "Homework/1.0.0": { + "runtime": { + "Homework.dll": {} + } + } + } + }, + "libraries": { + "Homework/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Homework/bin/Debug/net8.0/Homework.dll b/Homework/bin/Debug/net8.0/Homework.dll new file mode 100644 index 0000000000000000000000000000000000000000..07e3f9c1162bc51ba19343333bffcb048a76fe47 GIT binary patch literal 13312 zcmeHNeQ;dWbwBT8-+oBD*6vD{zqOXJS-i5WFJq(F#w+@?94fr4wWJ>|0sGgB z0227|SRKF75?2CVwVIZh1txskkA{X{3w{;XCIqC_)C&d}*;ksuk9Bq6S8;73+FXH( z=I1%CxY#$DeDt|iqMy$vl7KI=t#S9Cd@XE~X&T&+kIKm?Q3!~VjG+r=z z8&pB8@q^gp5q)#dsI>u*Iz5uC9Q7l=vU(Jypvu0ZLC*H61z|F`f+=X!LtCA?=)j-Ph0pFi7z>g${s%utX_FP4W53MsUZ-+yy1cc`O+t`3RdzV*HGmqg7pO z-s?J8)x|C)F|-tAUNOWU05*FL;?T7D+2Y1s4Xwm6;*$PORJ*vManBm z|43M*{6d5R!-}g>wWS`>7gQ?=s&SEsl0!090#l8YprJy1PKEf+Qz34B{LO>2^?|1z z*8t~#)-YCq29Ll7tQLTpR6sZ&)&h>pCm{==YT1^#t|k^VRso3gG$KT`-neU1y4U97 zvTX|qJP<7Nrf2y^S`AIVyvCJ5k zvTahFRUzliP;K6Pi=TGkm=dUb!YSqkh&c~GbcyxQe)yf+#S5bIgj2*5&M^iXVrluy zcg<=#Rim}|HD{qQd)ShAK+~zkyl`F#!n+qvIz=lbOe>j|(7`+HILQ>Gk3GOso-c{M z`UEY;5-crjQ|WO~Fs;3HQL#2*pf%JOPF+dCxG(B!@zLCHYB12$GS}!qA5YrK76M=w&tpw z`)CD93EQS9nYVd?v`_(B$ifyttFf@_&}uC#{u(w$pZ9n)^J%or9{@Df+oQnpqM>45 zWcnLSk5|!8GyN>n8!G6gPj>TXHhN9Jt$j5J_VV%ao=p}?P&1GdjhyZ^UiUY4Rd)*? zW~J{>pQn3PdjC1n!qZu4+FdOzx@V=S$~E(S-XP3vUQ=s|H`N<>4B@$m!VnWF?oY*I ze(`*b2Phgy_96EuI=@}`|AE5yS3OhBvZoJ$z$&5HdV=eI%EcPARfWhO4T;HUAg@}y z#zT2oir4y4It|n44306nvDb^wuf}p?AKtoGnaY-FT#i+p}4C8gtx+9lERef?0a8)DF zZD`mfh8Uia>_=F9PIOMoe$s+xG%P}zH3TLDtFV?tf>QD5lG%Ypqi*EP7b}JlypatG z?Nwu~2rrp$dLElTg{I=ZfSuN;&%k1-k=X=l)K?MG0J;{SE3TQH=yTS+s8a|r6jaQv zf;dIvZb8Ln3o2F>GG0&W$-JDc)SqWPF(*75$zgW!O*zamptNl3t^rJF zDgiHHZY|qfFvge}7eXWLX_5m$42*s+brOn|tz$PM?4xuDbths2UcxB&EGCZfnA5zU z5&SCdFe}<9Ok7u~_9!&EQF+Fv(dz=yVAn)6zR=|D(`zLh!c> zPd+ZREe9n+zZ6pc1}TorOAHVx{2@en=~i`(z#c%hK18>I$1m_YdQ7`j9RTJ7UPs$y z#zOdGY{17@E&do=FR(E735>M~EJB#Nz$R4YjNn~|vb2u;u*ukx3apNnl7g)|Hc;q` z;e@Vf?@+h0d*)ZP0q{)$-w^P10bc{uXob`RI8SEyQK=j7u*U6uTAw1(tJ+q;JGJe~ z#n{j7Q|98O&VJD@ppB<5IKQY(bJ^f}*4HgP1gd>K>+`8!;OZ3Dv%a)?LU9i1l=6UWtyQ_FY&&@+HFS0#w0bv=#b$v?aO%^I4*Gf^!DXdYQ6-u9U68mOUb5 zKOm%RJ-a-ewq}W#VqX${Pv}VtovVd@8^#13r3_m>q3wX69MEu3#9s(i^e{T2fEwo9 z!&sRv0<5EU0WT4-N5BCAcL;c;fEhrE4gxmdt)dGT&^OU;rB?tox?8}Yl$O?GwPVe{ zqerA33QE^%{S=kD<;&?apzj9kSL*;bVm33}2k7@PXP;aET;M+fZCv?_i09iP;(4}6 z=wC$l`hJMH|Ah7$X6lpDZ_xfv?RT_P+AC|+MG^lOXuaUh7rM80Og-S`H}X#)GmEldI|8y z+HYa&VPB)nP@`W1)=>{eU56Ev+d=6*ZA9K7W#y~oE2Vb1N5tf_a!F`wmp-gLDF>xb zt1rnMlhGt0WPBt0jB5~z)t!B z;QQzlU@yH1c)6gb0XykBYV!39ZCT3Fa^KAkypB@72Sxiq@T7cCi}ur^{W983zMl%p zPX&b}rYL~R0hzy7x*2mQE8xunepAq2k&aNi?-j|SL0^x|?S~v_(bc}3!jzoCqnlA! z+bx1}i=f=EGNp@#X@bghoNl9g=(9MtK1F|^W@)W7h{_Gh7szYmoSdKw@fPP4{Q^&- zxYRElm+qCmAUz>{Q+ixhXLu%8Uh6Rru?hFCc}laGvDLICn2+c31<%9x4z%%Zz>mxX zkwI*raA}xLYY?+FbQiooEnSb_8v3Gq2mMIC8?-faT0RNdr$7?|>o;C9I@&hcM(ej_ z^2Lo~4ze*jI@*`FrV5$q-a^K*1P8OOVb-mBX~dXHm&!T4Sh841kX;S!G|+2IPG!u@ zSV7+ptiM>E)LqQ(%3DSeU4wb6#2h>IDZ|Q_40D>Xl0FGoEOmC!mU1z>zk_yX3T1ty zJOzCnbh$n)@Zn6}1Uk@{&zAB=F#};>5bhuh3nMae<$}JEdhi{k7n67krKc@)w+?K_ z$Du>4a&(k3GzRvp+t+Ip3cAo|wQkjmx|v6pJ<@?3SzfCrm!qDkDZQB6VwjVeQc2Iz zmV7Zs1J+QvP}pwnIgl^u>8VUsC&X*3naPR9Wf|*0FTSeLWWLxlfm`M<-@xL=bMrJ4 zdNYM=xsWO8J%!?|ojIht#1X?L*^%irik1P6q0FRCMFvjDc9x5!JkXtbCO4Qb>a@qi@I=c_sE#vC zE}b<@oh$)uU*M}bJ)AKu9fw{$m(OBE#1ins6!8Ti*Hgl_f2@qIK7Fh_F~K94rExr~ zDLs~@PmUF)NAjgg#*vJPC~d*lO#OPpylz&5%g;mIt(z9A<=veF#c`2IE~UbIav?(F z`H8Zb;gXwGvQr;VXU6r?^iGtVHA@#Y+h5QpF;h6G6@?-fzzEs((Pa22L&2+010i4EY#ITQLG>-TU zXG#ai7`v7(Gwd)s(_j$wU}g$j$vuUF*V~!{f+6rXW>LdDLCHcfiw1-y-TAdGQ$%rd zr0k*-rA@r5(EAMlw-ohpXNFRbIf0d>Sn5BV)u%WiP{rp*F;J7&7*T5(Qy($V619!h zgEQ@FLkS=B2G~=~^%nGu$!he>Bp17G(g=d=H2X58jO`|PxXeAoUKm`|C>?-cpFW-` z7fM*kbaTq!$&9(k{#}+S=1~8R88MY?GfopRbfz_yL~702P~4m#^yM=XMZ+rPvz9v& zC&{gLUFl|8HxK2ry5-C%n8kt!)J~A_ULej&;1Do{Eb2d4&J;Yw6-%NM-}DqJXuF8G zP*L$TaF-m?h+tA1)SXzvpAI7)3dVMUC$~p-^oW zw~eV$5e3W?ZVwc7jtOJ5I87xyU2`}!7ttC(D?#C*Kg@Iw-Ee~xAHpML5`C4l9_%J& zDNT1w=~DO~(o_2Ulc#U*2B#Dpzypd~6m0=?bqLBFrq~(;K0giXV{|PvW?{d=&ir9A zC@;LSJi4$Jua*&d8dz_ogrJ@?x&-}hZ{~zII@r#_hABo<)wBHFQEBnU(c<_|*pX7> z_}->6o}Ag=T>bCcuh`qR^F#XELvowc$QZZZ*1w-_DtobMeCPHbrO!iOwt@IBL9DNC z?2Tg&9MMYe-1w7Y2|?e$ZxEnAP->*OLtJ|fhOZTKM z3}NrgQm;)M8!KIN%cqii+UXL!vtkdA@4Mv?+kwZ>-X-|lvHs-P1E?G+$Qn6sl8>`V zHP$s-_h>t9$`&45nCSyY{?_JN7{VTq?b&=Z@xpzcjc5XP-5#M~euyp>+?*{b+dnin zU2k+x!|r^mY7SW7%3_Cq2%kOJ!^-T!x5np&IDhx=JbI^Xjr*ZxVa*M9UNbQ^_~CEe zS#!gxp{lGe3z6GD{3p@x#*Y3==BxRhk8FBr&yF{) zeV){WBn1=>2O7~RqY(x^#uxjvhS)YKR)?um_$WMO7KCajRq3LlsIX2hnm1S%-;~}XR}%YM-Qk= zkR0@DYzUTW8e&(=5g}b~TdntF3~`D}LAY*rgbb$ z1%;PoI2o&x;5qzVLe4D^2sylUbv%}y*{(1L)r&!`J=9MMt95=~Y}$@wtS-7Mc65o~ z4pm)j=6FP29N|0$5XPe-PIZ9?oJlA~l3O+nKD7%&+6j@c8Vs@G$%3CA38Hh2&U$1YgJ_Fa?H)zfF=c z)(GUI0fk7a#rVCjC>rWPi%WRB6rK4yRDU2Gc=XcIo1#Aqb&FG@iqF=hZecLY;3@!F z3n*GNAZrm>3;Uf?t;O97qN2r;H6Xb80p1b-jxwx|K*G+Sgf~mLB%EQ9XoMh6a}pvq zaWS4aEF}~P5k~a~Vs&s&Uc{-6gh8;U2kP1pj@3EB2%TN;p@cgt0vb!j>QNyg5A{6J z!2>19$Ji*<1xa%9dfr^Kde`TrFrf;ASL)z0vGR#C(fgZix%(Dy}vH(tueo_0}F!Q3w@I` zC2UN4`&l+{nds5!dfZLCq2#Mu$hhA2!D9>iBDOtM<=gpW+px$;o`1U`YeIT?*@inl#`vW3?pRdXvg0@m9R@roi!+ORzJcg@GM2}~Qeo;}(r@!{~^_L!=EF=!uZ=NuJV2TYA*<2SijoM&_=GBKl8Q8{=W?06aROp(y`OXMOeP^zKJE9`Z9a}r* z^2hdGa7*IO7BzXx<1Y2+GF4K^y55N zoqIU5&(mElc~kxpM^`mB1$q2sxGFchT>18e{VwOuN%A^*N0r-kB+Zp64OFJP)?{%k zPIpZ^MLn{AD$-qr3{Y)Dnrl+Z?ZoNw=h9q-TvTjHbJ>78PpZ>gxei>3vZ=?5L$@pp zabxy%PCupZoyxm`>f*UKe<$=Em+Ri2P?$Ph4|2SbW6GZga=F+p=6XcBp9@ZUay)!o zx%!K%?SiV0^wrg0D&m;(=aKs6-ZJ}+nJ(3L7dTL`^*^rM$cyLBn@cepci>PBO#X4@ zsPg~+>k0#UG-v3wX|9$^cz+jvdgOybZ=Dc=9?jeTyEG0tdj_PttWgzmD`yFX^~l!3 zmP_mxI+R~;mv5Hxr`YA6NtBNtQw`YVv+eqSno|Ee6IA_QCCcwkEidBci?Lsg}bD6)hiJZs^)rP?mOi|a*lU75J1|J-}2C-2wU?+=~o zG%+mY{o+J6nf>>&54z|c~Fmh(S82qy6M;TX#dFy@O!=xAu#vMfaz`1BU{e* z7d7coIc*!Ht@=A%^P5f9yf0m@lDOVDsu5X%2=%H<~1Hw<6zw!2Vfm*%Z7hg>T)OR%08*O&XKwfexd5hr!KcsSGI0WD=3Bz+%p>Dd9y0h z6zvH8c&>49k)OcDrMlVUq#7F}jm@U9l6soTx6v>vx5~(nhHjvt_>A_3q%r;y?H$z3 zEsWdbo6}s{lzKgSO}1|I(xZB|);HZc17WV44R$s5dx>904OC=3@O?_G+^1{4Ee(lB z>ZrGmZ#3)3OsVInZlsy7=#kCY*40#exFIc+vr)vJZtk}Jd{mBt9JA5JPlxKDx2(sd z79&k6Xz5D@9SZRLEP#|M_*K`VfdaR+B_5B%Bd@+gQFS9n z>h6S}%V_&}{Ct@!?_@1ktz>k-RHyepzp1PDpSIs`<)O}KrD9t6opHIvNOM`c;HM6q z<)Tyl4|G}o4R-zc3UM9lFE`R<Sn^9$WPq#MCT zU&%ii9<8tM;ec_=dj4+;nyvoG!hCIhM$jzwn^SZ3O$@aB-L03ssjXUwh|wcoY70)+ zjp^$*Xi9hlH+i+(ZcA>$o9*%k@b8`8q6@c0@?FNncs7)x^-) z>VBlTSvT~y*p<53w&7HY>t&mDZRAlsIw4J8xjmfaH@C(H>h~N~qD@1dolgnv-jAsu z_Neuj!@Obm9u}B%W9g9Cf(#wREqc-fmYKl2=3Qcz8b2~&CPld z0Jo*jJzI~CN~eHbFmhDWwK2Yjs~R)&uXJxKN6p91)*H(U+#+TJ(Hw16nrox2D}oPO z_Xk}rtuVO1O1oool{W7{c9pIz+YD(`d9`ItdUW!B2qQP1ciQwcSFO5?Ed5won7lt= z`rgx{)NxTcrk8F`{usfj%^#x2w*WftZPpV)T?9JPzD+OM4C0hfpWi*6H|YkL&-&Hp zfRO8Zn2|W5gm~DMtiKrL zZocA;w55fw2kZ@Q5P)vdjk|LBpKmSx6ht6A8%O2l32xAUgQQ4q)>~0J(${6?SezJo zuC^}cZO&Hf{XMG}=83eWhaM4JGa9@wSnwlWn^Ny@tQRSv_07N#ppC`(+8~e1AFm%- zI?NS@HumV|PV1pDg8$Si5+i9Jlk)lSmb6gMjiQvSrcdm5lveIoT=d&-BA}?F{<>aQQYDtH!!76jv+^+R}CSNf-{r@WJO;5KQcqkeGUk7j+!n_`j} zX?9P<1htMG>fDpoxYyAnHh`@WZ+2XXOkFDndZo`ye>O5ObTP8T79lTVA_mNQL}=(V z-OS!7evi^Yu=3VIJ$~*}jt$u$^uS<*3i2mU@m?z`VFN0mUX_0ZiuRQprfRJQRp$x} zy;NH%e%Xdfo?F)`U|SJ~-xWP35NNu2T_Hj_-14pe$bCv8y^G_fZN5f1?yf2~!uvUSQ%>IFj+E_3x<~855Vzbc^TxVKR6G3~qhw-1?Dy>tk-c>D*dw-+Gf-lkV|w&r-KKt{lC-caZ_=b>fa@!mLNdINULzm{XS zO#4^6-D1;|wjNnDG1sfDZ?d|@Ft1lOXb;qjXt|*if&0zPL32;Qd?gU|=RzWWbD!Vb z*^Z(bm6@Q4lQK9J-{cs!AJF1B8OCZrb{n%C+^7`3n%A zJDztPE>lf?xQ8BTNXH}yzowhB3rZcP#uN%E;ee$s4gNo9uLUgD)Q3*4J#9TU*u-2A z)iU&b`mE^R>17)N(OzEz%3RqU2O*st8Z1 z|18MyWb6N222C7`Z>k@DFU7biUOlM*IVC>^_J#;3k60cRGA048D!g^V^p^EHw7;IG zE9*B(JgrL8cWCP|4Yrml{ChA5sk1_jajS!Xg+c(;di2)f0GQB`0Rdx4fycW^YS7kY zNCU-o1FOpm7782-r6f4JuV6XN%KL6>wrbnC6TLfqWj&UTzFUtsR2dVF>1A((p9q-L z8vvQQ5J|OQG_thyEvIR1-2v#gI1rV-i@`;kN=g@6moQS= zx=96vXg1CFqP7kT324P=Sk8b@y(d{Y^e6pC?upblv*I7Ox1pQQ6x33y-)!}1>kc`X znW-CpE?BM_6XXEAuOu#dEWr=j`co8C0rPoztVX8L`Z;1n0i{RpP6IHn=6hMjdi9jJ zpkaqXgKj!i3t2fJKM!31vJU^-I8pqf=ryv)O_#HJeOHuBnpo@yLp`zla4kNr5ZyAa zFrN1>Ig4i9D^Uz1!*jS%e8WnCA6;83mD@Dz_|A_1Q>|SPDyRe@AAQ7oHqtAUvO*7H zjTI|9hk?+hZ2wfd8|reDdsVII^X0?RUE#w*lf~Aq5lFQv?e0*4TkryfCGe0;va9LTE^8kHP1npS)iu=*$X>?zK_P)c=|N;`b?RUz^B|g4ev3R8`|WHR`oGw3RF7*O&Dyd+wP20^Cz!B}OOCCx_NE>(>+x$M(64#^cyOesuM=)Eh<8>6`WsgQvTMhRRuA1)l>H}_iIfdJ;aN(N`N8phZu!oF_Z z#JAsR{j^LvctAI$ifgEO2fXHBN?2`NlGV;&j7Lc|JR0NIbk)^HO zC3bND{Os|S)O*c;1kl+Y9_|qpTM9WA6jRa71%>j!?cES(*2iz|j^{1Xr9Mt7IjP0T zZ&i#wG#OMigMj*t5s58hMT+;vmW6HFL~b`DA$9Yif<1!od$um;pq%^Z;@(fUEds^g zVxPIEz}LCTE65sSIecAHp!|f$qTF*~aIG-w_4zU`2erbScQ`Y%^1y|50d^A4-r|m& zSK}09eWoq~1(g&%z&VaVjnes!viMm=9C^^FDFmZ`0HAW@anbB2mpqr(fW1D8vEm{iiU#TQCFlf;H+Vu5fR zCE7|1)>iX$f)A`xbc1Pf8LqV zVEti8!sC(g$6uXYkgte9Hv;x_hlf!v`A~>fNpP6rR*K!4@2%^ju#vYo46FB{Cup8x z8lV%fjpC*)3dXh!#x{B<(Fx(-FB8hE40%1lTW3qJybqUA%hdA`7{-MQh&PHFgD*tL z?c>o#ITw!o*A-nfaJp)MxM)`m&_j@%_gRPrj-1z_0nrsSaF9nEmENF%8r499sKTjY zI#-HEGE1ym+pn^nhb+g=%ebqBXHH?654YmC>5t{7|=}Q?+`$zN&oag`=^rB>wyeMZM3S$FDYM zIllm=`OW?XIJ~{*=w&Tu+os~`tTvRX94+=k- zbI+xPOaab;>a`WYWcr@+0lLFO#F#S`gSQA+T!O z>LTDOGFc>Yr}>0tgtFLmx|#L2x2aPZTe(5=EdmJktU}2?Z=EZf649LIc|v<*M^esg zlUUVR5M+#-m?QDL_qiXy)I_R62dJCVxG}iCDp?~?BA+U(S>H|*uC9HR$DSiQ~x8kX&;FZDwrmS2uX=p4|RGhuBt7y zU~cUB?+JjY$YG7X`;;8Pttmx~);9Vclp?kT*(!Fqv6Sf1(rmv?TWb99kE%uw9X3kr zcZp`TT6ZzZwYnLm*FmTS>v0>z-Ft3{9v$7AdTDby8Ww{d>#-GSG|yX?FFlLq%>Wc@ z$JvUdmdwj{EJv}*5EmnPxY4%IXk}7~dLt;nORN2flpoh3G1g5&=Yoo_=?L?1LSJUqU2if(!Z$0|K8Vrj^)SA&~eMoZ4%ZQw!;p?O9NyM{%ccTp)T* zjLB_!^vr$%X%@#}xAoE>@!G14-es}g0iJR(wQAwtsCJ7!SNdVW_Y#to@0^auI1Xw-#`+9 z=tWOf3$_9Uv#jqO5i-QBlgi2(LU)RFRH;Z27IqROu#)r?TFmQWmTp0{6+Z~%UBHu@ zA@-WC<&Gn$9ROUhAe@whDx(C_U#{A_GPOMfc8WFD^{n7kpk7Gp z8zYD5h~!J5y@~o)GW#ej44Zt>UAy;O%&qpm1RrVdind}M?pPP-)9(Ex58`>ZL5sT> zt)HmTx`2upt$X22LE$XH?m{}aJTcg_5)gcPCJ=ZABcmo!%<1;GIsvS$)Uv=;Zq{E^ zg}w@L9UkW#cfnVwtylM}4Bsqn|Isc|t>xxCrcR^F!K723;><_ntWyty`BKeBry38{ z$bG7TWTpXbSbK2tv5z`#m!6^A`74xw8WqFf$6Zwxt@L9DuAwv~O}6|^AwvHo5cM7c`aarg`?fO_ zD!9MofZTV)>92d(C|RzwmA4%w0MIVt=bqCAPUiQC=hc>C=f(33Ian|5QzL3FeNZ=p zYm%a;hqmG`Vn;>CNa*iDZ0FSp+nJ6^1V14$Mgr(yd$>)%hg_+RHsuC zm37T5WvORdJwNVfUxeH33j)kt+ZSC^)xFeg{bDao{zo>3Ta8*OA!nxyTGvgUB25-b zlR_kSjORp5CG0CKr8#iNn&T>6{f(7AC*1KOQLxTNnkI&lZ?$bF1s^=#O!`l{AhO1~ zMOy1jYklVqhR(!Y>Wa?Jw#PQYI9liB*>u*)Tly}~65i5k>v5uq$F-5A+Q>RV8@6`L z8zXIOLB9JeB56a;8G+SSP})efaE2k)J5X)SSiF(o$`7@g#YoWv=l+Wt zM3^nN?X#8QJ*LoJD))9x2=l1S8nhd?!q2<$ysbkp)3D1q)G8T;Xb^DkV>&Yta9?fx zsz5*x!#YJ?qp#uVrE5e{bB4BX`^;^ALgmq%+j-q8ER`Sz!{$Iw9>-w3qNd^L+|yP) zAit8-n6w9t@Nzx6QVd-Y^LXeZBf~td@aKB;0l8@l$bDxij?eq#I|<9*Et6r5zHFLP zP$qd>RqT^cYYENx^7&uL2$l*H#PhrWgK~+7?-1K4`4Xr2yF3$jOkx8$^|WN&K%g%L z^B<_T+PQvKQu}V6+of0WJ?qiu!TOWxy-AXXLBQj$mnw(t)Og-QoGDN4MQQ9Kf?=^A zCdQfQ?g_^D%&sIfS%x10{w}MO20IRtO#M1z$e?lVH(z23!Fu*XQ99bnn-CMR{_(s% z31}{>1e!{qvHg-JIQ;b6iv$fj)1=o+QK|Bm$p|cQ;1XM zUWR~~(p9}EvcIY!&HFYp)Yfyv%&Uwi7t1|||EF*YL-peEMmbk_3epfd9}t%|i}^FT z$-6;}@u1l#p^9Zh#v^Ur!WWYSx;nvQzSW?o5T;Rj!)?cnYi_isO^5M@kY}@!mb+)Q? z-F84VqY^-pXx1uq`A~sNBsy8MV(UoOtTVA@jS+Lro-uIZ|Dgh6p-T$#Rcee|&6NL4 zroSY^aArj&VY^S!i@H&B`Yee++jq;OE99!2yEn_-Xx1CoN}*B9aUPdj_h2${Z=`yW zd*5GDItpIZYsN?nWmz8$Uixfnr7$3Pg5Mk5g3LYJU=)*h=wG;(gW2uP3+nQq@|KSsoo} zrF8KfRf4epPHXlSMPzERMMxwq=|P13+}<1Qxl6&YZW7reY2K*L*Nug4J4Ycp>o>&z z)_`B_f@(xS*8H6`t77Mul$(bnlst6!U3-XO)Z{XDwoKejX!%Xl&wGkx%8jMFQ8OQt zTz*;Gk~A0ddf_+${-qzo?z>C2Tc_OVB1=xI`2cnz)t%hMSHsNl`F6wR?};ez?Ur{2 zk=@h6biGK4sl3qle+NY@JXASNr`BST_(#2ddl6D zWd!XN1No|EK|;p%@Gt#lV=T+MO{z0|ngY*QdOmVpEOnYvnGEH<(p)i*9^dSA*3OIy z4${jGYAaZ5;?j!_`pXXB)|1AWige_ej%e1bxlCJVxnbsSCU-xM^*=rd*1xkz1j^IT zQBB|Q$E5iWf*{~RSuC)$yOQ=011YM`fCqP5FT56yi`@U#1y}+4u&T(Cv}x(#0hCI< z6a3gq{-du&xp)5|Wc!(*Azlw;kZ0C)*};r# zRoZWkViMLB$}HI)JCzHMSlnb7_w)}PH)~#|-xxP5XwG8-@0wZ6-ucbTWe#X>TR_M# zB6U%=zod?31rdoM0V7M^|DKZ3W23{y%fmC|;i-OuxA#kn`ra>egUO0f6-KVSGFV=@ zi0i5POlDCP6dc@8@m8Uh|OOw8%SV5?Q4oc0eq5(m{0!Vg;R7!Zw0Vj7pb0 zBYnX^Amxk&n_seIm!ww3Qa% zLRztjW@Dr|V_1e(^D=i7Jg0%Za1Su8twfANKlT2i%?v{9Tmeq2`HQ@|a-UP=*Q%l| zPLcGI`araQVW4cUwrV9$f&g`@s#OhGSapvP+ZX!Yxag3H>d84WTIA;0@ajb`0Bpd> zmOe5V94d@#^&Z2vFLV(%WY{>+Ybm9MjTZutN@CdLH5s;`af*yshK!hmce7>0WJ;f5 z%a<{A`x{3&V>gPiYiQR`0rNU=ygg{1BAvL7g=rOmnd#$@^z?3C78&O04Sv(BfPkDz zy}}>iOa11=S$f%Cw8CD0*}nN_`HhLQ{AMpdYaWaCQoaIWG-%0-RwN(U)qt#Z$*L5c zTjUmT0fPuibnfH_%3SkDRF$Jua;m~{u|XeK>;A?)%# z0YY!t-YTtp4_Vj^fGX=FI_5JddUTe*u|`&EWh(z|h|&f^Tlp@;hQgJ)!#${@vE=}F zXoN2Nrvjutv#&ooqykvAnr9j8K-so=h0&35Sxz#JLVay_Bh4T6q@#e(#{QW_JzHC9 zRXsA^rFzj3eeW?na?Gu*s1Z`SN0i}+dBgPRg_ox&IHvelk%5LDBH!Zqa8}Sf601t6 zyvZmMTjgPbxZns?$=zDy94`MZ6{-TL!pAlV?E`Toee&3S zZ%Y5}0TA!cr$4XNs4S4nc^rF|Re(#}lWg7a+2 zsXNkAM_MA}6NS(>_F_!drP?_X7~4U!S;*@L4-0A7G3z_0+G%)y7gmw{oC+c3%38lU z8u*nqAr}i{ICtf~WyN|Ka`sDI3x1)(A{UMbn9o_iVf3X)(VG{b6~=q?nT>izy`Gj9 zI}g*AVFn=#o2*U!3HX5ntWbYFzSAF_KlSfo>I5>r#%jF#KEYC@APs!sxdb?K2a4YD zW7m)Td*ycN-$A>7EKI>Rwfna@twaAxkLw?OVa9M8L+`jtSdDr*Y&u-96!3`gi$ktE$ohzNwK z5L*IQLO}_+Xj7Auk5B#ARpR4xA4?CBGptJWLfoCarnkp2 zk3Yh}czmsWQD-0O?L(7&AdX5G9zP(5Xx2}3>CipOvos!Wwx5ZTt}-5Po5kl*JqnlKdS>QLi%lg}_6=Q6$m_L}Xg)T&f&)^_te%=U92-5`2EFWin zgnAflUn|pEl_K#Zjmw=H0Z34r(#Or{f5*x1LmLEGdp4v0n&lqOZ*w^}SkvWgbr5`r z1qySm2^j5H?o_<(C(Qr`JfPMPM!z34jMT0i~9Bsq~1pSXi(pY``|ZcZOBn^ zX>Zmecjb2vm^McR}Lr()M6P`+Fpyt zP6Na*L;$$0q8x=5ZmA)$;Zb-1q68{Z;Sj9+pJB;6DOi5ZTsXK%z#;%Cd(Ii7F9b&n z)2&#k`O1gH5IMQMJ<4TokJ@!q@1)TPlc~Ku)LQclEq4N`Hsj#)F=X0|QJa5M*;$_O zk28G4qnPPeXiEMh=na4XPF6NywDyq2P0j-S{I2#$IZMDvv%wJwp}>+XjcpkYjmGnS zsM=Efmod+^kr2(gYZSiwC%TxQ2d#mSHGwrz7O!w$XGvk#A+{&Uy693_{DKF`5Zj!m z#5>w1i^diTR0O$h;Fd$j5KR&n2?TV8&s-$1j90LvN%HW)699D1i2#!PkR(8_Gmqf_ zG|K^K2e(cPPzt?7H;7~x4|KPc7mLU3wODPcn%!1JRU`fBz>n?kvt(8nX;CwZBrww> zF~^U+B7)1a6SsU(z1e33vQwqwiMzl3Du1y zWkS4J@x+ze$-Rk~c5r((p00#kGWI1{-Q5+dUk|J6(c2K&i>s|Z3cykMB#kQfBjNvN zi?ygO+`1eD6!B5it*J(KID8@@-Evsbj2h1^8Q?>?a zT`)pW0yvqM>LTpSMyAQw-9>0IdS*5bpm6;yhml2@C5e&o2)N9P$rcZytB^--#|8Tn zmPX1`K{b(Xo-27p7)UqYkG%V)KyyzU{CKyv3TFdqfQBWIR;nE9cNsx*Tco+$ux?rn z>4~lh(IJEf4u>;KUX6MDjyrgvKRW(=f7uJ#y{}TlYFbM@gb@1Z(W!)b-)Tmqx5fI! z^QN2%TEvh2gOo521f^3iNx!0>ON#9_f3)|vbYsFSZ=^Xh%vgdS+;cZKEP4+b*!ura9ys*3u&=zcBT+X z23Uds+dyC;ma(8ZfkiPCe!otlmHYpEh*@N=?_IsF?)=cnQI>5Ze^-2^^k4s+OZuzBW` z8gp`OL-yLo6h1LzYyTicMrG^9ja0ATPhP1X&8DVA+|nEfteEJz5#;jor7 z=Px=4E;C0~{>@Dsnupr@Hr+f$l^@A&IK8;#Y-Q131r5^FTo7EuI_Er@^<0L>zD#$8 z`ix#x`Tk9BTt3oylAX)h+a4F_8`Qn<02 zU554MYFR2~YrwoSSARM=3t~3-wDm`21ur}zxyp7zoO1QeTj3!>6S8cxG8nC5?;^Ec z&#gyxbeF|AWiKx95Frx7Zf}b+$E*dHz|$AVD(A92#N`g8gq5P>(sYR}!_;bu;}oy? zb!<#(f%b_NtZQdtrAbj~ll2{hwy@cJJ-QG!d#@R}(H6_L{BqxH3udreKoyqLjroet zcI%O^yW?b=1Up}}&isTz(f+qfJfX^G47-Y-*;l0}L?*m4j;M|-8$%9{;*xQZ=;0wy@J13Add3Kg9|QmMEEYv`>no)A`=B)|L# zeJ0jhyLA;c6QPt`t`aDF&c>742|>+J73c=uZ^o;Vjo#>0rlI8n61GVozBHu7&b8nn zBj%B5E7?P(?78_Px<>E~Nd!OOAlOAe1;I=yry#h@p06@3nX+o1s?tWbFkK_#xnQbH zS3Tl4kHxfj-c0fh*eB^vYD^dme1`o1ts7Sf+{PR*z1#XhD+mPUGQpR}*@s~oaUG>o zWU^$}-vnFd$*=kod@;5Op>EF)>(7ES`4hY$-w{1TMYUD?q(ib7*cl3CAWLjoE1yx>!fw z$y}~g_qgDspZxCfAaRM52-_=uZlBdO8-r$x!_H+}v=wSn73@{WDi;tqRfnq;L#vG< zg3)124eb|(*30%g+}wB^H-BMsb6W}p$PQ@2&EFC=3I)K;2V&z=3$%0dg-K##4CrK& z^`l1>Znc{GGNVr0FG*_6tJ(>%%9~IL4^bwf-9M z4^wOX2UimBr#1t@lHhuUR&XrYsR&27o-79>zLmLF#_Yz&5_D`+v-sQBN&q%Feoxzk z%;d7!Aj{TlaV+C^wX#x>DE{b$rz&X-=}3&Ik}=Z)YA~fyL^0lFyC@EnSqoV0-9Z$K z0A|xVq10f4Qi=ULf)<3iVttNh1B-aD3ga(VLzN;MvaMb6j8$}~=JC;CR|wHoi}*zf z3u#Bb*5*%gMDWi(kO2R4s1QlPGP&|cC#QM0WnPj<<(|tsCl*ePE`EIKJ(#GBD5m#TgipFYbhjbhoR=pm{VP?&BfwtF2%}C0bmc!>D4~Lve^12$FknYdY_~IAX|+bk`t<{u%4EZ=I~~2F!6vN zHH4@bx5^gf&m-T#i}XFSnfGpH99#M1y4?#_5#J-E<~fr~cTa80$&QEw2X&Q9Jrm5*r-McO=0l%7SBD9-mN~eDDbS74q z?DMp&PrOMsLRIs$=`ofiON>45!5ydjw9%MP<$H^R$?O4sv2k@Tmx{?wCiyrmU$} z&Zr9Oi8D$k)uQSp_M+q}oxzv^ zZ+)*Vk>c?YMA z>vB1yj;q_6{z&S$7F*FL)wqr~>~Sr&th$aqV?wgfi|Rx#$V@azdeK+1?2Y&ZGEJuM zAY7Ae1H{MP-%U|qJFKD1!S%88p^np3XU@>ec7{&1*1#8?dK61vn})0@WIw&zOX9{e zYR{8o)wAMxOQ^csY*c#$AacvK@+~Aos$#JLC2?o(fQQu9Ddnd9z-a^2m-j-}3qNVT z{oY=CB5x01vgDkJ{lmko^M5AEKH(lBxcAek+QeG`-HD{zvQ+m(Zdc2;Xot7h{(Ljp zp|QNfTg0LNfOCf6YdNG2L9zA9A5w?FWAzm65zX7V${qrbb<6scAxOmY4_fy=m;kVs zb-4{7QHm3>-6RDgJdirM3%_=x#|lWPXRa$e^l*94e96!<1B|N@mf$*HocU|BI0|DgD=H zdcR_`p_V5t+jdA?|FhF|4GDru9y#UznYfN-^{q=NOOaP1PgGD+Oz3hi`D>%N`9?GYO8!oC{l9tJ>9{(cuS>d1Cq)Ti{8I`g)DlX=#oY6_G(c3yEQbMSvhaju zDDtz=AeWytKW?cHvN9+p>l$VSqFKYqvDc#kt68cqk>TiM70T1Cr&v8GZ4eXY1p!yiqd6a527dJ{8P~+3_zoHT5c@YK%KwZ$ z@3P+cxsnO(8xN(d1Hg*<##*jXwfvG=NEfY?bkRFGmvm7fJ3B%s+YK!)PG*WKdhSfG zDf`MPk({;TmkDxh^9}ycPXDdL+Ax+jc{kYvyL3;Lv9xaJ@Si@F<_dKm{A$YpnWkg! zLav$HUu(Vzi@02?vhLyrG<8Ay{;Fm}yx~#VdMlh|1&}~a!HKG1_$_B^yz}TB7WW8M z-_j-qtd1<-Ju(iyx+&4^AS)pqB;7h?B^<3P!+sA~QQl!My zs{AvQw~;#-1USh3NtehyOU%G%&i4t_Ta#g#*j$Y`6#T~I|9mA{*gb_c=tvgU2|2hr zKqiU>t}d5o7Lo|Zas!U6N;wc*X@VuqYwF_ME0PDbjuG}QI z<6QCM$U$#CE-CxKNpRVRRI|&vLK*;lf<{4MtucHJwfbs444sb5NRAU{(VXuMroS&i z|4*a^%%yw$kvOYfNH$z5z5%>icM{FcSIyRgS9=c^wVmAkTuS)A8s>(n=as_T9*4PQ z>5JM?E?~Y!`Zf7C*W?C`QRF(4(#U48k>T$@&WDh+`)UBfA0+3~zz0lyR8eUW|j zxDrFwQ`?wzGcU^@dR`Zg^MvqTNx_VN1MeUOP)B&b{818KmwK$=J-QZn%l|FBA3@da z@UG=50q>K%oC>d6@1mpe*{Ra-5bxC8D&mk3qmd65V%7$tl{~IoZ9UIsD(u236Frgb zd|Lp|jM)t$5bl7vQ*mNE?;e`-H68sb5P*s-MH{6>q7^PRy_aBZ?uq=ig z+b4Y~Lo0#T#})rW#il;n#lceeFq^Y=^_2HTR{W7Cj?Wt-;>WXDED=g2arP=>cL z(>0A=#QJzQ$Wcb)oi{~bs3zK8l2f~*(lL*qwIQm|S}_B$mZW~$pC{K?A zsIzYb-MhqD!tcAJF|$IAl;(_-yjuDOpRvjHUBahq_=wU7l_zRWCKUn#OWhuYxOqi0))@q>biGAoh)dR>ta+0FltiA~GSa2?NMi`| z6k5RELt82GZ>W9~<9Q&pUIqsrYtV6W+4%J!Un^RZX3` zts8U+%7vymO1m{Qz6+%-^_!zn+6NXCBs4ZFM+Tuiu#)x)#eKTVZt}(_(%8j|5$4{T z$Sf|;w!eFlFayA|jiNOqQd&jCL)-AFKO!gOG+h>D7`JZq zG53=4Q0zVSM|SMJLTlOqdKnEBkXu4FZ9Z0N^<9bUiLZ* ztBXF>WWQ{_-xSaLuB2KRd%RiW97q$XLosH#_i9f&CB5XB~c#<6_M~W9eFXAH+7w=$xV^bwfhZE_O zdsK}(Bh+Z_PC6@WFaEN1`4{%SN(bnr%#^s}d8fQ5UzA8lSBsz?60-RH+S|%#RHl8Kw?BNws z`XM#DFRq8g0GuyIIQEIGdsjxXqEifI`N|!xGOuOzkeM&>1ASN6hVsYID?6vWr?gmF zz*t0VY7sWUxi;8Ff9QWJHadH+AR?$@TyBTm@cYYd_;<3ANmu*)7uuC<9YiG>ya`T+ zCB7ukpJyQV5uR<7bHV#B_6u@5wa`tqKW(FkoAwD6(1Yw<_Z#>U+hijf|xJx(s>s6zTVIJrE5;8vn3g2egVsdN#m5?8H z{}Dp?n%V~sAeYjX43GNsj85VrApyw&SD&5Y-ub6s;P0Nrl)+}a50g2XLFY0 z;!9)UtZb`_xd4^Pb&ZNOMc!^s#05_rY5E&&bs1^$3uK8ud%dSxZ+SGKhuha%lEH+L z_J3IJIlRFMvy`YcOe|*+Rf;Vy$uR1-<#gCB(YmcaiGwA-w?VAL&D^cn&p4x!8Hei* z5a#Ezm|zq`qIj9ud7j*(iqBjt%U@)N%Di&e#@Cih4M(cb+e6J}To)VrZyS7If2JEs9Ye?$5* zhx~ET3kjbN?AWgO$w>V(^!)d^qA>V)T-g(3z>RWg~vG>W9i{zFn^C572Zk^Oj+Jm=$*69{BN ze`VI|>W-ScAT=XYP>K4y@D8CHVy-D`+8eBS_b6iVB(PN+lxd|FMhL`!4L>}^_wwr1 zCQFY>-@tUmxF{>681t#R`MDSjl~@IYsQG3WIagsOkTNI88ij%6bB_)nU;F#Zjx3Ng zZe~i3`HSNE-gqp76&T~AnZ9&|u$S3ld%Sh7z#Tmk3x+LK5Qi^Vr*MZ_u3#cac3z71 z9}~=|r;jDpQMHMQw9PQlM_`c-N922VvVoPXL_u;g*K2=b(mH?@(*C$3JqL&Z<#)_X zEe;?|B*~un)-M7@tb@2SJ5bc>-+U~~pAZb)gJp-bnrbTc$3e6ovD>6?J_?%=>3^RO zVCY3#)S`ni(snenC(gFNY@4o);=5$qwNwlPIgs&XF#27$%($ta zYPenU+kb&6EU7HjWS3_1c^uFmD0@FNK(>>(gdvg&s)KA@!eiMf;SBE8%4c*Cb;ISR z)uO&LLXd0}Zln%i zwso#Nlercw_wmso_WtqW0?E=6SyqCAkQ6{b&rhryyUKd+X<7OK9WsZw+d9Y9|R%L9jDlgj1Tt$5`#$Ot* zv%4AT7n_e&c^lI%a>a)HC+|yWiY3l_#m@H(l)*;YIWt49FxR+esS_ANwu$`WiJ+hS zVwCG(L{9NZY1cc2+ZsbyT}&>FQc-2B3Qv`>7?pYr0Ry`>{HK%A)#pfUi>Qq{2wsjV z6kSSPxhYm$JTDt-D^0kDCjk`{PsB+p>>LNi zadyEh;-ffIb((l5vUuY9M$B-f+6m}N36J7(yV(6sv0|%4ig}H1d5vY6UcQaa8(#Se zy5E@N=06|%TO#X=3ByVdMeojR!B?sBgh;$zc0^k>S7aieini@Tdy<;ZJuEn#<#7<} zXoV7}xVx&o<=2Yo-_RpFF)iO@dtUQRBwfFRjYy7!v#6=R)C+dcnWv6oL0s6uPW-lP z>ZFZy?1dfLs<$2C^8|V@h81}~(G2nc=c1EX;H$tfZlqtCN{XOarTS;q9|yjJiDIze z;lD1Js8Bjp)`revZIpOWUn+A#p&%>`C;IH6&x))PeJ*bKAJu2_`|TY`*^H-mKYTUp zi%45fy1-&KS&~N=PP4lZ@+9zqKjz@$n5v}7I)(lSGWzJzS*W^yHDhtKiHY>v{nFjf z?i6%czzzKKfqxnBr}X%FYsWgJun1eJNV0^Hl<6VcaXEJBK+#h{#vVn*9$oF(6IV$a z@-3~EG*c^>m|sfjl`UG~+;2#}h`-G1!s(-VoyFF|>DA)royxWNdCTb}ejfhaZ616* z-SPA6ug6(?7C^Gr4t{r8H!qa)8~IIemVNwY{u&!<=P%_g5jJ+%r9#p$l@Yfj!B>^N z6MU7vwF6%fSd_B5%~wO6VyyRWpcvZ)2|uuDq8wE1c<&-3jKxqOOeH#_owMF+Ur8)R zx+hTfxwfkMc+Qd!sVq1>VDK41N7z7RnFU(kQMrn<{N`aj@&cUoxp3C!U2|4HhqJcd zA*7-_u;V!E5M*gDkQK6QZs)8<;jAlO5>hkdeWDTy9AjSL_#~aF?*rfTB#%1^1{)Cw zrN!WGF@(tiKVhQ^kuxyXSHf5y2?i<^1{f(6lG9~RLSEBlaZ^Xxj3s2G80)$DNyf4q z#&T9V(}VmIGuGD*V{M!Ryf$N{_$e@!{~yxZU&v$eJr)fIL=U+uOoq80e+E1R!wVWenuTZh+mb3RE;bh`cZhvju~ z5VL9){Z#zFpydJ-~5-TF-&Ls0Na<7P6K%P1| zcjy_nEGyb+eg6oAU#@0HfW-+!GP}ZjxvbLa7{z+_VtOdwu*_9wN3??6!=FpGBWy2#xg`xf2XY5huW+2gC` zW#70>dSb`Nu#_s3pFK_rMU}slv@OQpksLmJm?kxR0ftYu>mxkCcwUbg{Us5`fO$Hb zY_Ml9+gIQal{Jx=Vm7fyF0S>cP+!cz(u+gWh?>~*R38V;EyCSXwg)juC(5iy1=*Dt za{jW-+KQ>d$VHp|Wn0Lt*kiY#oBdE7V|mfGTYd|IWfHXFX=YYju?g(!5_&XP)WG(h zvHz6{i&cdlRbd(x2B}c$tf$WU4t3gtG|{QB`00LBsODhe(2SUY9Tpy(40XBp$Vh(gd$6$V73GtvW~r(=%+*w!1fjmPTdEpFRVps% zsL79S<@%nj%ju4+W3o1}`h1tQL4Ff|qW{$VS|aX~`aSyzw>!g6Vz?NU2hF}^r-b^| z$q;V>qb_YiW6Na(woQL#*|^N`yIwYpEE|^{ex3X!w?DGj?b2#`@?5!VUm%^-Tjmjo zQm_~zIxZLQRs~9&w6ZiNKC$V@henJ`OoR_gug|Qg@(xW4Uk)DpiE=Cwsc?nP?0oCu zFj8P{8VhD(kCxQ8{EQ|Ouk_#*_PEPW)=q@bCDmN4)yxnTmuNL{-xWShGPCu_LVF!- zqVUC1Y4jREXMsv^kF}i-&eZZXYv;yVt4?mfBjGh{gx@UdjQ!u|2&?V$mb8ay;*9as&+D8og}#BU;U8VBZ_L z>TIn>@{YZ-T5)=Fxrr_e*Q;%eSdVv;YHzKzomqX=o-EP}^1aYxb8Bf18dT_0_H7NzzpsoF>9@_CLZcXX2Kjr9_2%CU!#p_jD3$a zcjPMg?53DLZ3sjs;{|>t4uW`bfwE8e_~#1}4jB+A+QS~P{nM+;a>J*huxwfJfxqmH zd3`qt(ZvR;%C(Vgu~W=#+E43aJ(-~=7A6lR{^n~^MyjV>mv%HVgC=SAMMTQmmEq6n zC^qU&>#Zso2D?M7dZ_0k0Zq1l7GB#?#Y%iC)pQM#cZFz4t+m{)b-QI!D;xaVOcU!x zpm$}xM|)r!#A60q#hCR|LWDBXAi=FENyaigeg(^>tl!=MoLuyii=cBcP%c(G7i~y6 zt3)o^|0I5`X7*W*OrqSEv>`0V6u_Y6oO7|=W{`l{L-O6S;aJ=M*qdOSzA#Cym&n}Q zD?8k}e*OS%cDVH&ZN<;1wDaw|VnaFTZ7z;I( z|4WO>80>IoVY(}Hs@hsfgGYY!ml*{u_jm4iw-NbcP!Sn^C!c?HBkv%WJcsqC=Q z(VIsDLl@<0HRp(Mh%92GPPAUde4>QVf0MR8H%7RluOxs(+KNPuE|esb<@DdH{g|CG zo>XDUs>l}?g?dU6ZDn7WM(qV+g;vwoVl|M7psj0F>WIlEN>O|=s9s3gs^k z&@Gty@;fp@xW+R2_iU9wc?W622MhM;MW5K)!^cD0eCF4RkXV8_WjhvAaE<7-vKKIt zXlQ=|0QqJ|t#z@oUHLYeE1XH9*mR{~YOU|S0zyTj$xS_;x4uyXizu{OG|VGP!_<}= zg$a#@2cT5i-P=URv`My5p;og!JE7BdaV9xtXg(Pp@r)eG3)ZGk--!}eny8ljlRyNc zv+}KD0^G4QkybcS$xSUHrNvs!R(U8h5KLY=PYA>d7q)7VhvgxjQ}oO`wVI!E0lx}A zvf)L77h79aNFkx_MXK~cs2kgoq~cq-mZ27TeU0>w9jUjLf1o@dZ= zHO_n0bQ2VZ71Y%@Po>9yQDr*ugx^`UUe-GAG>0uhx$r|#Xl6S<_{}#Gx@pRG47czk zp@(V_EX$eM)KNTt@~>4p z3u8&~O;|N6k4yas)>>~UCI%gOX7Ou$*mQxGki~Sa2vil zTU$x!pbDbe6NoOwGFXarrj1z&vxQS;F#|H;u$HR)e;0d$zq?g<@U(yt-h+96KoBHx zckKdSeao-75b|}V8b&bHz}&h}ABxoe3K(l(obdXo3cx1o$?FAB6%@S`Yn2FlbF(gA z0J{W~_f!e8*d+(V5b~EjudRAR)H0iZ{iUQ{BBKNAg*fhzN(^7U0?U|wV0(79f0$+2>&!sm=S!Zrx zSmz!hjhr5m4=+8l_Fbor66ze%p@&SOVH>q2JJ}}F5~`D*N+Wdgk9H?ZNk!OYeP8M^ zd|(HtjHPXfX$GZ7nyi_iABjJCtq4^1WECo3YYqRWWTeXur2lzrWW%#c{?UAwoMBEz z19Y-7=y=k`J&~1hldAU5Q^D=JhL)w!t~Fx@TFbglesR=p{S1Qt-yn^15t55Hxu~^< zviH(1t3>@?q<+s=zi07VYn`FapHekF#;+KWDSu*5+Vh!g4P(9{TO%DcM`jw{Omk#5 zmTIoSW@M4gxmL+Q(j0gdZU;Nve19tXV}N(-3N# zQZmAilI4}iQ)R(ZxNjl@4Cyko+{aWeau+Ae03RXT<0AxkWuY8dZbNQ+MnB{GEwU3AP8O73Gi&B+uxBGX{M zct)t>!)vJuyTq750>#T}AJZ$a%yi=p?4TE{ZNIQ##SxM$2$0Ckp01`M1f41$xWRJW zC;DzFcb_fbf|Rn> zP{8gqZK_@aA8?N*+p=xJdAdk>dmSq|Gt1i7vF@~9gSZ5hi=AbxFIYR++mLVBqqVK$ z2sHXgF4`?V{{0$sbxo7wDs9lk)zW>W&B$&mFO;CqreJ=i=>>{m-RJ@KK+Cm$d;(>hy>d^vY^IpHjtbD7jx_lzij|8$F! zo^?VmldhHxOQ;0i>!h3*+HWMf=Ro8xOQVvM4NICQ((m@!pK2jCwO_#vWINoJ*xS7V zD!X>FLuE4SZyr*}z&AlS1&w)o__&|4oDdoF>a}%QZIm8%OSnRwse5V(9@zMpp(5V= zl(Q0VVLUI&`3cud)>E9fS`LH5CmCQRisE@2o)oZ~oRuXR)F892YGnzfXYx{*P*%%07AxOeS2x33MOO2P79iuf~8o&$l zziXc}lSv5GuiyVX|DWf{oU`}Yd+poWYp=cbT5B`1q9SnwYre-XmK;4so?czu?^B#; zmt6=ko4=ZkZo2&>k~Q0YvREhxlvlgn65ZN#d%nAVZc&l)bbG#Hwc=4(hF?-kE2W`y zs1T|fM5_vDi0y<_$vcZoY0`cVVs$7Wc-w;S1WLdWU)=ph zm$Yq%dIK{wHTrlx6_ISX!*5#gn~1lJ^Sv6udPxtc!PjC~HRG^d{oz6z!)!U-a>81C zCx&mei~!4HrS^$$6E*LwbY)S5VS5mU6>C=0(SA{qwiV#oS~N?s%6dnf*oZi`B@33j z)<(rj5p$x{2k+}!=aO>b?t>r6LpBn(J-`ICQ*!z)0#UX@TFVC7jv@s}JLO_QT35rj z+4<-s)|VveZU&=>@6uJsAN?5^{0YZwXE%1lsGN;|?{d(= zircEj&5&N|aribz7xwWJ8nf>c1_Tp<=)_C#f+pr?hV8*hYk=5DS0d-=UPMzz37aCy zx;vEzDn={B-&@e!VaX5j9u}0_p>n3nxs7;p6CDHHH~zKwPh!u3AF*{uSzS0p*B`#y z55s8npude2?fkP!lN#2ijQ(VkC{9?k(VtfLVkU?IpfC-&n)3{;MWJ~u9+y~?G>bxo zW^qs?hefkg0HVfW5He1Gd$7DEa4!7+o%d#Rz!O9}qY|09V#QS~3idkpBE}520 z;1E~~1Je#+^nSU|A&l!bQ5_4ITU0JwH-fWPtb%&|=k{;5Waq8mkp9Lbf;kNv-6bhRTa z(Z;eJVSTOE$o1f-)*4xNfm}wAG`Xw+H|W6SD}C#RTUgZffi)3p)S+Kfkf>}{N&^-M zed9fdEUijvQlp-4v(=sas{yfw|3@s5%xYUCLsTCV$!aYdb1X(%&oGCzfpV+Wss9BS zF|PD?+4(XK%NL*3rN#Ve_?{u?QH_ zW_IY0$PS&EyIf$d>|3wivY{hwM|b~8Ds}=uF%N#I6IAC?zyAYbMm4;b0ycH*LqPuz z+ws#h;4pyUg$v}!!jSj6O|lB~993MwiN%O>*0`gE4JejvZ9I%RJW*!U23-}cMoSY*d&1JE=0#Vgm$+V)sj;qyTob1r4`plN5!7) zH7a+t4FjJ@i`nKcF4Vd4Eh1LPs5SN0Z86L{t<$(Z)8m_=Vek)vhIdT`pIz5Ec6^y3 ztg~fGF`u1f&Hn*$K7L$4mjha>G~KR;T=2&!QFWWv&@WoeW!dze9k}ejY2m`u)kT${ z&C+Qp_STE4w9P4aEG_908IDptBgy80RVchb^S84EOv!wSOmYc#DB%)He{V6kt_G7T zB;1b>J|c^71zF%$bD)uGCx<$$_UolEwFpdeJ;T<*_Ltrvmy@F?g&474QNt<8b{ORq^ysLN=F0JW zKRl_H&sZ1IULp>Twm@8jQ2j(;T*(MjEN7_{*9FhQv=EMEiFXgO|4sTo;=68#4_@fTzd zED0kI+XD{lL4`#}S`nHU(Cun4t%tqg7UNm_*s5w)jJLRdr*@&|TR$AWT9lH_&|3-j zn-6Io^qlB{tjNf|S@N%wI-N$HIv%AV8h0L-sADDSE~0363!qyBG<0$<47}J&`Lq`} zc)eGV4Va;w3HNecj;kRca6&B&TU_<{e9b`6sJ$%u2ZqegsP(ZN#bqtJmP?=xMH~V1 z4e_d&&_MQNGi4D=zCZ)EQG4GTF6(%Ai?qqpqE5hX|n_V?9ReM2hlSGEma8X1*c+O8Hdz0{w35 z%cFeZCNT?lzO9|6=7*@S+VhwtVd8}A(%{%nxf<>QxeFb>K3&O(+s^trCw%K+Mp)W# z>ST_{M(FC8e+S~NK(q=SZ&e2*0>kD6eNQg;y+NkW(OcHJhK zFkFO#s}>gR%Z>C!yNCX2A*ig~S~G$BJStLax7Yz9WY%UzmTIsj$!Pz6kK;JY)_8tw zjJ_*^VeyFgs6g_-L(WuNZr2w%R}RxL`O_E==-==7EC}(rMhJHWv248(?oX2+-qs&r zhZF9Bk7&}@fMQ(6Uk304b3GF?%p9}Je6tL9n{v7`J9=n9WKy&fq0G+k=;#-j;h}6g zkC)MZcqRA`pG}3_Ur7JoB@wk&#A_1KKt$)F=%GQ2en^`AM9GHjI%3(n34^bqTQwKa zCh_}-Uo8uPaX2qn@(l*9g+br0hI*wGX#DNk1+|RZ-_8?;$WjimT+jT#gYXe+Pu$OF zM#~;AjslQZTmG5ixUdmQTlYaDTSo|Esob_Y4u=*EYw2=Mr$v6PmCRiAx6){}&n5B( zx#$r85<~QRp1glc$A?emT|1HyB05-a55!|r?r-(15=kPeuxTm8&1c-dWP$QmchtkFOAmh=9NfY zZ5E(JQ~9~QAGXnBfCHgbExrpRC^AhmDR`!34v-KpmPB;3K@XcZi~^N0O*=k|B$&R;wN zfjXOt+8F7&byzn2n$pUVhNrepu3J8lru4^}?BzqkJ%({!ZNw*h4=wMYng25$Fd;X} zBRa|CAxv`q5A;`TTS8_N#=;>HomeJj!h*A$8@7wU&oRUemA4{W*(Jvs$8gz~=;W2< zxFSLAjw$+nX5_2F2D3FZ_T%aHxhtFEfO@%(E`(+E2FFhN zCsKD&i?XP9&>Rpnad@VC`U^G_dilJhAds#1*Cp!OTslBTRnB3T{7_sAc}4W?y6r8Y z31Z4aQQFwU=F&@4HN{!N9@`A05AnYc;*a6iR5@}T>ADTQF_P<>%*ITFY7G>?)K)9> zfrf{q6B!plf@Lzh9zz@=^l-dPWsMo-dtCMB0p>^o2JQ6Ib(<(H{u{@ikJW0_F1ndB zl8)ED5{8y4?i`r5l`20#UC{D6Ap7NOA|dE48919m_JwL{J~kzgiyANk8JDC(m?Vf>=tHzlEUg^&n!pQc>hX<+?2Z!(9FaItj1JY(eE( z`?vL#NibBLVfx+Sg?=x#{%g|rGeVq@}jYmz>UI*0Vxi>?tg z*X@=R*6~)TS6u3R>kP@(IjZl+eh;`JxklX=vKlNpMNYb8lv)nxBZvCaa|8!vh=e}r z5wjPT+30Mr5e_1=!`WD}QeEkjWRL5%Ysufo1datspP-KrL|PzQ(;AuTu7UxgK{MOp zI!sg!nQ`R@@Up?|OS6xqz4rWZ2yEt0cBy`9-e|gDV7k)EDMtB0P@~7dbf=_1ljBcV zdv-e1=5q+b+t0RYgQ&5Ft=U!9Y+@7Gs_wf9;vTT*WXSxs$g=68*=iYkPulZJMn<=PO@XWa3?l5F zUM8|!{#jxC+XI#tKJDZ;I?*dmFypgO#|RcJQ{P<$lcmX{kZSaemurzIOC^^*MpmLI zlo??oDqGv&*p{S!M;m{g5m(P-=~xOjXh|m_AfPb78%oQgT8umYWa7O!`A5GJ>QqxJ88Nw}3DHQy$ z%{;RMQNI&u#d{q>V)d@t!jpjDiMFMHAg=&pVB;+nCyX_0jCqTC$dK-upr0CJa68x= zW6nkap|=K58d$kC^d89p2HlS?kV7>HtQZXwLDY?f$pshJEK<^(AM-UnDPy-Z$*Oqg zaC?Z@=D(!w;7mmZN{^UKvJx%DKC2%oHpEPXBfV@Nm;Oj35eLUhDYMqV4kg?(@3vU~ zr&zgk#1}*WpBqUv@6CFe)IAnlO>sGkPV0xmS>jH(F92J)>88SZOp=GXjS@v1_Ckji z5FokN>>A)^ie$XE7#f0-R?Lw$_wS*nuw9)gO)=xLa0r*17$?E|iYjH+)@_mnrbnR4 z)@)8WD6iI|t-f7dtl$42@9BSHFCt_u|KgX)ye`8j9NWNO01p;%M8dtDSG~{7ehtQO z2jWTFrh;uvDN#ZgJd9<+y-G4MZCR^v!TQ-<5^9yfWX;8>g(WHBzJu-ot|#FRC*ckj zxJ!U5!|O=`m-lsZ*<8#o13=QMgNkeaT0q2y9&08S+d?R36lik|F-jb&?{Lkzh+{~u zk`I~F*pqD4?qzlwV_Q%|M%EO&s6dvHCD|eKs6c$;k44QM?*q>^q8ZaGJGL^68zL;x zTrsz*0$GnV;GQ1zikgo$DdFrAPg&_6RRVHfZ;SY55T`1OWzguYN@3e(2jb(86s+PKo_XBY`{vhsS9xC= z!yJ6~ES|zB%1*AAB*m#(E^E?~|6wqOG={9X2b#=fLv4*;PiGcVpJlORt z%aviiL`O11wRJM8M&F_nPoI)xZ^=C!hLO2C76bD0d9`ljMmckO*|80$7n6RCdfm^>PETE4D(L^zITqr>&m2I!i`>VtmuJvC;T`?h z0?X=X;WcFL4whY303VfxR=J__*T4Yw9NPq2;BQ)O{zmNAxGta|avTdQ%oILZKM0lY zUVNe^w)E?rjm_&A7`cuRvHavFD{5RLiLht0LOtlTo%*e_>vxY;zXy8iciaCj>URKX zy6!)o(trA4^&hYQU-us~te1T&(u^9}gy5c2=7;H!`++R}yH-yDZVKRJJ!pxeFa+xs zW?am_L|TE!C;#AIp-`{ftq)b;=|rT>48|8WhdD_$uga$f8KSuR6`4kI>iTh=W;pb@ z5p-X?1O4q&ThO!M@KvDl8>|9<|D8OXG5_6xIQ4=rWl6xJHrhs(IG!7B4LKJyQK&+8P+zBhgOv>+5azjOCrV0!_sm*bv9hFClM8r3iQdt@pOP)Ukh-#0KCrvm;pd%5+GTVhVB1Ln}M?gWB`y@x_JUPIcb=v z`7}|0h=)qlxf}HSp{p3^vyjBVZ%F(A?ETm!HyofzIPM8p<_rNWEYTB#u~9Gn+(Mz% z>UA+`3pKnKKHt7i{&Fr1mkO5z#=auX*x30b*D7fG;eKv#Bm|!&TI*|0lf92zGAu0J zgyd*&2~!e)=H~i1baUPIsLtQ2s>pwKBN}w)1X`wQHa-+v%4o!EWlF-|jU<8aciO*7 z-6kPm>HJ;7z2hgE`E23AE=PD+>6iu9EYU3O@|CjH;#J7c3-^k+rg!&@mG0>leG1Wl z>`l@JOFiQ5wsrCll6K;9Ixi?fPMe^8C1lY$#QYCQ+F+@>nl;AK*_lrh(~MC>fhB*} zE^0WF8m>-hOY}mknyk0^2W*L2p1u!&mn5 z&pDwV|D62~Z!@Kd->*6fOy8qX9u}N@<~`Z>AGair{9ux`nc26SRT-Fw17I z{=P)a{g{MUIwMKrpilaHcCY?EtDpX6q8;uZ@lxq)H-#OkuOIKfuU)s4Qg**H{MHls zl5p2>(8Sj6d-70=muUtvsm~}pKgY*O(_Yt@r!0T}ren})Hh20edPNKBhN9bh^4J*2e$7}w?fWPz2^S) zXAYq>c6P$oy*V>nk(wX>>md_OhV5$SD6tt#gva)sg3~!EQ@eg5gcA7(=Z`?MMZ;A=k9u{eVlhRn@UAvgV8A%}`m!+o$Mc#G*elTd33zD%HLeRyQ zaHsm!_dxQgv7)7&gSF^rn=&DhRtwwIbzBWi8{DI*7ENwb=Q3{T;WKqumVR_FeUe&k z|Kfcfc2JtGa&c+jW8AfA^zKOFf~R9Lo{3X5Rc(;tCuv?)MuZEGq|g5P1{JYl23axh z?n*5IV!as=@;Fz-eL+x5u>kD6#_9j)@N|OtsNZ~=-ui;M~ z5F#C-#*BaJ(44*i8?Y0?l4Y$mU|O+|FoVaD8i_GDM+V0mDq6)_$w7N+aSun;lJVa9 z5^(3;Znw_gC5;olXI>Y$)-`U63ZTy=eNdxDf{_4B`hVdNvJ3D|0nb}J|69)iky1)6 z*<{?Y8C;TgiiOQbo$G`bq)fMtkLQmRbetAX@04CngVH9tp<78pg*bS+me?y!juZ*5w-5?*PVya%1qd*2XkniwLuC@Bu;NISe;>gF{;%xHCt?4Gt^$6gf$j73rbkI`wHMi}{04QKuEE_6 zILqupt2cg6g2ncFkmivAbqSOl)AsuEn!5k6_6DbzqT_1>0a~71zkLlIy?Kh0nVaUZ zRU}B3ew(FVVGExSfH;1NuvTwug{*NvA3tM75iu>;M+iyU?~?mVaDGrb@yv|Kel`-p z*!2Y>n@etXGa0uMS!)obemfEfxy1l zf@7b|XN$`>JrVnWZ~;Q{Pa(g(0-`k}Ya2g?UB8x!((&Jl?3d*ZkM7LN67}k0J%zLh zo+!m5?D2Bs>2=*A?3(WdIy}Q~?#FjFVw-NA2WP)7h{R6xwnOFnIS7Mibte!stMB|s z%ODpJ9jPXZ>y{3(BZ_MG35XWXLzwGw#BGCsnvhID1hP@9a{pAIeD*^PWn7lIncQO1tbTtToteTy!6&X(vaTM# zP;RdoXWd|_?^6Papz>dB4HzYr91#!*Mj%(#ECjA097(l*79kTgxTY+xa1z|2+Wd4ps%u_%k^gSJkVAc+j$)H`1KA^BI!UJ0(|m?W_t#`@blV?+K%U( zvgz2w0T=1b5dX6Z#eM>`ZDQR(2D5Q7$0J+uyN>+S8|E&nTF@TBT>h93Cg{(z7?9UiB$h=B`q1xj6-XC`pu|V$ z!Ejn(={*S9kR!KVL$+ix`q3-sK@0sW)i3enB4_)fWfAI!9sgnrtv;1jzi_YM@uzGl z)Ksb~N4k2t`0wWR5%7QQK*3k=|88o%jz~27{cXv}bwutVQW4pejNG%?e*jvjjX2lQ zqaHO8ZbW=eybz_d&N+I!A$Qr=Z<6?MuFw3E629!j`7F7_)Ki#0q)hIu59?8SorhWy zmB!?s_XzLb*YECT-ibQ?QKBv->V;bp@^aL32m2yLn38N~5{*p|&xH|`M z3HNkP(Sv3?A0mDtKYB>RDnRa{uDC^t>SK0#iJ;2I`imv>S*ON*PMLRUQjiTWRHtgF z{z|F7_1cOLCw;L*eEB-QXd7F3)7yfaaot?jgQ`NMwG9GWc@LUryfT71_bvX}R*K(< zcw5swT?`p?P4bVH@q9>sOE<%%Ylh30+wELEOtL29jrTQJZaTP1f=Nvdi`g2SFDT}8=#44mzRrZH*b)f-?+uO zjIb;T_m|6IAfCyT2`=P4|_ihrJ2hf>A4V2t)XgdF&iC*1d z$ObF!UP^_yPyWX;m`X;u;aNSk-B(*RJx^-73gNcZqhBP#9*tr`8$hxA>!j7k(UKSH zWg!2hsWK>-{QjzZpGJN)L6ZshsRCDbO&*0xzaSZN7g(k3LX@D6PnFge&Xatx%864B zyH~m1@Vq%aK|vc|`bU))u?HcIc_0v-Sdc!u2T)T4_SQ}GF?Z;)uI8E zv?Wg$$nQxb^ZiTs?*-Y^;9(41Uor^5w!_wqb!hV5W5MjhB_$Wj^zE|e8^BzqVQxIiS~EXy zNnbO2IGJATYC0!#q~@Qb!TtcS{V_D1NV9~33e8Rt(-Su`qPa+vUT6S|=%kgplX?|h z^9@?`&{FB8uA$&1WGz%B+k}mTgjH@7DpR*f7~u571)F8o`vWnAlKXovVV^)t9i!bg zm#p0dd}360u$xrZhcV$Vn~-$|*QwU;0T)@mp+>9zByU@U^}!+FIT8=!Rty^=s&w1u zG6z|Mu!Tp+g!-p@L({l}DxA$-1eR^c=M zc3b|N#IP8RWEpCHG{K@Baj5k}upVb5GH!GHMLsu1-ZsqqXL;rRY1)BT#R(4*(grpO z_sv9U<(mh2(U24F?a{lY!FMvVKR9DC*Y{XV7(m~h`;4(s_HF0JK~rhJFD}fAY)YJD_i7r zHHadq&zzQnK7?hGpixU5t5K%zNN&GBl>;%j}YvWprg*18&=Ck-Ay2b&wCZ=cuHKET}N zOEeB{BPkXfk+%3P8O4djq{KiV-TG6~&iBQJ`pm|T-)Pu_viF6=5)@<&a z(mSC}6v1CieX~2oLCOY$6&ty@@OiQf*bttb$J&ct4ksccv z77tqCT?xl9)V9Tf>x3JR6DD(;T9L;9#vPB3AQ)}N^TeKr(i(IkYCxjI&e)PY#qc%C z4L^~A>ex!OZ;p?C?p%JXQH|I2yjlQ^6?pNyR&}lb6lsx`Mp=2OX_u?X@r#1Y4D4TT zkn+D6Zk4~E0}ZmD-m82oFSRZt za9eTQaTAn`3k;pSUZYL$lPUMY>K4bVjs0 z?8fN4CG^5(8BGho2jIU3P=Wea5(>jBV9@B6s+^P#ri4p~`qV+_&f#^q&dU6yo?rjI z4hxb1`l&;)1?K5=F#XhFR1!q5e&{?!H^4~G?75=3PyIU}1c%rEPgdTU{pIb`hmRxy z^i%%@7MT2WFsb_Yfm8Kw;CL)JZ<0jZ3h5ygIN+EeOO8ivED?Vti}l^o zy7#CrtR!nvNuHD>z0+JFoBOys?~^2$I}T5?-%3-NO7s20(~L-HICrMfoNuMEXf1x( ztVwO7`y^>s^qNAdenx=z=rtZDAtvvj=~pd2r_i32Gr05pn&OPjz7oW{Ew$%mL=d8U zCEoc|Wsv-_DaC9J!meO^D%rS;q*eWWI`JqBl}e9^Uad_MlK$arn(smSr3HbxqW5#Y z@WKwY`yefdp2~J35gtcr_)QEuSto1Db-{0m??d(K1yb+;yWA<1t6dxZP?sy^q4@(r zD@~T0l+dNowYcNFFe@1PS>)cU?WMVugQiF&rt3;n7t2IEuvp5<_I9^qhVwU+(j`Iw zvmnX6TbIJ`^`gnCI#{knN?j_IMBB*SiW@>BhID;4tDa+ngfzi|<9VI{9ffFgHs2Q% zVngrI1La-yu}C@$r}`rs@YRNS!p|h1D5Km)A;<*f1Xp$;qHD=(%M{Ofx`wnQe#Q+_ z_41d(VhTg6mK~6;l~$QwrG_%mBBRMl9-Sr?wgz)ZP}X!kmcv6*0Jy)+FuklOW3H2A zC%g}n#+ld&PxAEYZEIQ@2WeKzbSP0jqTY5tfej0L78+S1G(OlUY3{XTIwh)EI^Vpp zu(OOa(gGu~la2KOX#oz}87pr=!u>m>>_Pl@(X||EI4u_kW+rF#+<(9~kSDTHE?H6a zI5xFv@}35py0_HAMSG3o6#d}1m+8*>fMjlj#+TjAo2#M;L^rUZRz8`)Ir`IHt8{?374kY&plG|E(Y`VT`?|MNk_2dA7 z+o~~V91TQyc-3w-QR@;|2Q?O+)lT}!Fg^5pMOcwvP2SCpn~2I(*$zO&PFO&|!mwod zxxG7a4u=d!>clC0OI9#BdF*y1hv|61rg(lP#i;v)>_kU>cC=JUkNXmhYqGd@EFCH2 zF13EKxWtSad*B~iD4$y;JB&pE zR`Yu76Yih!!M@^so0=y*peL8qS!iF9mod!CN;{9KFsD$7SH~e_nF2OlqJfT}$jIMu z;anm`;){OxhC&&ULIDQ$^R?56UJDg8FJw}uC;3-SuOy`;=^=XH$AjQUnKR5Dw2?-; zZ%%`>3S9k z`=-*K^`% zdW&kmkxnF8+!+nKMP@Uy&C!{kw{ z`aJ<^4;|+AaYi!Niiu&PnB>~h@dh@98!ouv8o!!Dx#T+L^Td3`>ia;6WvhrhrsSwu zJmsDTqX628>g%12x`kW9UNxRisA}ROqr!X@gSE2d!vp5aY!D1Cxs0|CbUhP1F3kKF|+ZW|LH)QUbFUrN?qt`K*jAq-?;L4$zrSF^( zom*ru6=e%8i;x~QpXtkC_VTGD!y491nm;jI#*CQ;Gt z91(9=!*-MK8Fu`ObFJ?m>Zj}jqLZq`xGp?8;VvK%yWJUtnS+x-3b>kx#hS9i->~Io)*Xz9TGcINC~uC>&b%p$<$%8RatQ&J z(Q}JR8FMy6(%XnX>n%4p=1aQI3D(kB85>W+-9USUWK_utxj;Atys+9bF;OF~^GpSX`16 zlFse*Hy>m4dTK}7^89b2O-%*!_ctXHk<4bJX-h%JleyAQ9iI-8M~b%Z?ZhkK zHWi+%5$R}oKb?1(=liVUFh5L$2dL*h6SIls1Naq^r=9~2iB8f2j}j@F>DlQJCFfz| z8oLbF6Zsx09r-6G(L(&N>fcYfk{2uAftwwqXTfy~DdBLQ9fGaeF@C&6Fx*zB0cZ>FvQG0bgPAb%%Y22AnZdERVx55;VPm0@ zjqR-uJ@>p?uD#l7#D*0G%6Eke&1rc-%+&|s(K)**Sl+mZMP_4h=UY$$_T{>lqCYOm zST1ja=+^-}vvfBX+W5C>uNpx$$GuFy46c72|CqPAe}+WB8qp*_qD{M3?G5K}xlW#X zna%a8ZL0ZLeZf-_(`+6&I_bM)hgR-IE^wKbVF7J+)4M^U)np>1EVwCHDIDZje2;}E z!f5Q@Goo?-oTUt z9>XK}%_RRy-d{LZG{V&gs;5)L3e`G5aIUvljTTu#JpW1_>SF4s-a!^b#(T*K=3Jzn z1d#f>gPH*{})#%4yG)0}@+sp~?+1=iioL8yK ziCneE%)iTpAm$(ccI3ws?c%?O_;o152k#llBH^?mWmEMeWU6Yl%I z3#{L!rG+ZffmT{ryus=U3Q`_^IOtZB^|Mfo=c#u%yG^HB)}e>>SM($uK8wu^lG3e{ z1P7nUR3}m!5 zyF9NmR9%^~e@`%bmr>msJY`p)x_O#83@&*}fp9x;z1 ze)k^Dd-z8*a+`NWc4I}ul$`KTecH)x9L?UBlwPkjZ_GjmK+&|qe}y3^?Yp|!?v}Lm zC;CA_5JDCdTn&xWz6ZF!ybb>yyXOVX<44I>TMXikneVH6C!;GA|7AuOmosh7me@#F z&?GPALGm^g0A6sOmRbI2F0uSz7mRBhx5f1UymkdVS=}e!`_a6BudeGy;du*L$SX{g zICZ;R5BLYS#r$2qx{s&M`%xrz)o1>}yJDdO=E2ykFC$kN(fq%DDH86k^Aawj#qm6W zj9Of`HF7O|xOh_4fUJ!0Nt0^iahzlA!7mfh1D>VmyvhX9Q^@t(rp3c5OvjDf=Ie{L zW>&-;HN18XB<@;XFkDL#eM81T@O$z^AjpWeW?)Dacy`vcky6= zWC3I>d6A#qG<+S1mJv5Tm&U$E9&%X8*A?-hqP**-qphCUo&FK|#NWR_vd+>9nzkQm zalA%QYTV*@g*TbNtZ+@dx;E?^wiuPP_K#W|PxpL!h}YN&k6Q^wxT2geAi8j6wi!+D zc#Oeqm?wG2db}&zEwD_#=j7(^G`kuUA=42i-;?dpR%eUj8eX%Bj5+4;=Id_qgs+OW zdRiO?L8ciW&gX4CsoJRanY>q=vW5D5MFl+)D&G=0TNkkLI~&pPMxUP8XugYIFX>*7 zosh{ZsXzG~vNVtc9lW?U{Nvcgd4_947gNIVDltBK_~^ycQlPv(bE}WFs;Q%3R3alM z13`bx@y9`|k#$>&=`CabF5{H^Uy&1z^DZ6?2zS3l-+qDctroy{+>0S!=;F9Gv>&}V zm&b%3@P$esw1A-N*#aJ;XD5oD_F9MB1Z~dF%cbKu8+f0Wg!`4tB-pwkHz%V}=GGN3 z$&Hf4-eZ=oXI&=U?}&p=57Y-fFX06(|M%2cJ<3P%9)l*bk3$BV>Bu`P}lc(c%Ci~Y8a6)eN}L8Gh_O_H-ECsWX;C*I5- zb5K_^$CHd?+m$~v8A--9Y^GHLQn{Lzm5N+k-w*6%xlg#WbwB*~0f3Ivj&#^QS3#^2 z?zg2&Xlt3pn#+b3PMfb{Lr1riXti!pC6`?;>kFj9!@cHYOSD82SvNgFabEEV36<(N z8tU=6MEQTF&oOiw$hh>rBFyIV@tW8bh+>iG!l zLox^3mnsgaD&0&Uo-<{*6YleYY3`v5K^p)Hc8IP!FGj-clL9Hpn{c1YD-2D(ct3N- zjcnD#sLG*n8$HFLv2@r~%^g!G=)RV9QEKeDl#eoy>n(2C8Tpn`ZA>(>TW$W>)59OT zqwDLb(vT&2(e(#-kpZ%qTYYaM=mhg1Tgcx7)#iz8Sx_HG@>bp)2^-OQatswhCUuLn()1S?kYfBl5JFmTmb|xLqTl18LMvP; z-~5GoRGZp8#yH-`(cR;kjP;-te?U5gz_^~GV6B^&z0dzk3K6FP``ZZqQ-XLPxT<+w zh8GN`KjQf}$V5+!`Yxqz-@Z1JvyZqVLY&20Zkx%7MV&?JAC$ujI-4T%lljmFG_g;Y z^k{&}bDn<6ys-K>e!>r)qsaKAxjZ_L5-~FaI{<%sf+W#qCoYE;b?6QTF5Ro=R5I^* zR^HM+c~>4GuP_(zH^G?U3C6q-atv`}hVx?Zss`E-t!ic9jCQ^$bthbxNZw|f+|MZj z=Wzf9!RZw$Dh~a;RH#PNf_{0XidA?TnStWhaXw*_ChUIq5V~i|ve)u;H|KSS*1MX+FEn+m%CMLat{fboaH7k61MQmDuzid$02vi?sWdHRDr5IzmeC47qeY@ZHBa{?0zN-{>|z!( zxUJw=m_Hom2EbodFpuzi#lq`x{th-VCd_M?Sjc>?ro-WUI9c-MvD(lqUv!Htz~4Vg zqo+Qv6?yQkKrB--hKKk}gACkYl$RNZ<>HV-!#x5oTP1qeRO55km>LG8LxLsaUI#0o zjFo#_#k!I^xelymk00)@Tb;`qRbjfuy^P$)RlgAw2%1x!!MOV?ZiD2~vqIQJn5PjO z?R$7xaa6+=^ELAmSH)fdssS?C&IHN>dbo$$!#&g*?nc_na0g>kow2EflJXm*JN_G{ z^Y~0OiW_q*=taKrUARdVqOh3;3i}O~dtr!S#&@b&&~I@ZU!oQK4f92G{4q0JjH=p= zqRo5$=kRSA@GhguEi$6(O$(cSXo6!d(&auB-*J$a#rkzSgd`f;Fz8G5KP| z>LiAON=Hh_{}ZU^g*@*!s{M0nP%oL#vm;xf`r9$hD=*{xussi^l|Ff z7(T~9fWlA=HL_ZbMhjN5MFW0}ndXUWcQj1LB(At$E#sE_)9rs(SXqk?oyc*tx_6A#H?$M35$-@3 z&`OJydqGf0ChrN|Sp^*Mg3i$n%A_5$shyWy&Vdkn(MAh%nbao>PSgAB)elXRp#Y=1 zvz-wKMMfMi$ezMdXP`4VY?b{QWtOa$0Twi1PtNqh}DW?Iqnx9l+ZGWxf*E{f+74c+KgQki;aB0U5g62+q{h1$`729&eJK-(sB(7qcQv%V)2t;q%#yu_dYpmD2 z%tNc>c+}sizUqFyKRMJrbk^ zgNbI-n(5O!d?ULNm}XvcAbY#obF!?I7%BKOi5K%t^CfdwbHJSH4P?I}qXXwKl~H40 z6Yi4(!2c^*5-sKBu3Jt6w>thp;i$L%nMc69&J!5>LC5{PS6~;Cy=8K$wK3u(B+XsC zf{yZp&l4WBF+3hiJ35ALG0N4Vk&=d&#m7kMf-?RigXJ}k*Szq+#719v+oJ8|M@K|C zGtnr$+DQKB#O91}ftiB}vWkop_>s|_$D+kWTYa&q2KQ5M%X=a-l)cH9XyZ0%GuwxI z-CJhS1l=n_f4y*sww`Z~3+$`#-44w{yFe@na&ZBf%c{M~`JKFi$RH{JCVeulv3W!z zLe9hSRj?FeA&2KHhJf=whib$HgN3jfpO2b%O#A598%E8i(&`i5Ha#;4V( zTPViNAIvwKVqv}0rsi15pzX~qQaNawGykoBFw8HjiBb{-?DLnAljG9= z!1)qpQ4N)5+WdHKmFK=v3T}QzUmCH^r@f^D?%poqlNOLRj;H3bWwfq(;|)JymuW z(=&Uck&Sc4J&VRldh{!fP=L>z!M-)I)nDGc=s~8LtKzTb#?CDBMd{Z9y@~C;gH6Xd zYwb%CzLJpnF>U6=BxrVwOZdu`Im50{^)jbAAJd#beAvLw0Vp6a{pdRm zRipU~tv0Grj>&HAMD1>;xAX?wxZ*NAqwL1KNN(AUIj(p>hjMPpHK*hm*?{Wmo|01= zKHJwlpdfrYE8FV_84Ly%3bYKg=hanTLMEf3+f_eWUeKO2TRW@B=L~ZLV5pdR=c?!Y z)k-6}pGIs*=Xrq43{MM~cmL|whvHTz3Q?Kr zTQ#64r+d$cE&KN-nmD#W1ZuXxwl~TEv!H7yj~Fb1)Fqa&O0)XaNf3j(<>$ZT=MMRa z@v~Y*<+m5zN#lRyaLoL8-0Qxw**VK;-Y1;{eP#_~b+&5dM3HOg!V@_Hh+GTLL&K&Q ztAEiMcpNXAQ^*_}FD0yW&5U?~s4rT}2bkbhw-+6d zH}kJ65k&)Eu2M9FrhA3+A%Ge2Lg9#5Th(nJ3Do1ItWA-Lhbc0eZ#QD*i z4Y9X5R(&6>(&(~fhfv6cMK*6Xq90{-j#L-h(cxjr;MH8VOnG^>c=Z|q$#&g-De0Ls z@X2wfINog^BzgHHoupG$BjaeX$Lk0lC;Hs9vLrk{^hyFeetU zSls*_HH6rpIfav}b~%HqF{+)x?6+w%?Di{a`~ZEra+VS0Q;sjOlT0f(&!##g@u;dH z;9p{su3ts@+@gi9hHIE1oikT8$Rw0IKRF&-##~=1F51m)tH29hD-o=%k!o=WBz?`B z7iM^+M6tp5w~GCt7L6f2W4EO4XTIQOyEeq0AI_t7`=Nv_WipU`YhmcB+k4AGL&!p5 zL6btJuS=JdeH}3!=4lIn=SegP>4IJK33ZEyR;r1h65V#NQ67ZDOv>%*mm}bM z)d#Xp#F)G9@)C?OWurQNAB%+W#C>Ss!lG6PV5#7*>1ceNhbDlrEnRH3NuVCrK}3`L7~|d=JSt8s_3$UjPT`hI`{jDl4*~+NNQF# zyC7UqcdnLEOsqRs%PhugRMp}fK(f`4D|Aa)*`yr&1I=aEtI?*CBPHfc0}2yVNKgmg z7?6cLnA7NTM&Q;wzUT~0cakt=K{r2qu=s!bYM-9!;vug0RIe@fKjMn6r4vm5N}Oty zZatKc8Q)6zRnktG^4`>xul32ChwayMzCtGbYXn4yMX|MZ&DP4K|0gq!$rUY8VNL-;X16HpUTr;6OT8hh&Ojp5^vD-2P?bWDht zCZYVbbamvyZvS>~B+$1jq1>}6a0kyy5J31 z$T3xA+6t6wuRyu!D^LJQpATN4XQBFc$dE(oK(z+5cev`A6d5p*E~9#Bj=F~rFsK8BLEUD4T6!6bxU8?;18c*By8Rgi z7QajSq3VZ{77nO-YL1cJC7k=Gb{yQipSV_|{NwNiWpmJpQr> zSZ;ZE#yQ#b%&?5HTT#1AG$KCy5Z+35hGlEB>irpENB2M{$8o}?^O_kR&TEdm=5Q`n zKLB;ifnm$06g4)7CC;$6o=4EYviH$F@*K+nz3x5~&OXuI=XBL0JCp8ns>M)A>_~#y zn_cy?E3mrnI%L6op!N&J;c_BV;`{+2lQB;U9T&zG94&5~{!+&#bKBi7m98`PY3=E1h7XPL3*FYe>wV zKT%H?Kw6L2EbX6*8c8s&+qZ5EWZAd=RDR29ypgdMFBU$fqAWX707K@&=|kO(RUTxJ z;UN`egTuMq13j*WPZ$~Yb@N^I$MIISl)=)sZ&Y8(q2(mwMNuZ6l{UxA>^WYRKF5V! zc~r7n9KEaIJ`1YHRsRIFqqImhM`|9JbvZiBf)}YUTM;j~Zoktil>-e*{Fhby7Zi6s zY+1C))lKHx$lyf0NcCA&MCrwRRXt70GDa^#A9`K&f8@K(`u>of&R%qF-Ho1;>F6a_ zqeod%R^trMQgN0j;n#v}bE;>+e7zjz$|h@{6GSRlZ*7Lm7RXqs<|(Y5l0MjmqzDlX zpf$z{$VPqVIdB>08suuzm3v9kY+S|IZ~#Dt67sF8*IOx=F}6bFRRwIP^wieZ@sS&` zoQGo(pf83W(KpkfoYHm_^iiJ&c>%GKbbw&(tuLzOU5YD#k6b3zvKUIWXi`Jp`rfiZijuB&M%djivD_H46PVVD^IS%oL`q;AhycMy4Q8qa*?B{eNFOc2F zo~Lmmc*r4M&mz+AZb!O_tA;VNj$K@!9)nTo%!3b z%Y6I~rLaGT*`F^KY>Ydqf-;m4F}sJ7w(YZZJcAT>OwzA(qE?g;M$!Ib?L?bSOYr4x z&AX)s&4czX##3?9?~2-q3Z66<=7Aq?#Y%PrCsp0f|7!m4ZQtW zg*+O=40CCv5qqjgY2b6bC{UEhhXp}%1!y)IdxggLU(g&DQ_}2zzNkb z7<&1EtQZ)}s(1AZ2U)M_HKfwRVOz1D+p6LnS)P;tGlFH;&JGW6sn^Y5!eiQ@(;GE1 zCB58GL!{oZvL{e~VTUBbUUG71a3E_r1}#@^s^MtXRbNO#St*%evcFXuby_%C*~XT1 z-h{G{M;8#FfM}IBLwR|zWgszQnMg{c2cm!0b>T2V*!~@A8mCX%EmSZb@Kl(-LUTrr zncJBkj87+cexZ3ujyWXZey&8A@40f2L>=S=%qm!}X)rjDP^%zv{)YD=XWOS9r{VQB zCsJgdpOOqLJ(f!vidBdL5fl!xir+?Osk>N4x$xej;*3YE97;eEtXaxAADU+tVc!b8yeK{?81Nj(6_`6d90G`E=*j9-)kxZ)>De5=?S zRyt2^0)jK_omdbl2viRWXuj0z48)9*=8BWI_-YTbzzW9_sLl$IS-`-kB9NQRmYs>~ zb$0xm&*U#*mz&h^>eUXd;pH`a=wI!AKYODTDbV zq-OuNpx$Ydc9}sFJ*hpus3$|8Ec(iFBiCS6SeWBmC+tMzcm(Jk-`GYu9xpJ^gb9@S ziX#JBum)qONj*-dj-2i@1Eg!^X62=xK=g(ZYyj0PC{c^oD@paLWaZM5R(K=vpO8B1 z@R)6L0*v?FpeXKRB z{lZl3(USMKjo9r)wNyeTca>PL8fx?31f`)iwy*KYY!hL?;!6zKJudS_&&@!pcPHw- zQ7zSrvd8q9=UP&|<#seuy+yo=RPXyd?Wv%y<~;!_L^nHy-K#-~Hg>0G0lXhz zUF^gjznb+d`xpy9ME>{Op@b*`T1x{gL@$9KEo;=Ruz+XJ8uVDF2 zTwr|bnY_wDHp~N1)f@DZ$Z834s^uzJ%qskpmg>5SsT->#ighWF+z4O=Q) z{#F@luh!P91yFoymM=CS?!)3DbICD*>Mch05Z^k%WRa8I?S!S6ApA}h7Ucl?TOP<9 z83eShpqW$9>74JA*X)gU&h?U0W#-Zxkt?ZRzJb(i1ie%t>_5_E@F-~hu1Jcm5PIBk z51Uuzh0xlH854NbiW#?S;xBvJpKV55fm`P;GC@!Uzti@%&B{%2tCMG(s8b4pd90P% z-k%vFwCT`?G;*?x+x~IgWoNtYki&2F?(4Fwv;|CmNwB&qFA&|76U=@`ZSRRTstrVo z;|KX0x^JFoRBtxoIkhrTW~+xu#C?J=o(BTeIYmbH0adH>fnIVBQyoHcG-tK=;K*)O z%h?DpkB9gYJERoAt$4mO+xKi{VsknAgSTHVO$SRVeXBUITqvC$W;Qa-Q|)b5qZt!n zN&41JQk)Z?cdL!BG>YR$Pm0 z%P(ch_94!VmNF;OgjiPe?d&E6>Y+0mn>H+of6;^45e!GN&?6EtZ;S-f3ZZblBMkGX zBdi|DV}JlIrec$iC+9})EH)DD^cPCDoUt;{ezPfnE>h5ZBM`fyFciDM12HJ*eYWF~ z_1Am$hxoG$#HKjMacRffei$Xu(5#`Mhsw%sp5iyF3w-5YVs&VCd7sYom46lCy5a*k zDfHHV7=E^;opK&CHD_spVVHA0J*;PY_ERyNhS^u5kA zd|3NiZh$?3vP$QYsX4Tgi^LYQ**m?ikdaD*`RP9R;Sid+!^} z$#IRyLw?EsR&Bbj!VqAPaA?Bu4xjNR_C@BR-TDL`xuA6dFUzH^Q)ZsZ00(bM z@@+OSoSuwDMv%z=6|vYYzopORbw!PGAZv@{7b(BYsm zIxAJ_^(SGLU7-mfGA9Ua?y&;e2%ul-iDTI;H9fFnttv(bm>l5p^p>%bi98uFB1-=M~ALfM%xh*lh8G)$Z zw||W!6CKLIf%3n(8k$Jb`Gb)8=lxxGWBUFw2T;k|C~qi|YU0SHF>-UlT|Nqy{J^D= zGb-X!29k{L0U=X6z zGm!Smo-yuzjfe692^hf2OJ+VQ4bU@GwileI1r95|9CiN2g7bjDIVh5a-f*^p$Vr$t zYdAf;A}V)Os+OFbRNxO+pfZ63YPEp-y`Gi388vE#tD>8M)rmF9nZU6~yC&#@v%-JM z5^6ag@N^qRX3u_EToGwM=P=pfOaXEn3um@L|n-lJlHu!xfC&4qOn8|5v zp7d#Q<(0bj)KqX1R{JPXAt` ze=pX*e*Jrn{(W1gJVn2|_3uFaYn9unzgqBj>UYtHWWMO%3HsN9Q)b2MG$-iaOLfc` z{reohJ>9iESnZn#`x?X%1GdJlXT8Jxu4iXs(cf5zp0B7jooH6#uHj|eH5kt9t-RvLqvUC$1hA9FUZHV2UxdoR8Zh)F(g4&Mhzz9ifQ~opf1kpv4J1<$PU7!v=GYzIJW2ND=L0hSt?eguSb?}+VIT|`@q~;)l zO2W3Tbn;2+ORspA9{Z{5x7uUnYa zE(z#**R9PUK62nd^zD%W+ztiCZV8OtC0g{!1P_qF2IsnMl096h@dD%^{x9Hd@aI+U5Dxide1n{OKC&c~7JD{7pMg zqpnG6Yt(I&N1#qw5332$Wx_GU4eI}Pdx%4#rcTFH^S*maHVGQN=1aUQZN7a_2FZ9^ zaeJ=)Mw}-VXTK5WO~u)7#8su@?6>QJgK7m>FjpRg)>t8V5NfnS`mr#x{l!BoGG08e zw0Zt&df@Q>+DCuwlm6N#{k89#^w&PSzxLVvwa@OaegAoX&Fr_omhU^fza-9M^+>9} zB(86NNnEe~TD~v6za-StUlL01FV`Or=q?lL&_f>t6WQu60kP}1YQ(;mHIey}CG%xr zRu>6s!5G)AckpW=whP2ANJnf*u;hA|+`pt}n(MlY3V6BP!_Rj`_L9s03?v&XF5?QA z71xvyKh4X}MOgA(cX^d0tKmbyE9ojFU6rJ(0Z#=scq$L@)OzR|Exr>Rr7CZCSvZ;_ zIJzv==Td!eN~St}WQA5+A$bUfSs{54T5E;mA^2v6yS=xjq%mE#ssiMtQd-IVsNN8kk~?GC6Qi< zLLI3t7>~phxC-)yM*c_?b!uPXDsHk$&IupagAd|lj!H`n0T}5br7O&)nGJKA zrhHHO!`3Gb6Scj?r@!ae$XcIF_5tpTA3ns5e=i4~%e4Q3u0Oqo*2|BYt%WNpjT)Ij z&&iUtMvtQ`S;5$4A6LXKJIGRV*;f@SFH1BN^9g~^CFW3bpZ?Dz^JY^Y-fWt~n@wp}RA`dSLud;R zO;jqQt`Je5QC>0B842>reO(Zw$Ru71<+U(!rV(xO z2+4T~k~7jSB>c-{eth~gIpy;|`8=>QD#6sh$+b7GR>QT0o7l1Gq4ZR94Rci`bEM(^33@b^#*!B`igE zv~{!BNrekL8heF{JJ$9Jmv*e_6*f9n_X^MMsI|f(w(5BAK&rm8B|H~Vl+-^}U*za) zpcsPu=)96cXmnO8FKJ{~l70yz^%H@9N0FVMu#)hwp0FX|oSyJX34ewV$nLL4B>Y}a zcr`SzBj@j_?+fJnrk?MjzuxgwPq@uMO)71s58 zWpMBCXUVXZV%s>Tcd9ui%*P(X~V*U zw3FwvIcr&MtRt`fOB*yBpE{lzk}BUrnvU=h%3saL|9$ySzIep)d$sTI8Yb&kKO$8> z-G9S+!iLm$ZckX(|94NM`rj+x@9YULlW=`cxJ1HXJDi3eeek_hRgxyH>twi7^Lu;} zUa$6;vzY3k8g>4+gr;k6LR>ntO#S0b@qC1b&U^5Il=6*d!_)11Z>?Q_GdceYI@*X! ztDh$|A3cJ<#cD0z`_}JB>Eq1b+J4g0-!jA`j+~zFHB#PZ$Z_oU*GhQ&@YHyhO8AxJcXO206t?t4J$f;EnGI>+*;FG1VTge4iUj z)knT-dY&Qht^Oul+|fmzp0Lr;ZiP#vyu$l9XrINp!Q>marLNSGk$* z6Vu#`79u@L1{aDQ7aqKFsXD16~u~q3(DqT{$e0D~7A=N68YQ;i) z^B32ZY71vN#$Sv(=9~yeT*NN(XbsWh?7&H)E{gvG{Y6w7BSq@B%siPjwBN%QfX;TR zJ0voOQq`HAbYP3$L#@QBg=!V+T1ln6R7%YyWl|xCI`VRq)ir2mMpKyE)TVb{1OQy%fqQzK}N^HI-6^HqfYr z%p@~Oh9)!P%p^?_*MNXUaW^7p*$3TeEp6yanq|?gh#Fn-sVlg#qE;5&sK`@Sz=(i# zMSQ;B^D=X1niO`|XFt#L|L>X4?|#qkoZopr=XcLJbMHNi^3(gi^h15Je1l}(cKH_T z^qMp2^{VtD+4R1EKWB5x=S)xhyV867fGXcB@5z+!tEzke*>L!tUN*gtPyXc~^xt!z zQu$g#6`;5AZ8?|M!`0zA*^Xs&R|P z6&e?5yj!CwLEw)nTvTJP#!qQHtnup_f1vRNjsK?6`=*L#k;bbuZr1)G&EKl=K8^b| zKCW?COB8!}~R^(zsM(g+@!` z%a+Q|DUDyznAUiw#<<2CHLlfoxBR@Q5PLNq);Of`CmLVY_@>5E9llDVX}99Mb{y5^ zGydH|<#)eE`@pVIQr<;C-+ z_BZkF*XiD?Uh4Q@ubE} zb-nD@yvgrLo!@6Q&e3xBYq{sO`|BDlonDE?DvcX8HfuETcW8c#&fiBh->vytot}}u zU;BSS<6(`)KfOiBDO?7xcS(LI4~@Los{9R~_9}kZtK#uaRp`?wG>&S2+^l8%UX67c z;~LW%P5cIjr>J!Lbb5i3+dG{a1cV;&=S6+?n~f`~e4d zim&py(OJy$q>Z=?`ElWdL!bacAooHb>p~#kLJadV$_t7O5nfOcF#H0H&C5_ZF2lUo zc(q*kD|o5ICBTb43zrdIytB#j;=2Hs0583~j7s)G*y6kl@iNSdeG%Pw@!GWUV$a28 zXdW&Cf9s3150_r9zlJu^b`370yzp2wfi8frB=IuD%P=pa(sms^{J4ngLHwMp7~;jo zltc8f{?fb*@-ifC1*oRcB3#f;5W!dT1zHd`FD~das5+c1AqH_am>90aCC+M3v)YFj z;^M!AwySt~H!h>Rh-+xOp0=&H^flsA*NV#^FLoQk2Rk}qEx}YI7DW-pk+c8j*x~!fard1ZTmHm2?zP`i^5{G= z->AhL-1Co$A1qLa{w4j<#Uw69y{rRaVIYmECe}d}h}xV~pwSIv-^DssOa>K!@O=dS zHz+W_mqhncZJz>U|L5SKJ4Zzsh;HOLB53EJz-&x#G%#-Vb|QN?(FRd|E(i~BNty$! z2Hg(29K?KH0b+bC6M6Ptrnwcw@a(?KZzsqGq3LA&?7fRXaS-F(4f-hP10crpVGzUp zC5UDD1n3gbVa@+Nkm-B}#CV}$q!I`(aRHF=UI=6xECN!l3dnX_4!jpw17uk*2etuM z0DFN~09iM+z$EZW;2z*gAnW3tz>fe|1MdJ{4QvJ00Yktwz%XzvFa=x(>;|p}b^$j4 zZvk!ub^zZ6+y$%$z8|;=_!q#+nrE45(wc8mtT>^0 zmXYSP=2_HP7)$6W2WZD$O3v^NvHaSM#iE zntsh!DOL<=-n7AK&2#+FjB0+dVuj}pm0yl)8e8-1vo!UZXCI|$)I7&OO(hsOQ zn)hk`R?XLIo@0lmQS;O>G;z(}rdY8@^F^9ZYo0odW=QkYNi@TnhuV;4RP)rU(%h-? z+pAfx=0B);Tk{-qG(OE!m($c~{&vNRM$Jbw->!M;5}IDkL)}TUSM$^rG=rL_4x%}! z`MVS=Ml??yMl-7UyA>-ucd7DxMDrDz=Y4|4r}+hn#j;(=QNVsdH%pnooAM zw1ksM5e$VAK)W^A8R^(U7=aRy^B|Qc zW>@m9k&dt(3MX3ilcqFcPoe#{V>|k@IG(tGtb(T@I zcp}!uYRK_Vgj-Q$SqpjY$*@req9qYS?S;bKk(MyZ7&Uqq*-b^Fax!O|I!lD#-xW!y z75X#oJ?OrmiR&v!z`(t(1?1(1?-NNSGP! zjCGrOiF9;?+kzc-^X^pGPNIO}XbW2aWsjp)r#GHz?$f{Cn0Ucguz($j)zLSwprqEiQnSP}D0ph_BZ#O*?{Y>{l z6^!XR{AK&}vjbcPWIbLwzU zN@Yo^A3+aflwQ(Mm2?K9D%(kp-l&Zl&*Xm$|J-mK73h)~x#aH7=2%ChMGhCcBitSC zV2{PV*5!V_NOFbcS<6* zswBq0quXn);`8?put6o|uv;Y&dsPy#U8TZbs4$=rTUOE?`&Y{UB8Aw+QoOCutI_jM zW0z-%Zc^W}>g6?;uehT2%3yO#DBRlC9=T;_M`tt^e}5vG>gwLrvs+Ka=T4tmI=N)h zq~hXzx8qs?20*5Z}APsdZh61a8Lu zV9QR-el{ru1@~=Ir!-&y`!VJt$?%%wM%?}BkX^@_^^lp@oB6nzSJ&(LX1hkN1G$#s zdVq6y_KgLgNg$fEu1{>u$@(6#Es4Ez72>$EKZ4%S_=n1}%1I!%Mi~b$SYP&zHRibA zLu2FLdS&~sy<#g-mZxG^_uD)@!+B`9rzITE-l}B=efKGOvrewl`~;o-`aJ(e%}><+ z?V301#-2QWkLJy~YHwcn1DZGMzQH{Ip*(&#j~~&z$?qA>oBW*Byy*v?Ppa~o{8xNd z@us!PwZB_C*qS%-S83k#flD=S)}_8Yz9vt;HqU=m9$%No*K6LiPeY!6MUTqA$xmaR z|BgIM5Up*+4_^Jbmhk>?-J<5PKjkLFGN+?MCxo9BOLp8uXa|9kWN`||kv z^Z31a;UCK5(|P=XJib4VKbpr6=JAhd-qhELJpPG1`Jp`i8+rUm&71yuI*&i2dDA~f zHE;ThxL>um*%ztMyz#HnyxC`~)4bWI325HzOZDdYr}O-W^880MKVOe0&jTty{LhD` zO7phluy3t-vu_aByxEuAn-~6s=8gV6sd-cXPiekT$A3Cc{*2~L{z^Wj@@Mo>h2~BD zS83kti`Hu1l&4Yirv7>~zfh;2);#Y`G$-@?M>YQrudy5$~=@YpQ9PPRQ`pdHnJW zA5SG#)F3}tVWkq07QG;9YQjRSBhnVtD?sDRg4xlq+4dD!C3b{UVX+$SS6zj#Vy#mD zHLZrjT+sV&QVFT`r`pt70=ajfgD$~jl>L-rbIDbU#brSDb3`FlAuPniRlrMuRhOv$ zH*SXgHqasjx($}a@P7wr3FtD=LeNzRvMQt38-dM)r0`~5&_J; zgIw8S-^c{DTRLLNu0)to1lT8nT%n_y#|p3GcLtAOt0}0nkWD`myVD!>AiI^VvOiud ztglES)rFb}MUwFj>=4P#&dy-mlr!9JzeQG5y=UdJb!BI>6v+CYH%oz*SX}PHW{Tyg zG}c>Jh+6`wu0&KeQ(!~A2yAU=*d%iSf7Py;UXja>-5Tuora!9&2^&@fVx7^5%|4Wj zuvY}Km83?9vr(D9eE;{|lp_(qW&~C}p|`5ke7P|zmFZ>c^_-f^)_#thssFrsc1lA& zv>V&57#fjiBo%?ixE0$;*txY$zcBvTrs;{K9Nph3g?KWZ=e)^f=(&TN2QvDard_jUCMdo9(* zx{e@r*R#Gh_Py0D#Oc2#kqGYA0d;2=$xUAd^gO8U=k*%*Xbj?C?}%7}|G1O5?t(oEY!NY$!2i}u z@LzUBG{csV{vBc&+!V>;i?<4&#FGP2#Mh2+Ds(k$J{1_(oigqyt{q~ze0pK5c$FL1 z3L86;YxtOna>;SumjWlBQ5qLsy?eU)@rQR7|v3#kwiRfBr)@R zntomlPb^7yJieslwL6|^QoLW`@O4^F`{ThU>5r$NB;rx0obVC2{`jR(oY`;g_QtgZY(*@3= zhQ6sP`=ZNUuO$;(><{%nB0G|mhsXZ$NyBE@Fh;Pii{S@%}_ zd7Smgx?`4^brxp7DcfROWe-WA<~mW&#;k`uDeE$VTBdIdZM_n8vIdk5O??}eb=iVG zVdU8Jvb|?%CRIFtG^RY`RmLx4X_qO{%0~v^MPtnld1({s7L&Js&kKhY+2Ur2*c4HLtjsd_24)XnJVv})DOAsVq?@M@T0FS z>nQ|z=53)I^?V-B8RItOlH;}mdASz#9ffZzT&NLp%{s&wmTehE37La+pdQ4Rn+Lp^ zB}=OGNM~N0HlESr_`4YCy>(ulIZ$avP?zkLxp~OV!P|>@mF)NRcusMH*a&^WeT;c> z<)~6!gc3%U?(saHY{MvOTIp(|rK8fl zSiA?=g*xF3iS1#_-cDUj4I0BWA^W(}r_`&eS7c*UvTWU~KBwkZX0vR)1bl6jL(RTc zI>zzaA19Zg1*ju9-^z|V&g8NhLdbr7Zkdg~&ZfLxT!;INy4y6NmNtoPsQ0yEGuovI zqu>U(G{L?Vzw1ETba_mDb;|z6J5X-PojOhFzMZljd56l?kYm-ax?dUX!h29w7pnW# zTc@waU>9mCBtx^!vU>L1Hht?fS@ex)(V*1qyJRcwl%w0M3bOME-u-jsIQ9hcVCE9+ zd91hWoPs5z-fRLHvlabD-T68GLm7>2^p=rZD|;trGb|^y3TGtjfBE`P>7`E8i>lLR z+2g5Csn4ieso{3Q?(9)!wy+4H*!zrjZOYTG*s_r(t6>$t2=^P#UsfX>j->3JQTbC7 zQp>UzaR$Vk8$HUI73W7W>BIVBsmAUd)U`&(sTr0tCTbC*k$upf3qeYXcaaX=mP$h^ zcS>`1My*|$GP>)8KN2$El7_#OwC?*A&k1)a=vVgc@9d?%i^&lR#kj40A{Zi+5 zP_onkEz(YngXe(IQk>s1B;!hA?tdjxGpp+!?cReq7gq!-KTF`Ry0k&ll6KNY|j2pok9I(d~;*Na}e0|s79V^@MgsdtX^u7 zdz$=wU5A!sZ#8CY|0rAtXI9F>@53BZ28h4Rw z0j|81S%g+gW;ndxfRxmXmt$w09NSDYC3Tt){>$;Jh0f=_Hi%kiK@Bv6f^c0X+mijA zE?1(a_~T49BW+P%V zt7S93vU4}CY1JG|&DFANZPUJ7pR3vBHuR;HJ2-&$}P>{Yu%xd9Q4O&AIlM z*~nbR$`5zeIG@W6m+fO}PL$;t*=E$dx-+w{=7-Fd!>QXC&X4xx+Fi{uv-d#N=h@Sp zqk&r9xd)J+4tMQ35gT_2s7KAL&ZN_Z)Hr+DsM{ckccXH9H0O%WnPUUSsnX-?VcQ5z zu48{gR*Z%E&JiufVNRamFwK}v^PqXU3t=N8&chf@Y@j!HSCT&iShGA>31PF z%;i>S^xT}(i)-Ld*LBD_XS*Au25JJg4fd@_iDm~l&ImZK+=19~XZs=CIXK@iYt5t% zh5g4IN%jKgoR;w_!+bCYPJS~+h2gar@;P4pzYDc|9cJ*VzF8t?$yt&O2%B4a)h}Zh zwMzeF?@C6?4%oZ*|) z*eh<8b-}%~tUGHayJn)(Cg^xW}{`I)D6Cer`G5PX3*(`R6Rb z+s|dT#y6sl)J|+}?Qrxd9r@O^YWfrVOEeYg=vWHUNo-AZ@c)Hyf{#?gP0d%X$YenA zwde5W|9j=1@gB2(FsHm1aJ3V~%!#ve&b7F2$a_CmZXADH{ivC5_FnQ<_qPoQXVyOrn?*?TyD;_QUGiqxOEDJ+3&mz)DIT{U9VzN%Vja)v>h$`$9q z)MaYzsHD03r2dIeyBPdGB|nvO%fWgzebLNiR7g`MQ({wd3UkYEG%9oM+#NZ0Mzs*B zsU45}-pjd^y3ZLsqUy`!BRBmUWZRj&iMKminR>Pk*cQx9?%e)deb4rGrq?F#2%KMY zyfT;ByG3?i?A&;q{p9VZe7^c-e`rNMSeI<|+`NpH1I}`y_^G`vRp*??n*PZ?!19{? zBvb3^|2e~D_tpNKEzbK6XLDwbqxvH?H~SaciECe$^IRQC{rex&+W-DKG(D1OCXs3f z+F*$swPv>E9K#&_oRM)C?cAA!iObaN7F|M)cQp=_&s*=W{^#~mIWoArwFY$?*Y^mz ztUq;r7 zY0xWV^$(Exw~sT8^>P))|E^7Yn>#M^!ud1%bq|QUfE=Y}=E3{Q*gBMBk~97YkaroT zlU>Q0GL9W9|0PwqqZY^-=Kp-TQGQvyl3$u2@-SZ6)h?$qKVj$~8|y-~tH2#`uB&oL2(F`f)#GFs2viE?AX_eUH#;?9?vz4E?bV>h4`Ki)aiZXZj?ei0Hk z>0JK%@2}jKVQzmu}`ak#T4c&Ae1NA(BZk!UmhAt~?rndJY>?Q^~sQE8g~_jczK zZ(Ux-q~^r@mpofi&e3y6p|kA&k$%~YJ=c8mpD$1Tx*?^tA;+NF>EUeOtX9nq58IpV z%qN3ra_>{wTrPo5FwZ-waj4?reT(zd+|>ztH+{I%LygK5Y|Nx>`Ar`B(0mYdMNRnf zE2~?oTZ7AMmxpSC%dcGFyJA^QOEBE(YpH3?EHGP^2b*hKTbC`rqS_a(4Ti4t)m#w@ zEx)p6#fs+TEwyU1U&fkynV{J^SFZb?i|h5O_Ym{r^QP4EhqlJ`U5d~A6V;ApT=5^bs8!DsmDLnO62pH{O`#=JsJKT%sNLH=tRt{|Pt>ii0MD|32`WAV28mph3_ckPq~F zgG>Ax^i$CHKu?1H7W5g=J)kboq8nY}BG6P&0qC_GAP;&P^hMCapgXp^#0Nl~peE4u zpmm_jK^KE6K{T)6t8OoY{s8(VXu*4sf6(t>{{`sXuwMbH16=~LL0-^r;rCO}2j1%v zDNrY<71RW}0dx&$4d@EcJKyILHJ~M+MWBm7(?OF!F3|5FGk=Fm%mGaYm4YUK1nBqh ze+Bd_(0|07{DJDPr#1FfseV4<=nn$_L^)%R&$PtwlP-a8(~X-Xea<-i&pPZ3#5j!M zyW_Oiff%pT49~DKX*=cWznLp%!Z6l=!_S62KW)l7Lo*G=hi~ecXfo(@IX&GHCn1Ax z>Sg@%ElhvJ;eQtPvC?N;CKhM87{AjvxqgJH|DWh%pz#cbod`Jmdto0h4~&CxnwD_p zgXuU;4u|?0hCjX)=oHDZGaqLh{+^TP&xb&qW95VCIE|C5LYPLxi*FM;MRM%SN8I7x z_ZInJoMYvK={Sv(>qnRo_~ToMPLUit<2>u|_kL^ae!;j*EY9{|{7&QKhB1}`h!5Xf zbc*EI>C@xz-{Y`TkZ~B}OqcQI8@jMwPdfb0z|J_m|9GxE!=FX`CIx5wgN`^TXICgG z5A064+HvA#YJP`bz+rdBNBjBWbLQHQJPaZpe4~=V&M|c5`{ySe{-dzJRUI%Q#?88; zaps5VIgOLsi@K}(woBj}B~FnXJL7D0`1im*p6+8n#yM7dFde6HayG)8gg?HC;uOiT zGtLo*|5@0_(tnK0#Nw<6#-DHK!uqa#D(e@3{q59u?>O~sJK}Pt#}v{Izd?tca{ao0 z((cUno;gN=UDB>bezV?orP}M1Alyr z#VL|wXFaDK{wHC7tGqA*#ywWQW_nKJd<2R-PmV(}b-lK3^1?My0#TbAazk$t9 zV84Nf#TQ~}`vd%yc?ciu{3fUrZ)|S|b%VYFnzkF?um!ye`ZT`u^99hGpsEjGj|uUL zr7p2?x=S>GJ`WNz;0O9=(Ds=w(E<8q1?m9w(rlM_Vjel%5zxm#p9bv%4S>D`dK&b7 z(2Jnog7|Ub#V_H#^FIo4KR*V6GWd%ywx%IHJZQ*#&4B{(`7ypAZr|h*o3Y5;x^4Zo z(M#Ju)byK4n;-hagSSmCuXzmKV*Sb;!5vNf6yJ_zJCZx_B3h(1*pf=_h&A7`V^<`) zq-RCV(ye%@8?S%vXo)4ld;x6-z9lFTFQ7$3cnKjIHcm_9p=LxY4cELR8sfXwHEd@7 zQGH@5KXkSrB)_V`Rs|ttw(-1 z{8E%($?Og>E)mB)0E2XCBos^q7hFy!>^I21xYXxsX>EfJ0MEJ7(sf%K7BsF~Lm7Xb z8yy?r#(u5k)=@4FH*QX7x6O3xg<4Cet{bAR zNx62dg5sC_f`nYd$TpC}B_TH-1GwMRL*FcI=2ux^e3sZT4SZZjA|3zFU0lU(QCw3b zimQv_E}Vr?RBicOZs_4VRGQMh7W)zO+iLkL7fuv2T{Fa_(TO7yh6>~EK!MNlqmIf@ zzdv+|{RmdI8kTp1+$BRdV!Bq%>rnAMmRM$4uexikiEg3N^@!rFMe(V#CW=|13&pIO z3&bo}g(w{+Aw_ij;W8`-QRxEU(IcwdHq}dqjB%)G$Gmquk}y-nh!k1X%}jaqdWAs7M|bao2@H zJdb4OqD(wIBExGL9wYG!hm4b#_127f^SFiQK6ktzVEN|GC=xSX^@!5vCyK&`QhE5q z-4~%Or*#^z8@>|z9z_Yu*MNHUA^pnALQ#B2(TIu(|FdZKxl`R@D&q7sctzYsWrOyZ z_#AxYEVr1{UL=Z6Sw6Pa2xPV*-l|{1G77Sa*-C+;&x&g63rNq=FW3$xKf<2qbX;bG ztWwslRc)bslZ(XUni4U2>%`Fsfg-=Gzvpo?nU7m2$cDIdOBGB0-Ei~K4QbQg$veYT zRu!W^%o4L+@s6TD3>Oc1;*6hpe+c1kW!@i#PxtA)%t1NlY^@lbF;YHUHsp<~v9Mswu~7Fcx+~JF+62q>AeG0j6%-W~il?l5 z3YbsdBymwqueiw7Epkh##?ze$wjY93ABW|8pmJHxeFZC7+`ejF=US54XRYjAhky5q z4%2bCS~1!yAqCxq1riHtes5V17P#MA^gw}UUU8pip;fZD^uY<<*Gqdqoo?@irC%&4 zn^XG!f|3QL@0nEcM$sm#ei^cq!QZc{!qR|UR zW)D{m&5X|oO!u=+_u$4}^$A=CK&7QaH-jw|m;_g~j>5i_gR#MTJu1@kdCR(>pt!tb zShf-M_*$h$pF&VMe!mZkHOJDrK0cS@9Bo*LHtfX=pdWM^BC`IRe5qTMrl7Z=JMmDN zSO)TF-I&8WyD;y$W5K;5i=X6ikUTDG4s)BBU9tv0NXY26EtB2mu^sz zM=I57-)!6vJpU%j-R(s+SPM=n6qD9Y7%d#(9Rz*-B9FKT{cqYgO3)sYa33iaBR6B} z(S-hvXjqn99_CxLO7?pi+TfXF&%X~y#~4idPBuuB+@}4UIY36MU^9$M-NEl%ILZoDI6|{Tgc1Y z*&Z?bRkxUdvQBP5-P9C|!Db}7jp_VSl!o-349|}1S_vvH4(voTt@QEgtNjZ(8*sae zmch@O+RHWiz9R3SD7PLhT5Y*+F1p!$s`#+mRcvvN<*#(;r4WKhz0}FDS6NQKUN{Br zlJ08$_9*6`C2mo2O3npj-VVUK_HS`{67&O*%3IyaJ}h_Z9C>>he#jg54nA)cw+g@2 zS~S%v{w$imQqOx?Pp?8u=I4);@35pF(xspGXZR290$gm659Ib>#xJZYSP?b1B+~8% z3p*mzRjRBER}cTlR$LlDaSII#|D}_JovIObXt}U!s)g-ZnsYzwg=n)2_rrT&=>w_x zgWvtMWi3Hhs9aKl`{@kaPp9L4S}ra+m6?~wInoe<+=6tfz6Hy3pdx)g<=6A-)Lpgs zTWyVA?uony_Y*Mj&Rp@*I?XsW6uZlB7)C_e-5u@Z0se~gN%%mpE`e{ znE$if`&l`380%!m&(R;lxFkUC;`9f&PGH{pJYTcKL)O9q_m5GxnY;ur;oAc;>E!U# zPc?4gMI`eQqtos9gC37)LLIGLCy-=>w_u4|ra*UKF=m7X2z07K<4T z)5MILGBM-6vQh6y=@3>b%Mu;;U~Y)}5$7VZyjTPF_6hMI*;+K}9eigq zfz(A0LAI8<=n+^>fRG*QZ;7s6?u!;ZX^H!+9^t}TdtxzkpcfT|4zXenF zC}MhqF@3zix;zt8w6{kp@14buWr`a#!+XJVn4XMNeD);g6l z3xsFCd(?`nHEccdGWT+ixI8pfT!JP2+2EpvDe=3;0|guy}q z?Kve!zH%}9t53{<4#??gex=V!e(4fW*`jJXENeie@?NsWTFdbk=pHqd=5n8+i_0w+ zp6M07X4K}0_@?#ULSef?^pKcaP<*DOu&DH|f|B1`r6nb^tVLo~ zNkwTT=2_E2(=b0Q6VsJWl=rmzk+f_t>cr20p)yR}q{VcLCDMkdEgq|SU5qVHyZpkDeTm-e(o< zp5Q*^d8qgj%QLr7RP&yG0p|L+kC;6k#=i$q-p4$B0+!E$oPA})gW{a9_PFm-x>Mdu zywK-UMA?1Wd&yG>ww7`5UhsX!@vvnrEEJWCxK6rIRA4`^WW?;Ss5TeBa*6#6GZB`V zAeHV=HSg3etN1DFks|l&7-*u_s=Neyf}zW?#;L)*a5?UUKH)`wW&Z0CG{L^ZF?Kze zqK{(&qXt!F^&~Mj6hI$t5_4URB6A1R{q9bPKZ^E}_rQ;XDcK`76<~@eu6J9Pc*GpG zrQAcg1^WqsG5hXG1bc;Xd>5AIK}z?;Wn<_&a@lR-M+H{l1otCW5w7S_bwwpsMUlJ@ zU|wPW2)!Jn<`sx6&rR=*#vN<5IQK;7a=q}3TB{XnT_1QBXJLXaeNm0mTpr^T@^U=_ zd9FvC{;I62P}b@(%la7Nyn}W9WmtX(Dl1{f>#OGJn{~3p>E_W-W1C2A8l|hr++MJs z@HO|d*N0x|ss=a?%w#a+^1Z1~z3HGqs z%h2YSKa8;_T>p|DAJ@Zj7sy*W46UFtqeq0)7Hib5*4M0r%!V8?UsG-)b55a`xh(O~ zqJ0IP9mR7z6RnaE=82`Y_i!mP_9XPJV-9};$ppTPi&ZVhZUuBnMMD|-`czTzsM-@? z-+Ue-QlD@S^d&H!)t2~yb!~w-V^yM;6+@>KpDKz|*88%aFIK{0gVcPix2RqWSO-xL zQis+;hb|qnZTt++ws{XMp8~19Jf#%UvLbF*YSZPus;&jQI(}XPxID`L@z7-H7cue* zySdn!^SE`Z`)1E?CKabjpZ7jeR90VpsrN?{%I*NH@mK@MkJJU2Q)17-=mOra>(Pxf z`y05gPuV&tF8PM+Ud+^T?vYOvXT27sG6})INPF@-P{BC=uoNQKKL% zXd=VS!+)|DV-FAfb)_zOAoXpiEFMhlvJeHv-$c2`gnb-cPRd)5|Ap5j&#t~7@;t-( zLez^7WOy0ghqNl8_p#ot#GY3r>ZcO>JeAecM-YW70|uAc&(M1rW$K>`x#yoyTHH0g z5cjdi#dOyRQG`6XCi7l}{g$od!1Dq_bWO*;NDA^HH}*#g5Y7@ztrCAcm%8T2GO-PZ zDZ8*lENq7kPfbPsyvW}a4zQs|mcASSFWfF$#bvZr{z&h7)N{xt>lUMi;C z$K7|#O)a-5m?4U+fJ^eG+?K0ASa4Uah)?dfdohQef;kEH-4oflr0YWL)51;f(GHgn zmBpt9y#C5}U?0DI3hLMvrK7l$4SR-);)MY>^7n>cwfWHvct&8OOFSD^_>J{0@ec5# z;Awsi(t6xqISumz*EE4uOC~1P8#J@{r>oU-3bPQ7&nuAs6mXM{XT}P{*o($Jq7rdbZk;}gUBzM3 zzdw2@o{Lzb#s&{%|0#&bScntHXfx9~VfNm%7f)vnh`s z@#P!F(DxSYvS*xdX}FKoCVXa!###RMt8&w3J+>p=@%jW~I5AGX`0OB!iN6Z=G#fq7 zm~x*PBmWdN{=PB#B>nl!D~(BqNsQ<|Eo$a$#UR4^-pIQB3~qrWo^f-;$7yU8qY4+**sJkV8V_syy2c-9d_m*C zY4oy=VHRn;O5D%U*qE%hc$k^K=qx+G#=FW*BTQVSL*oZX)M!dX&lw{ z+^FN_^F1`pI=o-wDve7uR%o;|zAXQ#6xh#H`TB~+w8lF%#x>rkajnL?(Z)1;H6GSD zr12*jU)K1h#!?-=N~4Sfm*Tv39M$DB{@rp$EU?yB=^FR-*x#oqL0_VIS;y0>-Cx$_ zm7chq)qJD&f4xwJTdMhTjc$!kY5C{!;(1g1n|Sx@bnn&i-Knu#<1HHBt#Pr&GL0|m z_@2{vO5-;)_G`RXW3R4`_iO(zXgsXZ_dDs}iQKdZkQ%Y`fZHVGPhrDAsgy>?b8@oC>_>IUd_;x?SAC%#@ z;89ry-;PI~AhS-NH>wZ3zCS;=GL=tcT^UrzH&U=U9PAFCllBdi-VnvvNwFvoOu8|M zbHZ`9`F8PFG6(B$&{J5Hxv#|uP?5DbTD&2)9Vd{lYY!&G%?!&l)}&DE=B`vYDRc0= zvyRr_A1~K>c?4H};#U-zs2XCK_{C!dxnIr_;+hRxw`|zFyjp#<>|@ro>O}FiF;xEz z+cs=9K7+1p?ct7&4f23?lwe!^hRr6}7p$$}I8LA6(2YW(eh+|e!&&X&gml>^4}ORH zOJaREajuWpMR^ogp2GsUJIG&$GnlUl?`EN|Cod}t4r0yv8`tOkv9~uh1zQrSrbw*0iHE|A+eIt-)vgw#rff;P;UZe);V`YDX;*8K zhd}d-ZLO^xUCDMKCa6=}BC)2HSZ8M}+SJ{;3kSbPQ>{ERR-WkQ@JmLuXH!y4J=ZrA za<9OV5#2a^9p5{~$9Lm6fgA6o?`n}>;uUiRk1L7B&}ZouZRv~)eA&CLlLuI@s6pKC zLS9p`2oV0QbjA~QqDlFSU_7#)V?l;8b!!rYQgNu#Ev70UvuLdfa`*B97P6c2=}DKAL+I^7Tehs--x~_ z&ku^?v~%pa6vF35b=KMqQ8XLM@Iv7Y(RQgYLmSL7Cr}JbRvakAF-7Bgf1|L0C&Ndf z&h?k_uzH0C&`d0`5xO7w!a>SOj9ih1pVYK%;e>Hp?xa#&PUd{_(5Sq z=8UJ)v>W{)enbwDs#BeQNKT&lG+8v^2$!9_1Ute>F-72z!yK1N(TNk>cxu!%j!Gpc ziZFWPEj$=dX$}i~Q%8%Ar-|pmC=aP+=)*n~$MJ2-d8R;mGFF^{fI%ASii-lq(b?S8 z(#122dUW^(5p0GU6_3cVj#F#!TzeA(;}Dy6fm0f@r>r&ML>$n3>I62Na^2LzkV4dnrewIisa1BRrf^SKtfdPiP~z&TguVi6vpF)D!=og3z>0zH=DU^?L;kO#ISWxnaBm&O|})dT{2VCkyjOFwWEI2 zscx$ISZrN0vZ9-D+BlwUG-Xtxx*wqCm@e9)NhXc2B`{@qGhj~I1T!p0o4AK34YkB~ zLqX?jNEMq?{pCxru5ts`vlPk_X>0 zp6^?`KYf#Zs`Z&a{i$oOl4W`{ER!mW$3!Aox;qVJoqWFk$I7fP-V(HH6Ce1bRsO?t z^|aT%_`ynz9%a<>?GSphL zWLfx%D_4ZCY+V-eU7;k^wLaDv=38`*PwG0o|J(lGHSpgx@c-i)z|;5Act5JX6J)Al z>D6m)G|NIv1-iKUuEW}q<4nTALEVXj|As zIF?*OjwcCX(p6{95HxYJL}SV8#a>QE$C6|Ea)RoJa4fmxZmj4r zA#+yHSaOVyXD2$M8#8}RYQ2;b;aKtI*Ufn4mF3`>k8+BpTFIG*@xnE247Oli#{;}G z;$!6lFK~xbb!z%%1jmrOp=ljv+ngn;lb?+!lOMYtHpf~bo$jmZPIkwV z!$;@QlhG2Xa9b>~J0}}s$~SG&hhVA}$%L$S1RbNiH(tF!=BTb|dsc8PIk|%3zKj`! zs)+wrU%mK)Y&HKR`=LwJ0Xwxl4*ZO^r-4sv`!H}++r4;h#|M&Oft&DO72iwd15S^E zUWA?hU%jI3Hva2t22o~+2znKE;vD=RM|u7)w?o?l!1sd~KmY%GLc0$GXG~Y`X9a+p z@JE>!GJfEFAjZ%CFMp@){15M15Zwd7GWhb}z6M)I)h-8pQW!i3M}P!%n;a zbOLr8_!l77RWEScJbW(z?g8N6gJjzQ{{%V+Y3ClL0j1T<=_B8M( zAj*sYZ(WCahdW;q{o#7-dj2!qfvI}r2X^OslYD=2FX#Z=iBEt|z&-@rbq&f6JIk4! z*q!ey@;yfPjTp~xC(Z=b!)^or4kX(hcoFs{nFkwq0@MhZA>gJ)W%mO=2BLf)@ap%V zERd-Kehzdm?1R8*?^Sl3`;Bihs=gEeu6rNG24tM?EAlGzdGf6Ep;S z9QYuJ?+y~b4dOe4#M^?%!@syB{uS&MuoE8uRl!dDAD~*;)4@eb@n+}~*olvT zdSE9W2kn8~`EDQI`P&{sUBR7r6X+?}i7lY#V0XTY$9MQfv4>MK!e_$J_du7zPJ9Ej z3U=rFcziE!OB-|z+=(}U_P|bjALsz=#GrPM1Mh0b_=Wo*aLG>e6WI9*-TOcdKZOnf zehd_cy$|T`Q2m5hh!4H&fxDN8e8y{?m>3b+%W23-pKFz~&%qE29UzK6y4vpgTb zI|y(mP6pi%yYoFPzMmBb9e_LWGoTZ&^RetxupWAWtj+d0xPM2UrZMfZYq+av$m+c0bU(FGQUGN%SAM6W4;`lmSk70Bymr zK=Ymt@xD)CEWn+(7jy=8;%7l;VNU~Rep>4>;0vH~JigDz#2?wK`s5(6;2|Lvz}*Xc z-`^lD*aN_6`_Nvn+d$9fKzJv`3w#03N!P+Y3M}kb_27JOh3~HnJc2$08R9>H9)q3u z-ov;@!cGi==uYg^?s4Fwk6|ppeF*6JyvnB+*!BgbGvmO0Cvcy@s~v;D(l4PO!tMp` z{xY6JhP@Z~=s%!u;5CUM;4h!V7>9inIQb;vf!zyi`!?De_Be3P)2Ii$T3`dCr*LnD zJq|4Y5#|qc2b%W>h+hD`0e9llATJ)(9|qp|EaHLP`OH7x6>vR=eh7Es1keuHiIYJc zu#f&2ed7g;dD#8HPvAju`z5p^@LQmM*oT2Le~tbLyA5=WqOD=~0632q{l&*LLD@5W@}vf2ZwdffW|s)rCCqo!Y(%*re?N;D@#SPT(PJ z?*}d|z_b4-mk)Rl#C!B0u*41Bi8zVtLCnu);8lf4i}eHi5{Tb~c>=hwNXb_L*ML~| z^}qy(VN<|^+TIWR8Hh5Y!1)uD{ZimQ5aka5=X>yc7aoD%47?4r9(H0sh%&@Ec#eKE z+=8lqRjl$u90fH%h8UToJAA3%&}1o$SX5AL4HNFPLZ z;s-$t+Y5YL+n)fwt5nI<14lsjBP`K9MY$7~XuA)1i?(+FKMZ1=eZVhi_hI1OUKO?v zmp+xg z2Yv^{_=kZ%12O*Rfv;=3{1m`KO72<{r@lT)*#3@$eeJzlz+p94CL9%{;7py`3ql}NO#W&d3Dfe1nJBVc= z#x^1hWa7Y^-i16M&H(TXh->O}J-(y33F}MB0PT09EH5i;gDUq zZ?s)pgE|4xeHHLyo1v#)K)k^3f*8*;z**NS`y61iwugY92QkklfR$TRy99t~5Zi+I zkJ>&Ad|lhcbBJ%x{d(j_=eD{R%#AiX2A@bdq7hxw(YgKl>V^Ig9Jn;yK^*;!l z-KOj|@MGHE2mFJ!$=v!pfd!XWgeW2=q z??BxF|AEE>fdlOa;s<&T^d8uApzpxm1L*@N4h$VQdB8qYb;x(9_E6oS`a^+3?T6xr zdJgp-+H|y65QL zqy0xu96fpT^wBd%&mQ$0t2kD5toB&_vBqQV$9j(KIkxv$|FILtP98gb?98#V$2?9yyy6y<9m4W_T2M?ZGhKhc>zpCHYU)x{TU*GTVZ|o2BxA({Ud-{9( z_w@Jm@9j_b_xBI>pXeXzKiNO{$caaW9y$5Q@FS-m8F|EW*n7C*u#H+6MLmck_7UHa zx+DH0fg|xFy+`_vq>l_989Fk2WaP-`5pmRe)IRDvT6ffcG;lP2wD)M=(e%;5qeDlB zkB%H2Jt~fQkJ-n3$Lfyxj|Gm!kM$nwJC;5+cx>p{@Uf9&qsPR6cfcO-4b%f%L%Oz|g?(z{tSpfH>|wZXfp@uRHEP9ylI9-g~_7c>4I@@uB0x$48Ej9!JmZ z!7n#+dL%uX7W=&W?0vp{b^HAL0{i0odiVA1 zOYa-pH?(hf-^jkvePX|NzrBC7|7^c_r0#J2VgKRA!-2!?hvSEP4)-43bGYyD-oxp` z{f7q+pEx{p_~hZ?!>13AWa`Ls#Ebr7qsRErXX?;v{OC6U^qe^QPA_^-ANo)F2=X}u zT?gpjKeYek{^9-p&ozFo{d4ip^?a`Pb9+A5`|zHJ`ySr=Fa+>Ln_58KzW#?#KP(Pb z9rPdUL2C~mJbTbapN^v+52Mf8Xx(14<>`L!Behtc{eRuKWdZR{2GGV*w*rWI>IF!n z{BfTI=O4$teGGR7?k$v2$cu@GOds6K3u<7y5$8)b;mT9Dx8aPd>u~C@;6? z{~D__rcR&)!UCPNm|>kjf0Y zQx@achI5imh^WwuYdY*Yk`z~Mt zt4NxaGK@)sr^h96;v3WEN!1ZZs=SRA)`#c1@KtI^@dU9OLD`dX8TT@rJ>|;~)0zx< z)(B6mN&tfhnayE-8cT7i6;J4*;dA`B+ap|?48>B$Q9kCh4JTryAY+5p$~3Oi?mVB0 zX_!2cQ?+rvv{XH+vyDSIJ*@??XLE`DyfNzW4sjXsmm4O(MzZzs4zV0hA1)VHqCBm5 z(vN4iF2j$f!(EA|^=g3hzXCN-1J^6y*NPLDL$HN0PO5<`;NJ>+jdVlNVP|`+K@0Ls zxlZ(o4tc`x`1xS_2=VJLeRb8bs>aCf-F?%;LxykK%uv^%yloS0{KMb@;m;EjRR^IC%) z$*?YzjO4O0a$~Z7Sx(+pU6!c?2&}ryw9r-1jR6Zf5c_&cF=8HUiGPJ6Gd%mz|4H+| E0eQVh1^@s6 literal 0 HcmV?d00001 diff --git a/Homework/bin/Debug/net8.0/Homework.pdb b/Homework/bin/Debug/net8.0/Homework.pdb new file mode 100644 index 0000000000000000000000000000000000000000..abe013286daacfc0f90e4b8399a528dfb7b3e7e4 GIT binary patch literal 14312 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 Y-~&0eZD0Irq~1Op|Mphz9RxrB1Gj!nVE_OC literal 0 HcmV?d00001 diff --git a/Homework/bin/Debug/net8.0/Homework.runtimeconfig.json b/Homework/bin/Debug/net8.0/Homework.runtimeconfig.json new file mode 100644 index 0000000..1de3a5d --- /dev/null +++ b/Homework/bin/Debug/net8.0/Homework.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/Homework/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/Homework/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..678fc5f --- /dev/null +++ b/Homework/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/Homework/obj/Debug/net8.0/Homework.AssemblyInfo.cs b/Homework/obj/Debug/net8.0/Homework.AssemblyInfo.cs new file mode 100644 index 0000000..9a9e8c1 --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Homework")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3439ef5fa11ea974a437d4e71f6d7e82763f847e")] +[assembly: System.Reflection.AssemblyProductAttribute("Homework")] +[assembly: System.Reflection.AssemblyTitleAttribute("Homework")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// 由 MSBuild WriteCodeFragment 类生成。 + diff --git a/Homework/obj/Debug/net8.0/Homework.AssemblyInfoInputs.cache b/Homework/obj/Debug/net8.0/Homework.AssemblyInfoInputs.cache new file mode 100644 index 0000000..bb9ca74 --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +3e80dbcd1ff00cdcba3863df6d82f161321270261e04e5ccbff3d91e740385e0 diff --git a/Homework/obj/Debug/net8.0/Homework.GeneratedMSBuildEditorConfig.editorconfig b/Homework/obj/Debug/net8.0/Homework.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..44ebeda --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Homework +build_property.ProjectDir = C:\Users\asus\Documents\CSharpHomework2025\Homework\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Homework/obj/Debug/net8.0/Homework.GlobalUsings.g.cs b/Homework/obj/Debug/net8.0/Homework.GlobalUsings.g.cs new file mode 100644 index 0000000..ac22929 --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/Homework/obj/Debug/net8.0/Homework.assets.cache b/Homework/obj/Debug/net8.0/Homework.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..c24e61afd7a8d28ebc3ae196a45d83c4aafb381b GIT binary patch literal 227 zcmWIWc6a1qU|^WLT;krs-t>!d{|$mJt$X;mfA{8xJc(gaF=7iPo?iCJy$@7FEMNjE zlykO<2`x@7Dvn7kE-jAH%PUP!Er}^eOwLYBPc4oC8RZUC5>S+%UX+-t;Fg(_TCAXI zWKm&ZrfOsv<1 literal 0 HcmV?d00001 diff --git a/Homework/obj/Debug/net8.0/Homework.csproj.BuildWithSkipAnalyzers b/Homework/obj/Debug/net8.0/Homework.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/Homework/obj/Debug/net8.0/Homework.csproj.CoreCompileInputs.cache b/Homework/obj/Debug/net8.0/Homework.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..cc1c7a9 --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +619fd6426a171ea713dca051b7451581df6d0cf9a3eefd9a3dc3d449cfe0197a diff --git a/Homework/obj/Debug/net8.0/Homework.csproj.FileListAbsolute.txt b/Homework/obj/Debug/net8.0/Homework.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..00356ae --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.AssemblyInfoInputs.cache +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.AssemblyInfo.cs +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.csproj.CoreCompileInputs.cache +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.sourcelink.json +C:\Users\asus\Documents\CSharpHomework2025\Homework\bin\Debug\net8.0\Homework.exe +C:\Users\asus\Documents\CSharpHomework2025\Homework\bin\Debug\net8.0\Homework.deps.json +C:\Users\asus\Documents\CSharpHomework2025\Homework\bin\Debug\net8.0\Homework.runtimeconfig.json +C:\Users\asus\Documents\CSharpHomework2025\Homework\bin\Debug\net8.0\Homework.dll +C:\Users\asus\Documents\CSharpHomework2025\Homework\bin\Debug\net8.0\Homework.pdb +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.dll +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\refint\Homework.dll +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.pdb +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\Homework.genruntimeconfig.cache +C:\Users\asus\Documents\CSharpHomework2025\Homework\obj\Debug\net8.0\ref\Homework.dll diff --git a/Homework/obj/Debug/net8.0/Homework.dll b/Homework/obj/Debug/net8.0/Homework.dll new file mode 100644 index 0000000000000000000000000000000000000000..07e3f9c1162bc51ba19343333bffcb048a76fe47 GIT binary patch literal 13312 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 Y-~&0eZD0Irq~1Op|Mphz9RxrB1Gj!nVE_OC literal 0 HcmV?d00001 diff --git a/Homework/obj/Debug/net8.0/Homework.sourcelink.json b/Homework/obj/Debug/net8.0/Homework.sourcelink.json new file mode 100644 index 0000000..a789f11 --- /dev/null +++ b/Homework/obj/Debug/net8.0/Homework.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"C:\\Users\\asus\\Documents\\CSharpHomework2025\\*":"https://raw.githubusercontent.com/QiHanYong/CSharpHomework2025/3439ef5fa11ea974a437d4e71f6d7e82763f847e/*"}} \ No newline at end of file diff --git a/Homework/obj/Debug/net8.0/apphost.exe b/Homework/obj/Debug/net8.0/apphost.exe new file mode 100644 index 0000000000000000000000000000000000000000..31bf978c80390a08b9259774e8b868e44e9f2383 GIT binary patch literal 138752 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 E0eQVh1^@s6 literal 0 HcmV?d00001 diff --git a/Homework/obj/Debug/net8.0/ref/Homework.dll b/Homework/obj/Debug/net8.0/ref/Homework.dll new file mode 100644 index 0000000000000000000000000000000000000000..9886afc49a19ae622ebf682a4537ac9d7bb92ff8 GIT binary patch literal 7680 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 Zv*rU%+29}P>i?px54bBA&Hwii_&1TgQUm}1 literal 0 HcmV?d00001 diff --git a/Homework/obj/Debug/net8.0/refint/Homework.dll b/Homework/obj/Debug/net8.0/refint/Homework.dll new file mode 100644 index 0000000000000000000000000000000000000000..9886afc49a19ae622ebf682a4537ac9d7bb92ff8 GIT binary patch literal 7680 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 Zv*rU%+29}P>i?px54bBA&Hwii_&1TgQUm}1 literal 0 HcmV?d00001 diff --git a/Homework/obj/Debug/net9.0/Homework.GlobalUsings.g.cs b/Homework/obj/Debug/net9.0/Homework.GlobalUsings.g.cs index 8578f3d..ac22929 100644 --- a/Homework/obj/Debug/net9.0/Homework.GlobalUsings.g.cs +++ b/Homework/obj/Debug/net9.0/Homework.GlobalUsings.g.cs @@ -1,8 +1,8 @@ -// -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/Homework/obj/Debug/net9.0/Homework.assets.cache b/Homework/obj/Debug/net9.0/Homework.assets.cache index e69f95afe77fc0d73c0d0b4160d4a3f9e8b577ca..5a5c16765ab120bacbec870540e3b46a17c76dc9 100644 GIT binary patch delta 74 zcmaFD_?S^Mz}wxChk=1XGd%R!4OYW|!-^SBZpq>A=C5@9b6jn6F*Z4oW_{e3A432D diff --git a/Homework/obj/Homework.csproj.nuget.dgspec.json b/Homework/obj/Homework.csproj.nuget.dgspec.json index 2ef35da..a9a50ea 100644 --- a/Homework/obj/Homework.csproj.nuget.dgspec.json +++ b/Homework/obj/Homework.csproj.nuget.dgspec.json @@ -1,73 +1,72 @@ -{ - "format": 1, - "restore": { - "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj": {} - }, - "projects": { - "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "projectName": "Homework", - "projectPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "packagesPath": "C:\\Users\\ms169\\.nuget\\packages\\", - "outputPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\ms169\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.200" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.201/PortableRuntimeIdentifierGraph.json" - } - } - } - } +{ + "format": 1, + "restore": { + "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj": {} + }, + "projects": { + "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj", + "projectName": "Homework", + "projectPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj", + "packagesPath": "C:\\Users\\asus\\.nuget\\packages\\", + "outputPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\asus\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json" + } + } + } + } } \ No newline at end of file diff --git a/Homework/obj/Homework.csproj.nuget.g.props b/Homework/obj/Homework.csproj.nuget.g.props index 9026052..5235266 100644 --- a/Homework/obj/Homework.csproj.nuget.g.props +++ b/Homework/obj/Homework.csproj.nuget.g.props @@ -1,16 +1,16 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\ms169\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.13.1 - - - - - + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\asus\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.11.0 + + + + + \ No newline at end of file diff --git a/Homework/obj/project.assets.json b/Homework/obj/project.assets.json index 907663e..033cafa 100644 --- a/Homework/obj/project.assets.json +++ b/Homework/obj/project.assets.json @@ -1,79 +1,78 @@ -{ - "version": 3, - "targets": { - "net9.0": {} - }, - "libraries": {}, - "projectFileDependencyGroups": { - "net9.0": [] - }, - "packageFolders": { - "C:\\Users\\ms169\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "projectName": "Homework", - "projectPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "packagesPath": "C:\\Users\\ms169\\.nuget\\packages\\", - "outputPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\ms169\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.200" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.201/PortableRuntimeIdentifierGraph.json" - } - } - } +{ + "version": 3, + "targets": { + "net8.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net8.0": [] + }, + "packageFolders": { + "C:\\Users\\asus\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj", + "projectName": "Homework", + "projectPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj", + "packagesPath": "C:\\Users\\asus\\.nuget\\packages\\", + "outputPath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\asus\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json" + } + } + } } \ No newline at end of file diff --git a/Homework/obj/project.nuget.cache b/Homework/obj/project.nuget.cache index d182034..216cd87 100644 --- a/Homework/obj/project.nuget.cache +++ b/Homework/obj/project.nuget.cache @@ -1,8 +1,8 @@ -{ - "version": 2, - "dgSpecHash": "Mpgpv19Q1hE=", - "success": true, - "projectFilePath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "expectedPackageFiles": [], - "logs": [] +{ + "version": 2, + "dgSpecHash": "qCq5L6wGEBs=", + "success": true, + "projectFilePath": "C:\\Users\\asus\\Documents\\CSharpHomework2025\\Homework\\Homework.csproj", + "expectedPackageFiles": [], + "logs": [] } \ No newline at end of file diff --git a/dotnet-install.sh b/dotnet-install.sh new file mode 100644 index 0000000..034d2df --- /dev/null +++ b/dotnet-install.sh @@ -0,0 +1,1888 @@ +#!/usr/bin/env bash +# Copyright (c) .NET Foundation and contributors. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. +# + +# Stop script on NZEC +set -e +# Stop script if unbound variable found (use ${var:-} if intentional) +set -u +# By default cmd1 | cmd2 returns exit code of cmd2 regardless of cmd1 success +# This is causing it to fail +set -o pipefail + +# Use in the the functions: eval $invocation +invocation='say_verbose "Calling: ${yellow:-}${FUNCNAME[0]} ${green:-}$*${normal:-}"' + +# standard output may be used as a return value in the functions +# we need a way to write text on the screen in the functions so that +# it won't interfere with the return value. +# Exposing stream 3 as a pipe to standard output of the script itself +exec 3>&1 + +# Setup some colors to use. These need to work in fairly limited shells, like the Ubuntu Docker container where there are only 8 colors. +# See if stdout is a terminal +if [ -t 1 ] && command -v tput > /dev/null; then + # see if it supports colors + ncolors=$(tput colors || echo 0) + if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then + bold="$(tput bold || echo)" + normal="$(tput sgr0 || echo)" + black="$(tput setaf 0 || echo)" + red="$(tput setaf 1 || echo)" + green="$(tput setaf 2 || echo)" + yellow="$(tput setaf 3 || echo)" + blue="$(tput setaf 4 || echo)" + magenta="$(tput setaf 5 || echo)" + cyan="$(tput setaf 6 || echo)" + white="$(tput setaf 7 || echo)" + fi +fi + +say_warning() { + printf "%b\n" "${yellow:-}dotnet_install: Warning: $1${normal:-}" >&3 +} + +say_err() { + printf "%b\n" "${red:-}dotnet_install: Error: $1${normal:-}" >&2 +} + +say() { + # using stream 3 (defined in the beginning) to not interfere with stdout of functions + # which may be used as return value + printf "%b\n" "${cyan:-}dotnet-install:${normal:-} $1" >&3 +} + +say_verbose() { + if [ "$verbose" = true ]; then + say "$1" + fi +} + +# This platform list is finite - if the SDK/Runtime has supported Linux distribution-specific assets, +# then and only then should the Linux distribution appear in this list. +# Adding a Linux distribution to this list does not imply distribution-specific support. +get_legacy_os_name_from_platform() { + eval $invocation + + platform="$1" + case "$platform" in + "centos.7") + echo "centos" + return 0 + ;; + "debian.8") + echo "debian" + return 0 + ;; + "debian.9") + echo "debian.9" + return 0 + ;; + "fedora.23") + echo "fedora.23" + return 0 + ;; + "fedora.24") + echo "fedora.24" + return 0 + ;; + "fedora.27") + echo "fedora.27" + return 0 + ;; + "fedora.28") + echo "fedora.28" + return 0 + ;; + "opensuse.13.2") + echo "opensuse.13.2" + return 0 + ;; + "opensuse.42.1") + echo "opensuse.42.1" + return 0 + ;; + "opensuse.42.3") + echo "opensuse.42.3" + return 0 + ;; + "rhel.7"*) + echo "rhel" + return 0 + ;; + "ubuntu.14.04") + echo "ubuntu" + return 0 + ;; + "ubuntu.16.04") + echo "ubuntu.16.04" + return 0 + ;; + "ubuntu.16.10") + echo "ubuntu.16.10" + return 0 + ;; + "ubuntu.18.04") + echo "ubuntu.18.04" + return 0 + ;; + "alpine.3.4.3") + echo "alpine" + return 0 + ;; + esac + return 1 +} + +get_legacy_os_name() { + eval $invocation + + local uname=$(uname) + if [ "$uname" = "Darwin" ]; then + echo "osx" + return 0 + elif [ -n "$runtime_id" ]; then + echo $(get_legacy_os_name_from_platform "${runtime_id%-*}" || echo "${runtime_id%-*}") + return 0 + else + if [ -e /etc/os-release ]; then + . /etc/os-release + os=$(get_legacy_os_name_from_platform "$ID${VERSION_ID:+.${VERSION_ID}}" || echo "") + if [ -n "$os" ]; then + echo "$os" + return 0 + fi + fi + fi + + say_verbose "Distribution specific OS name and version could not be detected: UName = $uname" + return 1 +} + +get_linux_platform_name() { + eval $invocation + + if [ -n "$runtime_id" ]; then + echo "${runtime_id%-*}" + return 0 + else + if [ -e /etc/os-release ]; then + . /etc/os-release + echo "$ID${VERSION_ID:+.${VERSION_ID}}" + return 0 + elif [ -e /etc/redhat-release ]; then + local redhatRelease=$(&1 || true) | grep -q musl +} + +get_current_os_name() { + eval $invocation + + local uname=$(uname) + if [ "$uname" = "Darwin" ]; then + echo "osx" + return 0 + elif [ "$uname" = "FreeBSD" ]; then + echo "freebsd" + return 0 + elif [ "$uname" = "Linux" ]; then + local linux_platform_name="" + linux_platform_name="$(get_linux_platform_name)" || true + + if [ "$linux_platform_name" = "rhel.6" ]; then + echo $linux_platform_name + return 0 + elif is_musl_based_distro; then + echo "linux-musl" + return 0 + elif [ "$linux_platform_name" = "linux-musl" ]; then + echo "linux-musl" + return 0 + else + echo "linux" + return 0 + fi + fi + + say_err "OS name could not be detected: UName = $uname" + return 1 +} + +machine_has() { + eval $invocation + + command -v "$1" > /dev/null 2>&1 + return $? +} + +check_min_reqs() { + local hasMinimum=false + if machine_has "curl"; then + hasMinimum=true + elif machine_has "wget"; then + hasMinimum=true + fi + + if [ "$hasMinimum" = "false" ]; then + say_err "curl (recommended) or wget are required to download dotnet. Install missing prerequisite to proceed." + return 1 + fi + return 0 +} + +# args: +# input - $1 +to_lowercase() { + #eval $invocation + + echo "$1" | tr '[:upper:]' '[:lower:]' + return 0 +} + +# args: +# input - $1 +remove_trailing_slash() { + #eval $invocation + + local input="${1:-}" + echo "${input%/}" + return 0 +} + +# args: +# input - $1 +remove_beginning_slash() { + #eval $invocation + + local input="${1:-}" + echo "${input#/}" + return 0 +} + +# args: +# root_path - $1 +# child_path - $2 - this parameter can be empty +combine_paths() { + eval $invocation + + # TODO: Consider making it work with any number of paths. For now: + if [ ! -z "${3:-}" ]; then + say_err "combine_paths: Function takes two parameters." + return 1 + fi + + local root_path="$(remove_trailing_slash "$1")" + local child_path="$(remove_beginning_slash "${2:-}")" + say_verbose "combine_paths: root_path=$root_path" + say_verbose "combine_paths: child_path=$child_path" + echo "$root_path/$child_path" + return 0 +} + +get_machine_architecture() { + eval $invocation + + if command -v uname > /dev/null; then + CPUName=$(uname -m) + case $CPUName in + armv1*|armv2*|armv3*|armv4*|armv5*|armv6*) + echo "armv6-or-below" + return 0 + ;; + armv*l) + echo "arm" + return 0 + ;; + aarch64|arm64) + if [ "$(getconf LONG_BIT)" -lt 64 ]; then + # This is 32-bit OS running on 64-bit CPU (for example Raspberry Pi OS) + echo "arm" + return 0 + fi + echo "arm64" + return 0 + ;; + s390x) + echo "s390x" + return 0 + ;; + ppc64le) + echo "ppc64le" + return 0 + ;; + loongarch64) + echo "loongarch64" + return 0 + ;; + riscv64) + echo "riscv64" + return 0 + ;; + powerpc|ppc) + echo "ppc" + return 0 + ;; + esac + fi + + # Always default to 'x64' + echo "x64" + return 0 +} + +# args: +# architecture - $1 +get_normalized_architecture_from_architecture() { + eval $invocation + + local architecture="$(to_lowercase "$1")" + + if [[ $architecture == \ ]]; then + machine_architecture="$(get_machine_architecture)" + if [[ "$machine_architecture" == "armv6-or-below" ]]; then + say_err "Architecture \`$machine_architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues" + return 1 + fi + + echo $machine_architecture + return 0 + fi + + case "$architecture" in + amd64|x64) + echo "x64" + return 0 + ;; + arm) + echo "arm" + return 0 + ;; + arm64) + echo "arm64" + return 0 + ;; + s390x) + echo "s390x" + return 0 + ;; + ppc64le) + echo "ppc64le" + return 0 + ;; + loongarch64) + echo "loongarch64" + return 0 + ;; + esac + + say_err "Architecture \`$architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues" + return 1 +} + +# args: +# version - $1 +# channel - $2 +# architecture - $3 +get_normalized_architecture_for_specific_sdk_version() { + eval $invocation + + local is_version_support_arm64="$(is_arm64_supported "$1")" + local is_channel_support_arm64="$(is_arm64_supported "$2")" + local architecture="$3"; + local osname="$(get_current_os_name)" + + if [ "$osname" == "osx" ] && [ "$architecture" == "arm64" ] && { [ "$is_version_support_arm64" = false ] || [ "$is_channel_support_arm64" = false ]; }; then + #check if rosetta is installed + if [ "$(/usr/bin/pgrep oahd >/dev/null 2>&1;echo $?)" -eq 0 ]; then + say_verbose "Changing user architecture from '$architecture' to 'x64' because .NET SDKs prior to version 6.0 do not support arm64." + echo "x64" + return 0; + else + say_err "Architecture \`$architecture\` is not supported for .NET SDK version \`$version\`. Please install Rosetta to allow emulation of the \`$architecture\` .NET SDK on this platform" + return 1 + fi + fi + + echo "$architecture" + return 0 +} + +# args: +# version or channel - $1 +is_arm64_supported() { + # Extract the major version by splitting on the dot + major_version="${1%%.*}" + + # Check if the major version is a valid number and less than 6 + case "$major_version" in + [0-9]*) + if [ "$major_version" -lt 6 ]; then + echo false + return 0 + fi + ;; + esac + + echo true + return 0 +} + +# args: +# user_defined_os - $1 +get_normalized_os() { + eval $invocation + + local osname="$(to_lowercase "$1")" + if [ ! -z "$osname" ]; then + case "$osname" in + osx | freebsd | rhel.6 | linux-musl | linux) + echo "$osname" + return 0 + ;; + macos) + osname='osx' + echo "$osname" + return 0 + ;; + *) + say_err "'$user_defined_os' is not a supported value for --os option, supported values are: osx, macos, linux, linux-musl, freebsd, rhel.6. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." + return 1 + ;; + esac + else + osname="$(get_current_os_name)" || return 1 + fi + echo "$osname" + return 0 +} + +# args: +# quality - $1 +get_normalized_quality() { + eval $invocation + + local quality="$(to_lowercase "$1")" + if [ ! -z "$quality" ]; then + case "$quality" in + daily | preview) + echo "$quality" + return 0 + ;; + ga) + #ga quality is available without specifying quality, so normalizing it to empty + return 0 + ;; + *) + say_err "'$quality' is not a supported value for --quality option. Supported values are: daily, preview, ga. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." + return 1 + ;; + esac + fi + return 0 +} + +# args: +# channel - $1 +get_normalized_channel() { + eval $invocation + + local channel="$(to_lowercase "$1")" + + if [[ $channel == current ]]; then + say_warning 'Value "Current" is deprecated for -Channel option. Use "STS" instead.' + fi + + if [[ $channel == release/* ]]; then + say_warning 'Using branch name with -Channel option is no longer supported with newer releases. Use -Quality option with a channel in X.Y format instead.'; + fi + + if [ ! -z "$channel" ]; then + case "$channel" in + lts) + echo "LTS" + return 0 + ;; + sts) + echo "STS" + return 0 + ;; + current) + echo "STS" + return 0 + ;; + *) + echo "$channel" + return 0 + ;; + esac + fi + + return 0 +} + +# args: +# runtime - $1 +get_normalized_product() { + eval $invocation + + local product="" + local runtime="$(to_lowercase "$1")" + if [[ "$runtime" == "dotnet" ]]; then + product="dotnet-runtime" + elif [[ "$runtime" == "aspnetcore" ]]; then + product="aspnetcore-runtime" + elif [ -z "$runtime" ]; then + product="dotnet-sdk" + fi + echo "$product" + return 0 +} + +# The version text returned from the feeds is a 1-line or 2-line string: +# For the SDK and the dotnet runtime (2 lines): +# Line 1: # commit_hash +# Line 2: # 4-part version +# For the aspnetcore runtime (1 line): +# Line 1: # 4-part version + +# args: +# version_text - stdin +get_version_from_latestversion_file_content() { + eval $invocation + + cat | tail -n 1 | sed 's/\r$//' + return 0 +} + +# args: +# install_root - $1 +# relative_path_to_package - $2 +# specific_version - $3 +is_dotnet_package_installed() { + eval $invocation + + local install_root="$1" + local relative_path_to_package="$2" + local specific_version="${3//[$'\t\r\n']}" + + local dotnet_package_path="$(combine_paths "$(combine_paths "$install_root" "$relative_path_to_package")" "$specific_version")" + say_verbose "is_dotnet_package_installed: dotnet_package_path=$dotnet_package_path" + + if [ -d "$dotnet_package_path" ]; then + return 0 + else + return 1 + fi +} + +# args: +# downloaded file - $1 +# remote_file_size - $2 +validate_remote_local_file_sizes() +{ + eval $invocation + + local downloaded_file="$1" + local remote_file_size="$2" + local file_size='' + + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + file_size="$(stat -c '%s' "$downloaded_file")" + elif [[ "$OSTYPE" == "darwin"* ]]; then + # hardcode in order to avoid conflicts with GNU stat + file_size="$(/usr/bin/stat -f '%z' "$downloaded_file")" + fi + + if [ -n "$file_size" ]; then + say "Downloaded file size is $file_size bytes." + + if [ -n "$remote_file_size" ] && [ -n "$file_size" ]; then + if [ "$remote_file_size" -ne "$file_size" ]; then + say "The remote and local file sizes are not equal. The remote file size is $remote_file_size bytes and the local size is $file_size bytes. The local package may be corrupted." + else + say "The remote and local file sizes are equal." + fi + fi + + else + say "Either downloaded or local package size can not be measured. One of them may be corrupted." + fi +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +get_version_from_latestversion_file() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + + local version_file_url=null + if [[ "$runtime" == "dotnet" ]]; then + version_file_url="$azure_feed/Runtime/$channel/latest.version" + elif [[ "$runtime" == "aspnetcore" ]]; then + version_file_url="$azure_feed/aspnetcore/Runtime/$channel/latest.version" + elif [ -z "$runtime" ]; then + version_file_url="$azure_feed/Sdk/$channel/latest.version" + else + say_err "Invalid value for \$runtime" + return 1 + fi + say_verbose "get_version_from_latestversion_file: latest url: $version_file_url" + + download "$version_file_url" || return $? + return 0 +} + +# args: +# json_file - $1 +parse_globaljson_file_for_version() { + eval $invocation + + local json_file="$1" + if [ ! -f "$json_file" ]; then + say_err "Unable to find \`$json_file\`" + return 1 + fi + + sdk_section=$(cat $json_file | tr -d "\r" | awk '/"sdk"/,/}/') + if [ -z "$sdk_section" ]; then + say_err "Unable to parse the SDK node in \`$json_file\`" + return 1 + fi + + sdk_list=$(echo $sdk_section | awk -F"[{}]" '{print $2}') + sdk_list=${sdk_list//[\" ]/} + sdk_list=${sdk_list//,/$'\n'} + + local version_info="" + while read -r line; do + IFS=: + while read -r key value; do + if [[ "$key" == "version" ]]; then + version_info=$value + fi + done <<< "$line" + done <<< "$sdk_list" + if [ -z "$version_info" ]; then + say_err "Unable to find the SDK:version node in \`$json_file\`" + return 1 + fi + + unset IFS; + echo "$version_info" + return 0 +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# version - $4 +# json_file - $5 +get_specific_version_from_version() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local version="$(to_lowercase "$4")" + local json_file="$5" + + if [ -z "$json_file" ]; then + if [[ "$version" == "latest" ]]; then + local version_info + version_info="$(get_version_from_latestversion_file "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1 + say_verbose "get_specific_version_from_version: version_info=$version_info" + echo "$version_info" | get_version_from_latestversion_file_content + return 0 + else + echo "$version" + return 0 + fi + else + local version_info + version_info="$(parse_globaljson_file_for_version "$json_file")" || return 1 + echo "$version_info" + return 0 + fi +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# specific_version - $4 +# normalized_os - $5 +construct_download_link() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local specific_version="${4//[$'\t\r\n']}" + local specific_product_version="$(get_specific_product_version "$1" "$4")" + local osname="$5" + + local download_link=null + if [[ "$runtime" == "dotnet" ]]; then + download_link="$azure_feed/Runtime/$specific_version/dotnet-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz" + elif [[ "$runtime" == "aspnetcore" ]]; then + download_link="$azure_feed/aspnetcore/Runtime/$specific_version/aspnetcore-runtime-$specific_product_version-$osname-$normalized_architecture.tar.gz" + elif [ -z "$runtime" ]; then + download_link="$azure_feed/Sdk/$specific_version/dotnet-sdk-$specific_product_version-$osname-$normalized_architecture.tar.gz" + else + return 1 + fi + + echo "$download_link" + return 0 +} + +# args: +# azure_feed - $1 +# specific_version - $2 +# download link - $3 (optional) +get_specific_product_version() { + # If we find a 'productVersion.txt' at the root of any folder, we'll use its contents + # to resolve the version of what's in the folder, superseding the specified version. + # if 'productVersion.txt' is missing but download link is already available, product version will be taken from download link + eval $invocation + + local azure_feed="$1" + local specific_version="${2//[$'\t\r\n']}" + local package_download_link="" + if [ $# -gt 2 ]; then + local package_download_link="$3" + fi + local specific_product_version=null + + # Try to get the version number, using the productVersion.txt file located next to the installer file. + local download_links=($(get_specific_product_version_url "$azure_feed" "$specific_version" true "$package_download_link") + $(get_specific_product_version_url "$azure_feed" "$specific_version" false "$package_download_link")) + + for download_link in "${download_links[@]}" + do + say_verbose "Checking for the existence of $download_link" + + if machine_has "curl" + then + if ! specific_product_version=$(curl -s --fail "${download_link}${feed_credential}" 2>&1); then + continue + else + echo "${specific_product_version//[$'\t\r\n']}" + return 0 + fi + + elif machine_has "wget" + then + specific_product_version=$(wget -qO- "${download_link}${feed_credential}" 2>&1) + if [ $? = 0 ]; then + echo "${specific_product_version//[$'\t\r\n']}" + return 0 + fi + fi + done + + # Getting the version number with productVersion.txt has failed. Try parsing the download link for a version number. + say_verbose "Failed to get the version using productVersion.txt file. Download link will be parsed instead." + specific_product_version="$(get_product_specific_version_from_download_link "$package_download_link" "$specific_version")" + echo "${specific_product_version//[$'\t\r\n']}" + return 0 +} + +# args: +# azure_feed - $1 +# specific_version - $2 +# is_flattened - $3 +# download link - $4 (optional) +get_specific_product_version_url() { + eval $invocation + + local azure_feed="$1" + local specific_version="$2" + local is_flattened="$3" + local package_download_link="" + if [ $# -gt 3 ]; then + local package_download_link="$4" + fi + + local pvFileName="productVersion.txt" + if [ "$is_flattened" = true ]; then + if [ -z "$runtime" ]; then + pvFileName="sdk-productVersion.txt" + elif [[ "$runtime" == "dotnet" ]]; then + pvFileName="runtime-productVersion.txt" + else + pvFileName="$runtime-productVersion.txt" + fi + fi + + local download_link=null + + if [ -z "$package_download_link" ]; then + if [[ "$runtime" == "dotnet" ]]; then + download_link="$azure_feed/Runtime/$specific_version/${pvFileName}" + elif [[ "$runtime" == "aspnetcore" ]]; then + download_link="$azure_feed/aspnetcore/Runtime/$specific_version/${pvFileName}" + elif [ -z "$runtime" ]; then + download_link="$azure_feed/Sdk/$specific_version/${pvFileName}" + else + return 1 + fi + else + download_link="${package_download_link%/*}/${pvFileName}" + fi + + say_verbose "Constructed productVersion link: $download_link" + echo "$download_link" + return 0 +} + +# args: +# download link - $1 +# specific version - $2 +get_product_specific_version_from_download_link() +{ + eval $invocation + + local download_link="$1" + local specific_version="$2" + local specific_product_version="" + + if [ -z "$download_link" ]; then + echo "$specific_version" + return 0 + fi + + #get filename + filename="${download_link##*/}" + + #product specific version follows the product name + #for filename 'dotnet-sdk-3.1.404-linux-x64.tar.gz': the product version is 3.1.404 + IFS='-' + read -ra filename_elems <<< "$filename" + count=${#filename_elems[@]} + if [[ "$count" -gt 2 ]]; then + specific_product_version="${filename_elems[2]}" + else + specific_product_version=$specific_version + fi + unset IFS; + echo "$specific_product_version" + return 0 +} + +# args: +# azure_feed - $1 +# channel - $2 +# normalized_architecture - $3 +# specific_version - $4 +construct_legacy_download_link() { + eval $invocation + + local azure_feed="$1" + local channel="$2" + local normalized_architecture="$3" + local specific_version="${4//[$'\t\r\n']}" + + local distro_specific_osname + distro_specific_osname="$(get_legacy_os_name)" || return 1 + + local legacy_download_link=null + if [[ "$runtime" == "dotnet" ]]; then + legacy_download_link="$azure_feed/Runtime/$specific_version/dotnet-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz" + elif [ -z "$runtime" ]; then + legacy_download_link="$azure_feed/Sdk/$specific_version/dotnet-dev-$distro_specific_osname-$normalized_architecture.$specific_version.tar.gz" + else + return 1 + fi + + echo "$legacy_download_link" + return 0 +} + +get_user_install_path() { + eval $invocation + + if [ ! -z "${DOTNET_INSTALL_DIR:-}" ]; then + echo "$DOTNET_INSTALL_DIR" + else + echo "$HOME/.dotnet" + fi + return 0 +} + +# args: +# install_dir - $1 +resolve_installation_path() { + eval $invocation + + local install_dir=$1 + if [ "$install_dir" = "" ]; then + local user_install_path="$(get_user_install_path)" + say_verbose "resolve_installation_path: user_install_path=$user_install_path" + echo "$user_install_path" + return 0 + fi + + echo "$install_dir" + return 0 +} + +# args: +# relative_or_absolute_path - $1 +get_absolute_path() { + eval $invocation + + local relative_or_absolute_path=$1 + echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")" + return 0 +} + +# args: +# override - $1 (boolean, true or false) +get_cp_options() { + eval $invocation + + local override="$1" + local override_switch="" + + if [ "$override" = false ]; then + override_switch="-n" + + # create temporary files to check if 'cp -u' is supported + tmp_dir="$(mktemp -d)" + tmp_file="$tmp_dir/testfile" + tmp_file2="$tmp_dir/testfile2" + + touch "$tmp_file" + + # use -u instead of -n if it's available + if cp -u "$tmp_file" "$tmp_file2" 2>/dev/null; then + override_switch="-u" + fi + + # clean up + rm -f "$tmp_file" "$tmp_file2" + rm -rf "$tmp_dir" + fi + + echo "$override_switch" +} + +# args: +# input_files - stdin +# root_path - $1 +# out_path - $2 +# override - $3 +copy_files_or_dirs_from_list() { + eval $invocation + + local root_path="$(remove_trailing_slash "$1")" + local out_path="$(remove_trailing_slash "$2")" + local override="$3" + local override_switch="$(get_cp_options "$override")" + + cat | uniq | while read -r file_path; do + local path="$(remove_beginning_slash "${file_path#$root_path}")" + local target="$out_path/$path" + if [ "$override" = true ] || (! ([ -d "$target" ] || [ -e "$target" ])); then + mkdir -p "$out_path/$(dirname "$path")" + if [ -d "$target" ]; then + rm -rf "$target" + fi + cp -R $override_switch "$root_path/$path" "$target" + fi + done +} + +# args: +# zip_uri - $1 +get_remote_file_size() { + local zip_uri="$1" + + if machine_has "curl"; then + file_size=$(curl -sI "$zip_uri" | grep -i content-length | awk '{ num = $2 + 0; print num }') + elif machine_has "wget"; then + file_size=$(wget --spider --server-response -O /dev/null "$zip_uri" 2>&1 | grep -i 'Content-Length:' | awk '{ num = $2 + 0; print num }') + else + say "Neither curl nor wget is available on this system." + return + fi + + if [ -n "$file_size" ]; then + say "Remote file $zip_uri size is $file_size bytes." + echo "$file_size" + else + say_verbose "Content-Length header was not extracted for $zip_uri." + echo "" + fi +} + +# args: +# zip_path - $1 +# out_path - $2 +# remote_file_size - $3 +extract_dotnet_package() { + eval $invocation + + local zip_path="$1" + local out_path="$2" + local remote_file_size="$3" + + local temp_out_path="$(mktemp -d "$temporary_file_template")" + + local failed=false + tar -xzf "$zip_path" -C "$temp_out_path" > /dev/null || failed=true + + local folders_with_version_regex='^.*/[0-9]+\.[0-9]+[^/]+/' + find "$temp_out_path" -type f | grep -Eo "$folders_with_version_regex" | sort | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" false + find "$temp_out_path" -type f | grep -Ev "$folders_with_version_regex" | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" "$override_non_versioned_files" + + validate_remote_local_file_sizes "$zip_path" "$remote_file_size" + + rm -rf "$temp_out_path" + if [ -z ${keep_zip+x} ]; then + rm -f "$zip_path" && say_verbose "Temporary archive file $zip_path was removed" + fi + + if [ "$failed" = true ]; then + say_err "Extraction failed" + return 1 + fi + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header() +{ + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + + local failed=false + local response + if machine_has "curl"; then + get_http_header_curl $remote_path $disable_feed_credential || failed=true + elif machine_has "wget"; then + get_http_header_wget $remote_path $disable_feed_credential || failed=true + else + failed=true + fi + if [ "$failed" = true ]; then + say_verbose "Failed to get HTTP header: '$remote_path'." + return 1 + fi + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header_curl() { + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + + remote_path_with_credential="$remote_path" + if [ "$disable_feed_credential" = false ]; then + remote_path_with_credential+="$feed_credential" + fi + + curl_options="-I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 " + curl $curl_options "$remote_path_with_credential" 2>&1 || return 1 + return 0 +} + +# args: +# remote_path - $1 +# disable_feed_credential - $2 +get_http_header_wget() { + eval $invocation + local remote_path="$1" + local disable_feed_credential="$2" + local wget_options="-q -S --spider --tries 5 " + + local wget_options_extra='' + + # Test for options that aren't supported on all wget implementations. + if [[ $(wget -h 2>&1 | grep -E 'waitretry|connect-timeout') ]]; then + wget_options_extra="--waitretry 2 --connect-timeout 15 " + else + say "wget extra options are unavailable for this environment" + fi + + remote_path_with_credential="$remote_path" + if [ "$disable_feed_credential" = false ]; then + remote_path_with_credential+="$feed_credential" + fi + + wget $wget_options $wget_options_extra "$remote_path_with_credential" 2>&1 + + return $? +} + +# args: +# remote_path - $1 +# [out_path] - $2 - stdout if not provided +download() { + eval $invocation + + local remote_path="$1" + local out_path="${2:-}" + + if [[ "$remote_path" != "http"* ]]; then + cp "$remote_path" "$out_path" + return $? + fi + + local failed=false + local attempts=0 + while [ $attempts -lt 3 ]; do + attempts=$((attempts+1)) + failed=false + if machine_has "curl"; then + downloadcurl "$remote_path" "$out_path" || failed=true + elif machine_has "wget"; then + downloadwget "$remote_path" "$out_path" || failed=true + else + say_err "Missing dependency: neither curl nor wget was found." + exit 1 + fi + + if [ "$failed" = false ] || [ $attempts -ge 3 ] || { [ ! -z $http_code ] && [ $http_code = "404" ]; }; then + break + fi + + say "Download attempt #$attempts has failed: $http_code $download_error_msg" + say "Attempt #$((attempts+1)) will start in $((attempts*10)) seconds." + sleep $((attempts*10)) + done + + if [ "$failed" = true ]; then + say_verbose "Download failed: $remote_path" + return 1 + fi + return 0 +} + +# Updates global variables $http_code and $download_error_msg +downloadcurl() { + eval $invocation + unset http_code + unset download_error_msg + local remote_path="$1" + local out_path="${2:-}" + # Append feed_credential as late as possible before calling curl to avoid logging feed_credential + # Avoid passing URI with credentials to functions: note, most of them echoing parameters of invocation in verbose output. + local remote_path_with_credential="${remote_path}${feed_credential}" + local curl_options="--retry 20 --retry-delay 2 --connect-timeout 15 -sSL -f --create-dirs " + local curl_exit_code=0; + if [ -z "$out_path" ]; then + curl_output=$(curl $curl_options "$remote_path_with_credential" 2>&1) + curl_exit_code=$? + echo "$curl_output" + else + curl_output=$(curl $curl_options -o "$out_path" "$remote_path_with_credential" 2>&1) + curl_exit_code=$? + fi + + # Regression in curl causes curl with --retry to return a 0 exit code even when it fails to download a file - https://github.com/curl/curl/issues/17554 + if [ $curl_exit_code -eq 0 ] && echo "$curl_output" | grep -q "^curl: ([0-9]*) "; then + curl_exit_code=$(echo "$curl_output" | sed 's/curl: (\([0-9]*\)).*/\1/') + fi + + if [ $curl_exit_code -gt 0 ]; then + download_error_msg="Unable to download $remote_path." + # Check for curl timeout codes + if [[ $curl_exit_code == 7 || $curl_exit_code == 28 ]]; then + download_error_msg+=" Failed to reach the server: connection timeout." + else + local disable_feed_credential=false + local response=$(get_http_header_curl $remote_path $disable_feed_credential) + http_code=$( echo "$response" | awk '/^HTTP/{print $2}' | tail -1 ) + if [[ ! -z $http_code && $http_code != 2* ]]; then + download_error_msg+=" Returned HTTP status code: $http_code." + fi + fi + say_verbose "$download_error_msg" + return 1 + fi + return 0 +} + + +# Updates global variables $http_code and $download_error_msg +downloadwget() { + eval $invocation + unset http_code + unset download_error_msg + local remote_path="$1" + local out_path="${2:-}" + # Append feed_credential as late as possible before calling wget to avoid logging feed_credential + local remote_path_with_credential="${remote_path}${feed_credential}" + local wget_options="--tries 20 " + + local wget_options_extra='' + local wget_result='' + + # Test for options that aren't supported on all wget implementations. + if [[ $(wget -h 2>&1 | grep -E 'waitretry|connect-timeout') ]]; then + wget_options_extra="--waitretry 2 --connect-timeout 15 " + else + say "wget extra options are unavailable for this environment" + fi + + if [ -z "$out_path" ]; then + wget -q $wget_options $wget_options_extra -O - "$remote_path_with_credential" 2>&1 + wget_result=$? + else + wget $wget_options $wget_options_extra -O "$out_path" "$remote_path_with_credential" 2>&1 + wget_result=$? + fi + + if [[ $wget_result != 0 ]]; then + local disable_feed_credential=false + local response=$(get_http_header_wget $remote_path $disable_feed_credential) + http_code=$( echo "$response" | awk '/^ HTTP/{print $2}' | tail -1 ) + download_error_msg="Unable to download $remote_path." + if [[ ! -z $http_code && $http_code != 2* ]]; then + download_error_msg+=" Returned HTTP status code: $http_code." + # wget exit code 4 stands for network-issue + elif [[ $wget_result == 4 ]]; then + download_error_msg+=" Failed to reach the server: connection timeout." + fi + say_verbose "$download_error_msg" + return 1 + fi + + return 0 +} + +get_download_link_from_aka_ms() { + eval $invocation + + #quality is not supported for LTS or STS channel + #STS maps to current + if [[ ! -z "$normalized_quality" && ("$normalized_channel" == "LTS" || "$normalized_channel" == "STS") ]]; then + normalized_quality="" + say_warning "Specifying quality for STS or LTS channel is not supported, the quality will be ignored." + fi + + say_verbose "Retrieving primary payload URL from aka.ms for channel: '$normalized_channel', quality: '$normalized_quality', product: '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'." + + #construct aka.ms link + aka_ms_link="https://aka.ms/dotnet" + if [ "$internal" = true ]; then + aka_ms_link="$aka_ms_link/internal" + fi + aka_ms_link="$aka_ms_link/$normalized_channel" + if [[ ! -z "$normalized_quality" ]]; then + aka_ms_link="$aka_ms_link/$normalized_quality" + fi + aka_ms_link="$aka_ms_link/$normalized_product-$normalized_os-$normalized_architecture.tar.gz" + say_verbose "Constructed aka.ms link: '$aka_ms_link'." + + #get HTTP response + #do not pass credentials as a part of the $aka_ms_link and do not apply credentials in the get_http_header function + #otherwise the redirect link would have credentials as well + #it would result in applying credentials twice to the resulting link and thus breaking it, and in echoing credentials to the output as a part of redirect link + disable_feed_credential=true + response="$(get_http_header $aka_ms_link $disable_feed_credential)" + + say_verbose "Received response: $response" + # Get results of all the redirects. + http_codes=$( echo "$response" | awk '$1 ~ /^HTTP/ {print $2}' ) + # They all need to be 301, otherwise some links are broken (except for the last, which is not a redirect but 200 or 404). + broken_redirects=$( echo "$http_codes" | sed '$d' | grep -v '301' ) + # The response may end without final code 2xx/4xx/5xx somehow, e.g. network restrictions on www.bing.com causes redirecting to bing.com fails with connection refused. + # In this case it should not exclude the last. + last_http_code=$( echo "$http_codes" | tail -n 1 ) + if ! [[ $last_http_code =~ ^(2|4|5)[0-9][0-9]$ ]]; then + broken_redirects=$( echo "$http_codes" | grep -v '301' ) + fi + + # All HTTP codes are 301 (Moved Permanently), the redirect link exists. + if [[ -z "$broken_redirects" ]]; then + aka_ms_download_link=$( echo "$response" | awk '$1 ~ /^Location/{print $2}' | tail -1 | tr -d '\r') + + if [[ -z "$aka_ms_download_link" ]]; then + say_verbose "The aka.ms link '$aka_ms_link' is not valid: failed to get redirect location." + return 1 + fi + + say_verbose "The redirect location retrieved: '$aka_ms_download_link'." + return 0 + else + say_verbose "The aka.ms link '$aka_ms_link' is not valid: received HTTP code: $(echo "$broken_redirects" | paste -sd "," -)." + return 1 + fi +} + +get_feeds_to_use() +{ + feeds=( + "https://builds.dotnet.microsoft.com/dotnet" + "https://ci.dot.net/public" + ) + + if [[ -n "$azure_feed" ]]; then + feeds=("$azure_feed") + fi + + if [[ -n "$uncached_feed" ]]; then + feeds=("$uncached_feed") + fi +} + +# THIS FUNCTION MAY EXIT (if the determined version is already installed). +generate_download_links() { + + download_links=() + specific_versions=() + effective_versions=() + link_types=() + + # If generate_akams_links returns false, no fallback to old links. Just terminate. + # This function may also 'exit' (if the determined version is already installed). + generate_akams_links || return + + # Check other feeds only if we haven't been able to find an aka.ms link. + if [[ "${#download_links[@]}" -lt 1 ]]; then + for feed in ${feeds[@]} + do + # generate_regular_links may also 'exit' (if the determined version is already installed). + generate_regular_links $feed || return + done + fi + + if [[ "${#download_links[@]}" -eq 0 ]]; then + say_err "Failed to resolve the exact version number." + return 1 + fi + + say_verbose "Generated ${#download_links[@]} links." + for link_index in ${!download_links[@]} + do + say_verbose "Link $link_index: ${link_types[$link_index]}, ${effective_versions[$link_index]}, ${download_links[$link_index]}" + done +} + +# THIS FUNCTION MAY EXIT (if the determined version is already installed). +generate_akams_links() { + local valid_aka_ms_link=true; + + normalized_version="$(to_lowercase "$version")" + if [[ "$normalized_version" != "latest" ]] && [ -n "$normalized_quality" ]; then + say_err "Quality and Version options are not allowed to be specified simultaneously. See https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script#options for details." + return 1 + fi + + if [[ -n "$json_file" || "$normalized_version" != "latest" ]]; then + # aka.ms links are not needed when exact version is specified via command or json file + return + fi + + get_download_link_from_aka_ms || valid_aka_ms_link=false + + if [[ "$valid_aka_ms_link" == true ]]; then + say_verbose "Retrieved primary payload URL from aka.ms link: '$aka_ms_download_link'." + say_verbose "Downloading using legacy url will not be attempted." + + download_link=$aka_ms_download_link + + #get version from the path + IFS='/' + read -ra pathElems <<< "$download_link" + count=${#pathElems[@]} + specific_version="${pathElems[count-2]}" + unset IFS; + say_verbose "Version: '$specific_version'." + + #Retrieve effective version + effective_version="$(get_specific_product_version "$azure_feed" "$specific_version" "$download_link")" + + # Add link info to arrays + download_links+=($download_link) + specific_versions+=($specific_version) + effective_versions+=($effective_version) + link_types+=("aka.ms") + + # Check if the SDK version is already installed. + if [[ "$dry_run" != true ]] && is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then + say "$asset_name with version '$effective_version' is already installed." + exit 0 + fi + + return 0 + fi + + # if quality is specified - exit with error - there is no fallback approach + if [ ! -z "$normalized_quality" ]; then + say_err "Failed to locate the latest version in the channel '$normalized_channel' with '$normalized_quality' quality for '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'." + say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support." + return 1 + fi + say_verbose "Falling back to latest.version file approach." +} + +# THIS FUNCTION MAY EXIT (if the determined version is already installed) +# args: +# feed - $1 +generate_regular_links() { + local feed="$1" + local valid_legacy_download_link=true + + specific_version=$(get_specific_version_from_version "$feed" "$channel" "$normalized_architecture" "$version" "$json_file") || specific_version='0' + + if [[ "$specific_version" == '0' ]]; then + say_verbose "Failed to resolve the specific version number using feed '$feed'" + return + fi + + effective_version="$(get_specific_product_version "$feed" "$specific_version")" + say_verbose "specific_version=$specific_version" + + download_link="$(construct_download_link "$feed" "$channel" "$normalized_architecture" "$specific_version" "$normalized_os")" + say_verbose "Constructed primary named payload URL: $download_link" + + # Add link info to arrays + download_links+=($download_link) + specific_versions+=($specific_version) + effective_versions+=($effective_version) + link_types+=("primary") + + legacy_download_link="$(construct_legacy_download_link "$feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false + + if [ "$valid_legacy_download_link" = true ]; then + say_verbose "Constructed legacy named payload URL: $legacy_download_link" + + download_links+=($legacy_download_link) + specific_versions+=($specific_version) + effective_versions+=($effective_version) + link_types+=("legacy") + else + legacy_download_link="" + say_verbose "Could not construct a legacy_download_link; omitting..." + fi + + # Check if the SDK version is already installed. + if [[ "$dry_run" != true ]] && is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then + say "$asset_name with version '$effective_version' is already installed." + exit 0 + fi +} + +print_dry_run() { + + say "Payload URLs:" + + for link_index in "${!download_links[@]}" + do + say "URL #$link_index - ${link_types[$link_index]}: ${download_links[$link_index]}" + done + + resolved_version=${specific_versions[0]} + repeatable_command="./$script_name --version "\""$resolved_version"\"" --install-dir "\""$install_root"\"" --architecture "\""$normalized_architecture"\"" --os "\""$normalized_os"\""" + + if [ ! -z "$normalized_quality" ]; then + repeatable_command+=" --quality "\""$normalized_quality"\""" + fi + + if [[ "$runtime" == "dotnet" ]]; then + repeatable_command+=" --runtime "\""dotnet"\""" + elif [[ "$runtime" == "aspnetcore" ]]; then + repeatable_command+=" --runtime "\""aspnetcore"\""" + fi + + repeatable_command+="$non_dynamic_parameters" + + if [ -n "$feed_credential" ]; then + repeatable_command+=" --feed-credential "\"""\""" + fi + + say "Repeatable invocation: $repeatable_command" +} + +calculate_vars() { + eval $invocation + + script_name=$(basename "$0") + normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")" + say_verbose "Normalized architecture: '$normalized_architecture'." + normalized_os="$(get_normalized_os "$user_defined_os")" + say_verbose "Normalized OS: '$normalized_os'." + normalized_quality="$(get_normalized_quality "$quality")" + say_verbose "Normalized quality: '$normalized_quality'." + normalized_channel="$(get_normalized_channel "$channel")" + say_verbose "Normalized channel: '$normalized_channel'." + normalized_product="$(get_normalized_product "$runtime")" + say_verbose "Normalized product: '$normalized_product'." + install_root="$(resolve_installation_path "$install_dir")" + say_verbose "InstallRoot: '$install_root'." + + normalized_architecture="$(get_normalized_architecture_for_specific_sdk_version "$version" "$normalized_channel" "$normalized_architecture")" + + if [[ "$runtime" == "dotnet" ]]; then + asset_relative_path="shared/Microsoft.NETCore.App" + asset_name=".NET Core Runtime" + elif [[ "$runtime" == "aspnetcore" ]]; then + asset_relative_path="shared/Microsoft.AspNetCore.App" + asset_name="ASP.NET Core Runtime" + elif [ -z "$runtime" ]; then + asset_relative_path="sdk" + asset_name=".NET Core SDK" + fi + + get_feeds_to_use +} + +install_dotnet() { + eval $invocation + local download_failed=false + local download_completed=false + local remote_file_size=0 + + mkdir -p "$install_root" + zip_path="${zip_path:-$(mktemp "$temporary_file_template")}" + say_verbose "Archive path: $zip_path" + + for link_index in "${!download_links[@]}" + do + download_link="${download_links[$link_index]}" + specific_version="${specific_versions[$link_index]}" + effective_version="${effective_versions[$link_index]}" + link_type="${link_types[$link_index]}" + + say "Attempting to download using $link_type link $download_link" + + # The download function will set variables $http_code and $download_error_msg in case of failure. + download_failed=false + download "$download_link" "$zip_path" 2>&1 || download_failed=true + + if [ "$download_failed" = true ]; then + case $http_code in + 404) + say "The resource at $link_type link '$download_link' is not available." + ;; + *) + say "Failed to download $link_type link '$download_link': $http_code $download_error_msg" + ;; + esac + rm -f "$zip_path" 2>&1 && say_verbose "Temporary archive file $zip_path was removed" + else + download_completed=true + break + fi + done + + if [[ "$download_completed" == false ]]; then + say_err "Could not find \`$asset_name\` with version = $specific_version" + say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support" + return 1 + fi + + remote_file_size="$(get_remote_file_size "$download_link")" + + say "Extracting archive from $download_link" + extract_dotnet_package "$zip_path" "$install_root" "$remote_file_size" || return 1 + + # Check if the SDK version is installed; if not, fail the installation. + # if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed. + if [[ $specific_version == *"rtm"* || $specific_version == *"servicing"* ]]; then + IFS='-' + read -ra verArr <<< "$specific_version" + release_version="${verArr[0]}" + unset IFS; + say_verbose "Checking installation: version = $release_version" + if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$release_version"; then + say "Installed version is $effective_version" + return 0 + fi + fi + + # Check if the standard SDK version is installed. + say_verbose "Checking installation: version = $effective_version" + if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then + say "Installed version is $effective_version" + return 0 + fi + + # Version verification failed. More likely something is wrong either with the downloaded content or with the verification algorithm. + say_err "Failed to verify the version of installed \`$asset_name\`.\nInstallation source: $download_link.\nInstallation location: $install_root.\nReport the bug at https://github.com/dotnet/install-scripts/issues." + say_err "\`$asset_name\` with version = $effective_version failed to install with an error." + return 1 +} + +args=("$@") + +local_version_file_relative_path="/.version" +bin_folder_relative_path="" +temporary_file_template="${TMPDIR:-/tmp}/dotnet.XXXXXXXXX" + +channel="LTS" +version="Latest" +json_file="" +install_dir="" +architecture="" +dry_run=false +no_path=false +azure_feed="" +uncached_feed="" +feed_credential="" +verbose=false +runtime="" +runtime_id="" +quality="" +internal=false +override_non_versioned_files=true +non_dynamic_parameters="" +user_defined_os="" + +while [ $# -ne 0 ] +do + name="$1" + case "$name" in + -c|--channel|-[Cc]hannel) + shift + channel="$1" + ;; + -v|--version|-[Vv]ersion) + shift + version="$1" + ;; + -q|--quality|-[Qq]uality) + shift + quality="$1" + ;; + --internal|-[Ii]nternal) + internal=true + non_dynamic_parameters+=" $name" + ;; + -i|--install-dir|-[Ii]nstall[Dd]ir) + shift + install_dir="$1" + ;; + --arch|--architecture|-[Aa]rch|-[Aa]rchitecture) + shift + architecture="$1" + ;; + --os|-[Oo][SS]) + shift + user_defined_os="$1" + ;; + --shared-runtime|-[Ss]hared[Rr]untime) + say_warning "The --shared-runtime flag is obsolete and may be removed in a future version of this script. The recommended usage is to specify '--runtime dotnet'." + if [ -z "$runtime" ]; then + runtime="dotnet" + fi + ;; + --runtime|-[Rr]untime) + shift + runtime="$1" + if [[ "$runtime" != "dotnet" ]] && [[ "$runtime" != "aspnetcore" ]]; then + say_err "Unsupported value for --runtime: '$1'. Valid values are 'dotnet' and 'aspnetcore'." + if [[ "$runtime" == "windowsdesktop" ]]; then + say_err "WindowsDesktop archives are manufactured for Windows platforms only." + fi + exit 1 + fi + ;; + --dry-run|-[Dd]ry[Rr]un) + dry_run=true + ;; + --no-path|-[Nn]o[Pp]ath) + no_path=true + non_dynamic_parameters+=" $name" + ;; + --verbose|-[Vv]erbose) + verbose=true + non_dynamic_parameters+=" $name" + ;; + --azure-feed|-[Aa]zure[Ff]eed) + shift + azure_feed="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + ;; + --uncached-feed|-[Uu]ncached[Ff]eed) + shift + uncached_feed="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + ;; + --feed-credential|-[Ff]eed[Cc]redential) + shift + feed_credential="$1" + #feed_credential should start with "?", for it to be added to the end of the link. + #adding "?" at the beginning of the feed_credential if needed. + [[ -z "$(echo $feed_credential)" ]] || [[ $feed_credential == \?* ]] || feed_credential="?$feed_credential" + ;; + --runtime-id|-[Rr]untime[Ii]d) + shift + runtime_id="$1" + non_dynamic_parameters+=" $name "\""$1"\""" + say_warning "Use of --runtime-id is obsolete and should be limited to the versions below 2.1. To override architecture, use --architecture option instead. To override OS, use --os option instead." + ;; + --jsonfile|-[Jj][Ss]on[Ff]ile) + shift + json_file="$1" + ;; + --skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles) + override_non_versioned_files=false + non_dynamic_parameters+=" $name" + ;; + --keep-zip|-[Kk]eep[Zz]ip) + keep_zip=true + non_dynamic_parameters+=" $name" + ;; + --zip-path|-[Zz]ip[Pp]ath) + shift + zip_path="$1" + ;; + -?|--?|-h|--help|-[Hh]elp) + script_name="dotnet-install.sh" + echo ".NET Tools Installer" + echo "Usage:" + echo " # Install a .NET SDK of a given Quality from a given Channel" + echo " $script_name [-c|--channel ] [-q|--quality ]" + echo " # Install a .NET SDK of a specific public version" + echo " $script_name [-v|--version ]" + echo " $script_name -h|-?|--help" + echo "" + echo "$script_name is a simple command line interface for obtaining dotnet cli." + echo " Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:" + echo " - The SDK needs to be installed without user interaction and without admin rights." + echo " - The SDK installation doesn't need to persist across multiple CI runs." + echo " To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer." + echo "" + echo "Options:" + echo " -c,--channel Download from the channel specified, Defaults to \`$channel\`." + echo " -Channel" + echo " Possible values:" + echo " - STS - the most recent Standard Term Support release" + echo " - LTS - the most recent Long Term Support release" + echo " - 2-part version in a format A.B - represents a specific release" + echo " examples: 2.0; 1.0" + echo " - 3-part version in a format A.B.Cxx - represents a specific SDK release" + echo " examples: 5.0.1xx, 5.0.2xx." + echo " Supported since 5.0 release" + echo " Warning: Value 'Current' is deprecated for the Channel parameter. Use 'STS' instead." + echo " Note: The version parameter overrides the channel parameter when any version other than 'latest' is used." + echo " -v,--version Use specific VERSION, Defaults to \`$version\`." + echo " -Version" + echo " Possible values:" + echo " - latest - the latest build on specific channel" + echo " - 3-part version in a format A.B.C - represents specific version of build" + echo " examples: 2.0.0-preview2-006120; 1.1.0" + echo " -q,--quality Download the latest build of specified quality in the channel." + echo " -Quality" + echo " The possible values are: daily, preview, GA." + echo " Works only in combination with channel. Not applicable for STS and LTS channels and will be ignored if those channels are used." + echo " For SDK use channel in A.B.Cxx format. Using quality for SDK together with channel in A.B format is not supported." + echo " Supported since 5.0 release." + echo " Note: The version parameter overrides the channel parameter when any version other than 'latest' is used, and therefore overrides the quality." + echo " --internal,-Internal Download internal builds. Requires providing credentials via --feed-credential parameter." + echo " --feed-credential Token to access Azure feed. Used as a query string to append to the Azure feed." + echo " -FeedCredential This parameter typically is not specified." + echo " -i,--install-dir Install under specified location (see Install Location below)" + echo " -InstallDir" + echo " --architecture Architecture of dotnet binaries to be installed, Defaults to \`$architecture\`." + echo " --arch,-Architecture,-Arch" + echo " Possible values: x64, arm, arm64, s390x, ppc64le and loongarch64" + echo " --os Specifies operating system to be used when selecting the installer." + echo " Overrides the OS determination approach used by the script. Supported values: osx, linux, linux-musl, freebsd, rhel.6." + echo " In case any other value is provided, the platform will be determined by the script based on machine configuration." + echo " Not supported for legacy links. Use --runtime-id to specify platform for legacy links." + echo " Refer to: https://aka.ms/dotnet-os-lifecycle for more information." + echo " --runtime Installs a shared runtime only, without the SDK." + echo " -Runtime" + echo " Possible values:" + echo " - dotnet - the Microsoft.NETCore.App shared runtime" + echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime" + echo " --dry-run,-DryRun Do not perform installation. Display download link." + echo " --no-path, -NoPath Do not set PATH for the current process." + echo " --verbose,-Verbose Display diagnostics information." + echo " --azure-feed,-AzureFeed For internal use only." + echo " Allows using a different storage to download SDK archives from." + echo " --uncached-feed,-UncachedFeed For internal use only." + echo " Allows using a different storage to download SDK archives from." + echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable." + echo " -SkipNonVersionedFiles" + echo " --jsonfile Determines the SDK version from a user specified global.json file." + echo " Note: global.json must have a value for 'SDK:Version'" + echo " --keep-zip,-KeepZip If set, downloaded file is kept." + echo " --zip-path, -ZipPath If set, downloaded file is stored at the specified path." + echo " -?,--?,-h,--help,-Help Shows this help message" + echo "" + echo "Install Location:" + echo " Location is chosen in following order:" + echo " - --install-dir option" + echo " - Environmental variable DOTNET_INSTALL_DIR" + echo " - $HOME/.dotnet" + exit 0 + ;; + *) + say_err "Unknown argument \`$name\`" + exit 1 + ;; + esac + + shift +done + +say_verbose "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:" +say_verbose "- The SDK needs to be installed without user interaction and without admin rights." +say_verbose "- The SDK installation doesn't need to persist across multiple CI runs." +say_verbose "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.\n" + +if [ "$internal" = true ] && [ -z "$(echo $feed_credential)" ]; then + message="Provide credentials via --feed-credential parameter." + if [ "$dry_run" = true ]; then + say_warning "$message" + else + say_err "$message" + exit 1 + fi +fi + +check_min_reqs +calculate_vars +# generate_regular_links call below will 'exit' if the determined version is already installed. +generate_download_links + +if [[ "$dry_run" = true ]]; then + print_dry_run + exit 0 +fi + +install_dotnet + +bin_path="$(get_absolute_path "$(combine_paths "$install_root" "$bin_folder_relative_path")")" +if [ "$no_path" = false ]; then + say "Adding to current process PATH: \`$bin_path\`. Note: This change will be visible only when sourcing script." + export PATH="$bin_path":"$PATH" +else + say "Binaries of dotnet can be found in $bin_path" +fi + +say "Note that the script does not resolve dependencies during installation." +say "To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the \"Dependencies\" section." +say "Installation finished successfully."