From a8d8a1a06c8ebf630f39bb7263bc711b8297d367 Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Wed, 30 Jul 2014 14:39:09 +0800 Subject: [PATCH] qemu-iotests: Add data pattern in version3 VMDK sample image in 059 It's possible that we diverge from the specification with our implementation. Having a reference image in the test cases may detect such problems when we introduce a bug that can read what it creates, but can't handle a real VMDK. Signed-off-by: Fam Zheng Signed-off-by: Stefan Hajnoczi --- tests/qemu-iotests/059 | 4 + tests/qemu-iotests/059.out | 202 +++++++++++++++++- .../sample_images/iotest-version3.vmdk.bz2 | Bin 414 -> 4764 bytes 3 files changed, 205 insertions(+), 1 deletion(-) diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 index 26a2fd3e0e..3c053c29b4 100755 --- a/tests/qemu-iotests/059 +++ b/tests/qemu-iotests/059 @@ -114,6 +114,10 @@ echo echo "=== Testing version 3 ===" _use_sample_img iotest-version3.vmdk.bz2 _img_info +for i in {0..99}; do + $QEMU_IO -r -c "read -P $(( i % 10 + 0x30 )) $(( i * 64 * 1024 * 10 + i * 512 )) 512" $TEST_IMG \ + | _filter_qemu_io +done echo echo "=== Testing 4TB monolithicFlat creation and IO ===" diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out index eba0dedda0..0dadba658f 100644 --- a/tests/qemu-iotests/059.out +++ b/tests/qemu-iotests/059.out @@ -2056,8 +2056,208 @@ wrote 512/512 bytes at offset 10240 === Testing version 3 === image: TEST_DIR/iotest-version3.IMGFMT file format: IMGFMT -virtual size: 1.0G (1073741824 bytes) +virtual size: 16G (17179869184 bytes) cluster_size: 65536 +read 512/512 bytes at offset 0 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 655872 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 1311744 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 1967616 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 2623488 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 3279360 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 3935232 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 4591104 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 5246976 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 5902848 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 6558720 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 7214592 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 7870464 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 8526336 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 9182208 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 9838080 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 10493952 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 11149824 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 11805696 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 12461568 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 13117440 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 13773312 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 14429184 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 15085056 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 15740928 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 16396800 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 17052672 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 17708544 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 18364416 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 19020288 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 19676160 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 20332032 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 20987904 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 21643776 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 22299648 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 22955520 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 23611392 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 24267264 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 24923136 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 25579008 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 26234880 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 26890752 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 27546624 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 28202496 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 28858368 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 29514240 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 30170112 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 30825984 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 31481856 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 32137728 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 32793600 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 33449472 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 34105344 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 34761216 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 35417088 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 36072960 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 36728832 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 37384704 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 38040576 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 38696448 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 39352320 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 40008192 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 40664064 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 41319936 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 41975808 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 42631680 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 43287552 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 43943424 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 44599296 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 45255168 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 45911040 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 46566912 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 47222784 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 47878656 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 48534528 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 49190400 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 49846272 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 50502144 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 51158016 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 51813888 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 52469760 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 53125632 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 53781504 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 54437376 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 55093248 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 55749120 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 56404992 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 57060864 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 57716736 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 58372608 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 59028480 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 59684352 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 60340224 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 60996096 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 61651968 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 62307840 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 62963712 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 63619584 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 64275456 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 64931328 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) === Testing 4TB monolithicFlat creation and IO === Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104 diff --git a/tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 b/tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 index 30abf217e72d38e97b1e34a5db6add15ca3812d9..619329a246cd44f2592c034cd11d9d0afbcc1d38 100644 GIT binary patch literal 4764 zcmZ>Y%CIzaj8qGbyx?_RmmzfRe}dqFAou1Q@?pELAN{^>>bjdp^b_}euT6dVO6Apo zU(fcv-E}qa{l4sdVn5|Ry?LXt;gZWNp0<_CU;3LIxn$HI_-pZ%kHR-Kw;HHVcJ|zA zHfxrYt*^f$}QtKpq$Zba^cGiXEjqvNh3oOo;EdS<%}y|96J{-Yj*ZgF!5})zv^Ui+093* zV&UW~H~j-Hn3T7#J=vFfcHw zhAR69`?y_7l**jAZ05?&jx>-%d`(PJE>2dPq3qZ&i*d3-3Xj4O6EyO zm}E%t@=DAyU}2ld)8MkC#bn9fl`A)8NG)IaAS3X>EPu_XW|P1AWb*U}``UXM+061? zV3bugZvubdtEzd+uH>4`N-++;l<}!QfPF>PyoE2Nc-b2F`nsLs<(X;gzND(bYyqzc zdvhbx2L-`x=Zs{o+_sxOdBm>$7?@04z6)FLjS`ss7IA4|Uc$F)zCSx@Sel$M=Z+T>45mz^uj{Bc!Ke!kq& z*${U7lY=7r*QPH|l9d&By1EXrM0g&* z_BdtAL?KNPF>cnTi3uBmG)1~xl_n-^h|ti`(9jVP5z}gFI+(B_ARr)OW71L9ZZVy# zrJ*91wN|WJ)Z!B8DyFfhOJh-&)~Z#jx>l`PwSt@X{?EU;P1@VH>9M-<^C@xco_NQ@ z$;rdRB{1n+Qm4l%og_m+kyT;bdX7>7Q72YhSL45{Aj)(?L0m;3@K6U+$cYn*5(4LM$T&1Ixcclhwm38G#=f{kua)P&@=ACi z@hDxR@WINbX5Tu4)|Zq#t2kXbX^-jmO%qb#-@tS@L|tOEWH7+}Uw& zXS?auQl{d3Hx~7_J?@uQuG!%Kqpnx)+JzGR5A$~1?WtvcbMJelDfgFmMrI$XE!70y zuikz4zfivWruVU3%OyUaw>|eK@tcI>d;S`!Ym=VsJ=*nsvczN#CvG;!2`Lg05#DpI zTOQfEHrul#(8W`0gO18{)AL>Gd!J15R6#*I`&F5gRw;2Ad*s-vNlW^!TNE8_=qYJ# zb*%ncs_We~ejld>oR4mAZ4O<(Z*O+ys-2mIuhucNTx$}(zc;~6@CVbZRjaPE9nB1l zQqBM3agB{#;O44!R{`hit^w9R7G*8H!YCEOU^}CU`n`rT4vpYNT()0WNIifQ(J2U6 z+`%DV;wUUDdh&>SF++GNtDb-hKNl1GcEPYFCbfG^9n1cFto%Ovi0SF?qMoNe+WN)K z6N}h2WBtK>TfYCiTk!kLQ={dR^?pX3ZNERE#YT4C2N8jSjel3nu#xlIz&+>01%Y!b zza%Y^Fp!I$y{P-F1M{TLB$aN3O-lOdjEqYhCPuQPFmN)sR$Op!SR$a}q9QuM(RBjj zM2Cs2l@YA#W2XL@XMbhU0xyYZfuJk1I;+=o@4dhNNREZ5gy;^&{AsUN6g=EXIrP~>3H(t#+Ap8=oxAxuzz$8Sms>V!P_L@Az%>WvGV?Mmm3C_ zCueN0wt4FN=%%>nlmx9vQ=`Wgt>+Z&jSL=|7dgD%SQA#7`|jK$yJP&ZrQ4KNEj@bZ z{At13qZ>~;J>0bZaSbbr>;mOU)_nWTe(hhmW7T5Ki3c7}kNA6!@8j%6-R@JK|H)li zpOr?kCh(G%exu_nOsym9F~ZPh)i_g`N|V4bkX}nSYpoCNgyPoJASB6`hA0sB75K!Vg!=SXz^eDq7 zO|jg?i+RjWw_O(4TkE5dYq0OE^;T!DMJCrzu!r<&e%RpA?KyLT!lAn!r+jYpl`F9x z;=ca+?bHrKqp~NrcAhjkk)CID;?~yu2ge_-Ug6ZH>tfLt+wb4@ow|pmpm|f% zjEL7C^^;odR9SBM{GWB;z=5BC?W!3yWek@a8h(1;%|5L#UUH65)43TfNpseE2qrQv z<$7y)Y+}us1A$W|midV2MXzf*$B}cx?B-^-l|~6O)SU}%Eh-Mx6skRAnR+>P(V9r1 zganp<>#yJE7F|#&areX7G_Iv?%7Pt7Kt$3NMX#Rh>YNp4x4-sG$r59~xNcpUhVYKP zWsVCcxVqIYFZ5yPQ{dt0$gm2#BrqlUm~mwV$3ezGN6`SkRWBZe-g)Uh?d7)gOD~1D z_$DO>ebt}5!dK&o@Lk^L{ZG8quCKZL*miGgj*y!6%O`s+*cLyl@_yaC;ECl0OWnRl zi`_H*?r|tq%1>w5*TnA4uu4hP#gl=3MVG==R`F$Bj2?_#UCnVyC$yCotm$a!ST*%Q zLr0{^tm;#%HQd!FYq@oLM@^Kmev;Lg#(3`_x6QS~sk62}VDq~gY3A?2aP#vmPLqef z5J|Yzr>0k+cd~`B3q$uPX06&Qm>g z>*C@YO{2cBZ*xd!+I}niRJ^kIncL@;qt*OpeLTQzV#XupI=zr>`cs1+9ab5&JZ#U8 zSS;66Wu5)BN5P=w<f zZncZ?N}o0qEX;`(+pNH#=+q;@v|dEmD?0ksH;(x1+7&jzyv1+!Hi-#Tm5YD+s=AF4J}i@0YUL70O>6^hMx_%;D8p z6MQDMTul6Feu*hZ(9YJ~)jjD_;9f`3b)mPFobFzi60?lx4mCf!Cw0w}{W~4cWs5dm z{c!q{N@JZO*N@*qd|YQ2|JZXTyOj5XOW$>MJ~_edsoK_+FQQb>?zwqY;JDCXvHn@x zZCn*K*DJiccCK*`vyA$Y&kugvaGU78SNUydJ@?z8<|FrxDy;iv>gBkUx#*2zT+!AA z6CNFZ|9GQO+Vfz&jf%GGx*ZELxZk`ntoT?KJlj)?HSvj2-xZ!{v5Q~+?eSUrr}o)3 zxBF)mt+*VD6z3}6o|9y{HfWQ;M3p0DZ4x?%R-96tH0_#qV9{(2gY68B5=+k5`RoV} zm=bfnJ?+n{)0?)!fbr0lAx3h|PM)c_A<5vzkhbpCEsnTOi7>cUZSxlNJosDRcYd0>zE6-*B4lw`kztK1C*iF&gOCJU#fDM+~p7U_#WUpTb*{r@^cvfVyweQ~>pJhJRssfDjw=&q>I~DpS zm235!`mmRk7qpEgcCCn-_xe@B`lBApc0OcVy>_-vX+adL2ZfG-`b-2_vUDp zw@iJ<-JpGS_FM5_MHh!_E;|2NUwHr0I#_4RQX%?WKVrk@h4D5{R>@3L7O8LCnAN(h zS@(hKoxhyd3|`DX5F0l8TFcd@b}<#d%2OB9KiP;s5Kws;o!&LuO*xpuA?$;e=3cM7 zEUlxLHs%V=IkIj><*WXe>-<@bI3KA$^Y@zHXfSz~+?KpTuBh(vVuuUi+DqU4TCncq z-PH0ZnJYRG(k+KILM3@wmZWgckc<#@*|yPj)#0~UO!s7N>TOE65p4SFn9i&z!p7Tv z)~&hie2_(Ty5s3vB~=X_Tf{>PEnT_-To_Gqi&$Nwq|99|bX%sZSa2r-9K?48aZ zW*$+@UGjbu%cUo`lZxKw1iXFsR(jTzI|@h54K}^ge*L<(&T!gIUYnO9hQ)bO zD)+)$I!Z&WdNe*hKG|EpMDTK_-{&o#4KFTBT=_ib>iHutwicUz{aO6Zq5MJL;mGVe zAGI~}C#;L@pSpkjrk#$uj?yeF+y)CCST0Txk$=?CdCkOp;*ze)biN%YjIKQYxJhb# zkpJ%BW`&6=o-9o+6Fe2$nfEe!-LtNiOxo?v$FPYvWa0aiZ8v_e(z(2D-m~{B4~Bcn zA7W03*|cB1)wo4sT_>lVtAH5m9=*ySk*4)Lc4rnEJ@Bb6DbkZ!@o!O7q7p;j<_lAU z{@C;1-_L)H!9Hr;TGJN-90w$LlMG(E9osy0tM8QQr_1c45523qc6;G#)14E|zb-xc zGy;i|EYr{xWpDRG-;VFnZP)8L%&r%TYW+DC-(Fa8VZ|i1M>lP{F23sI UGAfYc|EKq)t6-txf~o7G0RO(LCIA2c literal 414 zcmZ>Y%CIzaj8qGb+z}%3g@I|#{TqKLMKD)Cvd_P}!v6jJf&>Nzh6M}(92*!TZroB7 zx#eqUtG?nyu3G~yTLZ&|3|=E%k$J&az8Y1{Vqjokb6{X#5OSHdeBsJ1CYSgFGBTtX z*c_N0zD)Bu!oN(W<7rab)CnI-I8{wrTPE{NXkl@4n7}9V^~eM@-8n~C@0`eaClU}> zyIXaU^Tl~eHESXixt5;P?1RzzT)$b_*zj8M zhdY&~Z)SlpoExT~!lCjUZ6ql18MM{0@+a4O4yi*|gvv{xW%_`LoZUJ?+TSXjO5-!CrJ@UF?;|T*DrB;{t(x-Xr-QUMdmJQq( z7Ha%dvm;RPB8NxFf@oRC4GU8m9-lFpILUo)9QRk_HLT{RKZ)GEb?Vx?*v>329p2WP zCU0Ib^384y-LQR%*oK8koGl70OJ>SgOytsG5o*7lCe-~ov@`9Luc*lvuc{MESM2;& W{r>q=hX!Ny|Kdfi76B7L@c{sD3$}0o