From 748ce9fcf8059a4cc3cc4d3983447633d13472a4 Mon Sep 17 00:00:00 2001 From: Jie Yang Date: Thu, 23 Sep 2021 10:43:26 +0800 Subject: [PATCH 01/10] StratoVirt: Update introduction description Signed-off-by: Jie Yang --- .../docs/StratoVirt/StratoVirt_Intoduction.md | 11 ++++++----- .../figures/StratoVirt_architecture.png | Bin 0 -> 38882 bytes docs/en/docs/StratoVirt/figures/arc.png | Bin 43877 -> 0 bytes .../StratoVirt\344\273\213\347\273\215.md" | 9 +++++---- .../figures/StratoVirt_architecture.png | Bin 32146 -> 38882 bytes 5 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png delete mode 100644 docs/en/docs/StratoVirt/figures/arc.png diff --git a/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md b/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md index bc44873ff..d446616b3 100644 --- a/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md +++ b/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md @@ -12,15 +12,16 @@ StratoVirt reserves component-based assembling capabilities and APIs for archite StratoVirt core architecture consists of three layers from top to bottom: -- OCI campability API: compatible with the QEMU Machine Protocol (QMP) and has complete OCI compatibility capabilities. -- BootLoader: discards the traditional BIOS plus GRUB boot mode and implements a lighter and faster bootloader. -- MicroVM: At the virtualization layer, the software and hardware collaboration capability is fully used to simplify the device model with low-latency resource scaling capability. +- External API: compatible with the QMP(QEMU Monitor Protocol) and has complete OCI compatibility capabilities. Meanwhile, StratoVirt can be managed by libvirt too. +- BootLoader: abandon the traditional BIOS+GRUB boot mode to achieve fast boot in lightweight scenarios, and provide UEFI boot support for standard VM. +- Emulated mainboard: + - microvm: At the virtualization layer, the software and hardware collaboration capability is fully used to simplify the device model with low-latency resource scaling capability. + - standard VM: realize UEFI boot with constructed ACPI tables. Virtio-pci and VFIO devices can be attached to greatly improve the I/O performance. The overall architecture is shown in **Figure 1**. **Figure 1** Overall architecture of StratoVirt -![](./figures/arc.png) - +![](./figures/StratoVirt_architecture.png) diff --git a/docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png b/docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..e46e1f0bd2673ddf65794ced63885e2579a14325 GIT binary patch literal 38882 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%0D;uiUCRfp<22YvMu@m^>lrET2_*uN9dk`L$85C7 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 literal 0 HcmV?d00001 diff --git a/docs/en/docs/StratoVirt/figures/arc.png b/docs/en/docs/StratoVirt/figures/arc.png deleted file mode 100644 index baf5526d077a452c9d8a18af38638c8db9150d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43877 zcmd?Q^f(I(lVg<>~3E zhK9!O?rvXS9|QvN@$up1<)vd~6&4mA8ylM&o3nATiH!}dudkPs6t=Ok0Rn+JIXU?F z=yY^+W?-|`xz)C|w&LO(4GnOpPiP-tw+~R+2i)xgRswtgW3iQx(>WJ9A27V_1AzDd z06suSXxmuvDgXck7uN&erCxZ%6aawK3s?Skia!Rw<-b#S!wg(+<^tG-{8v{(LQlcPy8w9E6$bn40^nsA z-uW&7UUtpEr}Y4MsSgFhdj|_BfE;|lDLx>l7~nGp z09O7-fIkNB{8v|w)rW%XLm~fh0k=mTjxbrFX10F(swNdjH)fqnQu7f4$lyfp{# z8QTp7?}kGD>l|KJw(Zv6fVdp|?2zAY3^>pH=v!)zI5jz%3X~1H1*) z-vWTQIrXQQYW?jPyawKacW)uPIX*6Zr>A2+F1+aYV{N-GU>_eaaIUSgZ|)T0 zlLHV2^5V1Jz6#&IwxJ`?*@TAj(&6*+;O{h<-OMP205G)DQ&=7{p+tx=%haOv; zgO7k9%nH9{H8v+lLsHns#svW%{q^+r_Vg4V0lmJhzBngmb!@J_4bCrIV)VALvD4Sr z*jR`#FE1FVQCXP-frR?_*wFFv-k#nfAfN+*!U*UHx3};JoXL=4 z&h&nS>J?}u(j+u?aRGMsr3)|KYLXL)Az-H)2{xveH|0eYlex}ISjcaW6%*#X3pJh|7RkCVViQUBwR)G9EVJX z!g${MZgM+sVXWV{>V$E6AyU5P$a)zx^^(0aIL|i|Ht5 zSPch%UYClJY@UE6q$i(cXLmbmQc==(sy`;=rN`S~2VU;vjAntM!IZ!y*oaCZ;zALLS2hYnF8velT(rM;Z?Qw%ZDtmg2NIf&) zCE8X?jZ;xUx_lQ8)xjN-4X1@}8n&vc6~iw!TEbN+CN7?bh$*l(ssDcGtYmQJ&xJ#?jw+gr$4ecBgH6#d29{8|3| zjE7qe0Nn>ICJJ2?d|j|xwv55FS2(e_0nU{TpVB7ar3jm*wsGsz^|g~?II5LV0Zl9@#tl2@J&d~SlnRrLL`K(0(WIHuOE8phv=x zLjaKbnUzs1>IY7`vwQ~fl+ajUBl*9JvX}72WIvWA+UTKH-gUsw1ang_DdrC3UVgAX z=2>8)25N8d_1mB?O^rMb`&8r$_y@+gUOc`p?~vXV*%;7PCGGHY;p>(cZuO`76omve zI*U>q1HQ>_ZYhoa`<_HI*ceX564dzMtL_@ECRAy*MDC5D-`B@>4b2a3Rk0vjivr_Y z^SW2vD4|E%=%QIAeY6BITjwM&A#DFnwIsO!dbK(ofBqr8VqC^I=NI=@H_{@SLo_6j zC&{3B-55EES=?bt!wunGALB2)UfjcXl*1S$>3X;ec^10&J&gV7q?{i~aZF4u`;i9w z>dU21AYRB`W;2cCkhe1Zk?g$}QOORmlLKyCnacwvNd3Th;rn4#^dAhngMOErJ=<{+ zDKW#wo?7TfNO6YQ+5wjIKEh@^CfiM`X2iF8)_6BT_N{V%_&-?!bbkz8hYqZYTg4vQ z#AA9+5>gY)Nu+yY?)OvJEIJqy3E>u(~6Xkuxa?gWII~?M#atir{UOcrbQmjV-Sa+ zX0_lpS>YEVi?o9*#<$}!Bc_~#o6U@6Hu*mr8J)|hum%k{Ta+*P03Z!4Jt{Ls4V zRfsQ`>EHOL@@yHLlzLWfw0?d;8V!Gy%FX-AjFc^C+NczZm*<0uela^$&iuTlC6C%} zlRYmN3!Yc|aq0;l$Vby6H#&x3KB01Y;$Mu-z1-LWD_whG8kM(Km-yAk}R>ADh<0*B$^P3t` zm)^#*(<%k_WW`kMd8^aga;rS6h4!l@oqS&=nDndvOsZ>l4KDeIaqfH&{KM}-3za}u z03KWAbvmtgQg@X#C*0g!1UELX(3FkBA1jO@7uD`77}cu&?^cD5W=<3@c6i=9y0lX0 z>IQN_f*`QF3H(%=R;qnLFbHQx)})z9f~#t&0Yc}rkuf0~uf@fMp;f5iwXh8t7U8`E zteV`s=2l{@>k1#>=Kpjn#IC4Hg2X(wkt)OLUr(e$fui$`ht4(IZa57BxevR zisDsFG!Ds-6wP5wu~P)Zdhglr#6}?XNjYZ*VzuOc{HED;pT6)%0qxM0zNjEI(FdI=cX&m~AR3vmaAWFJ$HnwFaUytk&XZmJu}LJ;I^|Fi$ovz?xwtLpAS!4_}eR?&=m zQC3feG+h`b&nKZTfy1CC66PRq@h?~;ZB(?s&UIR=gTr>G`lfx`Zi_wWf!PJSfvGf(0jQsYD-rr z$(ZyL&|w5++7A}KAP#mH#38??NaGJ{p!_qWXCAHEZHxZgf|A_X6%}?o;N7!dYHo3= zzH?fWa*diy_x%V>5#M`l62TY^2Q~AnI@9}AWIs5YgZUq^F@S? zrmfm}1m7wh>;+9m-u&81GA`k1j!;-Eua`)Qxy5BJF)Qysd*XeFA|=DV0X(w2V5OTq>MeaU;>_*4EC0D#F|l`~XuJEf6NwDgvG{K>Sh z)H)W-b^3IARrPi%7-ROpK1$tQ{N_Y~$woUmR_V9s)}L|)cAtM7F|mtGHspuU|8g z2o|u9uwL|f0zWTu6eg$MLx{#hb3(qyI~vyG;Fet)b}#1`m{6-bm8rQu#6ta1@M$Rut-&&xI+8 zfQHhkrMELXj+P?(iqO)bg1B#foT_lD{O>v8OX0f>Ga z*V3g_nj+)E*+A}>*;>bkl4!B1H+WGL+^^c6Bnf-qkWDvOF{`keJ6ucWSfV?M@|}n` zPQvo2wkH@+#M)E3Bs^fF5nq{`TQ^tePf6?C{pxidS#D`n)G>hmO}D)g=UZz@!<7Qo z)h9P1d5MV4m2LFrM?`P=O$0(wRa>HyS)?hQPKck zN-(ldSHfdf8%c)K@TbR8JWAA62vBEEnln2{7N}FTHY!Q0tk_{c2y@j=PUWACJ0VhG z0D;VgLiDYj2Zvm3T=%}U7R0%uqkf>HSs-sD+{Vott(ig=bCkcpdivSI4GZ%!-~J_& z3gw{s(Q!b-4*Hiv3F;LM+g5WXgN>m!8ht3_U746GKOSE>Pyy{YU>1S|XJM1Gs~b|Mkj}PvVtu9-M0b zKpT(%fu{LuHqfrf6O@@>H!Z$nw4pl~5B>4Gi`$V2A~6U&&6^lWfqUPslroko%a|(c!v-mgD;G-lN5Er>x}Ud zbwb~FA&&sF&&yMaafZH|6OWT6LSLBE6m{I^_OC13%?*i`L(D%<&kr!OM{@!Rmw$Lv zF}F<^Y{m8v{`=Ah5S&Prn})ig@(>wGI+0*>Q;r8`K^|48V>!cSE}e5}od-33hl+e4 zl3gj$0MDV_>#No?ddOlJ7%|DL$ryn@(5h^%hBXkS2tI{8OVk20*!W6M^Ufm)GdcE> z2~T`)Hm014tRJG`3gR{^j*eY%k+4jK8q5K@C*12|hm-`{h4RYl_;zT3T%g6N$}OvI znF2nd)lK-wui&OKv*@mARHE6JSI1@8JG2CSc}a7+(-V+0I%(qz?BU3e|Mes9PS=iH zADr`RA%d(_d43(xk>qkHmSX^e(X-a-zvWOukHQ=XfDom7i}qvT1t#kd2Axk}3c15X zRNEaw>pEo&XATd8Eu`7lnWlov%n2SGf(K1mxFZRiDHu5dXBtlOB&@HOf1JPH_^i_W zyB0TCb)u!K0EdV+odfiuuw7x8$-$CE_a}EF!Wi~FoV$_WZh>xFQe`ia1Dpi6(cE`| z=1bSV^8%mgK%g4hdJf?h%Q(6tYrg`~_1Yr+jB%atqrc~$V>thj?fprha(`lr zR+ykeYZq*9j8b5xJ+Iuu%z-_;7m80dBcV>2BN1wV-q~vA5ixt>BCo}mji;CN2zA_^ zQBvgCiJ%1+h(s8RjFUm2Z2Rc*kGSWZLZZD$B`vQhdq?X+j>0)1C4cB1bDxyP?~lut zA$zT%NE-q_7%cHEg5*^nv(Lc+?*gto;^%)IyS49BtZk-SZT)^rUAovxewi~N(Z$BXWTTwe3*AX?&U=Qi^eZ;N@<^FqjX z3j%rYx+ke%SjRuZ?w|2g31a-RjJ1k7e{gF2;(KRI80s*tzY|h1U>xDBkpJQ4&LO#g6%ba^peTj8(ZvgF;}Br z2oR=hJSP}e*itaA?nFY%d$*qRVdyGn^&oX`TX+MI7Ln?Ww`x{w`Qe}@3kDw5s${~k z(B9W-yxZ20i7FAkWuMY*97h+L>xycf&E@qRhoH90pcKby0#~o+z~33roxr+o+ubQC zvjlAtpt2@$3vQ%b+TaSaqn@PUWESV29gMv9jM^-@*u04t7=};XD&dML<&xhvfS|#a zar5HzC%ri>8N<7-F5>Xz-z-9Xy~d;l6b)*Nl7~SEpU$UPVjO0Ln|iO|)Fc_QsRc4dj;nk#<&2iE0x+iOG5e|Iuc zJapPAyBB@B@X334;Hu=%1lBFx%W&0+flI6X$=Mw9Q>Wpn(}R4Ak7LL%#o`qT#@1TV zDAGns;-8FiS{<|AQc{9&7w`7Iu2(bOMXe1-?(|S>g9k%-Z7ZCQ14*8O<#9d!d+5nr z6@2R#SWZ&CL<2!O3^@$yAs5J8xMQY?^_6J#abxB#-_ufmFHKbK7VWi(?=iO^ZnxsLl_yS8w2*0z z{puH*T{Ln|r!5Bfd3Y0<%oT-#1&9uBQWE4)<3hAtQY*HWxWbGUtJ#t44;p3)El%Y> z{mTVPuTU#UjX;({#E8gSB~V@AW#K{rkzQcog}Y0p`Y8H!W<3VPF zC-T`czv*ykSFl#hUM(^%%)zH^p+y6fjm}WZa-Ec#Tu7KDzstI?|Gp4!I$35KG(8Mj zTKTh$k9t}XR?wkoem%Y28CE2wU7J4pfj+yz=)OJ0gTLp3Qec`)`ol3LdK!|(jw>B? zHr8Bml#+HQfZz&nw2@eDrG-yjF2umxUFY)swBgOBZK8nwGNVW;@t-S-bz5^B?*%&Vn z3l=^2e%yKeA6oRc^0H*nM`TTlN~gvp9be?BuA7^N#+?-=DpL1z>BP}3WXQkmQCCgI zOylz1p1NymQKe64V`wQz=@CO(8$N%FEt5(7oRVN*A*J%Ph*{em17)3B^Di5}o!=E7 zuJ<6Umel^8NOvopGdubB-um1kfL1PFJED21=kw35+N&Zv?w)d0oZSb21UCtzw%zmR zz%LIihck)O+& zi>cUpiJURy4wVW0QqMxM0G5=|t@!?l6<3YExOGjwPXn1*haHafFIsW-)l*t-u8--q zOBIT#OJh$h-O32wCfR->gpX6|!BmnP!a$vJh?}%Po`P+~49;eoD{c-CUfy+x=Z(S!^0IA}7pa77V{ySfri2L@TwzJXyW$8rhX{ioR5@ z?~DIBz0;RXEv%+bH}BL6(lLp?*usvnpnVQgU&kUoLScI^-@olli}6i=6swI|DyiT= zH8rvy-Awa~Au7p+-3 zp9nmre58n9EM?@r#8C>VFDjr>Ed`SI+V7Np3nPLIa}9ZQEi}Q*D^2ojtHaF{GtlF*PJgkk#cR{mneFX}YcP<`_FP8ZA;n5dxG2exh%NJu_WT~XGN9L?Vod7{zcd$b|d$Jgz9r08) zpTCTo#0SQMRux?3PpHeI`|R0n6j}`bGE$&F{~I?Md8vxC)Sbbaasl5Z%Z~^6T6Ozjv9()RTie(tvw7#(~$c4Ugqy4nrPOA4S+q?_H zNzbwd5u4^plvA^@#~W@K;Ah7F5Y`T>^ep-nSvz@cCuvBjdvwv;oQk&N{JpPbeoW}M zLb`K;D^-GVfSNqWKDkc8-n4Z`v2~axfQk~?oPUp-t~vd> z{Sw}qJ;y5IT0!N<@GsZu>{HE*@~%Dc`;SlQWx*Yl6!Hren~AE{9xoFwS_)Rzh-DAf zXzGTzMWIx+xX5EeWu}fD?Zi^{o3T!>v^C~GTt(5A3Y3LS8WWh+Oxjurm_KG9^-0jL zdE>~ZZX=c*mT+tHIvuYQzLj&3boS7+Tpy!H@{M7<$v_>jp48wECVnaJ2m+MQp%Gy>s7;1N<<;3)F1S0qM&TwGP z5PY^xBW;HpJJI6t7)Sf^LgUocz@*PM9h=J*jznu=fpMt0k<=6UzT0!8>#78}TBM}? zCY4Wqmbvs~qG(I4+e`d}$RGicB7hZF6RCeZ2m%6?>-oxY$qwElmBBrf+n_O!P~Tk| zJLBkhx9spcmDkAY%Y;_gx4yYsJx_C?*dZ>Cl<%V2QHk#+j%=VHsUdM!Bgswn3A=2^ z+lSqPvgVdhUkX6!0@LbomjxYH#L@@V%a^s3t4-39$!Av}s{lo7T&!j6c|FK5-z z2OAigWj_)y5#=%bTvua45F-<^DBp2Z(3nlp*3@~g-Q47%u67Etc3IcZWUbhT@b6mZ zCWSrF#%h-g{dzl)1gwxFOId@5(R#c!hJ>Fs7h+5aUFCgSoH(8`8WE#@bQo-O1_^uv z&7D)_5Jf;!TPOC8npQpB;<;C1t|+-hgIx@=d((*DyWye^lH}EH8A*yf;$P7XWoNi< z3!UKR)#7#aj^@_dOHG(KCFj-V=DHk2-?CBX7Nz#jKJ$gcgY?@=G_jenRk{G9;mX-< zF66H9d>)?lGg}(UxQ&(j8>_qg0HH~^03|_>$krqk=Q43op>=R zxEF)H6-SHDCouRbr`}MY(aYocO5tQRF6^QO#YDsg+Kknihn?0|tElOGc-w2ySc+H# zT#?48p({4TFPvtav$Vx9eUF(Jtn3+alBlw`L47l$5$5nBXer%Hjn9={RBY0C(8IL& zOIl(5uLGEXI*g)}R`>KA&E3$GMN^U3{rj(%wBKtgp@9_rb?Etx^9ut=0Siu8C4%35 zoTa7+`J!N_y-1nhae$p90Uf(&x(jax>BTZV5!d_KzOZ6j8*K$-^ zB3?twd^S0#X}M+4xqW(s9Hd;$ZCDSS$G@Ls#zV%0=#ie&pdycGR!sue#f}MeS=LK- z2dD_sT2n`qak|QIlu!Fj;YBFzDuLGB?6Ceu7qe}*A&~`B8Rl^y<0d8rQ)u>6oHB5Q zF2^%Andl30gj{O1Wxtgy3`lnWt6G0#otw!%{f=QO`{s4qdqFigb4R?C(!8wss;^x+ zZ(nG1-JyGgL!07Ck7*;>IWy4*sQ3Hb$LGz3IOpUMdhOajMb=(CWngMHP5y4B{g^>X z_r4Eg*#CE$@jqW2VnHrMhDp7*pXuq>Oc|QG)<@&&RXEnxXuEGYo$c;F273yY9GAJd zu!qoK)IP~OSR~OL6Q0VVIuuH|$zXRA&-OX^uO6%uy(%{obK{<`h>LuDS;KEVM_KHw zbUgn6ys5=k<&GrnxO&#z#%~y6f02pTf_(hgb~WH>@B1%HL|0*2-P<#><5IzF4hNae z9liZLpJ&B8lWDZWYgQ2td1Dha1zW#ed3Th6mcq0Z#NrbbSTyLVHAQw`9E?9c_4}JB z{g4Cq^@n%iVLwEq1wX*RYUD~ZwtDzOf2o3rsp2}K1OJ)m$q#w&aLyoq43E7K?|!y! z!(_oP4~n$-TCk3N%^MtT3wDv*9MZ&5PEx#lyD+VIN_z0wxf-mKF8qB$?pE0?gDBes zdnf_VdXJb={XrHL0`UDH%NDhRgs(DAGpvbe( z_5*}Hi>&{LZ4RYo2Ux8rikAbW+;xa3BX3$U#A1n)1OhWsc2sfdk!IyCJnP7V7TVip zaEo+=Mi@vIb*3755S!OuN!6rLb8}ZX1NN=FEzJ2HFkx)Baf3^XanM~A37wFi{QR)2 zPZS};oqkPBLabsZ>HA~duGJ;6X93578TywW3W&z)a>x-6FX0Xj{f_5` zFNP=5pbZeIt0MK`L}$ZVKg84VI5DZC>~{~LZ_B9Z$xDbP+xQn9i#7V}RNEVv@D!M+ zK<7IY{ci$Nqs0TVz|Y|$cFKEyq9pnx@OSgs@B}3t4D{lV&C6vL_76dsP!4pvo`N|A zCsd-tElEAGf^AI;TGQ%Lkk0)tQ}{CB-iCgt-5KYS6P9x5<~z5_IhNPMfr# zjkBPJ`u;@&RYJ$_d^|W9iYg<92D)yPh7N5nWu&z?e(~OR)?(EoWt}2QHR(z;w7@ct z`w=cvas(hJ34uAB_wUaJCkwb+nA<6Z_iY*lP>|$10~#~$kHk27e9tdAvvwMmNANzl zZ8T|?V&P@Qz{A%Q1MF{Rhu3U8aBr7d%78V=$NtX%*lFi2{P^<^oB(cIqrjKx!j6t^ zx}iGF`BwUt41yAa2GT@7zO+C%Z!SsZc^lnBn4;ST*rjE*k`jSUTd?b-}oDZh?HTW}VR49~e&wr*Hm-{Ls zB1Xv0R6=KmngvTtWjoyaHeEDK_|sbN!Plp%y|Q-eZ`Iv-MxgR9SvDa!mTC10+{Sn( z0Weg_Ewx2o>g9QFrg)hm+6swHy=^}H53G~V5X$DHbZrk+`<^w1!hnr*n_-o)vmkPh zpifJo$7T)!7@XsIwX|?S^G@A2mN|W`mmNALXw*=htpiR>JH|tuKP9#yiayZ3MKsf)a;J4<*L)RjY z5yHmi`~h&3c|Tr*7A_ioN0Kh96C(wevPphK@Cl`mwj$5i+u(Y)CGP7Ztx?Pt(q#bd zYlrU!n$6#?cA2@;xnFva7KvA0IOq@gjbXoxI|(d!FSK-0A<*TZexZF-hhwZr3n zKvNY13Mkbt#>V-F;*2?VXBu`(Cq+@P%eMA}54sEbP=c z#A?{6_((3`PijGX*x9R91VN4;@z7hIwbj%76RQggW8prX_mgn2{IxJO--`WTf6v~j z1ETT_7wCOP%lW0WX<3kzjT~1L%EbhZAKVxusjT>u#3oM|Mqm{n88P!LbhaWe+(f)- zUs;yfwA~@!tXgs@__K|tQ?)jDxI!0|K(Nk+>j~v_K$ot zV|%4Zw|0|XwuXjIEj>o>a6}HrA9RDjZ5lRi=T`F?6OK5#?eTE|?9=NeVm;g1ONhK% z@C`6n3RvHkuo(ola91-eh#r5-*>Z3~X&ZQx;91K#J%JcEyoW36cmE3H#4H}as|*NWS>rLz@&Y^~cgC&k`$IxT!U<7Gwhp= z4l$yF0%BD84GmSa;i~W+fy|b{6uSoVqohMp(2kpl4ptzG(;=*R?u1SupKJMCTXWX7BK3m3% zX0*C-om+-S9X5)EP)BP6XSPoRK5FtlrQ;N6{IK#l_C@q@k zCg{VD&{!cfAAZ6V``;|9F@IB1N3O4;BXOVEKE0E(Pqzn($(%?Gr>fgkBSZRY436fV zS^cn>Un{C;LK?ie3>8fiiMdHG-C)U>M#fB+e??3E`4{kPWmR%W~&1ci) zusF(%aIQGXH7azs_(I%coF%RJZq_Bd`8V8SxE~%(TC>`XSWlV8mHMwl z9v``6#cacAOhC$wao@bXwN>_&cIlmj?I)aqO5SZWzaj@M>yj)`HB}RRc=o|`+OvM6 zvd6lj{Jn~gi)xW2$Z+RxP*?yhyeqZw1ke3-*hBsCJbkkWq?iB z-eyF^3adAfkEa$@GbJ_hS;+a_YxK%Wsq$99a5aY0^d&tUUEcrFEnIo`C$VIYi4+cO zoU|GKpIVY;@yjjv4P_&!tMp3SuF`hFdaYe%47h&Z%~ ziU+A~x#pXLwzlL}wM3vH+II9zZw&@kS-`)v(Y~3l<+`g^do8)e(7bibDd!|G;X;WA zok00>Sg^?n-rXr-zs092)u>;D>?XkK)=Mj(&c6+2XRFJ_F%`8+T?-%n5Vsa9)(Q&9 zY|;$=C&4z{bKdop5c7GQVxuUe#UQm&U?dC3O{!A2;D}}*2c%*!KZ7^Y0EeiM)huN) zM)t)nB6Ar5bsfnA;-Mj#!Sl+*OQUgwrQI9m=;!;nQoBo+?8wRi%oszHpNjQHsl%Os ztCr`6iT1uX|2^Kx+=U4$4QPaD4O^?x*_!inXFUWxwx!dvn^dPITZ2+FyBcMG=t`BQ zY2UXwhEG;_sdH912gCqkd%mRG`~)0M;#unf1XJ!gu}8@^^+&{Yf~(KnTSk}fEJPp0 zyjpaZh|RSdF5a^s#X0bX9>QHO;0F6$h1X=AzlHD3y(VWxdySH~z*=R}Y-=e8()^|K zKloeP=mY0}^q5LYn0^up_0XY_^;~%cof$=PqCt-UR(r~iFYHA=5Ed-Yu%o~1mDIqE z@>v+$A2-2gC;DQ6pD_1%O%X51d#qaSSZC9u?#vWGCuS^T#r)+2`}5z>%|VyM*{GMa z5sm60&*}UvD^XZ8SDj`8cg6owz9mtzKGYxiF}}!xSG9m>4DaYUus>bfK62mo`mpU~ zY~hcaG~;Db>U>44oT|#8>^JMzn(IUR5k56R3gIG_9HBI$>s`*lNpT%Nmp>#K2~hgH z=IWr~$go;EVlsW560<|?sritD4H%p9F7jIeeomx4-W%EgQUWX0H$s(p5N+K=8|GJt z+!@mKNQj6TS z=&u)<8lX>C2Eb3$=Z?V@?xz6V;pirZjg*$QkukHz-i|Aj^E;ZmgYQr-FRqZcdDi1b zxn};+SHjQwAA%NkrcMNeHV=d378I`7)|F(7g`@MXm{x4o^{>S0MO>!Y?^+A;l8ME} zyt5R0({SZs@89J>lKRHQ`!5hTSAr0S3gqhBnvYf!@dIS`-d>b(&tF>xDM}i)GtO{9 zg734B2M>3pcOI;&jvBB{&-Y!>*WY?{|8#<=fHTFN#dSQWgtW+R~U!Be=fj$ zK780NX(a%m!t_+HBefoaBvsbRu#_6(QDEJPS;^XLRh-P^I0v~i?Dbq?2mB)2G!k)e zw=}c$c#-`PaDqf`Hd9IykT0H0nM2H5Y@~Dcb>cd@Mek#hqtC@$lmnE&9j!drv`VXf>H-DcePVyKU`V2+bLZ(==PM>>h@%YL%l^GrC1H>;Xqk~ z_UJ;!%r_L0?c=k)Vh%^v_mJ7}d5G>@=ujt?Ul)Own>r+Q^+`<{36whBY~Yflwwe=c z#Q9+sHZ;#iY{`}U-+-3z8vWl99OCd_kod9OLff)$m;Rt+UW%@`&IAz-B?XvF=Q>~= zXGYR6Mhf@WF4R9VKg!yyH98LY0r7v1EEvsE&ELEZh%YHO5;Mje_!`7?O&u zCM53%di*0^KXobplYko0{v0X5#@0Xj@T!yb~%4%@ae`5~I}uDvJr9E1~VZ%Dgc$u4=U_?mE6$Q#!F2yCcI#GW=~b(R02 zH19JN>*g0og>HXZQPOGfL8TLWO|xy+8ZMtSV7MD{tL2oZ$m1OvT4iprp_vhF!d-Ub z$Zz*;yCD$OS_@lfe|N>G&>VcX=aNSJ7USY?esZcW4hQ&Zh2CUjpnm+^&HII9PjQ;> zS7Dq&+KmMM78b$-H7>@Oo}3S(^{B{lU*-{|5Mrt_Q9Xwx7G-7V(B|c1>$Pm7lp#jBs9mYPy2@q=u8_L?UWoHwkv{d?z&j%Jv$iLvX?_@a5IkkSl=rwl zXgx*tzpvdFl3KD5AkuuQA{(H5zp_sliY<)=&B%gcD+4z5GrY`5BH`1mw0HWo0=#`Q zD}xooZv+g;t?$Y^-UE^Hu(7(ipL3H&@9p$BhPKFYh6ff+g5C*Pp!#3GY@xkS4H=$M z;31t+d?X#rFMHi0eVOj+RyfeU+A--s{#`-#FflJkxaO)AM&=@M{{^WFyB;Gxta1^z zNg?7&)C=u`?5RvebAF1>O<*NbRM)Os4Ey-x=$pH{hdY_s#mD8o0BchF2->4*7+LuF z;$A$N0qNNP&M7(h;4{kjq}dB&^Li07&<^M*>os{0h#TDSRoY;7JhD<~o4DAUM_KYZ zMj2Khdu3l@Se12doi+@P8=D%m9#4@Hnb~wSAGV;SW77>S4Pq9OCdA&~VgG430WB4#@PXb%ia> z*S-w2Yr(`22duN(LyBB09S+{clhz%-xCi_e*THrhwUOHv;u?|{uAvou4PW}!6>v1R zeU2AuFlnVh;dYCE0obZ3RYo^_Yp37Nr#6Z$5&5XiKL7bIVgUxpqjYbxRH|ISX8KX) z{-kd2%Nnsf;_@ee^7_Ga3Kxon)@6O?B8gK0W$Mz``uq04?<;1%0bOM_B*Bbzx)^?( zx=%$xStbX0)Pxt!6btjxMY(HrZG=~-qEuWZ>%gM(hc0gU^`WZne`U~t-Jm0~-vtcV zC0@w<(UhB*rLsC(1x$JvtnF`z-|~GvBkfa=x+8zWKTdB%x%~!GSnEFCtls4g3GgbPAkkt~8NMZIKmPNPPq{J`)d@%r1hd^~u-c{^$4ZyRj zFfeu2@X$Pw1=()ctd`FICRH&;o<<+50h7reC!h#F#}_Y*54(p${;#>AkEX6B!BLtT(vOi zA!1?zmxfo{bC7%2YuUNb=riavevis*j3p^Q;-kyfBK;|q2CBzp^K zy|k4qEo369x7%D;-4>2y5R`P2C=`kDkM?pL;=WKPK)VVO*=XTUG85fQAd-Vw-k#ICv*~U`s-K8<*t$wp9G#Y$l#Z4XS z%$*Nx9I4>A!{YM4yu=MY3)S+b{l*qKu3VzgUt2(w)Sr^bo>{lr*OBx^_%qwLRW~oa zFVm|b;ec8@hT0G4l(nFua)S>X2!$(Xx4&NmILLP~ zJPrLS@~z&4ti-u*@XePi4+18+GpRtGdYfMBv6{E#&qRVIV!!3Mn!aYx&e|zys5EXC zVP8%E<|WPrAHyOHMy7bUh~GczsIo0(x5J{KB5rkg8`WrSGl)HcAMDMNZB7f{YN^W; zJ#F409Z~of7^s|4^c7)Btn6;NN6QU_JQi7z1!01;6%(fUiPaLar_9tk?=Vv%EGXy( zc=yZK6xi6wlX33&ysz=~?$2lI^pU}=7x{!AfEUb~j5OA?Jpd~Uf>QJ1s-~luXD;e` zJEejd3QqR6U-dg{>sKnyKikA9x%8u-cati#nEoPIMN`X3b zz7sL7Kayq{$c~>=XGmBHSlJCuzhFq(*KJc5VpG&ZNWYr%^Rk(1--}CKZ3D6jbD$@@ zo?*d>xM3H>^&PkmOxoj+Afg|I{@RQE+dV&C>HEwz_w7(+vd(cVibR%Y;|~PB%F|n*7|}VB z-13`~$ri3qv+(!-@{H7{8o2w}frHim)&ILmo~M{AZI8TzL|G};e1kq23GTZJl(5u_ zlKx5~wOEH5kq>red?WdAE1OlPML^@C`p<*zv-iHRulalH*yH(Dc1Y+vEc1N4pl?*; zT=(KT0DwkwThZB;IALM%koLdTf*r1rau>RKT8i@H0k0aW8 zWd6&l8X+SsXTTd{_#i+VnD&DHE=_@HCuxD*{U=h>#3rva@?|RVB_X?dPqawRcMW=T zmKvyQx@2d8QPYM6i|!ofP40Au{6IxjQa^5zZygVbPNa|Qwv3};`)Jc#bt~>pPQM@x zX3X?P62ni_zp&mbYd^IqoWW$1;9f5{^p(;&dY$DvU$4jrXFj*c9NaT{-Y<=SPUYo zs+m>%Tgwg7R8IIIsP#9L%G=3(XZlpyb?=NsfIAp-%`^`NbNgsb{XS9I_4~tFzdc!x zpPTv?(fu!i!<&;UdsXx&CuZ?1{NS}aB5C>nQ#GotqbjsDu#R_$OCU^mM$Vd$tJGHj zH{QA3*^a*b1>$1~G(x7pn(cQTa6>yj{flfttT4$qlMEAHOctwya{N6f_iR^Xb=y$; zw{4~LZT~r8_@%=HyN{uMBQ!yEDLc8ViERH%U z#*;QktPnJi%XEK(`;)-@x_VVe>VjVIsT2v|0>xU(|EkL@0jl>)1O-chs_hQ+&)^GP zh$vZh%XA`A=s;1obC+9&Hz1Q+-}_#5BC5v)6Nk&wxL`D?noRzM=-5V z{V-}P=5&f1+iphkr?q9)^++$%Gi4Np*ur<7--DEM>F6_TD5m8|m+1}8S|pm*7YV;v zm=`e0b?%-oL-GTT4N_Qst`~*irKf9CplrFa{zaofrVNdbS?;K3ZPUFO!s!T>!eb77 zip~j}!2ws1#1vO}bc47jIIUhaCq+{o%k}a!j~o636=<*i*>c z<@D^;>*suGavxE#ux@f_mt*^z$Pq3Zsr8?~7S4nIW&apGq@Ug_H%hejBITxb4Aje; zSL92xsCN~Mp#Rf}Yw_W%10|Dob+T^l(y`s)wIi25%uc< zHbgF!{<$pu>tR|p9378lDVI61pRoxL@8rqfRWzlLO2|C3T?fTNNdjBZ%a<~|9ajGr z3P)?>1}Ef=r_mNMwqcpU0j5|5oJH0O8|jKJYd&LGcO-qN_i zR-(*LQqqplj=2BfUD}HpL8x5zf6>15@K5OTIiswOi&Z3)&*8siJ2>CG%zv9+1YlqU z_)7r(JZXt)K2`cY2)qSHupRdpcs}oc6he^#k1rzO+S;88cIzcL)4#2pmihhy|0M}$ngWpHm5bT z8pTl#Ra08jit{T4r5s9U!eU|N)@Fw_r7+1{b+aR)^grz!I6pF)X^ZujiUsdgRds&n zc$oXWei0OR|D|YPU`uJSgJKQT`GjAS!|r%aMqk14hqD}N+udOJR!{yfPv`w+#e^LO8l)Q$0U27lLqO>q8bP|dyOl;#L{e&k9=e;MW9UX2 zq(kzI?|XiH*LSY#{CoC(X76X`TK8V--fPqpdr+|S+#Y`>`9+YzrG%??U`mu<)$e?K zyc{@#Rlvu2zku6EMM4cN$Y$sv>A)=G)D(f+g!zAuL;Tg&gP*(7qoTOlZ zkl(v1_BP)@FNPt!q%;NDp=$NE&M;;Y)?FR_%bK?AST?|PaiJIF0mt<|ywsLoO&S<| zFN)zwS=y$4{xYFF=)>HsHjv2aSx@zVohkjETsrC3x2YCF{3Xv?7rvn~!~J@T&)%qD3AFw+mE3;ZYDAg=%4~ zreEkSXS3Zz$2KeX=uZ}*30jgbOHR!~!5;6!2cGbBp57#rzU3OLJZY2r(cMn3*FbcT zX%59cF{k^G>m|B2c0$3h@~Y&O^P-++CDaLUmb=_34E6f(dAeKXPd$JQ_TF#CK={NQz(yryPbpH5Xj6>?E+-Jh^e@h^N1?LY0cBVivIwKcKGUrWN z^2fxWzhNqQQNH6&^pH~_F2FnbsWbI;Oi=x5RHV5nb&A=yTIL3~6t_K+vV~UCtVQsbdWbbyS{8A>Di&s&b*}KW>KhJaCJs3dCY=CKOgk z2sAc_{n``i>yaFoFM3s-CHK?;4y2`s4$@Bp)8Y*b+VPUYb0Bm9jogBPvJy~*t(kWH z8#4BTX&w;(7nrIQv^FugpNKCOhXn`8SN!op%0aDQNh*B~B}%=CzKC~ntYq3i;|Hj3 zCB)>QqdPMXVh8VtIn`|xV15wyRi+dQ;nvL^DA7TVM|JNC;djul`o)I}|w0y`gjFqo5>`;o!x^~hSYbg8xUfk2yRve!9yH_?^S z6;oUD54|3%j%k*bk-68j!*0nOv~K|SByiz9x8D|*Ndl>HM3$bv+KHUoxnB>zKz90H z4V+t?sRS%>8)>2x7!^(ZJRu_w0-yqBj&fq1*EN-! zqiY1Z>g7aV4}f+Jxy!9YYS#GP0u)S|R@b2!IxM*6VsCya0*O4k$(&qlD&JTKGY)s| z9mQx5vHg;!sJJY7R!+K;TJj0VFX4}Vo}|N6@=A6((EBrzdJ8+#xKvbiEXHaUeV>{G zVoE{im-Iha}$E!cPVT(}|JT|H4)ukiUr`D2YwY-XwuY z%8Be5%NId7FS1iQpwvTJVXUsQFV}mbhF#5T3m^P+UV}sJXGT?lcjA`m*GE&Qx)|62LRh2m*fAl! znemap?|%MUJ~@eU8RJuR@3r#`-tXqah%2>>NiOiU2!pT;SBNpQ#OQYE1)DYK zo!ixZ4L+;-@KR`W$&i$8P@t^7ew(xVLkAT+hI^=(lcdyjqxH-NCn4pd?gG3;7r!(x z7b4(lrKj==s+aPXmtYme+8y{oQhj3s7p6{kmW>10%h1WkwFm{VeNxoLx9}`f%9q$5 zlFH?wteOG5;qCNHcyYOv1;^$sKu?(Bv3kD10=910Q_}y>%Babdg?$2k)D;&^Z$AF; zR{QYJKrZD&byoq?>w>c~=CZ{Rm-4{86Cv#CeE_P~#ML2U_2jSErTTPFql=!ozBJGN zOKP@PG1@?X)3jG?V2Cd4xB`9&9(K(73HdUG2kF7C;>=#DUt3axJPX`q47cpfQzU-) zId{V#6~>8M=DZL80*bVFJ`ZX>@RRU zPKCxPPo=*H5^$i>Bk3wr89GQY%ub5b)0pX@fyeLrEW@fn{=qsYWN#cF9`r0=K9;7& z{-)pcA?V^7`gpvJu-_Iic8O-6d{oN$WMr|lDX^TgIaMgu(7wa^ZH=I_IsBW1r9Lzl zc}GHEVfA+2Rv)OV`w)$HXU<-t`@FFYK+ChRIzP{3siTE4YCEz3xVG)b3tQW>@d(S? ze4M)Gj)={0&25T*VsH{1O7<>4=(2oHI;hw1^y>|}y?#2WoMit!`9tjzvi~mS?Imx) zI?R6DjRJ>ZCR_KiBkXV~S>yq3PT=4xJ0DWx#-;s;9CNbyV1kBJxHY9X)Ko}}ZYv-n zWJwm3m;XxkeG)>fm>GPx1LU0zrthpUFJZ~)PTi7{Fzz2F37ppYCaiAZ9Y$79fF(}GzDD_EM^w0*ns0)9)-&cD%dR2 z9KSE9j6K=fv@|R^)jUJ8L;i`x@-_%a@0q?%JtmMFRez+Cb9jl#b@NN5iz9J>37J1I zz=0^A8ANz09`K00Q8MrFjsd{ZX9j2YP{k6KK@i^^JwETBVmjE*BA1RdvApKv|4$ve z63fn0Nqx^%mFiVQr?;m|%45SJPX+XYWonJf1wv!r(C{4>-4-bC#zbEE6D|}<|5h#r zc)kW5Av!Kkbfqg2gfLsbY_aodhd?%P7=@ZheiBQI5k_SDMhi8bUNeyPt-H<(VHW1i z`28ww%A|~c=ons5RRL->yL|8F+z&U}N8e#17LprWwq7FhJeCGxIiy?S1ggAzwj0f!~}-9he;rNJ)!dWQ?hJ1@4>M5j?dGsjtS2d#n5NlxH*=_7ai^=Bq&kguEYMM2*sh_~3jXjI@MVe9kRkK@Nfw<% zEI%PVrjacXJKe`8+uHOk#pv&IpVd;zXwASnZp5yZgOcUf8P@3z&8|Q)b^h}0omqFx zp$>A+hRcU3s0z_kU#%DtU2f&~)w7x-&2DxVpu;7LH`mj2WqZ``GW(EJ%3VaZ%^_yc z^eXa{R)}0oE9(`=u4`&SbxHq?!M}%+Ex6BBj+I??)NCMB{#PDnEDu*~miQM1TjNL*>$Y6SE%`y_SLf3Vx^9Qk{Mj?X_h|2u z((>P;x3bmql*(I@!73}_P+W|QN$G}jO%uB7qL`&g~U(x+0w>yEyR?{o5Df7 z#ms=s8iL}}=03^`g6x0&&Z=^Aw>3A&_rCe8`J4I;nJvWVDKhdM$`&2tCWDK?`sqOP zs4mOZ`FL zXK)Bq+%DJ1na#tmf0+^bnnMuS0B9E*ElMwdz<=sdZ~RVw`D3~(J1MD4X|=emxBL-_ z$!`O%k}Y(E8k1xmC{(y;rl#(D;Z#6$TQ|wHE3jF}Yc@>{ZVh=~=^rU80=Yiz zJ=2_W(x}r#-YAsQzx?EL&+CHkm-eZ^+0Ae3)Bdx`2FW{`KDxM17`J~5%wNo-yzhuO zM0mhE?EF1bXx>$MiS`fGDf-=T8uvM9T`lkHaoO$bLIku-)=lDysm);Zppe zFT>o=D!s~*C=Dz6pg2Qid%Q8#R7w>fi!?4&@DW0;kzT9V)_nrp{ihiJqy8z9t(e$l zj5h-?+hWn6nl+gh`mQD4NsygsLi)~Ft2L{0A?x8d^6p}vwe~fuSE@-U@*7P+^H!5byFI6GD&%&6zaJxGuF9%`I{9o!AGqsrM-#ZP)Q7wDb)`b6_ z#MQPo#cXyl4)FW+Zm@3HaSCtur{2ZQ3BBFNgi#}RkSmq+7e(&!Iz856Fhx$?!zJl` z#PLH-lJ%w}cri0)-F5>H>%=W=k@fsZs&c3OORpuc*l2BXY-p2V00!FSdG0v4K!{Z+-xm-)3 z!zSzDixEO1?OU)zG6RpX79;*o7mKCCHm*HW;!wY zfM@uYfynctGf~~ui*z}K=i*WERRN52Ftk9f>u^ZvB(7Z180TlpF)_dJPxz5{(!H-( z^S+$V$}nSgKrpM%)OSL)fssuvn^zr&jUx&bswe61@4nA~C9Bop8UewGp@iYIoe6J- zd?*3eLx>4qN}7WBfsw>hA%~9#r|Ly~$|2Zy@wsTjFE3_D7=1(erQNmO7OUD%Cd)Vc zD$4;~%V7ToeyO3D%Oa4e4{|jlr6%nzrY8IO$y+7;&@no)9G}y2H@{2j+;5nPYf*I~ zYTJ{am`&CpZ2Nsiy2QmCT!vw1_t+*H@-PP*m=rV5)pO^BOHCsR<%drREmgsi8 zA+7!$K8z;QOPB^LG9hD~j-+mH&#I>%SgbmB8At`;qUA0d4_R+@4IaPK|JW*{@5>jM z<(xGT({c#Mq%!!5>gU;M-k*V=g}`&l=Avc*$jk8a2x(rRYU#h3zI;eP)$|PP7yp|! z1sGCWX=Lz@{-c2J9DXFDzdSjvl)WO(?-SfB;KA@3>^dR`Y`(C*NQ+7;h>(dHdqrJ+ z{$weqe)_w`IT@~KX&OKf{Z7GpdJuk~IgY-e$uElx(4ecEV;w4rMaty=L{+{LTepTu zceUSzHTntHJ8*CEk3>vOiLS{LI1q?};P zgY!xLunao6NvPVM_ld8SaqVzLy@9~z>h_9 zv!-ITfb)gE43^~mE5K`N)$*RK7|3MPiL9^i{ew=g(XBqe1~~HR`GG3y_Ph`!#BbCWb&zF#pa~M?MLfF}nyx&A1;TFG#0K zRqbjCiK8EJkZeccT}0{vN7O7*+V)uts{-@AgMG{T@$k1zNL1-oO~mcVK1p8Z7$>D2 z_+DT8t=<^%?_TiUafsI}TnC~yC9jF33|K z>U7WbYrGPIOlU#u4i(U~k$PrFx*}*i3&}fA7TqFkV@$LR$X1xbZtSZad_xLPGTZInqt=q+I7}&su%L;j<4+?Fe{{C z+kAM0=aYnfi|~FTBvMxuCW$}5+*PRNe<43zV|n&-?m&f`@q0M^i{iH(qO$t50Q7Iw zw>S}BPzTpXMR8suPt}#m`oLzV4;zGM1rMYO97_7er+VD$A6_ANY!a()9dkE|b4=b|N@~82BoC!(W%Ku_p8NI-bA!8< zx>EM@NOHBJ6tLCIW^$|{qp%%Kb-+C|u_Fk(Xw!SYilXjD+k*J|!*-r-T;Jq3IPb|3 zty6)31#jYt%$3nO1rE_G`n+Q(>5Dum{YV)v{QTi2uDnU*{03 z2rKGWmFo{QNy`P0?FqUDwbc!BI9m|lavw{4T^&Pag@iM8?T9^P^apbIl5`Bx*x=Zh zT$0O77Q_ONcxPD6BINM1?)>0R7Wdq)ow0K3j}!S2vHi8gl}s;vlyZVjHG*UO zla~!O?{7a|e{}mLz=^_t33jt$TLcKVoa1?_qp$+lpZscUKIoUdT-7?*nEasH{X9Bk zzZY}YBoMHV5VL?OPuCizmYs0?RyR_0b*jsu|6s1hv}^dm_B-LL0^b&Bv;j-kLA?j@aT&vOAXH)1c07>8mF$A3P z-%RLYWLNN=7B4?b9W=LEhR&7qTI#xW zmruhya=UgBrl3nufn@VVGSgpF7P#1bhh>3$1-4}hTDAcadsxoQ(8v@){=m=sQUhbZ z%7&}<^G_o$YhxoX#%r-!&wkJUR#P(tUg<&j649hDX2Lzqx|arGO(g<<;i*tE0t$8i zd9z5*m$#1)m-BD+bH(C}^ILi8J?Yi+b%JH5-=yf|wZ81WA1_EESs-S@nL6lDw=f(_ z%Py=O|7zx1dcyI4op@oR|GakS0za-NX8t+o2L4&}D<&9$G|>_BuGzn&$-^{go+PW! z|IR%`N=JWLYuHRac0C+g6FBABZFFMbrWjn~bmh*xPjIZG>pN{{a((ros{s+aL&5nd zj~)!pL+wll6h`=51viW29Oa>Ftn_?h$Wi6Y*)&z_-=teqaB-#duoSC`iLN@)!^HAG z=<1!CTmCJQk+aAro};Q3a@x`BJXmyRh~6%n3LWFsi`$u7HeeCSF>knGW=7fQyr8M~ z@Vm-mW12c|yLn+48h0k}^x}AVQ;j_yQvw&Gn|&To-A%E$Jiplaq#U>zeZOLPLeO@~ zeG|Q#EByQW-zVi9_NPw4aM?9*G%oz%1naa^7vs!(Z}J6Qc=R!-QcU$R{plYmv#=bOxI5R$qt^8dMyxSg4u6Zc9KCW&D)9IcrZea~$$rq|F_ zi9`637Q54bPrIY$9;+N9d?zO@^uC?&%R0|cnTAkl!okL{5|lq%M9#>lWvAJKe&-dV zf=f>tb=VuUR_q1(D)R}Y_6dTUXfkXS8$CxV~Tmr5RnhNm!%nc*^2J*Rj%MtbhT|srT6u(H~ zm9Qub-d2;@0Xrkr*}R}PEN|WuF}aO?l#%9)=IemkQVwV$@i&iMKkGC;u+1fl)mRvH z5dDtg+2vo#aNlo!kv%lSjljOuN^E zWYor@2`H&q*nksm6k9o`Po-Hz@;I^2r*~2p7k{&jt6IL_I^D%|(pc!D>LAjC-H0|& z$^&a6%6Ka_IY-g{nx9fwY)NflzgX&ZlBb88Cz0xC-Fk1x8S&bp{cqy!|Jq_%LyA68 zjf_b8C|0+%q)h+)kFj>^lY1R4*nh&R{Wt7^73RC(^GADZ#Caq2cCTddk=K7Xy#K4J z|B>`zs{R&x!zBt}1b^U&hqS{R>>BpnY8b0E3ze}D;WbL^HxRuMJs$nRMme?@(|X5S zR=pOHpN7xH_|#+w$6o(d^&z)-q7c}W{~IdJJgwosG1~nKbfU%HpkYX=U-p%)5?49r z(aZN);*-`;$wkf$%LS8%F+aGMZaJbGMX`m!tGV-2LELR8|{h9Vwc**vJUz4Zl zB$FOZI@SMJ0Lu!Z=?_wVkP%+A!@YugQC68JMHg-V(5QKgpegBda}A1ZU5#DF@zt@o zGzbj65E{dEZ0nqd;y>9+>aSu=iVqHK3A@Gz&SdILzJKZB7|RSC(27`eUw z6y{XMODGu0GfL$XM_Qq>_&1CbV|SKF_3%B)wZV{`$_Q5N93%!(OF#E2?$0|bGuvVd zOO0S}*;_KE4WXaJ@vgUxb8p!9Fmw%oYOFp?!#ANdQlg}+FQ3Hz)Z%yW>sA|hvu@?b zzN_#z_PBT)w?1H~&ur!>)8%-}U_IiQc=_u%79KO82(-Q=N4h>;M%44gP5{phuPtu6 zM0;Z@#mM&Cq8m!@lSPPwow@2tfpWk^l>b3n{vT`RA1nNSByHHk$_L z_8NaVD3xCj1;up|hSOK)g?AE@8ig|uh|7pYn~!&{y(3+UGX2uYzmye0SWxxaPntfQ zmx$x(OHv}QPeAzI-#F>(IyT#%yPQf3ZyRHCK&Cvl`hJ;Dh8Q&$1E!qfBCN!r(%*A% z(sHZ=Kc?*2nlqY23Xub|l@|QJ(~0G!y>TSb*h;Zlw%lt3eKh!4`gV)1yM>NGdbJA^!o`q%_h*lQmX`vTxT~<6{4O9=71C*H17E?@?u{aZP{MdAn3cx`>@2zC zp7{&5@NgR(%B|x?$#skJAfu@(XELjh6^AaHQhdb`oXq!gn4N~=MiB{_ck5V5woSbX z@8o_ZV~)(yAiQ#6Ir*>~f~-4CA$KpS(=?M%#Q^1XzfdSf_lrY`#@T$ou&eL*{9OyT zGH;LW1zU8dKcJ{vd? zaQf+l38{7%qqJKmI6A+;PS5bP{Q%;t1ge^&%rq~|=z40OG%>p4h=hFm2p@Z1*P{6e zeZ(-X@hkcLQ)>8Vi<8>aEHyH`wQM1Tm(B5&1+@U6|79F)#`9@zS~!>#X8B^!7};U| zSv)?gU=kS0_z11OKf2(H2E3z>$Ln)gLNZkp?c(>>agv8`h!hjQEJ^PJmaT81>x2+?hwGd zFRubtRBxZ<+@EnM&k+UZapJIuG zDk?A}wZY-~fQ!T5+i3eA7e+&@e%*%GsYa%p2WX+`7hVWGIYIgiwm6Z~KxKt@ofhV` zc?!gZe2ps6{{+KR3`Cag`W?_3g5#y~7A@r+zWrvp@!+UEKgir<6*C|~w6Zegg) z)aQ`TMwGxnSHyywf~s=GRHnxIuFrrH_w^e8Zp*aPIdWq~*<$fgFsl}hDwz!$eJ9t) zkQE=MlBl;rknnt^MZ4P`yBGf>X~Yn01Y+hp-=i*ducEzimKfRDyk`Rbtf&X(DbyY^cQUp9O1$2_nNLb4-@^&Wgd~!38_E3ED!h++)&v7pThSm3Mf=7;S@aE~pq;{s+uHroAe%|hw zFO$Gsp@fG!K#|!;=MEutzY_u@uc1gW;Z~NnGK!aHrq(&cn7qvDU=^n-Wv9p>b8E8By&{mxDzI2PZ4!4H9xU(c z)G-`2;%hNwF3d_Y9TRO=5Qe5pa?2bp&R{W3ZXx^n%RDN=NvmZa<Y?HGUuP?wHSXj{Tq?_2TKgo!J4sX>l*Z7e z*-$)>dt8k9OJs6pq5362K_Ar)4pYaEB=P>@#?77^9HN`02ncP(G&!eK!2Q&hMR4U^r{2EQTF>75b9rzuW`)ijo z#3!<-l4spyMY)t_Ia|%fZRmzB>a>*4Y6H%6KP1Au3r#aP$u10_ z6sP8PPhH-AHnR*Fm%Qa)nplEgay15cqgp#4O}vY1(q0eu-yQ~H@%2QDx>g7V4)yG7 zSjBZ=uOKmje@}5_bc13+CfRF7b*u2~z)Ly@1(fZvm=ofYafi>U(bQYX3tkxBJH>XS z(PtQXb47LDX$WXun2!tCC?$5bR)>l(LT!zJjWJv_jD?}Tv-<^9*W{Z}rN#`D^Dt$} zEgPT=g?;|)bN2Hr@2)=&SRpeIjSf>hvxDJS3a~!g4?`5t)?)q;w=Xh8>GTuY&F4wh zyBSkN%Ta!4BkiVO{ir5IPHUMg1=SSAoKZV&`*4JvojemGju}@t`H`{ZxADu+U^YXB z&H$I65zQ?IMI*%O=drZK1}LAp){~V!Nq!9R&Y+tEe9>asA0^&9_f@l1l1n{20C%=l z?Df>?d|u}kZHFIWYkjJ>TR@raf2|JS5<7NBDa^#sqm~}&s5S`UIjNrz%G1$5wlt~) zvgLl-`zVPuP@UO5LeB%bcn(ZF?Wzzx6!d790duAtqy0^@ zIzo&;&#YYfvKw~vZet}*$CE&GK)`kxzh^TsMy1!l=z3^Hp!4P#_lcA*z~rvFj;sO- zdm9|p59gI<(@VrTc|+d_vm5u_`)(ZcK2Zv45hXmsPd8Ao_UhESdY%TcFFHp&a7)`n zrk)n9@vn8~v~f~_b+?q=e`+uBm)M2oox>Y74NqWhA*8R>!6j}uAVk*7DH!ls8L-?h z-fPSKmXf!Dd`eHhQ>hu8Ek)#|#X=}vvsz|=Zuc5zEMK)@1#I{c{5CO}=8|96&xz_e zV;*y4|3>#XN9fy}z%F{Z6gi}JIG=RT8Y?`qbaj+Q4{yE^xv7bLB&wrBO`@%GiVTrc z0tnj>xN(GTS~nFk6%ic}r>ppVU`;$s#fiN`d>(EEV4${Z2Pt^lWmVkyc&v?pX&Y{R9r6 zdNVym5MjC?rEe+wr7zJIbD9{3e)(l4iUw5QbH*>tM^9<(HC-Pogxkj3RuDg6=s79M zyVoz=XPRu&dYwJB+OeuzK(C}NF%3~LD(!`zMAvHl2_x!rAm6yh_D-BKytAhRtA&eLG)Z@>=c63~6B{p;M%i*`BX~ZQ2uhI9j6I(JOZ`2{;x~Dj+h>KIb zY0!t4GBaaTS(27(4L6ev?A;ah)FN<5PM{jkUi(E>BKvV#b}T5^kd?Tb|N z?-5fhr>`1P;zk+t+{OIa3l!T*%ui|Wy|weCq0II~)S=SrWC~WTc%RYjCp*Nib4@wayLb&icj1msy()Cc zkQUU>$%)|PnSq<$=vb$Y;zwWSalhlD#MN06Jh`;1%FX(ofvo599oKwA)`ckuBZ}f5 zXhZDJX2vG|!*Ba6u}*ow`cW9ZB?Zhto+2+i3JW>5R|QJ6ppqJ|l8mTPZaaQ#6Q@s~`2-z7Zk8|^^T(7~Etp4x{_4KjO{ykceS3Dd?s$9Hy{R6_;q|D?Ze~r9 zT>upUJ+70DGL*Q%9*^shaaAak0Cn0-3BxP6r&d&RbY*d4d7u>WS<@cc$8RnVm46ON zgNFN#n0B4N96Nu1g%ZwlgSQv~LE~YDtlcktG$nrI1e1z3otP|dp8BCSPU?>M{%DYM zY8aeWbW*A=M8k0X@tvSlm_QRS_U;%;Ctr+Do%>c-_=m6R_@m+;)=}SGI((SD+E}%@ zMM=$wrLk|7r-aXI*$3wm^a{1n^lB6geJCY2kezkW=Sc-$xbi-yQ*9@9nYdW~N4 z148kJHbDUjZKSuD_U81Y-9gLN5iR*0)j3^{hLMbqv_z$m2E6@mKkOfB8J`^eM`pf1 zpqJR!)1_d1oqU$zqI#I(zWA~^+CRr#YB|_-uL|$S`Ei)>;J%{s|%y1##i_$`WXMo7` zE7YFJd>M+IkkAm3kVc{WPijp|I`O{AO5qnoe$Thm(9B%)_5r+r;#1KVH1jY|@b7ny za()O&48JWB(BQE-RoJV~5&;La-U-z}1%db~K5_IruSJwQwDQ-bh#?H$&ZH6`w0uam zOfiD=9E}P_h0aZ3KpU|d2El7OA*((uTafo^>!4AG_yaL&!03$oBpA4!8@tL={DODMw7 z3b6a~4f3$04f{F_@Q(YeSb6gXyF5&?B=VktLTS%E3_&_1T6Y;e)PMAgCNM*NuANnIw(@nng*8zI#vNF(w)Q^6T}*eT{eT+?CpR3Sp}#fvVeTC*{}h z_?YTJ6c3Sv%Eky<-$4!o0K|}z#YNlhr&O__8KznB7hl$-nz!P@lEQnFUTZds$v1zn z>MFEWJ}#0}O49~uEyN#vXkLjn^$L*^tnB_n93Mcdcnvs9*ZYEqLmpQDi z%|{WynX7${q4b1NPHAhVci+CNdbZu>LTv6MV{RnBC`g(f(U+dG)GSENGgGog5Px>PD$IF+h&Wta^JI9}mJ(SB{X7(E5 zMkU)!`<6*_c_VYX?YTwfd>412Rh_2lmA|BS-b}r;;a1Kv9YGEUH_Arcwzw<)xyT&S z^!4fQe6&J`yG;0c)#kL936%sgU=R2Z?RJ`ck$eT?@mje9jn3SZ3uLcA?)Pn7S{nf! z?jQ`$pExKJ8TLVrL(H8B>@%L#%44N|&iG+pY1;aPmOWGq#yd2?UIhDGZe(JP-$Q;& z#`bZ#n*QA@V>$k@39VLlo?U8wz&10Crre~x=tHXk{|P?$7LBvW;OGRT%#Ru%a#D16 zJ`WAu#1KicE_nb(lRZnkBE8rc@`*>JF#TTjD3y8`Rzk*Oh$I!C%a}44QG#Zh+41KL zaf_6=rWt(o70+P%_RZk*FW`Zhe#D@voh^~8l2?Tc(wb>!IYCXEB>+K8{vmvnoaGV0EQ-`~dr2HYlQ=OCE|*!(RY2)pMFdt{Q+`6x*Iql~pxUp3|s*%0{LMwSyqGW<^*|+Sm6d)&acw7X>rWoUu`Z?@b83xP_N<5o=Nv zQ90eyPlvc#n_l1bKZL=ngUDP)w0iS+>jn_fgxCgEa&D ztzIrq8$RV_I});z!GcLFF(ZGdEKbK3BSGTSiE|<>QvUe=5+I!oV?ibRncSe!dMG+Gop9d zl?7sBx~~BR`iDc(P9D$xtmp1r`dQ+P9ROM=9m34tr)#<3WHWhT=ioa*hw~_3i-bDd zZM@u&V7tbsSQGi`q)|#5k_|R+=PR6nw!qdO6(}HzN^9KK(Q=$(#ycfxddW{En<2a% zn+Z^+kL;2{B~^)PDERO_qMFZ5Puwu74K(bM2hu-mVa!>zyK zdDF_zhz^}~H#F&%7A#*+Wt#BC-6I76=}{`p;gK;lQe2*oGYiWHw^P+g|)(cdoaK{DyaUB%lo5K z=qt~F#TmVoO=&wW3yOZd;KR?^{!2t9e?BEuNI|dO%_~bmF+@W(l>Y+%1oT-929V@r zD`@)QFKwjcaPk11kOR2fAu(7c47ur2BG?(R@Y6Kbbt6E`(^#(u6`w_lgR? z@tBs^%ObxE?Ee(CH;2YSu|XHFSs%kHUWaC`yyP@53(1SX>I7NuP(y(0BnBvw{gyb* z-#h^WxmQK_B^{fp55-J*PADL&hvH6oX(-(;8h$k}>BrlOh1Pnk8SLqphXc)(TFd|y z)Voeo*lk&O-fMgdE=u7$sCRI^EUnHLHser9NNLE07HZ%t@I7pLwY z7L;2V|I<$k7kb~-duiv0b>sQ9_}`Th;(r&jjA$a26?G&9`3_?*Uu9fTC4M@{I>Fn@ zC(R?UA0*DEWhK(zKy#%DFWeW=)5O;TbC~Q+BW9s=T02FZo&aqy@U6~CL%UGhX7r!u z+BgJ#4zVuKg>_mb`a#AX3X=v1qO5rp#!O6Tb>gxK=Yr6ePIE>sK9JO+<8FM4^~xCqu* z_d1Rg0Q9q?_4(Kq{&dV!!e;u>FOKU#Ra2>E!7>BmUo(oX7W3JCTyB@&T(djOj-ln> z2;;~^sDROD3A79ARuo-<^qY9A+sss^PepdU?_Ua=H8ftP*2#)Fd@+EMrt%bx8tBx= zToBdj%0Z)A>iq_7hmLE8PZ~r6D~`Se4$O;}JPUfDv*MsLg?_;l=9z`3dGOjJdgDe- zaXjG=EZ0b2W9^05AH!`|CyP1Y!*1mG@A22P}*3mC@(*qo7hmM-%B` zq7b^EQ3;TVj1^VvPf+{UH*1-ZaQHiyQQOk&Za=zli&x^*@Sp9M#?nY^?U$Fu{(G@- zmtOs0I+Yt-9V)A(RgV;hS7Y;<>R@p0^PckHo0D2>Ib5Z+d!v0RDD%wG_ z(cgw(=|6ePo1__3WBAU8cnl~x>GPCMh z=_WLbPyb8I{sQ(4lms`xNp$Xs<~BVw#u`({_mT6oTTPl!#AYJujKMzA=pp8QgyF>@ zx8jdydL$SiM~Yw{m)ScPN&14UQQ?@0<^>a7eE_S9&#C1}+Ms>%V;lIGjFu%~%U4LYeK4i>**sYI=BEe8D( z^kpHOhCg3KQ#JkJCIosI({d3z$zgGTQVkO~kfw@Xr$G!6ywfyz>!CAtZrX<6P^}&& zU=;@e=LYiDTjx_QkYq5zIK2D*JU;Eh56=XLU^Eueb3i&s{V{^&p=V?w1it&h6D)o# zY;-!}e#{Mh3L8;gyPa62ULYr%`QcBB((=B2#2{KUs=3iRnx5lt+vnMsTYr?_rM|RA z_NjlUhV7a~w0ihXCQG`)p@?6lK(HKrpU_h?HNt?u(@Xc)`D8&teb##3-GsmXaMrf! z8ZITw=}iuvEQo^{u=!3dH{T9Urpgl zu{o?iAbnkUh2_u%hxFO(1Nmp*)6ghxI|8qC?U`Qe_oE;a)lrU#OJI>!)Bmt)N=>^`g|w&a&kF(lT8TodLYvu`mHc_Z6(v* zYS;7j=45D^XiHx0a@wBdg!p41O?|@VYClK)Ru{od=Juz!r=Vt!OjrTu66yVqeU9Eg zu15O_i2;U%6g(1XdgAG2l9}*!vc6#@JD9+e z(3kOdOrvQ&eD(;mMdRf1I*ji3Wx>vo<}pzWbwlC}@kmz|Y{qU0q4w_y)c_^h+ayMU zf@R#46$!1cFz{9;A;Tm*|4JdPzb_U5ylQ!!C)~H&Yakd9(rJX7Y{XJHa8{OfQ?RIr z7j??onqFRED4vC!lHzGo^`4?rg3JGy%uIS?q=rh69Mes_IX(&|(&f|xsLsjz=>5M; zEXy3#0d}6QpQqs`&*omt?AO+JsEOYJs@l@5ky(WDRX`PHv;R}scSbc8v|%D3NN-Z4 zsz{OEdlf_h=@20FrjSS|N^b%JQU#GB(jl}EdgvXbOHb&%N$*9Z?B)A*&+a+mAJI#ITw;Di4KaWs`Q%PDjKOUqY6B4H7AO>7P=1 zo(h9Qn0J`PA)tRr8!MpJUc$wIxpkS<46H>H zqfK;B^>49(jqRSCkpc!gfjDo=6+P3yeICTDSeE~$Oq@xvb8?B<)H=UNm_Z^i6ZB?> zX*V~&-K|g2%T4C>4OmnKLhyc=L%=lrrKVvO?DThj$;wQvm;_m>MLJbaCa)p8-7?wr zjx-+(?6d3iEQ`1+%k*Qim!Mw}sQSQ{A!#XuYEHmxQyym=vR%itqT5vK~-BvXI`|EO&`m2Gal0S-s3!JF-7UkEC@iRbgzNL?qkbkB)EZAR(vgPZ$I z;lom9jUkSX8#nEd)8DIY#E-;e!p7)k0*r&|0|QNH4SrKCm(JMqrI9oOXOm52NMk|{ z6n+*2pA8WfTHx*M=O3O#$-`$i&FdZz5T0m4F1BPqS*?0}eh?;eJ0oP9?_LAr)q1$Aix ztHVH0$Je#n#2IvUUXS1~v@%leGeRKg*H#hrL|Xruc~Bx}z}%%$a7*cv5ivKEGpV;=s4u%f(g^# zDkK^*q&g=fz;2dWazXsD5FQ#(`3Bki(nY)!G;sN1P9NC{oO-Ud=T>(5!~LlpvWhUi zbMFzKva-w4d7nT8YWlC-EZCSDN#8|aNnv;VZbA zB)eHnQF{S82n&MNK=)-asbi4C1hcn4W5;$i=($l+$Jq6SWw?B|NS0KRh(waG9*iTCHuy$zPnW^l^LmwDH;B znIjpH4)1hVM@(aV#fnC*VgsH9=!{sidUCgjaSv0Z8vhG&LSVW;VO@IeVGAfI z3NqMa3u-`j)W#XtII@wd*`Z~wJ>Y=Wdbn#y7iv3Or)BLR@JL41=ZlCCEo}A`d>n1o$U zL6h(*h91591dbl<&yIuYgH_+Np&^YbBU!{>>de28<(QV`DUWf<;E|6KF>P(wJN_6i z0+uV6nQj$J$P43Rr@q8DHMT@Ce=v3H>NM| zjTsKH;O_BQ&Ox4HiWCiJY7iq{4z=LlIlap|f&6EBz+=j=v0FytP)BpG2O&%!55q(b5PKD(7x>&{C%gPzZv>#C zSB_V71JeNIv1?+N#BTS*96uQNet=snShUpS8nVcAQ_T4*Nef9|g&Xr0nG1eNW`HP1 zQdg#rmgTkC@L?dI!02k+!2>se0)zO7VcTMK`YpitM^CjjH?NFUr(M93bho4m-h7tX zH{>2#sxphW!Y@MeGtoafYlmA!AE;<^)99p-3R?F%(YLZSk-^SCAGt5~Fby=2)G{uN zxKJigPyQk@;p?EC;kS&e0(p1}(ne(J3hFIT)*6BkIbXB5S&3k_c(jR^BswpR(n4m! zHv{;y{TkVr+0}l^F07f&?{TL_;>8Vb3q5Tps-GL_cjb z{KBihrpotm42)c=+UJF%#H+?hVoWBM$BWy)SyE5CIU#OtPGcA<;&8H$B+7nFu3PU4 z4;hCuS(!*B$=aG#4wS{d|EO(eRYb~}^v>`Zt|K!jr1-rQ-=36eE-5NaWoZcglg`Ai z`8?a!v9X1>|1H@+D9C|hnZsnt#`55Van3j>Fm%@@AhfD?xtrh=)k4Vi9txeX(dLiT zS+AfQijo~=Cpu(tvhhl-1ZlhKf}w@66x*Oz+6sCT-Kjf@c=c_m5$oF0hS=4;s)soN z?D{o9BDl=9RxR-5+6!mR&5b`vZ^lj?!=@cX44su=FO1f;RZA3+%gLjfa9yjIk|`Z} zy7uf99x<$sQiFtU)VyHCW7#~ViF9D}wg1Ucj)^e8<<4{2uVcUGwr?ez8l^$=>YhXs zKhx?Drr`Z)j=EkW1p9mzIb0{|>j3z4e5>ax{AYY6$Z=*0e`>;x(J~XfhJO zcj1HF^CAyazY)w!<3hC;litU16L-`|KCfVlFEkM~ULE(J&L3$#Dnw8EVV}cV!JGc< zkG}^8JkiRBxLpK!EHLj~q~6@rn4a0=6&cjQ*fKjcU$q5ljR)fM`f^4|%F9b`a9FAq z;FyzOq}X#npB4Ssr{=HdH)M_1rx??uw%tI$StnaxNIZyR49uA@I!GQoIRg~!WTV#O zO8@hZ3>1@@-{!w#Es!cdLng?r6OMDKli{p{h6O9`pH*;36puzg(q!g_GIZX)a08r; zBrqZqv{H>5L^Tdc#Oa3Es!NaIDakIYJIbymliypofO_2lPZW{9 zkn~bam$<-*?ULULEF_bOUbm%(t4JY!cu< zLF90*OQJ5L$>@u1Q)QihSWOP8N(N#TXqF}pnNC+I9bh}~Aix7N%Vyq`{j2>c=>y2g zlxVaXZS`wZd%e62?M<=%MyV6QEbl3StrNQ zap+#}YZ|ili4xlN zy56ph`_K=IlG@M41|yH0Yva(6dSZKmRI`lM&^K@SBH5`@Ue?vnJ^$JRmQAKuFwyt~ z*Fl&yd*%cKF*#t+=QS)eYJ)7>EyV{Gs4yRW)Mb;=2U53$wmitO9SMD7HW-R`7AL$_6}(7m)KmR;d7C zoS~;5L@}gy!lMT{Xe7j)xJ@E3^i>xprYIcjMIB80pFkp~v4*nkpeFcViw3}6j0i`d zbjPBJ-@bfnF7%&@<48@00)tx0$kdcXg^pmlLKqqlpK}c>RNO)#~mrk1Az5iGI{v`Ah2S~fp zSg-P&!U*wf-JOezrfcuj!6En%|H@$sN>MIG*8Dkqp$)d;>ln>4+hKEPBW*UKFgxwi zi1FU#ka%91)x(K_2H*9mM~1Fs8=OUNVqM1h+^;{v zIXa)yJE(hESG?lGbc`EuAI8hk!+H5AqPLn^8sH!d=a$|U7hUidCe+I2?Ka)aAF*)ZJd?7dpN-!og@1KX5BY4&dbBNqCME)a=Sbw%M3g_VM5hVp{y3{ zzuuHSeA^Xb&8g}q$GNLpehWuO%zYBt+!Lu43j=8>eZ70FfaCnF!a8A`aH7t+T@>XX z`r@L|PO(kGp68!s0I8>H;V%3YQprDdmm?G8j_aKujH*pZ(V97hoYJN6v~n&{7ECa6 z5y4u!CuT-`Cgp`tYDj9MGV{2eVvxfeO9v-LZL;IlIt=}>^jwq4&kq|K<)eKGY#71TU&01aN>i8mkSZ|-=Eo`tVzGCZFblu z)xlxJDR;lLI`c8CtQkG%VR{q41olw#u6@Aq0HTgaKxv(45t7tk(}dw$)v{#ZJ|2=z zdLjB_CX48j^QmSXbVXCm1oAQ@k_PVdz2wu^4udC`xM)HsEQ>F&&8htB5#lP*laXX+ z`T1J!5(2a(`iY8j8)P{zUgKjhLkL}4IXd%Z@Od|0G{A}3DsKDyHfv4+*%@C;6md^Q zm6y9=@0SQxhn=3}aUXRF*Uh=8WQV~I=S>p@&*hXdQcx^fV<#xRG4WV6?d^@M&q&~< zDD1>nz@dTe1uDq*csoGEznthth?lclWLeTzbEGrMN_sZGL`*{#dLNSDHDJWNX;}m^ zQknAZBk(-i4d~zAkaq=`1Rx1QAMVA5x}^DKk>*3*OS_f*wvoslKTQTT&s}6dtF9E< zU%2s;NC$bsyI7ItUN4hwI-zHW+e2S5H@P8VkYa-3^r?USqy)&JfB!BP<;~-V?KclM zJ8!s2z#v<}j&{672bo?RRdX#usBa{Nqk64&RoGB_`1#0PSpA2Li9XtOZi`*+?>&g~ z1N7WP(r3pJn?hcv1aMk5DoC$$y|?bWHQ@&zL`y}i9x9ac=CuOyJFDxXQM$ooBZ&ih{eisRb^+Nt_T~X8{YiyHeRRuKNG|^zUqKA$9uhQR ziPWF*tO#*Bl%L|uXF4z_x#=B``0}7JHn^44KOltL_Lx(+z`QNA*oDgt`-%C^Y?ibG z14`%(F!|9-y9c5A2y3~`Z(u=g`%ToSv30jeVa~?E1&M#~LQILw^51`gU+1*Xeu8Vf zE?rry!dH$Y+-oA7{)&q&MVUs)-&T!DDk5uKikx^NwteRASgJb`1YxeeZU227V*Lg| z(D%QXky5;QD{E0tC)7c*7d8o*^+PC|cPVDu>zTSM195Oc@^CQ*ENTT1jzcjfF21u; zFjP!H1CW9fedKY)P!aQfbPyn!CShj%#-TQ)?E~s~9l3@3c1wx+Wy(MT4_-%34p84K z%fN2vP6+znESY?9#TTJkVJ-VYbfBM?^#-~%#ZVQrKo>)w8CH?25nPxK#GEixsdd3} zrvoKeK2kfslc_F|d8||FMFS$FCI5l{DpyOzq0X|s2lqPhf}beKFzhYWS%kI-iO~_W zQWUTGBrs45(?zU)e1RWA-wB8YKMoa>Gti_dTULt&C1a zeKpM{ws0{3q|Mre(~WgG9SHEMy1oDD@7)$4A?V#M+Mpvvc1PLswkAHm2s34?kD*A@1<`k z|H&=PRGZc_BnfxIO3jpiAgP{DYr87K^!R?m-~*i|{8Ft_bk@Y`4t;guBWlYTH>p8S zrr3KbdnIn>qe_mRIJnFy-&4$gLomm`Cn@-&e&nh`vEEDM!YA9@}bOE_x6^QlY%{bA+WcwtKQ|w-Xbm|3s25Q9xRJvoCpG4@%AF5$5N&k>sA= z@9nK_S4r?BE@E9g*5{x+BL9p=3v9!~v0Tq{KH;{)yl_ob^N&s*I;qT&u&Xb0KHt-{ z*(PB47B|0I-&gUnV*EeJuVoQNf-EQdi|QuVCVGn3Y{8$d;G_e)f3c;VBd=B=kyisO zBhqFTkFWP`!;(feHWm2TYkBrGZ?~h5`dq2z126M6hvh5C)3L*P#}4q*iQb`3*93}5 z^~09g4vqe5g&YVI^&;$6oe<|*`+pWl^ZW5J|IDt?HMBQvcHmr9WefIp@UVl1HX>P?FN3^W5{q^k=1^GtTnw%{%ygi9KWS zz8bt*5nW{IA<2&IJ|!KNKL|Q{Tqh}Oc&+EMvMH!V6(s#p0F&R!!A`Cf#c{RQ`w=Bd zC&oO=QAQ{%&}nI3AvODY_6|b4Q=&kO1b0cP?8k}Gp8+A_()^vI&moEm(D$Xb+|BR! zE+g(>tL5Z+pxos@<%}!1niO5`6^Hl>bgXY4a$w8ZVEI<2%pUk`xAfUX$YR9(0Bxq)^+Tz?a$#Z^|NU&Cd;B% z4r-Y_o@PRu_)-Td9j=sblO;T%C-569x`h5x6=dFhzTsO++CT4V1kD;kv?*z5Oir!) zWG^&1WeKLI>X%zBoO6HA_?siO<6K?+kk7uxk?!#qjD|BDsx@mIx^b-f`1&{im009 zi#C(4DCYb#+8TUev^-jE<27^cbmK9v!q8Xz=?HX%L#p7Zo;=6usP?YrI;Y= zv@#KCdrq7X)gh}4vTh>t^tdIVp_Q|D^0<|qO%{N_1@@77_2dWwYv4Cw-VE53A1{(m8Yu@2T~#pl&-o8 zONeEoP$|rlwiIk)@(Z^GHCP_K^w%Um;;wV&G|~!z<*3NmYQKT0dnBzoxF{}h<65T^ zvPqV$di026Qt*sQjIa0O{Qegl!(*^~T0O$cAbMu0R(uZqt#yfXwiMo;?VZK6qFq`Vs70$z{&Bqp>$=7s4$ z?%BX@mi{62-br_ld^mhQSPe}mTQcck?;ANbn?+@$&AsfmrN{lg0&7nJUy8p|ul`o; zCK00+`oO1>T^99|rdnxrvl3LG%~yH0`HqZLD@}pq`09hULA%`8`nVcHr58eQ#}j`9DbkL+QhV^j!NZnS{Xj&Du>QwlgASDP-` zzkD^GCrD3em(6p|ZO^yvxgM<25{P6VmECL#Ka=U|LFprkq1{U@yf-b$M+|?riwi)X zuY!o$sB=iyejZ8f;3VEF2-4!5>*ft*?gDF&Re@q4C6;3FKuAe23k{c6rasnYA+-@F zA#+ZJh$XVNg*TYc{qXsD-WJ~n>?NaN?!JX>3ri$s2S`i;?4kCNrA})DuQc&4rf%!s z$U9_@lthH(i-bKmWK9yr_`Xe5nbMEm!@2jj)Pf|$Hj|vFL*U)U}7H*xH?-q|K_{eLXGU=S+43rpQS0p zDaU+(nw{*7pnr8UaC}Vtqib;TdCi__^ue|tziS1NIJVD^*Ui%MsRw6u!^d**Y0r+B zHtfFVa`=#H2E%%+iqUGH@C1;W4k#|pT&rqez^Rd=>|@l8BK+0+0*gh;) zlw$dtKoNXSfaAZYEqu3PDDk%Of8+S^e@gCBwW+#A${2{L-VtKB7KR2aJ)_>3BA=>h z4Qg>-JtF=}!FS7E{NLjT|F5khI=*bMcMc-Ut$+i7f}09FkX0<`*Oti zp~3Ox7q;KPfuf=8$LoN95MRup%m^f~0v+V4_1>olTTS zAg70l_~zt#jtXdHatM8|X7kGU30`^*cqQHVEZmhLM~uXIcQN|h;(7kh+D*gP(iE%{ zI=QseUGT$0!t*Dl>W{ddifLU?!QWWNyNbX<%LO1Ph0K{G&+zsSRp2K)s>L4sfaU86 zVFe;WNo=Ui*kH@F)v;6&j7{!9^yC^gC(*dXtIe_eVauM^D&5ZSP3taEqp*ZLF5vgn z$>&3LtnaBlbVas@3f{H+33Zth{0ZPjny}qQ4+K!4La^~Y5*}H)e{z{Eih2sA;O`dS z^nQk>V|5R+KF$26`$U$-R7GPkP%03m1`K=f#^O!L?0Y(<91s!iI5I*5ki1{tX^dM`P{UFuTs;-RXz03haX>N7^Hey)C_ z{_ELYryep)qEOSp;20r|g;v3BW5m8IRWjWPwH^A4aR8?q9Mz62VXDH>u854CHgPd@ zZ>c?)knQ0iYN&klG4GCuTW zz#*r&Eff^4-h0ylrt{`FVf$c5fHq-m6wJxx2_h>uT`$?eQo_sXfjLMdn#DcC#UTJM9V-K_^di#@~%*Q?IYAryIT0&&| zg8|3SY8h|{>DXibe=fznP=vnSmYxH?WgJM*z%gG_=auj+^I?n6(AWot{|hRD|BtPb dn2Ddtm$yvyX55eNj{!v|6-2*gAmqw>aPDtj~G0t!`8bo^6|8-4@l ziZXv@X18AsK1b*nLU{JAP#xVzxrrOESwA&)e7lU4{!teF;Q5I45IM08sS_g)$-V0R zW&_FHGi$z%Zk<%$Z%^inMmZ&HFWfa1zHQOb=J9>z_Dp}>^mH2b7!Y4~{EaNI|44|_ zPhnrL+_;C2eLY3@|G)j8o{hV|7DdID(ev}x7v^3?MDR1;5fvS|tJ2fc)BZ3lBEtRk z&-wXG!={ikn5!3B>G9v*r(}r`ctq{=L1aS0v*F2_WhjB#I?vG6VoL0pKh2vrD4l&z z;{5sZ#L{zLU!8)_bW@T-8h$!szrJ{d_5!>FAg=y>+jYmtqE5!5`Uv~GjSmKkV%Y1q z=!m4j{tTgXQ4srb_T}p{@FEfL@7{WGPmz(4T@l^DE^X^xEx?IgDz9EaNhv7t+}OrM z73CrCMedW&HjV39;U9$Wv;TZu|7O**f{_mx2!o#|;`nnt;DDvNT=p^^$g}^OegAid z^54Jxd!YVp9@vR1@iFG)cs~4_js9ncr=^P>IKrfe05N6O=<|N8it4d&wTZgZfp~l3_jPv5@zVWKZ!BXiMH6`V6oZe=V6kUE< z8Ozvwh2QQPrbK0+*hVv@`?W*Q+{UfkDmnv{Z0h0uc0B1c^LdFCqHMqKO-+&=K{Q_Z zaD-k`Vo76_?ha@VN#(bVjg5u}6Qt3yW;o8hsO8#Yzx5&K@?njU?zOc7!O=&=n8^Fo ztIQUND{od;SC3xu6T_|SsFI z&1hLMi+;_5LoGIvp*VIX!b@mcQTOG9?OyT24b^pBg&r9hnW-TP`!d>fRsHF{FDe<$ zJwn353ns0IF8-WL!evwvRju?j4wR{d% zn@*Ya8m6kWsF>v4Aq;LfIH>a3U#?uC7Itf!tl0G#J=hwwNV-!?MNS^~?%k|dP)U{A z(^GZ$_hHryeAdW{NuKgQ-u925#FJJI3=CY`_2G%-_4intdN>pk?p0l*-_Q@THXq!o9W{-To|gT`bJk|1mipHm_pPgbtf+^%)K z9%Ak2$QAiuwt_mM>2|DqzE;&{pKd(q{#2CGL8lplH9EwI%*gI=wmW6IbfsoL2UXnh zUew0Vd$x;~rf|xhLi!EjN?QA9PvP}5c`jOBWcO3L@d+#>#)MGUg>Ou2!CL z7To1j=&|LmC@Oj@&%}Q7WI`6W z&$_U%5ThPf`oo7Vt|vcX)i|G}KdfmonNCiZjFPp22;<^8l!QJ(Rm++}81IPw_7>CauOz!W9+ zKFvqWfx7rhx8=dkWP~3hK0^2cUKXP6dprM_t>2I(uYt$-i##4x)@XAJi}qESLfKTf zQ*}y$d2mgRj}DJIXkbzs=MPLxeL^|qD83i*9I`7dH~l@Ap2SycH(1j8V|}V-f7vGX z0w;%F*(26y+xrjCBZ@+G@DX|3e0*t{ndP{m;^Kzc8cGQQ$&bvL=@B@?fdBXL#iksd6Z`<2$(Ygu!poWOa|$2Iz1KjGTE+2+h_H>drd&n{>kqJ3+HTl>M=Y`^5`DLd zi&0FMj`v$(3vSLiUBV`MYf4vLy=Sf{p;M8=VXpH=CFO%+opv6wx2m<_Zo>Im6?QBk zgb_{bx`u{^5lxdZje062uY?oY%@bqf(|e{FVbLXHstpWR(o<8On-S%y4#60C?Y$|4 z1b@P^=8!VyvWz&DA!10!#q-yf?1B0MdtKTfwzI;nwS2hr@$Ke3v6j4P!^N1AeQ$|k-d-LN77?+HJ^bY!mv*?@>F+k@>bp3Q9~>MU9UUDO z7FJ$fK5fQUt;%6oGwho)>M@D84l`!{N3XZNeFq_}03M~!@48d#YRrl*r*(ATii+{@ zOmNRoA8zLQZ;C1)2A)95sO$dy`*&-rEC;IaZ8SS>y@1D`-+%r%W~g0eVRoqA)Igo# z)~@(~6n~<>&gP*cw)<(HHD>f`XlQ83?c!S@#us!kzl zZcHHpNFc6#|1OiSCC?NU6a2ls;qjxpYVMYC(w^vzt{~jL7~l#*B7jlfaSn0NFfcGMJUm=`w3!RHt~}G^ z&vv*w2TM-Re;;ulTk;*3P2~|5j(@;loDVUaf@_suGv?B-YI&vskv~5*4Smfjr<$8z zmYZjk+eN3UtBX*(llNxcj!WB(zkygZttNB+l7k(Ai8zQnejXkkZf>XDHM4pyp4eBZ zqbc2%RS+4D?3G`+4ylMG(NI&5R=TfDO-)Tq7=L_}_o{6Ohb^*&K>Xl$(Ntlln2n!} zm9CkUy6f@b_I_mLu?h7838E_%jtKEsm+U0AL->k$PrdB2b?&1e(776iS+TvAerFBO@aw>-oUO zF@!@dYz8qlHpVIOMzfc`8}qvET3T*$xI9v+A5*)KQ`x3(W;(>`^0GI+-t!cq?QfQJ z=|~iIKiF~FErD~o)_Q9>i#LL-(u@tW6GY=T;Kn^R;4=NH_L9z?4ok>dpRPlB?i$3q*fA!;;27O}-na_n+#5#w{I=hx5VLn- zDpc)EgmTvG7!Q;q@?7qarX~3wd8X?;^{PJlsj3t!9xRi>?tR;^+&L93FSHARD_;DI z8f#)$N^ySv_}UmGhIeBmmtPDHYNx+Y&3J1jk$s=Wx5(@~KBd6pW#;u3=A?J`mHS<* z)0r+FZw)!rcbrCSBxC2s4P?wWWJ>oyt-n8OG|vTUsB?^r#!H6m3y~%sYc0(2L`Cvc z9up0hYRz$nOC6GSmnJ5X&CYMAWDo~Sv2AiGvWfEI);k8%egFQQEq`!o%9JiLZ&4>h z4a&Nhcg%^3m8F?)+7!|u0mF&W-ra(@ZlH289P_)gv(sVqu^D1-z>U(jtJ{2KZt&Hq z0Z3%X3;eyNJXY~1F;1(0^CaH!lHcL9z1d{Ja~dZ`;6y?Y)<9thl8jY+$#RhwWMm}!{&6B}-BX_@=&@~$8V`^ae_0uu8Cm2xZJ2SEg zkDRnbmgx~2r3O_L6$d1z>of|&i1Zku9;V;R+h_0{c}{7tmXT?ltx@PRplu!V+N4Kt z-f>WSWi{||yq^g5cA1wWZ4;on{helm?JI~qa%@8FhM4i=#~YL&Kd%BBJq&8oh>-hI?_29JOEab;gaLjwfM&P3sDm{MecM$2P# zTdR=u7d%df1yOr7i`eETvt(v^UH@Z^^Xkir3WWTF^Pm$sAUjO(s z9>S}k&U|H4_Bt8aBjVHxx6cE*_@K}G1&cDgI(}h?&OrH}3n$=AqH`{tj{6^+Ce@4u zO*bSUO29b%KYQE%Jn<9-AVVVy?7{)!UQSz1@XzBQlap7(pXdKAxcW>g8IHwOQr{pg zz@Wh*G#eY6zpK00v$Nwdp#4XIvjg3&^y~^2A_?np@|_$^7yo~cl}^45cz^q35V>(2 ze7#W)%m2T0$XQug|K%ZnBBjvSm3|(G-CEaPiV)q6f1vIo@qXuvQVH<+MSOM}o#elm zFW@g|y`gm$zSxsI=07>SlEk^WxxB*P@dgQ~`rNxO_pP{0;QI}x)&%zdhsd=&pf%x8 z?QQBmoBto2#{Yn~XXEm2KTZ)h7r|cj50B6%Gw0ENIdc|oK=iY=W+e$-`c-W6Tik8w z*R{|_sD^JvhcqGK6*Ir z#*P<>I3IGS)^`C6S9@YD9QZ}`f!krxTUICcnPmilT83~hKKbk2minV?VX+IHj#rr^|gmf4vo6& zr`U)uzqm&WK#MRq!1?rm7X-s=(vS-$V!r{r`E^JLp)%f~X7HdT`j)2H@xi)}7^g9T ze!r%s=6xBNgEsyED&xZKo#_1cBX=L8e_G$s?{6&ru;7)ih14#CGKMs#*IH4|oaef< za&q_Q%*>EvhNu?&HIj&?Ytr4k3bx!)Ed%Bc5BSN$Dok}vfeob=t!-&`2-W(_*&6sVG`zgxXChA$eZ77NL#ILz2 zc(#V8q6K09VE8KW5myi7T@K)!-}GW5xrIWXY#)u{tn8P56&3~+`pW|8ay|P&zr!D? zaueM12M0ct*#eop^N@s-Svtk`ZFO()QBY9m>g!)??3qdOAKmt&!ok5w_LJ=23?=2P zpsY7(3eV2T3F)uhA6Y3W2zqG9!+-p&(q*P2m=th&|KavnE{p8PM}M-YenJ`=9!@B` zO%}Kcmvi?GTR_aes^J&n7X<@qHq*rqAAYBx)};(Cc;O+d!-2A^M9PK9Ob+CmOl(5M z@l#{8jqy{7M$sJ}p0#0@&S19Ucp~>+>&@MnBu!#z^a zULJC&W&b6tpr}|O&O&wl`c*lAUG4?Xd3kw%_Jt@?d(G0W-s`))GqKrkNZR=eGM!VSeizvo>jS)TR?#2JvmZP})JhK2U>8ZW{b=)Q z15!zZP26-f^YY*9&dkL0OLUQ|(sBIWfc602l%rjNpJW5Ioqn{zFtSHsqA^1JXx5|v z;dc5S{s(c_M;d&<=p^sm+bDB%>eqJ^rN?d zXELNY&vWa1J}qaX_SKTXVNR+5+3<%^29 zE{26|#Kbs+$<8{ZNoBFFKD?mGh&X#|@o0hXpjE4L`NkDq!7f#y#ASgITfOt;Z-AlF(!y6Z^R%g?HwYYCt@(6+?c$CAeuSsmE#2j3#I;&MCx(Oycq|?>HMR=zaR6`v?Q)JX)O!Wa3Jb*ou%a2xue)~&Q%yj*SLt{tNVuZ)}CQS|R6jy*_X=r%vT~HvGwdgyJGdMG4A-*4L zXyv!sNID^Xp)h=aM`<}yo@u3QGJK@cJ+#!&ceA&N#$S(x7`Gm3>e~G_YElk8zyfVR zyJco}if$*oqn(=X&048FuK64-1PBs}XYzc+{QvyEE3Mpi^CfQ8dWWzv^&3bsL-~+)?$cdWRxlmZj@*?=aax;dS;(y& zJxKJN{TS4+3{=U539Xhq)w1zG3LR>TLb%g3D9@^^N3~3eZV%Iok=|B(Y5UT5@q^f- z_m32M!l^}B)2(;svvLi*m+sVaHQ2HnoTr{0nCnTuCatXAt772+FfF*smFsR$6a;&X zs8Df0Dyil<$XTA1eu3{N!(B|@LK#Yszm=Lep zc1AI>iIzGdREK;>Th&yRdni_Z%2QJv#!$k$8EdYj_UXf7QF=K|v@06Mq;GO4FXdklOR^)cF_F*i0t5G-z;l#DI&OGZ~L+eeuv)evWU@Ccc+X*4|dPIH9 z|JWDR_;gmlAX~#E|D9#sI$Wr&X#r(tL_YtRPmgF2Jw3g1#~svB6UVbHYEdt>8j>@N z{1lXw#OK=Yef<3<)|6*%G;O&dm}o-Ug&%`W4L|}RU!vF-poSMlDIh!NZd`=4O~>^v zDQR2GeH3Ck!+oW#g1G=DtE=_Dt>etStW)Vt5O#hk|>$#+Y;a=~lHY?)M0YaPfv z5hg5y&6*vam&_t5DM>|>6f^a>N0Ibx0$)0&%tetExb-9&Dk@RGgEA~00S3o^sr@sx zL|QA^=%za zgyTIpn>27Klh4la&g8G$4!;$Wyx=92$cLMPd7w=T@gc;6c7aBx0$A_p9CSv%p}#MG z76Ac4Y4Nr6E=E0=3od9g(*vd^78hmj@9@khxw(d%$2>pA@^XE{<&ljez1`Na53!FcYs&7JWDq% zZI8-XaH!c$!$?M$^v9eCDV3b6Q17bt@V0Y7;exlaTXYR+_#(hVWQBe5vuvsg3$Yj+ zyH_=JL%p9nb&v~)BFiH>ZBxTTQBhIOt@l=J9vbh+kplaEGe!(Vkk3NidvodfDp%Mm zTQO?~2M16QOc@Bqw41YE{RL3;_vD$=2;u9r7rKJ%t5#)JC*YDS3ry{d9UmI5e)GNz zkrUD$dD!-t{}`b&z*&}%x+x&Wf4aNqPaFN<>{ZK()60)z^ozAXpMJ!%{vK^#H(Ci+2 z@3%Yn(Hr<2?aokjo@UZDZvI*IfGLVu>Ajwwo`~n#Cm%6ZiYI0A@2C=h2+>N5D%4Ng ztruRYQWe>)@mNickhHZUbsjD4Xtp|wq4WW+BwxxtU#rb~?+%;m@32K${=L5nVz2>J6oB0x@(z8&Sf~trBKL2B5^u<}x$g14nZI zo)&=ZjddTe84as{iMw|c((`||{84Jm^nRU;r49(?jBIM-cgo(}Vlg=SBH@Yp6-q+lLpt>Ow9+#Bl zU?Y$wMaL~Hd`ok%+Pl5SIdhgMYaN-2EBlz+~YmYRbwY7?qNQw zf|VK^&$Ow!ugg>YST1i?z+~hKDJnCQh=|C9nod69fHZ`%=equWF7o4^{QzXI__-Ya%C|HCV58UzCdRE{U9Z@2zNc+c`^(6=-Of zs+?7Sp6;01+R7({0`uBsa+z*)sMNubId&`9h|Hiy(3ruHd;d8@kh&`Y&og`VRF+n3 zQSKajQg0U+WHDaFJI_5NBL|Z$+56SDh6)sA=Q~eL<02A(b3L@Ow0uB{?8(m`CDh+beRc;qZ*I#sHAj}UFn%~?ri4bKXe^k9UpB3|M zZ+7-G_Q)ms2HvT&Mr*O9@!n}F=*6h+B85QpS|J`~m1PfuoRd;rRyJ!Ajf3#`8A`9w-qzM!i>LsYQdUr~HeeDF ze0>k}W#DClJw%SO3=d_utZM!jAjceB>bBhI^gnXpulAE>Uc2}42CICDev=c9@?KI> z690*wSCK;_=q#le=Z0yG?i4@Pb1QQvPq8vKo&a2xn3TkcLdT^sMzshpmr1^VfkVpS z1NvL?+1$)|h%vMG7t`YH{B#r;U z>PN|-h6>GGgTsv;CF#c{MMWFHhYQ+?l81#bSp(|X0nn*;2sN=?ao7GN&9TSU;^6M? zE>M@)5+-~F347R+t`xe5=TtXz_zg{@!$R!08fpko9rpFGVj+hp*dM6sf++V3!NQ)~ zBkqkja>Z{*mBbH=$Yd5%BE+n-lt~afkN+1Fuz+zEROrzey`rYxZeGZ)N<^?YlA8;l zBdQ(a%pn(I#uF>QUOUxruG_N6Eaxfg@{}Jgl$9emg|>XR$fpE=f(SGc$X>=+Hb0ww zf8CQXv@v-}qhWq}eW1;Z2r5EF@66219od(P1B#U2jt;45v5E!BxeAJb9 zdEn}a()Inv4;7(Adk(+gpyhJCWgt~ih7saK!OvMfIP`>1wnJ3S%g>KQW8SoUDwlqp zX0_@e65s9zY%IHXEzJ5wAWd4#3s*gc_2?pGQs$5qT5LIAzC1UmrG44$0P8U#n?wGp zLerH78kH@sfQmJsy1uQ@zljvm=Rj5aFiuZTgGyyqnLOsEE2VG9fx1oO;?xJe2vFhp zea#I#G1r`Y+A41n)%xrfL{K?5JirY}9(Et|rTQWUSUdir7bVUqi83i8(M7!-lMffR zO&>p&P=337dsZgw<{$$PV28^QbsmrP6Z@B@FCS_(hDu; z^2}iGk@{fBfG7gA0tCU=Cbg^~JbZj4#-qT7`h%qCR`l`X$KKxF3p74mT(95`O1pW5 zCl(j$0y5Ip)m0@n^YIax^4WRv`pm!_@EIHiRXg2KErZ>HXR6Ef@H>SAE8qe zq~=gh^02i1A0pg0I0(B-pW6nNq_wTVBP8BUBkq6*82$PZWVin@on0;PV0mK$38@~& z?+Am0%Uzs@y#83noEMSmsS@Bcu;2V|++_2Ocb(}YUna8vOI-7bNoXHSTwj#t4E*0v z+myclt-0yn5Vf;{f0=EgnQt`MV+U$D!H<c^WR!Mx`+o%bXUBkb`RnI zk*WdLoumF2RwMC!2DSp>@#m`qLHGkW*&dFjx+F{w^8LS=Gbets5B_Sb(NCT{0b$)u2ClL=Y`RO_ z4{oo#LfEZqa3gL+Kw5g92#U-Xtj@~^TqRc5gyFwo-2BfBd91s)SlIau`?&_lO9B43 zu$-2)hlj^+aWJ!hI96@2UEo!1V5p@963;ZT%>DbS8ERrl4!0;&RaLQ$f&!cVoPQb9 z>@*{BNH3q0R=)h=Tb+_C*SY(}I*EyiVJ99o9-7w~88;&`{)zzI-OA;AU~iy{{Nur! z*_(+GcoiP5sGuN7brxm&PANp--Ez9REz-?RW11mawq^2BhT5-Ih(3dhhQ77W5EYRv zrVaYZT5NsR#lU+ZlhoAjpwQ*%0D;uiUCRfp<22YvMu@m^>lrET2_*uN9dk`L$85C7 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 literal 32146 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 O26Yv!Q<*1>@BAB5Hg9?W -- Gitee From ecac7efe89d89953976bc1f75cd02e82931bea59 Mon Sep 17 00:00:00 2001 From: Wei Gao Date: Wed, 22 Sep 2021 16:43:14 +0800 Subject: [PATCH 02/10] =?UTF-8?q?StratoVirt=EF=BC=9A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E6=9C=BA=E7=AE=A1=E7=90=86=E7=AB=A0=E8=8A=82?= =?UTF-8?q?=E4=B8=AD=E8=99=9A=E6=8B=9F=E6=9C=BA=E5=86=85=E5=AD=98=E5=BF=AB?= =?UTF-8?q?=E7=85=A7=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Wei Gao --- ...37\346\234\272\347\256\241\347\220\206.md" | 150 ++++++++++++------ 1 file changed, 101 insertions(+), 49 deletions(-) diff --git "a/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" index 85dfe72f1..5dc58df4c 100644 --- "a/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" @@ -347,58 +347,68 @@ id:网卡的ID号,例如net-0。 -> {"return":{"actual":2147483648}} ``` +## 虚拟机内存快照 -## 虚拟机快照和从快照恢复 +### 简介 -StratoVirt支持对处于暂停状态的虚拟机制作快照。StratoVirt可以以快照文件为模板进行热启动,批量创建新的虚拟机。只要制作快照的节点在虚拟机启动完成并进入用户态之后,热启动就能够跳过内核的启动阶段和用户态服务的初始化阶段,在极短的时间内启动虚拟机。 +虚拟机内存快照是指将虚拟机的设备状态和内存信息保存在快照文件中。当虚拟机系统损坏时,可以使用内存快照将虚拟机恢复到快照对应时间点,从而提升系统的可靠性。 -**用法:** +StratoVirt 支持对处于暂停状态(suspend)的虚拟机制作快照,并且支持虚拟机以快照文件为虚拟机模板批量创建新的虚拟机。只要制作快照的时间点在虚拟机启动完成并进入用户态之后,快速启动就能够跳过内核启动阶段和用户态服务初始化阶段,在毫秒级完成虚拟机启动。 -**制作快照:** +### 互斥特性 -在虚拟机启动完成后,通过QMP命令暂停虚拟机: -``` -<- {"execute":"stop"} --> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} --> {"return":{}} -``` +虚拟机配置了如下设备或使用了如下特性时,不能制作和使用内存快照: -当虚拟机处于暂停状态下,能够通过以下QMP命令在特定的*绝对路径*创建虚拟机快照: -``` -<- {"execute":"migrate", "arguments":{"uri":"file:/path/to/template"}} --> {"return":{}} -``` +- vhost-net 设备 +- vfio 直通设备 +- balloon 设备 +- 大页内存 +- mem-shared 特性 +- 配置了内存后端文件 mem-path -在给定的路径下,StratoVirt将会创建两个文件: -```shell -$ ls path/to/template -memory state -``` +### 制作快照 -`state`文件包含虚拟机设备状态的信息,`memory`文件包含虚拟机guest内存的数据信息,文件大小与虚拟机guest内存配置正相关。 +针对 StratoVirt 虚拟机,可以参考如下步骤制作存储快照: -**从快照创建虚拟机:** +1. 创建并启动虚拟机。 -通过以下命令从快照中恢复虚拟机: +2. 在 Host 上执行 QMP 命令暂停虚拟机: -```shell -$ /usr/bin/stratovirt \ - ...... - -incoming file:path/to/template -``` -此时启动虚拟机的命令行中设备的种类和数量必须与创建快照时保持一致。其中和设备拓扑相关的,如cpu数量,guest内存大小,设备号和类型是不能改变的。一些设备后端,如网络设备对应的tap设备,console设备对应的字符设备,vsock设备对应的guest-cid是可以进行修改的。 + ```shell + <- {"execute":"stop"} + -> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} + -> {"return":{}} + + ``` -**参数** +3. 确认虚拟机处于暂停状态: -- uri: 快照的路径,当前版本只支持`file:`类型,后加上快照文件的绝对路径 + ```shell + <- {"execute":"query-status"} + -> {"return":{"running":true,"singlestep":false,"status":"paused"}} + + ``` -**查看快照状态** +4. 执行如下 QMP 命令,在任一指定的绝对路径下创建虚拟机快照,例如 /path/to/template 路径,参考命令如下: -可以通过`query-migrate`qmp命令来检查当前快照的状态: -``` -<- {"execute":"query-migrate"} --> {"return":{"status":"completed"}} -``` + ```shell + <- {"execute":"migrate", "arguments":{"uri":"file:/path/to/template"}} + -> {"return":{}} + + ``` + +5. 确认快照是否创建成功。 + + ```shell + <- {"execute":"query-migrate"} + + ``` + + 如果回显 {"return":{"status":"completed"}} ,说明快照创建成功。 + + 快照创建成功,会在指定路径 /path/to/template 生成 memory 和 state 两个目录。`state`文件包含虚拟机设备状态的信息,`memory`文件包含虚拟机内存的数据信息,memory 文件大小接近配置的虚拟机内存。 + +### 查询快照状态 当前在整个快照过程中,存在5种状态: @@ -408,26 +418,68 @@ $ /usr/bin/stratovirt \ - `Completed`: 快照制作成功 - `Failed`: 快照制作失败 -### 注意事项 +可以通过在 Host 执行`query-migrate`qmp 命令查询当前快照的状态,如当虚拟机快照制作成功时查询: + +```shell +<- {"execute":"query-migrate"} +-> {"return":{"status":"completed"}} + +``` + +### 恢复虚拟机 + +#### 注意事项 - 快照以及从快照启动特性支持的机型包括: - microvm - - q35(x86_64平台) + - q35(x86_64) - virt(aarch64平台) - 在使用快照恢复时,配置的设备必须与制作快照时保持一致 -- 当使用microvm机型,并且在快照前使用了磁盘/网卡的热插特性,在恢复时需要将热插的磁盘/网卡配置进启动命令行 +- 当使用 microvm 机型,并且在快照前使用了磁盘/网卡的热插特性,在恢复时需要将热插的磁盘/网卡配置进启动命令行 +#### 从快照文件中恢复虚拟机 +**命令格式** -### 互斥特性 +```shell +stratovirt -incoming URI + +``` -- 配置了以下设备时,不能使用快照及相关特性: - - vhost-net设备 - - vfio直通设备 - - balloon设备 -- 虚拟机使用了以下特性时,不能使用快照及相关特性: - - 大页内存 - - mem-shared开关 - - 内存后端文件(mem-path) +**参数说明** +URI:快照的路径,当前版本只支持 `file` 类型,后加上快照文件的绝对路径 + +**示例** + +假设制作快照所使用的虚拟机是通过以下命令创建的: + +```shell +$ stratovirt \ + -machine microvm \ + -kernel /path/to/kernel \ + -smp 1 -m 1024 \ + -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \ + -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \ + -device virtio-blk-device,drive=rootfs \ + -qmp unix:/path/to/socket,server,nowait \ + -serial stdio + +``` + +那么,使用快照恢复虚拟机的参考命令如下(此处假设快照存放的路径为 /path/to/template ): + +```shell +$ stratovirt \ + -machine microvm \ + -kernel /path/to/kernel \ + -smp 1 -m 1024 \ + -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \ + -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \ + -device virtio-blk-device,drive=rootfs \ + -qmp unix:/path/to/another_socket,server,nowait \ + -serial stdio \ + -incoming file:/path/to/template + +``` -- Gitee From d22c88f57da19f52eb5897d47e0d7629537f96cf Mon Sep 17 00:00:00 2001 From: zoujinda <826835384@qq.com> Date: Tue, 28 Sep 2021 17:13:54 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/desktop/HAuserguide.md | 358 ++++++++++++++++++ ...77\347\224\250\345\256\236\344\276\213.md" | 214 +++++++++++ ...05\344\270\216\351\203\250\347\275\262.md" | 185 +++++++++ 3 files changed, 757 insertions(+) create mode 100644 docs/en/docs/desktop/HAuserguide.md create mode 100644 "docs/zh/docs/desktop/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" create mode 100644 "docs/zh/docs/desktop/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" diff --git a/docs/en/docs/desktop/HAuserguide.md b/docs/en/docs/desktop/HAuserguide.md new file mode 100644 index 000000000..771d9945e --- /dev/null +++ b/docs/en/docs/desktop/HAuserguide.md @@ -0,0 +1,358 @@ +# Installing, Deploying, and Using HA + + +- [Installing, Deploying, and Using HA](#ha的安装部署与使用) + - [Installation and Configuration](#安装与配置) + - [Modifying the Host Name and the /etc/hosts File](#修改主机名称及etchosts文件) + - [Configuring the Yum Source](#配置yum源) + - [Installing HA Software Package Components](#安装ha软件包组件) + - [Setting the hacluster User Password](#设置hacluster用户密码) + - [Modifying the `/etc/corosync/corosync.conf` File](#修改etccorosynccorosyncconf文件) + - [Managing Services](#管理服务) + - [Disabling the Firewall](#关闭防火墙) + - [Managing the pcs Service](#管理pcs服务) + - [Managing the pacemaker Service](#管理pacemaker服务) + - [Managing the corosync Service](#管理corosync服务) + - [Performing Node Authentication](#节点鉴权) + - [Accessing the Front-End Management Platform](#访问前端管理平台) + - [Quick User Guide](#快速使用指南) + - [Login Page](#登陆页面) + - [Home Page](#主页面) + - [Managing Nodes](#节点鉴权) + - [Node](#节点) + - [Preference Setting](#首选项配置) + - [Adding Resources](#添加资源) + - [Adding Common Resources](#添加普通资源) + - [Adding Group Resources](#添加组资源) + - [Adding Clone Resources](#添加克隆资源) + - [Editing Resources](#编辑资源) + - [Setting Resource Relationships](#设置资源关系) + - [ACLS](#acls) + + + + +## Installation and Configuration + +- Environment preparation: At least two physical machines or VMs with openEuler 20.03 LTS SP2 installed are required. (This section uses two physical machines or VMs as an example.) For details, see the *openEuler 20.03 LTS SP2 Installation Guide*. + +### Modifying the Host Name and the /etc/hosts File + +- **Note: You need to perform the following operations on both hosts. The following takes the operation on one host as an example.** + +Before using the HA software, ensure that the host name has been changed and all host names have been written into the **/etc/hosts** file. + +- Run the following command to change the host name: + +``` +# hostnamectl set-hostname ha1 +``` + +- Edit the **/etc/hosts** file and write the following fields: + +``` +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### Configuring the Yum Source + +After the system is successfully installed, the Yum source is configured by default. The file location information is stored in the `/etc/yum.repos.d/openEuler.repo` file. The HA software package uses the following sources: + +``` +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/EPOL/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### Installing HA Software Package Components + +``` +# yum install corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd drbd-utils -y +``` + +### Setting the hacluster User Password + +``` +# passwd hacluster +``` + +### Modifying the `/etc/corosync/corosync.conf` File + +``` +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` + +### Managing Services + +#### Disabling the Firewall + +``` +# systemctl stop firewalld +``` + +Change the status of SELINUX in the **/etc/selinux/config** file to **disabled**. + +``` +# SELINUX=disabled +``` + +#### Managing the pcs Service + +- Run the following command to start the **pcs** service: + +``` +# systemctl start pcsd +``` + +- Run the following command to query service status: + +``` +# systemctl status pcsd +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-pcs.png) + +#### Managing the pacemaker Service + +- Run the following command to start the **pacemaker** service: + +``` +# systemctl start pacemaker +``` + +- Run the following command to query service status: + +``` +# systemctl status pacemaker +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-pacemaker.png) + +#### Managing the corosync Service + +- Run the following command to start the **corosync** service: + +``` +# systemctl start corosync +``` + +- Run the following command to query service status: + +``` +# systemctl status corosync +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-corosync.png) + +### Performing Node Authentication + +- **Note: Perform this operation on only one node.** + +``` +# pcs host auth ha1 ha2 +``` + +### Accessing the Front-End Management Platform + +After the preceding services are started, open the browser (Chrome or Firefox is recommended) and enter `https://IP:2224` in the address box. + +## Quick User Guide + +### Login Page + +The username is `hacluster` and the password is the one set on the host. + +![](./figures/HA-login.png) + +### Home Page + +The home page is the **MANAGE CLUSTERS** page, which includes four functions: remove, add existing, destroy, and create new clusters. + +![](./figures/HA-home-page.png) + +### Managing Nodes + +#### Node + +You can add and remove nodes. The following describes how to add an existing node. + +![](./figures/HA-existing-nodes.png) + +Node management includes the following functions: start, stop, restart, standby, maintenance, and configure Fencing. You can view the enabled services and running resources of the node and manage the node. + +![](./figures/HA-node-setting1.png) ![](./figures/HA-node-setting2.png) + +### Preference Setting + +You can perform the following operations using command lines. The following is a simple example. Run the `pcs --help` command to query more commands available. + +``` +# pcs property set stonith-enabled=false +# pcs property set no-quorum-policy=ignore +``` + +Run the `pcs property` command to view all settings. + +![](./figures/HA-firstchoice-cmd.png) + +- Change the default status of **No Quorum Policy** to **ignore**, and the default status of **Stonith Enabled** to **false**, as shown in the following figure: + +![](./figures/HA-firstchoice.png) + +#### Adding Resources + +##### Adding Common Resources + +The multi-option drop-down list box in the system supports keyword matching. You can enter the keyword of the item to be configured and quickly select it. + +Apache and IPaddr are used as examples. + +Run the following commands to add the Apache and IPaddr resources: + +``` +# pcs resource create httpd ocf:heartbeat:apache +# pcs resource create IPaddr ocf:heartbeat:IPaddr2 ip=172.30.30.67 +``` + +Run the following command to check the cluster resource status: + +``` +# pcs status +``` + +![](./figures/HA-pcs-status.png) + +![](./figures/HA-add-resource.png) + +- Add Apache resources. + +![](./figures/HA-apache.png) + +- The resources are successfully added if the following information is displayed: + +![](./figures/HA-apache-suc.png) + +- The resources are created and started successfully, and run on a node, for example, **ha1**. The Apache page is displayed. + +![](./figures/HA-apache-show.png) + +- Add IPaddr resources. + +![](./figures/HA-ipaddr.png) + +- The resources are successfully added if the following information is displayed: + +![](./figures/HA-ipaddr-suc.png) + +- The resources are created and started successfully, and run on a node, for example, **ha1**. The HA web login page is displayed, and you can log in to the page and perform operations. When the resources are switched to **ha2**, the web page can still be accessed. + +![](./figures/HA-ipaddr-show.png) + +##### Adding Group Resources + +When you add group resources, at least one common resource is needed in the cluster. Select one or more resources and click **Create Group**. + +- **Note: Group resources are started in the sequence of subresources. Therefore, you need to select subresources in sequence.** + +![](./figures/HA-group.png) + +The resources are successfully added if the following information is displayed: + +![](./figures/HA-group-suc.png) + +##### Adding Clone Resources + +![](./figures/HA-clone.png) + +The resources are successfully added if the following information is displayed: + +![](./figures/HA-clone-suc.png) + +#### Editing Resources + +- **Enable**: Select a target resource that is not running from the resource node list. Enable the resource. +- **Disable**: Select a target resource that is running from the resource node list. Disable the resource. +- **Clearup**: Select a target resource from the resource node list and clear the resource. +- **Porting**: Select a target resource from the resource node list. The resource must be a common resource or group resource that is running. You can port the resource to a specified node. +- **Rollback**: Select a target resource from the resource node list. Before rolling back a resource, ensure that the resource has been ported. You can clear the porting settings of the resource and roll the resource back to the original node. After you click the button, the status of the resource item in the list is the same as that when the resource is enabled. +- **Remove**: Select a target resource from the resource node list and remove the resource. + +You can perform the preceding resource operations on the page shown in the following figure: + +![](./figures/HA-resoure-set.png) + +#### Setting Resource Relationships + +The resource relationship is used to set restrictions for target resources. Resource restrictions are classified as follows: **resource location**, **resource colocation**, and **resource ordering**. + +- **Resource location**: Set the runlevel of nodes in the cluster to determine the node where the resource runs during startup or switchover. The runlevels are Master and Slave in descending order. +- **Resource colocation**: Indicate whether the target resource and other resources in the cluster are running on the same node. For resources on the same node, the resource must run on the same node as the target resource. For resources on mutually exclusive nodes, the resource and the target resource must run on different nodes. +- **Resource ordering**: Set the ordering in which the target resource and other resources in the cluster are started. The preamble resource must run before the target resource runs. The postamble resource can run only after the target resource runs. + +After adding common resources or group resources, you can perform the preceding resource operations on the page shown in the following figure: + +![](./figures/HA-resource-relationship.png) + +#### ACLS + +ACLS is an access control list. You can click **Add** to add a user and manage the user access. + +![](./figures/HA-ACLS.png) \ No newline at end of file diff --git "a/docs/zh/docs/desktop/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" "b/docs/zh/docs/desktop/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" new file mode 100644 index 000000000..58900c405 --- /dev/null +++ "b/docs/zh/docs/desktop/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" @@ -0,0 +1,214 @@ +# HA使用实例 + +本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./HA的安装与部署.md\)。 + + + - [HA使用实例](#HA使用与实例) + - [快速使用指南](#快速使用指南) + - [登陆页面](#登陆页面) + - [主页面](#主页面) + - [导航栏](#导航栏) + - [顶部操作区](#顶部操作区) + - [资源节点列表区](#资源节点列表区) + - [节点操作浮动区](#节点操作浮动区) + - [首选项配置](#首选项配置) + - [添加资源](#添加资源) + - [添加普通资源](#添加普通资源) + - [添加组资源](#添加组资源) + - [添加克隆资源](#添加克隆资源) + - [编辑资源](#编辑资源) + - [设置资源关系](#设置资源关系) + - [高可用mysql实例配置](#高可用mysql实例配置) + - [配置虚拟IP](#配置虚拟IP) + - [配置NFS存储](#配置NFS存储) + - [配置mysql](#配置mysql) + - [添加上述资源为组资源](#添加上述资源为组资源) + + +## 快速使用指南 + +- 以下操作均以社区新开发的管理平台为例。 + +### 登陆页面 +用户名为`hacluster`,密码为该用户在主机上设置的密码。 + +![](./figures/HA-api.png) + +### 主页面 +登录系统后显示主页面,主页面由四部分组成:侧边导航栏、顶部操作区、资源节点列表区以及节点操作浮动区。 + +以下将详细介绍这四部分的特点与使用方法。 + +![](./figures/HA-home-page.png) + +#### 导航栏 +侧边导航栏由两部分组成:高可用集群软件名称和 logo 以及系统导航。系统导航由三项组成:【系统】、【集群配置】和【工具】。【系统】是默认选项,也是主页面的对应项,主要展示系统中所有资源的相关信息以及操作入口;【集群配置】下设【首选项配置】和【心跳配置】两项;【工具】下设【日志下载】和【集群快捷操作】两项,点击后以弹出框的形式出现。 + +#### 顶部操作区 +登录用户是静态显示,鼠标滑过用户图标,出现操作菜单项,包括【刷新设置】和【退出登录】两项,点击【刷新设置】,弹出【刷新设置】对话框,包含【刷新设置】选项,可以设置系统的自动刷新模式,包括【不自动刷新】、【每 5 秒刷新】和【每 10 秒刷新】三种选择,默认选择【不自动刷新】、【退出登录】即可注销本次登录,系统将自动跳到登录页面,此时,如果希望继续访问系统,则需要重新进行登录。 + +![](./figures/HA-refresh.png) + +#### 资源节点列表区 +资源节点列表集中展现系统中所有资源的【资源名】、【状态】、【资源类型】、【服务】、【运行节点】等资源信息,以及系统中所有的节点和节点的运行情况等节点信息。同时提供资源的【添加】、【编辑】、【启动】、【停止】、【清理】、【迁移】、【回迁】、【删除】和【关系】操作。 + +#### 节点操作浮动区 +节点操作浮动区域默认是收起的状态,每当点击资源节点列表表头中的节点时,右侧会弹出节点操作扩展区域,如图所示,该区域由收起按钮、节点名称、停止和备用四个部分组成,提供节点的【停止】和【备用】操作。点击区域左上角的箭头,该区域收起。 + +### 首选项配置 +以下操作均可用命令行配置,现只做简单示例,若想使用更多命令可以使用``pcs --help``进行查询。 + +``` +# pcs property set stonith-enabled=false +# pcs property set no-quorum-policy=ignore +``` +``pcs property``查看全部设置 + +![](./figures/HA-firstchoice-cmd.png) + +- 点击侧边导航栏中的【首选项配置】按钮,弹出【首选项配置】对话框。将No Quorum Policy和Stonith Enabled由默认状态改为如下对应状态;修改完成后,点击【确定】按钮完成配置。 + +![](./figures/HA-firstchoice.png) + +#### 添加资源 +##### 添加普通资源 +鼠标点击【添加普通资源】,弹出【创建资源】对话框,其中资源的所有必填配置项均在【基本】页面内,选择【基本】页面内的【资源类型】后会进一步给出该类资源的其他必填配置项以及选填配置项。填写资源配置信息时,对话框右侧会出现灰色文字区域,对当前的配置项进行解释说明。全部必填项配置完毕后,点击【确定】按钮即可创建普通资源,点击【取消】按钮,取消本次添加动作。【实例属性】、【元属性】或者【操作属性】页面中的选填配置项为选填项,不配置不会影响资源的创建过程,可以根据场景需要可选择修改,否则将按照系统默认值处理。 + +下面以apache为例,添加apache资源 +``` +# pcs resource create httpd ocf:heartbeat:apache +``` +查看资源运行状态 +``` +# pcs status +``` + +![](./figures/HA-pcs-status.png) + +- 添加apache资源 + +![](./figures/HA-add-resource.png) +- 若回显为如下,则资源添加成功 + +![](./figures/HA-apache-suc.png) +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;成功访问apache界面。 + +![](./figures/HA-apache-show.png) + +##### 添加组资源 +添加组资源时,集群中需要至少存在一个普通资源。鼠标点击【添加组资源】,弹出【创建资源】对话框。【基本】页面内均为必填项,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +- **注:组资源的启动是按照子资源的顺序启动的,所以选择子资源时需要注意按照顺序选择。** + +![](./figures/HA-group.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-group-suc.png) + +##### 添加克隆资源 +鼠标点击【添加克隆资源】,弹出【创建资源】对话框。【基本】页面内填写克隆对象,资源名称会自动生成,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +![](./figures/HA-clone.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-clone-suc.png) +#### 编辑资源 +- 启动资源:资源节点列表中选中一个目标资源,要求:该资源处于非运行状态。对该资源执行启动动作。 +- 停止资源:资源节点列表中选中一个目标资源,要求:该资源处于运行状态。对该资源执行停止操作。 +- 清理资源:资源节点列表中选中一个目标资源,对该资源执行清理操作。 +- 迁移资源:资源节点列表中选中一个目标资源,要求:该资源为处于运行状态的普通资源或者组资源,执行迁移操作可以将资源迁移到指定节点上运行。 +- 回迁资源:资源节点列表中选中一个目标资源,要求:该资源已经完成迁移动作,执行回迁操作,可以清除该资源的迁移设置,资源重新迁回到原来的节点上运行。 +点击按钮后,列表中该资源项的变化状态与启动资源时一致。 +- 删除资源:资源节点列表中选中一个目标资源,对该资源执行删除操作。 + +#### 设置资源关系 +资源关系即为目标资源设定限制条件,资源的限制条件分为三种:资源位置、资源协同和资源顺序。 +- 资源位置:设置集群中的节点对于该资源的运行级别,由此确定启动或者切换时资源在哪个节点上运行,运行级别按照从高到低的顺序依次为:Master Node、Slave 1。 +- 资源协同:设置目标资源与集群中的其他资源是否运行在同一节点上,同节点资源表示该资源与目标资源必须运行在相同节点上,互斥节点资源表示该资源与目标资源不能运行在相同的节点上。 +- 资源顺序:设置目标资源与集群中的其他资源启动时的先后顺序,前置资源是指目标资源运行之前,该资源必须已经运行;后置资源是指目标资源运行之后,该资源才能运行。 + +## 高可用mysql实例配置 +- 先单独配置三个普通资源,待成功后添加为组资源。 +### 配置虚拟IP +在首页中点击添加-->添加普通资源,并按如下进行配置。 + +![](./figures/HA-vip.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;可以ping通并连接,登录后可正常执行各种操作;资源切换到ha2运行;能够正常访问。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-vip-suc.png) + +### 配置NFS存储 +- 另外找一台机器作为nfs服务端进行配置 + +安装软件包 + +``` +# yum install -y nfs-utils rpcbind +``` +关闭防火墙 +``` +# systemctl stop firewalld && systemctl disable firewalld +``` +修改/etc/selinux/config文件中SELINUX状态为disabled +``` +# SELINUX=disabled +``` +启动服务 +``` +# systemctl start rpcbind && systemctl enable rpcbind +# systemctl start nfs-server && systemctl enable nfs-server +``` +服务端创建一个共享目录 +``` +# mkdir -p /test +``` +修改NFS配置文件 +``` +# vim /etc/exports +# /test *(rw,no_root_squash) +``` +重新加载服务 +``` +# systemctl reload nfs +``` + +客户端安装软件包,先把mysql安装上,为了把下面nfs挂载到mysql数据路径 +``` +# yum install -y nfs-utils mariadb-server +``` +在首页中点击添加-->添加普通资源,并按如下进行配置NFS资源。 + +![](./figures/HA-nfs.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;nfs成功挂载到/var/lib/mysql路径下。资源切换到ha2运行;nfs从ha1节点取消挂载,并自动在ha2节点上挂载成功。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-nfs-suc.png) + +### 配置mysql +在首页中点击添加-->添加普通资源,并按如下进行配置mysql资源。 + +![](./figures/HA-mariadb.png) + +- 若回显为如下,则资源添加成功 + +![](./figures/HA-mariadb-suc.png) + +### 添加上述资源为组资源 +- 按资源启动顺序添加三个资源 + +在首页中点击添加-->添加组资源,并按如下进行配置组资源。 + +![](./figures/HA-group-new.png) + +- 组资源创建成功并启动,若回显与上述三个普通资源成功现象一致,则资源添加成功 + +![](./figures/HA-group-new-suc.png) + +- 将ha1节点备用,成功迁移到ha2节点,运行正常 + +![](./figures/HA-group-new-suc2.png) \ No newline at end of file diff --git "a/docs/zh/docs/desktop/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/docs/zh/docs/desktop/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" new file mode 100644 index 000000000..0aa6f2f0a --- /dev/null +++ "b/docs/zh/docs/desktop/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -0,0 +1,185 @@ +# HA的安装与部署 + +本章介绍如何安装和部署HA高可用集群。 + + +- [HA的安装与部署](#ha的安装与部署) + - [安装与部署](#安装与部署) + - [修改主机名称及/etc/hosts文件](#修改主机名称及etchosts文件) + - [配置yum源](#配置yum源) + - [安装HA软件包组件](#安装ha软件包组件) + - [设置hacluster用户密码](#设置hacluster用户密码) + - [修改`/etc/corosync/corosync.conf`文件](#修改etccorosynccorosyncconf文件) + - [管理服务](#管理服务) + - [关闭防火墙](#关闭防火墙) + - [管理pcs服务](#管理pcs服务) + - [管理pacemaker服务](#管理pacemaker服务) + - [管理corosync服务](#管理corosync服务) + - [节点鉴权](#节点鉴权) + - [访问前端管理平台](#访问前端管理平台) + + +## 安装与部署 +- 环境准备:需要至少两台安装了openEuler 20.03 LTS SP2的物理机/虚拟机(现以两台为例),安装方法参考《openEuler 20.03 LTS SP2 安装指南》。 + +### 修改主机名称及/etc/hosts文件 +- **注:两台主机均需要进行以下操作,现以其中一台为例。** + +在使用HA软件之前,需要确认修改主机名并将所有主机名写入/etc/hosts文件中。 +- 修改主机名 +``` +# hostnamectl set-hostname ha1 +``` + +- 编辑`/etc/hosts`文件并写入以下字段 +``` +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### 配置yum源 +成功安装系统后,会默认配置好yum源,文件位置存放在`/etc/yum.repos.d/openEuler.repo`文件中,HA软件包会用到以下源: +``` +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/EPOL/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### 安装HA软件包组件 +``` +# yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd drbd-utils +``` + +### 设置hacluster用户密码 +``` +# passwd hacluster +``` + +### 修改`/etc/corosync/corosync.conf`文件 +``` +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` +### 管理服务 +#### 关闭防火墙 +``` +# systemctl stop firewalld +``` +修改/etc/selinux/config文件中SELINUX状态为disabled +``` +# SELINUX=disabled +``` + +#### 管理pcs服务 +- 启动pcs服务: +``` +# systemctl start pcsd +``` + +- 查询pcs服务状态: +``` +# systemctl status pcsd +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pcs.png) + +#### 管理pacemaker服务 +- 启动pacemaker服务: +``` +# systemctl start pacemaker +``` + +- 查询pacemaker服务状态: +``` +# systemctl status pacemaker +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pacemaker.png) + +#### 管理corosync服务 +- 启动corosync服务: +``` +# systemctl start corosync +``` + +- 查询corosync服务状态: +``` +# systemctl status corosync +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-corosync.png) + +### 节点鉴权 +- **注:一个节点上执行即可** +``` +# pcs host auth ha1 ha2 +``` + +### 访问前端管理平台 +上述服务启动成功后,打开浏览器(建议使用:Chrome,Firfox),在浏览器导航栏中输入`https://localhost:2224`即可。 +- 此界面为原生管理平台 + +![](./figures/HA-login.png) + +若安装社区新开发的管理平台请参考此文档`https://gitee.com/openeuler/ha-api/blob/master/docs/build.md` +- 下面为社区新开发的管理平台 + +![](./figures/HA-api.png) + +- 下一章将介绍如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./HA的使用实例.md\)。 \ No newline at end of file -- Gitee From bb387b7b8bef145dffd71ced8a6d580a81d1537e Mon Sep 17 00:00:00 2001 From: solarhu Date: Wed, 29 Sep 2021 01:34:36 +0000 Subject: [PATCH 04/10] =?UTF-8?q?=E6=9B=B4=E6=96=B021.09=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=20=E6=9B=B4=E6=96=B021.09=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...63\351\224\256\347\211\271\346\200\247.md" | 187 ++++++------------ 1 file changed, 58 insertions(+), 129 deletions(-) diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index 2b3c4af2a..a4dcf9cf1 100644 --- "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -1,171 +1,100 @@ # 关键特性 -## 全新的5.10内核 +## openEuler 21.09基于 Linux Kernel 5.10内核构建, 在进程调度、内存管理、网络等方面带来10余处创新 深度优化调度、IO、内存管理,提供Arm64、x86、RISC-V等更多算力支持。 -- **调度器优化**,优化了 CFS Task 的公平性,新增 numa aware 异步调用机制,在 NVDIMM 初始化方面有明显的提升;优化 SCHED_IDLE 的调度策略,显著改善高优先级任务的调度延迟,降低对其他任务的干扰。 +- **内核动态抢占**,新增启动选preempt=none/voluntary/full,允许内核动态切换抢占模式。 -- **numa balancing 机制优化**,带来更好的亲和性、更高的使用率和更少的无效迁移。 +- **mremap性能优化**,通过移动 PMD/PUD 级别的表项,加速映射大块内存的速度。 -- **CPU 隔离机制增强**,支持中断隔离,支持 unbound kthreads 隔离,增强 CPU 核的隔离性,可以更好的避免业务间的相互干扰。 +- **per memcg lru lock**,采用per memcg lru_lock,减少云原生容器实例锁竞争,提升系统性能。 -- **cgroup单线程迁移性能优化**,消除对 thread group 读写信号量的依赖;引入Time Namespaces 使容器迁移更方便。 +- **大页内存管理优化**,通过共享映射方式将HugeTLB管理页中无实际作用的tail页释放掉,从而降低管理结构的开销,降低大页管理自身内存占用。 -- **系统容器限制容器内使用文件句柄数能力支持**,文件句柄包括普通文件句柄和网络套接字,启动容器时,可以通过指定`--files-limit`参数限制容器内打开的最大句柄数。 +- **TLB并发刷新支持**,本地TLB和远端TLB刷新并行,优化TLB shootdown流程加速TLB刷新,提升业务性能。 -- **PSI 能力支持**,PSI (Pressure Stall Information)提供了一种评估系统资源如 CPU、Memory、IO 压力的方法。准确的检测方法可以帮助资源使用者确定合适的工作量,同时也可以帮助系统制定高效的资源调度策略,最大化利用系统资源,最大化改善用户体验。 +- **大页vmalloc性能优化**,对于超过huge page的最小size的空间进行vmalloc()分配时,将会尝试使用 huge page 而不是 base page来映射内存,可以大大改善 TLB 的利用,降低TLB miss。 -- **进程间通信优化**,pipe/epoll_wait 唤醒机制优化,解决唤醒多个等待线程的性能问题。 -- **内存管理增强**,精细化内存控制、统计,异构内存,热插拔、内存初始化等功能均有改善,并提供更有效的用户控制接口; 热点锁及信号量优化,激进内存规整和碎片整理,优化vmap/vmalloc机制,显著提升内存申请效率提升; KASAN、kmemleak、slub_debug、oom等内存维测特性增强,提升内存问题定位及解决效率。 -- **Early Departure Time模型切换**,解决了原来发包过程中TCP框架的限制,根据调度策略给数据包设置EDT时间戳,避免大的队列缓存带来的时延,带来tcp性能的较大提高。 +## 新介质文件系统 +- **Eulerfs**,Eulerfs创新元数据软更新技术(Soft Update),基于指针的目录双视图计数机制,减少元数据同步开销,有效提升文件系统create、unlink、mkdir、rmdir系统调用性能。 -- **MultiPath TCP 支持**,可在移动与数据场景提升性能和可靠性,支持在负载均衡场景多条子流并行传输。 - -- **日志 fast commit 方法引入**,EXT4 引入了新的、更轻量级的日志方法 `-fast commit`,可以大大加快 `fsync` 等耗时较长的操作,带来更好的性能。 - -- **支持dm writecache 特性**,提升 SSD 大块顺序写性能,提高 DDR 持久性内存的性能。 - -- **支持 io_uring**, io_uring 是一个新的异步IO框架和实现,支持 polling 模式,在polling模式下,性能提升显著,与spdk接近,在队列深度较高时性能更好。 - -- **支持 ILP32**, 在鲲鹏920 Arm64 环境上支持 32 位的应用程序。 - -- **IMA 商用增强**,在开源 IMA 方案基础上,增强安全性、提升性能、提高易用性,助力商用落地。 - -- **支持 per task 栈检查**,增强对 ROP 攻击的防护能力。 - -- **MPAM资源管控**,支持 Arm64架构Cache QoS 以及内存带宽控制技术。 - -- **支持基于 SEDI 的 NMI 机制和基于 PMU 的 NMI 机制**,使能 hard lockup 检测;使能 perf nmi,能更精确的进行性能分析。 - -- **Arm64 平台支持虚拟机 CPU 热插拔**,提高资源配置的灵活性。 - -- **Arm64 kdump 增强**, 支持对 4G 以上地址的内存预留,使 kdump 能预留更多的内存空间,支持更大内存的机器。 - -- **支持 Raspberry PI 系列板卡**,树莓派的支持已经合入原生的 openEuler 21.03 内核,可以直接使用 openEuler 21.03 内核源码调试。 - -- **RISC-V 平台支持 KVM 虚拟化** - -- **支持 1822 智能网卡** - -## 内核热升级 -内核热升级是一种 OS 漏洞修复及升级解决方案,实现内核快速热替换,业务不感知。 - -- **Cpu Park、Quick Kexec 特性**加速系统启停,减少宕机时间,增加系统可用性。 - -- **Pin Memory、Pmem 特性**保证业务进程快速准确恢复,提升业务韧性。 - -- **内核热升级控制器**提供 gRPC 通信接口,容易使用。 ## 内存分级扩展 -支持多种内存、存储介质扩展系统内存容量,降低内存使用成本。 - -- **冷热页面识别**,通过内核态的内存页面忙闲统计机制,精确识别进程内存页面访问冷热分布。 +支持多种内存、存储介质扩展系统内存容量,降低内存使用成本。新增用户态交换支持 -- **淘汰策略可配置**,提供配置接口,可定制内存页面冷热分级策略。 +- **用户态交换(新增)**,通过etMem的策略配置,对于淘汰的冷内存,通过用户态swap功能交换到用户态存储中,达到用户无感知,性能由于内核态swap。 -- **平滑扩展**,冷页面自动换出到扩展内存,部署在其上的软件不需要改变和适配编程方式的情况下兼容的运行。 -- **多介质扩展支持**,支持SCM、XL Flash、NVMe SSD等多种介质作为扩展内存,根据介质自身访问速度指定内存冷热分层方案,达到扩展内存并减少性能损失的目的。 +## 业务混部引擎 +在云业务场景中,交互类延时敏感在线业务存在潮汐现象,CPU资源利用率普遍较低(不足15%),在线和离线业务混合部署是提升资源利用率的有效方式。在现有的内核资源分配和管理机制。 +- **QAS(Quality aware scheduler)**,可以确保在线任务对CPU的快速抢占,确定性的调度运行,同时压制离线任务干扰。 +- **OOM回收支持优先级**,优化OOM时内存回收调度算法,在发生OOM时,优先对低优先级的进程组进行内存回收,保障在线业务的正常运行。 -## 虚拟化功能和可维测能力增强 -增加热迁移 Pro 能力扩展,提升可维可测能力。 -- **热迁移Pro特性**,增强热迁移 multifd 支持 TLS,保障迁移过程数据安全;支持热迁移数据并行压缩,提升迁移性能;增加数据页面访问频率统计,支撑热迁移数据提前预测。 -- **性能调试工具(vmtop)**, 可以实时动态查看虚拟机的资源使用情况,包括CPU使用率,内存使用率等信息。新增扩展支持x86_64架构。 +## KubeOS +容器化操作系统KubeOS,实现云原生集群OS的统一容器化管理。 +- **OS容器化管理**,对接K8S容器和OS统一管理,原子化的生命周期管理。 +- **OS轻量化裁剪**,减少不必要的冗余包,可实现快速升级、替换等。 -- **IO悬挂支持**,IO发生错误时默认自动重试,超时会上报告警。 +## 轻量安全容器增强 +基于Stratovirt轻量虚拟化技术,实现容器级别的低负载和虚拟机高安全。 +- **支持UEFI启动**,支持UEFI启动、ACPI表的构建以及为虚拟机添加包括vrtio-pci在内的PCIe/PCI设备。 +- **支持VFIO**,提供将host上物理设备直通给虚拟机的能力,使虚拟机获得接近裸设备的高性能。 -## 轻量虚拟运行时(Stratovirt) -增加弹性内存、大页功能、系统调用过滤功能,增强IO子系统提升性能和稳定性。 +## iSula增强 +- **shimv2**,shimv2 进程了收编 kata-runtime,kata-shim, kata-proxy进程,通过加载⼀次运⾏时并通过 RPC 调⽤来处理各种容器 +⽣命周期管理命令来简化体系结构,不必为每个容器⼀直运⾏⼀个容器运⾏时 -- **弹性内存支持**,根据工作负载的内存需求,实现内存的分配和回收, virtio-balloon内存回收速度达3GB/秒。 +## eggo支持容器管理双平面部署 +eggo是openEuler云原生Sig组K8S集群部署管理项目,提供高效稳定的集群部署集群的能力。 +- **集群配置版本化管理**,配置统一Git repo版本化管理,使用仓库汇总和跟踪集群的配置信息。 +- **X86/ARM双平面**,实现OS双平面集群化部署、监控、审计等场景。 -- **大页支持**,在轻量级框架下提供大页的支持,可为轻量级虚拟机提供连续的物理内存页面,提高虚拟机内存访问效率。 +## 边云协同框架 +1提供统一的跨边云的协同框架(KubeEdge),实现边云之间的应用、平台服务等的管理与部署,跨边云的通信,以及跨边云的南向外设管理、控制与数据协同,边与云部署的组件存在差异,边侧主要部署EdgeCore、EdgeMesh Agent、数据服务、服务运行环境等;云侧主要部署CloudCore、EdgeMesh Server、运维管理、平台服务管理等。 +- **边缘南向服务**,南向接入Mapper,提供外设Pofile及解析机制,以及实现对不同南向外设的管理、控制、业务流的接入,可兼容EdgeX Foundry开源生态。 +- **边缘设备系统管理**, 通过设备OM的硬件层抽象层(HAL)实现对不同硬件/驱动的抽象与适配。 +- **边缘数据服务**,通过边缘数据服务实现消息、数据、媒体流的按需持久化,并具备数据分析和数据导出的能力。 +- **边缘平台服务市场**,实现边缘原生平台服务的统一生命周期管理,包括部署、运维、升级等 -- **系统调用过滤**,简化设备模型,增加系统调用过滤支持,最简配置下仅需使用35个系统调用,有效减小系统攻击面。 +## 嵌入式镜像 +提供轻量化、安全和容器等基础能力,支持ARM32、ARM64芯片架构。 +- **轻量化**,OS镜像<5M, 运行底噪<10 M, 以及<5S快速启动等能力。 +- **轻量容器**,面向嵌入式场景的轻量容器运行时,支持对接K8S集群管理软件,提供类IT应用部署和管理体验。 +- **多架构支持**,支持ARM32和ARM64芯片架构。 -- **IO子系统增强**,支持多通道并发IO能力支持,提升性能;支持IO-QOS能力,提升虚拟机IO流量管理的灵活性和稳定性。 +## 智能运维Aops -## 内核热升级 -内核热升级是一种 OS 漏洞修复及升级解决方案,实现内核快速热替换,业务不感知。 -- **Cpu Park、Quick Kexec 特性**加速系统启停,减少宕机时间,增加系统可用性。 -- **Pin Memory、Pmem 特性**保证业务进程快速准确恢复,提升业务韧性。 -- **内核热升级控制器**提供 gRPC 通信接口,容易使用。 +智能运维基本框架,提供配置溯源,架构感知,故障定位基础能力,支持快速排障和运维成本降低 -## 分级内存管理框架 -支持多种内存、存储介质统一管理,系统容量平滑扩展。 -- **冷热页面识别**,通过内核态的内存页面忙闲统计机制,精确识别进程内存页面访问冷热分布。 -- **淘汰策略可配置**,提供配置接口,可定制内存页面冷热分级策略。 -- **平滑扩展**,冷页面自动换出到扩展内存,部署在其上的软件不需要改变和适配编程方式的情况下兼容的运行。 -- **多介质扩展支持**,支持SCM、XL Flash、NVMe SSD等多种介质作为扩展内存,根据介质自身访问速度指定内存冷热分层方案,达到扩展内存并减少性能损失的目的。 +- **架构感知**,基于eBPF的低负载探针框架,提供应用级别的网络拓扑自动感知和检测能力。 -## 虚拟化功能和可维测能力增强 -增加热迁移 Pro 能力扩展,提升可维可测能力。 -- **热迁移Pro特性**,增强热迁移 multifd 支持 TLS,保障迁移过程数据安全;支持热迁移数据并行压缩,提升迁移性能;增加数据页面访问频率统计,支撑热迁移数据提前预测。 -- **性能调试工具(vmtop)**, 可以实时动态查看虚拟机的资源使用情况,包括CPU使用率,内存使用率等信息。新增扩展支持x86_64架构。 -- **IO悬挂支持**,IO发生错误时默认自动重试,超时会上报告警。 -- **RISC-V架构支持虚拟化热迁移** +- **配置溯源**,实现配置基线和比较功能,快速排除配置问题。 -## 轻量虚拟运行时(Stratovirt) -增加弹性内存、大页功能、系统调用过滤功能,增强IO子系统提升性能和稳定性。 -- **弹性内存支持**,根据工作负载的内存需求,实现内存的分配和回收, virtio-balloon内存回收速度达3GB/秒。 -- **大页支持**,在轻量级框架下提供大页的支持,可为轻量级虚拟机提供连续的物理内存页面,提高虚拟机内存访问效率。 -- **系统调用过滤**,简化设备模型,增加系统调用过滤支持,最简配置下仅需使用35个系统调用,有效减小系统攻击面。 -- **IO子系统增强**,支持多通道并发IO能力支持,提升性能;支持IO-QOS能力,提升虚拟机IO流量管理的灵活性和稳定性。 ->>>>>>> 40a1a0c3452b246a0e86c1c0b8967669c93deeb5 +- **智能定位**,提供异常检测和专家模式引擎,支持自定义故障树,对系统故障实时感知,及时修复系统故障,减少宕机时间和运维投入。 -## OpenStack Victoria集成 -简单、可大规模扩展、丰富、标准统一的云管理操作系统。更多特性,请参考OpenStack Victoria官方发行说明。 -<<<<<<< HEAD +## secPaver -- **集成openStack Vicoria版本**,使能基础设施即服务(IaaS)解决方案。 +secPaver是一款SELinux安全策略开发工具,用于辅助开发人员为应用程序开发安全策略。 -- **增强块存储服务能力**,增加容量扩展、快照和虚拟机镜像克隆等高级功能。 +- **策略管理**,提供高阶配置语言,根据策略配置文件内容生成SELinux策略文件,降低SElinux使用门槛。 -- **增强容器化部署和网络能力**,与容器能更好的集成。 -- **增加扩展服务支持**,支持控制面板管理、裸机部署、云资源追踪等扩展服务。 - -## Kubernetes 1.20 集成 - -用于自动部署,扩展和管理容器化应用程序的云原生操作系统它更多特性,请参考Kubernetes 1.20官方发行说明。 - -- **自动上线和回滚**,Kubernetes 会自动将应用或其配置的更改后的实例上线,同时监视应用程序运行状况,失败就会回滚之前所作更改。 - -- **服务发现和负载均衡**,服务发现和基于容器IP和DNS名称的负载均衡机支持。 - -- **存储编排**,支持多种存储后端的自动挂载,如本地存储、NFS、iSCSI、Gluster、Ceph等网络存储系统。 - -- **水平扩展**,支持命令行、UI手动操作扩展,以及基于 CPU 使用情况自动扩展方式。 - -## HA 高可用集群方案 - -麒麟软件贡献的高可用集群方案,故障秒级切换,为用户提供业务连续性保障、数据持续保护、灾难恢复的高可用环境。 - -- **支持多种保护模式**,双机热备、双机互备、多机备份(N+M)等多种保护模式支持,满足业务应用各种保护需求。 - -- **物理机场景和云场景双支持**,既可以在虚拟机池中进行配置高可用,也可以对物理服务器节点进行高可用保护。 - -- **支持网络(包括单心跳和双心跳模式)等心跳方式**,全方位监控共享数据资源,在极端情况下保障数据的一致性。 - -- **资源损耗低**,可在线部署,同时确保被保护应用的资源使用安全。 - -- **支持主流系统服务及应用软件**,如nginx、httpd、mariaDB等,支持二次开发。 - -- **支持HA-WEB人机交互接口**,如用户登录、集群状态展示、资源控制等。 - -- **支持HA-API机机交互接口**,如后端集群控制、资源管理、集群状态监控、资源状态监控等。 +## 更多的第三方应用支持 +- **KubeSphere**,KubeSphere 是在 Kubernetes 之上构建的以应用为中心的容器平台,完全开源,由青云科技发起,并由 openEuler 社区 SIG-KubeSphere 提供支持和维护。 +- **OpenStack Wallaby**,OpenStack版本更新到Wallaby。Wallaby是2021年4月份发布的最新稳定版本,包含nova、kolla、cyborg、tacker等核心项目的重要更新。 +- **OpenResty**,基于 Nginx 与 Lua 的高性能 Web 平台。 ## 更多桌面环境的支持 - 提供更多的开发桌面选择,更好的开发体验。 -<<<<<<< HEAD - -- **Xfce桌面支持**,Xfce是一款轻量级 Linux 桌面,与主流UI相比对资源占用小。 +- **DDE版本升级**,新增支持画板、音乐和影院应用。 +- **UKUI版本升级**,新增中文输入法和多媒体支持。 -- **DDE桌面支持**,是统信软件旗下的一款linux桌面环境,具有美观,易用,高效等特点。 +## 更多的架构支持 +- **S2500**,S2500处理器芯片集成64个自主研发的ARMv8指令集兼容处理器内核FTC663,采用片上并行系统(PSoC)体系结构。 +- **KH-20000/30000**,兆芯自主研发的最新一代服务器通用SoC处理器产品 -- Gitee From 94e431553801ab08e3d227647d5d252006737d49 Mon Sep 17 00:00:00 2001 From: solarhu Date: Wed, 29 Sep 2021 01:48:43 +0000 Subject: [PATCH 05/10] =?UTF-8?q?update=20docs/zh/docs/Releasenotes/?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=AE=89=E8=A3=85.md.=20=E6=9B=B4=E6=96=B0ed?= =?UTF-8?q?ge=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...347\263\273\347\273\237\345\256\211\350\243\205.md" | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git "a/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" "b/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" index a7c2c74f4..d96548736 100644 --- "a/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" +++ "b/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" @@ -48,6 +48,16 @@ openEuler发布件包括[ISO发布包](http://repo.openeuler.org/openEuler-21.03

openEuler源码ISO

+

openEuler-21.09-edge-aarch64-dvd.iso

+ +

AArch64架构的边缘ISO,包含了运行最小系统的核心组件

+ + +

openEuler-21.09-edge-x86_64-dvd.iso

+ +

x86_64架构的边缘ISO,包含了运行最小系统的核心组件

+ + -- Gitee From 5b7f078cb9752ba2d5d7b5ab98db19cc701cd648 Mon Sep 17 00:00:00 2001 From: YangYunYi Date: Wed, 29 Sep 2021 01:43:27 +0000 Subject: [PATCH 06/10] add docs/zh/docs/A-Ops/overview.md. --- docs/zh/docs/A-Ops/overview.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/zh/docs/A-Ops/overview.md diff --git a/docs/zh/docs/A-Ops/overview.md b/docs/zh/docs/A-Ops/overview.md new file mode 100644 index 000000000..cd3fe7718 --- /dev/null +++ b/docs/zh/docs/A-Ops/overview.md @@ -0,0 +1,3 @@ +# A-Ops用户指南 + +本文介绍A-Ops智能运维框架以及智能定位、配置溯源等服务的安装与使用方法,使用户能够快速了解并使用A-Ops。用户能够借由A-Ops降低系统集群的运维成本,实现系统故障快速定位、配置项统筹管理等功能。 -- Gitee From 540cb40557b0c0c3c5752a8adf6b97ec0f0d8ea7 Mon Sep 17 00:00:00 2001 From: solarhu Date: Wed, 29 Sep 2021 02:07:59 +0000 Subject: [PATCH 07/10] =?UTF-8?q?update=20docs/zh/docs/Releasenotes/?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E7=89=B9=E6=80=A7.md.=20=E6=9B=B4=E6=96=B0ao?= =?UTF-8?q?ps=E7=89=B9=E6=80=A7=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\205\263\351\224\256\347\211\271\346\200\247.md" | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index a4dcf9cf1..eb6057507 100644 --- "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -55,7 +55,7 @@ eggo是openEuler云原生Sig组K8S集群部署管理项目,提供高效稳定 - **X86/ARM双平面**,实现OS双平面集群化部署、监控、审计等场景。 ## 边云协同框架 -1提供统一的跨边云的协同框架(KubeEdge),实现边云之间的应用、平台服务等的管理与部署,跨边云的通信,以及跨边云的南向外设管理、控制与数据协同,边与云部署的组件存在差异,边侧主要部署EdgeCore、EdgeMesh Agent、数据服务、服务运行环境等;云侧主要部署CloudCore、EdgeMesh Server、运维管理、平台服务管理等。 +提供统一的跨边云的协同框架(KubeEdge),实现边云之间的应用、平台服务等的管理与部署,跨边云的通信,以及跨边云的南向外设管理、控制与数据协同,边与云部署的组件存在差异,边侧主要部署EdgeCore、EdgeMesh Agent、数据服务、服务运行环境等;云侧主要部署CloudCore、EdgeMesh Server、运维管理、平台服务管理等。 - **边缘南向服务**,南向接入Mapper,提供外设Pofile及解析机制,以及实现对不同南向外设的管理、控制、业务流的接入,可兼容EdgeX Foundry开源生态。 - **边缘设备系统管理**, 通过设备OM的硬件层抽象层(HAL)实现对不同硬件/驱动的抽象与适配。 - **边缘数据服务**,通过边缘数据服务实现消息、数据、媒体流的按需持久化,并具备数据分析和数据导出的能力。 @@ -71,7 +71,7 @@ eggo是openEuler云原生Sig组K8S集群部署管理项目,提供高效稳定 智能运维基本框架,提供配置溯源,架构感知,故障定位基础能力,支持快速排障和运维成本降低 -- **架构感知**,基于eBPF的低负载探针框架,提供应用级别的网络拓扑自动感知和检测能力。 +- **应用拓扑感知**,基于eBPF的低负载探针框架,提供应用级别的网络拓扑自动感知和检测能力。 - **配置溯源**,实现配置基线和比较功能,快速排除配置问题。 @@ -94,7 +94,3 @@ secPaver是一款SELinux安全策略开发工具,用于辅助开发人员为 提供更多的开发桌面选择,更好的开发体验。 - **DDE版本升级**,新增支持画板、音乐和影院应用。 - **UKUI版本升级**,新增中文输入法和多媒体支持。 - -## 更多的架构支持 -- **S2500**,S2500处理器芯片集成64个自主研发的ARMv8指令集兼容处理器内核FTC663,采用片上并行系统(PSoC)体系结构。 -- **KH-20000/30000**,兆芯自主研发的最新一代服务器通用SoC处理器产品 -- Gitee From 96d060142eac78cd695b6eeac48b7537459c8deb Mon Sep 17 00:00:00 2001 From: solarhu Date: Wed, 29 Sep 2021 02:22:35 +0000 Subject: [PATCH 08/10] =?UTF-8?q?update=20docs/zh/docs/Releasenotes/?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E7=89=B9=E6=80=A7.md.=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=86=85=E6=A0=B8=E6=8F=8F=E8=BF=B0=E5=92=8C=E6=B7=B7=E5=90=88?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\205\263\351\224\256\347\211\271\346\200\247.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index eb6057507..bf4560f39 100644 --- "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -1,6 +1,6 @@ # 关键特性 -## openEuler 21.09基于 Linux Kernel 5.10内核构建, 在进程调度、内存管理、网络等方面带来10余处创新 +## openEuler 21.09基于 Linux Kernel 5.10内核构建, 在进程调度、内存管理等方面带来10余处创新 深度优化调度、IO、内存管理,提供Arm64、x86、RISC-V等更多算力支持。 - **内核动态抢占**,新增启动选preempt=none/voluntary/full,允许内核动态切换抢占模式。 @@ -27,7 +27,7 @@ - **用户态交换(新增)**,通过etMem的策略配置,对于淘汰的冷内存,通过用户态swap功能交换到用户态存储中,达到用户无感知,性能由于内核态swap。 -## 业务混部引擎 +## 云原生调度增强 在云业务场景中,交互类延时敏感在线业务存在潮汐现象,CPU资源利用率普遍较低(不足15%),在线和离线业务混合部署是提升资源利用率的有效方式。在现有的内核资源分配和管理机制。 - **QAS(Quality aware scheduler)**,可以确保在线任务对CPU的快速抢占,确定性的调度运行,同时压制离线任务干扰。 - **OOM回收支持优先级**,优化OOM时内存回收调度算法,在发生OOM时,优先对低优先级的进程组进行内存回收,保障在线业务的正常运行。 -- Gitee From b1ef091f0847cf1155cfe489cd21487a9470fabc Mon Sep 17 00:00:00 2001 From: solarhu Date: Wed, 29 Sep 2021 02:27:44 +0000 Subject: [PATCH 09/10] =?UTF-8?q?update=20docs/zh/docs/Releasenotes/?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E7=89=B9=E6=80=A7.md.=20=E4=BF=AE=E6=AD=A3iS?= =?UTF-8?q?ula=E5=90=8D=E7=A7=B0=E4=B8=BAiSulad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\205\263\351\224\256\347\211\271\346\200\247.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index bf4560f39..6ee6843b0 100644 --- "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -45,7 +45,7 @@ - **支持UEFI启动**,支持UEFI启动、ACPI表的构建以及为虚拟机添加包括vrtio-pci在内的PCIe/PCI设备。 - **支持VFIO**,提供将host上物理设备直通给虚拟机的能力,使虚拟机获得接近裸设备的高性能。 -## iSula增强 +## iSulad增强 - **shimv2**,shimv2 进程了收编 kata-runtime,kata-shim, kata-proxy进程,通过加载⼀次运⾏时并通过 RPC 调⽤来处理各种容器 ⽣命周期管理命令来简化体系结构,不必为每个容器⼀直运⾏⼀个容器运⾏时 -- Gitee From 5ef261bbc2d315c719d2f1d0f6eee0713b2c6b89 Mon Sep 17 00:00:00 2001 From: Wayne Ren Date: Wed, 29 Sep 2021 11:16:18 +0800 Subject: [PATCH 10/10] add initial user manual for openEuler embedded add initial user doc Signed-off-by: Wayne Ren --- docs/zh/docs/Embedded/embedded.md | 131 ++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100755 docs/zh/docs/Embedded/embedded.md diff --git a/docs/zh/docs/Embedded/embedded.md b/docs/zh/docs/Embedded/embedded.md new file mode 100755 index 000000000..4a1edc5df --- /dev/null +++ b/docs/zh/docs/Embedded/embedded.md @@ -0,0 +1,131 @@ +本文档主要用于说明如何使用基于openEuler的面向嵌入式场景的版本。该版本的构建由Yocto完成,具体信息请参考[SIG-Yocto](https://gitee.com/openeuler/community/tree/master/sig/sig-Yocto) + +# 获取镜像 +openEuler已经预先构建了相应的镜像,支持arm和aarch64两种架构,并选择了qemu作为硬件开发板的承载,可以通过如下链接获得相应的镜像 + +- [qemu_arm](https://gitee.com/beilingxie/yocto-embedded-tools/tree/images/qemu-arm) +- [qemu_aarch64](https://gitee.com/beilingxie/yocto-embedded-tools/tree/images/qemu-aarch64) + +相应镜像的的基本信息如下: + +| 镜像类型 | 支持架构 | 开发板信息 | +| ------ | ------ | -----| +| qemu_arm | arm (32位, ARM Cortex A15) | 'virt' generic virtual platform | +| qemu_aarch64 | aarch64 (64位, ARM Cortex A57) | 'virt' generic virtual platform | + +使用者可以在QEMU的通用虚拟平台(virt)上,分别体验32位ARM架构和64位ARM架构下的嵌入式Linux开发 + +## 镜像内容 +每一类镜像又由3个部分组成,其相关信息如下: +| 镜像类型 | 名称 | 说明 | +| ------ | ------ | -----| +| 内核镜像 | zImage | 基于openEuler的linux 5.10内核镜像 | +| 极简根文件系统镜像 | initrd_tiny | 极简化的根文件系统镜像,只包含基本功能 | +| 标准根文件系统镜像 | initrd | 标准的根文件系统镜像,包含标准功能 | + +每次运行时,根据需要,选择内核镜像和相应的根文件系统镜像。 + +- 内核镜像 + - 内核的相关功能可参见如下配置 + - [arm(cortex a15)](https://gitee.com/openeuler/yocto-embedded-tools/blob/openEuler-21.09/config/arm/defconfig-kernel) + - [arm(cortex a57)](https://gitee.com/openeuler/yocto-embedded-tools/blob/openEuler-21.09/config/arm64/defconfig-kernel), 针对aarch64架构,额外增加了镜像自解压功能,可以参见相应的[patch](https://gitee.com/openeuler/yocto-embedded-tools/blob/openEuler-21.09/patches/arm64/0001-arm64-add-zImage-support-for-arm64.patch) +- 简化根文件系统(initrd_tiny) + - 包含功能:busybox, 基本的glibc库 + - 说明:虽然功能简单,但也只有很小的内存消耗,适合进行Linux内核的相关探索 +- 正常根文件系统(initrd) + - 包含功能:audit, cracklib,OpenSSH, Linux PAM,shadow, iSula容器 + - 说明:在简化根文件系统的基础之上,增加了安全加固、OpenSSH、iSula容器等功能,适合进行更加丰富的功能探索 + +# 运行镜像 + +建议使用QEMU5.0以上版本运行镜像,由于一些额外功能(网络、共享文件系统)需要依赖QEMU的virtio-net, virtio-fs等特性,如未在QEMU中使能,则运行是可能会产生错误,此时可能需要从源码重新编译QEMU。 + +运行镜像时,建议把内核镜像和根文件系统镜像放在同一目录下,后续说明以正常根文件系统为例(initrd) + +## 基本运行 + +基本运行时,qemu未使能网络和共享文件系统,使用者只能使用基本功能 + +arm +```sh +qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd +``` +aarch64 +```sh +qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd +``` + +由于标准根文件系统镜像进行了安全加固,因此第一次启动时,需要为登录用户名root设置密码,且密码强度有相应要求, 需要数字、字母、特殊字符组合,例如openEuler@2021 + +## 使能共享文件系统 +通过共享文件系统,使得宿主机(host)和客户机(guest)共享文件,这样在宿主机上交叉编译的程序,拷贝到共享目录中,即可在客户机上运行 + +arm +```sh +qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd -device virtio-9p-device,fsdev=fs1,mount_tag=host -fsdev local,security_model=passthrough,id=fs1,path=/tmp +``` +aarch64 +```sh +qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd -device virtio-9p-device,fsdev=fs1,mount_tag=host -fsdev local,security_model=passthrough,id=fs1,path=/tmp +``` + +此处选择宿主机的/tmp目录作为共享目录 + +在客户机启动并登录之后,需要运行如下命令,映射(mount)共享文件系统 +```sh +cd /tmp +mkdir host +mount -t 9p -o trans=virtio,version=9p2000.L host /tmp/host +``` +即把共享文件系统映射到客户机的/tmp/host目录下 + +## 使能网络 +通过qemu的virtio-net和宿主机上的虚拟网卡和网桥,可以使客户机访问网络 + +arm +```sh +qemu-system-arm -M virt-4.0 -cpu cortex-a15 -nographic -kernel zImage -initrd initrd -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=/etc/qemu-ifup +``` +aarch64 +```sh +qemu-system-aarch64 -M virt-4.0 -cpu cortex-a57 -nographic -kernel zImage -initrd initrd -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=/etc/qemu-ifup +``` + +在宿主机上需要建立名为tap0的虚拟网卡, 可以借助/etc/qemu-ifup脚本实现,其执行需要root权限,具体内容如下: + +```sh +#!/bin/bash +ifconfig $1 172.10.10.1 up +``` +通过qemu-ifup脚本,宿主机上将创建名为tap0的虚拟网卡,地址为172.10.10.1.客户机登陆后,执行如下命令: +```sh +ifconfig eth0 172.10.10.2 +``` +之后,宿主机和客户机就可以通过网络联通。如需客户机借助宿主机访问互联网,则需要在宿主机上建立网桥,此处不详述,如有需要,请自行查阅相关资料。 + +# 开发 + +## 环境准备 +当前镜像采用的linaro arm/aarch64 gcc 7.3.1工具链构建的,可以从如下链接中获取相应工具链: +- [linaro arm](https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabi/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi.tar.xz) +- [linrao arm sysroot](https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabi/sysroot-glibc-linaro-2.25-2018.05-arm-linux-gnueabi.tar.xz) +- [linaro aarch64](https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz) +- [linrao aarch64 sysroot](https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/sysroot-glibc-linaro-2.25-2018.05-aarch64-linux-gnu.tar.xz) + +## 用户态程序 +以构建一个hello.c为例,运行在aarch64正常根文件系统中,源码如下: +```c +#include + +int main(void) +{ + printf("hello openEuler\r\n"); +} +``` +然后使用对应的工具链编译, 相应命令如下: +```sh +export PATH=$PATH: +aarch64-linux-gnu-gcc --sysroot= hello.c -o hello +mv hello /temp +``` +把交叉编译好的hello程序拷贝到/tmp目录下,然后参照使能共享文件系统中的描述,使得客户机可以访问宿主机的目录,然后可以在客户机上运行hello。 -- Gitee