From 439b1822a6d2b986ab81935573fe9d5d6e616c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Tue, 13 Jan 2009 14:57:44 +0100 Subject: [PATCH] xxx --- aufgabe/proposal.pdf | Bin 77334 -> 77334 bytes media/pawn.3ds | Bin 8115 -> 5707 bytes media/pawn.blend | Bin 160488 -> 154500 bytes src/field3d.cpp | 3 ++ src/media.qrc | 1 + src/piecelibrary.cpp | 122 ++++++++++++++++++++++++++++++++++++++++++- src/piecelibrary.h | 6 +++ src/src.pro | 2 + 8 files changed, 133 insertions(+), 1 deletion(-) diff --git a/aufgabe/proposal.pdf b/aufgabe/proposal.pdf index 25b548f44b73a751ab189e6eaf648ac0eef4f8f9..f8c478a7f9545597ceb70f5720e0ff408f292a2b 100644 GIT binary patch delta 262 zcmbPshh^FwmWC~i)ndG+2Igi)7A6+DhL)Db(-p-T<)<$fW6Z@AkK#5o4ly*bGB&m{ zHkjTf&ZvMQuu+_`6jPJZ^iT;#b4+oG=^G^& zG@0He&ZvMQuu+_`6jPJZ^iT;#b4+oG=^G^&F$H(wZB_xf%!UjN<)7>-pl-~#!WIZ($mey-zklL>htf*XU1~;e%6l# z>#%+-SbqXM*!K?oRsDG?u+D*hwXk^x+)2&+Ls=X1sqDMY=NwOToz1&*!$Yrk2>tJJ zMe9k+D$C#^%%@!M5dF>PDXIITTl32qU-!|?=-+<4V>2Ht`X(C8qkL$%)Ob_+;|CR+ zZ^b%U`}djO-z+7gUHTsLIqciX=WSB=hZ6k$XFs|b8s@Kar0APau)gwOU+oX(xtW;f zt=al;c*onHGnWIVfN#-lAR znE(50hTCzwqJN*sMM^ z&EHMBW;5usrSPeHH+t%?(!c9cqWPJub7oLMNO@dBW`neQ&SdU-IEu zZ<@c(FG<(z4)s~(kNf*-e+Pe_|HUow%Br;v|FP-}@3EtMz0X#}o8MQf*q#me+N|xK zdhO3@muHol=Cz*8$Q$jY+j>4&#NjH0%&t~7{K5uiUhqp9-YPgbD&l`}plb@Gd^Of%O zh!yz!hw|^l`V8)EeA1e4V=r87WS$?R68(Pavy-_fn?_QC=zVfa9zS`f*pNGB77uP8ZP4Iiv z|L#8Kn6fiO*TzEA#t* zJAT`%;jfdH{*!%&wO{#me_!n{@#hKd|Mv1h_wHYPaQ^{s$i1l#?q7Xy|LW%)?`Ze0 zKDdAN!Tqb(`>*e>6WqV@;QrMI_pd&c^}%`72lt>pxF7ZUeb#$ZAKYia^=BdI*PjLT%pm&v z?$=ct!nbldd;ghTIlN`!yzt1?o1*G#ZW|x2e0N&xE?#?-tIs|6y7j9+Hhib@Q1@}K zdfLxAG4;BR`X2b8N4-AFnx1-HQ)kHJce?s7N^gb!nUfMu$|($&jBOtM7GI_O{BU&p zy3q3c_;90~N%wkYPTv-O@ZuP6AzYu$-d-Vgn|}3e+qRD_g2(Y}u+9&with2B@xhui zr|%1|Up(Kww@PvOR3F5t3eNpYHcgi5Xgt(ub*VwF260+LYLXv-IIStQ$WI^;?ar*)(*xgx}AU8zT|0C8GR>XYw>IIS-Y$mJnU8%RTP9K>lu zX+*vc;)l#b+95T_j_i`)|8G)p>>ABH&XB%R4EAWl1r z{>QO7#A&v4Avc3K?IK;tO(9OZN)9;%;xtF}7k(3n(~x-N#t^5TojXkG4i8hip&s2m zOnVp)v06`Zh^jn?-5xQ0#CTVx=|%2JRo;bZdzl#C|#fjAv4W5~TBPRGbtaxaL}u`-VQ2*l|)8BgvBaXMZmkb6L!PLPS@?hvOF zWfHj?#OWkE_hix(_+;v1=p?$Qnoc!7k=3S=CsLJ9V7KX}(~Xa3ni=HrRORECcBbh} z<6}9^FsXvVuGn;&g=+kf%VL7DyraF^JPbJNHV`YWPa(DzuR9HKuEf7qHq|asgHO z3U+(i^l9VEnPwe%IaT>GrhUfr8RJVi&3f`us`4eAc7y2#3`9f}clj$bo3wRsPlNV5x&*yDzHr;GIpSQV%oKICgkCW;-=TVh!L0>a{ zO}3(&Ax^i-HuCcjr`zNO@+OGW7vx3qMu^iFWjpyfh|}%z68Tw()0boic>~1h4k;q9 zhd3>go#baAPIt=7%7Hs4li<$dJa7Y(R01W?mEv&Igb}PL_Lq5hv?ifcGr1MNfa;gCN+viAv*W_ z?4t9WmJ+7n$b} z`W{aAeUo|-jk3GWdx?48L}R!T^f2`jTEgx+?`7sWjJ}W4dpSbAjGkd`o%brc>pU0a z3SQ(W^$L0gqH|wkcb%sce$76=W_?#7I`?&U*Lg1T>2>@3y7gUy=-fBhUFW&Pr#I~L b8`gInqH|wi7oF!apX$CxsoHk~qI3TrD%$(| literal 8115 zcmYkAX^>S_mW4NifLatJlS~34^E^EngnXHR$UG-9B!~(rB9qK0L&})QJcuA7C?5Hrg(_=x^V3ZbuvO&f4F)`<-+4x*6fqL4%6x zo0Yb^%&ZKb9zFKMma~Vo*UTA{&2qO=R?aO;#~-Ms^Zbt8f;NPN`{bPR` zUbV1KIV(&zDczyO_nC^{Fr51@djBijr-Ao!C+}&{yi_N%!nkISOn&egE&ivV;M?@} zu0vA2IyH{>+?m@fbAgY4cgk1eGN0BvcG~NaKTgk7{jhS}sp#WPN% zx9F>JaeZZ5lhoWFr^j{K`p0^#5B}fi{UG$8!8;K4d57LB`|HK~yMH;H>;0F*eQwcv zfV2JFqS573Mcm2jx%BP~ewo{CQ}y4j6Yq2D<<(J{-K(RE7Y0UO-FP=@eKaesC*)_M zTEpHfPW+}vv(jFBf2rN8@$Pj zLTg>(d%E8-oa_DN!hKrO`$z8NJ$?UrvABRcdEJ)Y>%pHrZEEV^f7XikS^1Bh(KypF(;Yf7`yq_jG?vIM@3(hWmK$4({YV1E=>ZS;(E@JJ7p6`1{iH zQZ0JbjraLy?wY7{&o$Ad3+touCyzvbFQ^jNYx_pg8{6J0PW-m@0 zcb_~G*Ig>MOKs{K#r2Q$RtkQ3ddr0V>UiIUeRk1%yHcAH-_!k{!nxjmN4U@T^j76g z-g9EoC&gR1lh;4cdspz^+&e9`>igR9K7C&OF3M})D=KSeqTP8V(d&G?E??nx^!A8F z#a?^Q;P$=JNzcB#lDO`}_xiv3U0mCLcTQETa67KY&^sjfhv+>J`t$IHhka_%yM0`$ z#P@W6e7J-69}IUGM(;?@_MX~%50zBnPG0BJ+c)?%C#+2E`MOTLPjdfD7cRti_PM-H zW=VXX#cS{PSz>sx>9 zociF{&vAW#-fF?OxrfvL6Z&i8?FsvQO7GYyol1O9_YZ|Tc>nEihgayW#o6AoJa0!y zhC6wEklu>HpHpf@YSO7X@jl7l*pz~A|L*T$7o&1d@J^o%|KfD*OllS6v@?N}7 z-iz1Cd+|DXFNyE(CF%F~;&t*~yiVSW*U5YFI(aW%C$p3?JCppqd7aGSbuvrR)DGw8k4^ELxr3(W1D0aQy0$sC7s!^Iy9XD zTuCQAE0?y*sl@Zw@cp~pc9e?-!Ctp+-7Y$aKb!CRK1=X-9`7Fehw%4O`<@Z?s-;77 ziWbgEPdt|Du$DbTee?_NP;XIB02*yv&%*jFD&c&AICtGK~Jf{mCk>JuB}a&&YFVkXuyUr{QnFD#xGFrn(G2Al)k) z|Aee;cThQ(qjD`zhuwqH>>SEO?NHI-{6Dp#X2%i`nbX0iIY zS*-rkHH+2H&0_U)vsnGyELJ}^i`CD~V)b*gSp8>j7OS6|#p>r~vHH1LtbT45tDpP- z&#nTOvMN>;^%SI4ts3lUNUIrv#i>ZETMgLLk=C$#U{6VUkJW@dEon`w1$%1JT2>qO z^rW?|4(usP>sVdb)0Eb=dtpyidau=kJzZ%%^WXZOvb4T6fIV$#1G^7)M|vL<``lU9 zFxH0g-2Oh?&ti4Iba-AGQV!}b11kq{Sy(xU?|_wqxE!n;#N}b-Ag%x_2l1V-auDAI zD+lr2uyPRp3RVu{im-AJ{~B(;2XUt%f6QWR2nKIMT+}1g?Q2 zZDLK~dvK&ptr=VsN7~Gq!?kdv&8-Do8%Ns0TEca3q%Ex#To*^$%38zs;z(Ot8@L{h zw2ife>*Gk~DxEYSLi*<#Y<4C(&H@F3kw3|H$ zx5SY?Xx-sfIMVLc18$8Y?P1w)8yso2`M-eL;z-k$1GmGG=2$M=9!HvMJ>d>G(w^1} zz8^>0E6m-|dgC`@^|?ESJUa5!{l+-b-XRBZ6I|sWZVD?0aWhysh?~R8LEHjX4&s)u zauBzIm4mo7tQ^E`VC5ig3+Hg(cHzG5VCA6a?P290?f`oZDdv1A)`zSQ`T&l!k39@` z#*sd3ec>)R(!SOY?usMrXZ_)BIMV($0DcfhI=}|P-EpJ?Z4lf8M>@y`!`V2}!8Qa= z<4A|tP&fxiI@E^2xj52cHXQDWBOPud;9fY=5jGO;gd-gp=I(8I_$gMOyLZT=H&5Mv z07se^au9dMRSx1VuyPQ0g_VQ28>}3}55mep+#Oa9;vTSa5NE^6L7aw_gE$9P4&q!` zIf#40%0b)<_8j^!=OeK`Vx!Q9aipVcG~5?QI@-p-{cxmXY%JU#M>^KV!2@ul<18N@ zh$GFn@$euV>3Ev}55|#But(t`IMPRLB0LmFI?*13hv7&cv&Z4#IMT=M33vpK^a+~; zkHnEqvdQp6IMT^s?mR2N@5AbI=Y>4-cYRll6IMQWS2+zWi7TWXhGdR-cZ8AXdq^oQ-JRe88+Sb5N;z-woxffUw{uEZ9dqK!!0Z-k33P)NLau83&RSx2(VdWs6 z1}g{gbXYlvXTZuqJQFVDyjkJAS+H`@^Jie?Af62?2k{(OIf&=N%0WC2Ru1C%u;;Ll zIbVqN1zU?giz8iY>)_{br0Z-wyckEi-ZsEXaHJb-BfJzxy3sbl%W$NdY%^SlBi(FU z;OB9qTWl-597npST@>;t;;H-3;z)Oe9K_GzDhKgmSUHH7z{)|q6jl!6Ww3G(7sARx{5-52 z#LHpjAYK702k}Z+Ifz%m%0avuRu1Adu;;LrId{jp+g?W3;YeS$SK#$H(pPK`ya7kL z$6kdu;z(b$z3?U+>0a9hZ^n`Cv)AA)IMUbbb$Ba|^mW@0Z^M!9w*&BY9O(gj1AY-l z`i32Zci>15+9CKQ9O)r@6W)mIp8LD?pAosj?eW8r~7?Q+sD*qM_E5cKgRKUf6D28pUBQrn-#O3 zN6+Ku2a^IDYTXxzGFPhg5#3-i!+@~1*l*-R7VZDTY#_4|FFSt($`gq_ttinjs0DIS9H?4SJ6PL-u~j>nlGggFZ8hKX?7g1c3+4U3Kfdj6v)6jowAb4E zj5*goec1liE$yqj7S*=7dc*1?#uVia!8oh;=!$qkB0#JC=eXqo1wn5#>6yS-o}e=;mK-B^qQ-^=dgAGqXM4U}NUHtzn`b;n)({tu?oe zC$_qc%a?^kQB_#f8=#w$lqyd0JdLB8uy;y;6lzR?-rfoOq{K@eoa`OIF6x}-V@|?+G7iA$AFL~)S?;mzi`Uibd;w7&#Iqaf+uoo|Rqsd_x4NCTzEnf19 zQ@nrKvGTrcb;F5MzBZ*4l=Ng*V|MTt#Yxn~c*z4>HP}VFAr~*XRu^_r+alD(^d)z} z`Om4yyQoh#XYwZiaeI_c_w%L-n-&)9;1<|zA>f?3BDo*z?6 zayUY4R??8gtXbZtJY{q)!Lj03M;fxonT0%YRX8ggWo97_S(KmYHROr2+22AMvZyf& zc~a(?))>-|Me$kQr#!JnjFGpHhAgVgLY}mOs#Ui#Q;W1)qNW{{PUt#8S1Mlg+%CSV@7ucQNJN%1Y0+fEW3Z=elP25xx#I1^)%5bO9C3>^V{bibv5|@D-)Lh^lz;Sf<;d{z7LFr2_{f7BoAAX{^ z%&j9rfXA5yyWEf^x7K{aCiG1|wl0F< zDoVpQkyzhPlN?zL*hT&NHI)SBZVrnkYQm;z+a?r zomYTiwCD=xC%4k+Emz-K#_K@>7KZ8LfttdQG69!#n&yo z7KLYH#1C5cmlYo;MqA-=(Jw}4ItI6Sz0wu7wQliz!>xYQBGee(y0va~C&DE3{MNb! z=Y_G@TITN|OTPIw;Nv!>FuM7u_|3O_9{SPz@!L}3b$ntzPM`MUk8MhFe%yV~t4kmE zX_!R9(T01v4OAf-ZMW&-q5}$rh?Y)xx?}O(7VvvM(b|=sZ(QX^B`RErLhgUP*t6eSA!yn-wwJ1 zx^H3rkqzpL+3Re5M zXeS2W^E~pZTUYU4J28JgD4zOp63TJENn!WI>Iro{PW&`X>0wn5qtyu?4G*cPMz?6< z$%AK>-|r(-Kjg<|8;c+Fe3gyG|M0vXe2an`+V%~uFS@qv`9)#ilL~_lald6@H$IJ) z$gv)Js_)l6Z`1n7ngZxdrPORZjH7#Y@h8!3MkN zy;J&T&0Xt#+rxhPUMUDr27gT2c;Mqi#`I<1V0^RrEjK%q!}&STJ}Uz`sQA8Dlw&zi zoey*%ec9KVz5FUL>UppU3=3o+2c?gAMLAYrI&gQcS!u|k+AQQrHNz4eEMy>k*#~R9 zp8Pgj&9H**d~{cAq`pN z%tD?N13S-RNJAFokNOz$q!@V%X~?3+EaZvv=hm%mjUf$L=&U18od13nNocqS6In94 zG@{b)bemx3D_w?j?|V6Q*bdyW%7QyF`rT2b(GjPwJgwqgZ&dZ39~-v!b3w}ENp5U- z+~dW+_M7S-BIy>RzPnh4wahf@!sZ_k=nRQ++yC}VEEFKIxMl)tT znUYY-)lYh5IEgx+*_0A5dG3c^4!daP+>@g7&bq%$J~VOZ$fo&6-Uhy+ezTiW;w3L# z@8z(I*6esCTHJkbN|WxD`IDlRbDm5IlTPt-UI(@)z@9SsQ1X&XzoO3T!;gFN5ifb=MlXk5 zwBhN$^)goCnoV8|Gd}pF#7o|=*~{UE4?-#Nk_XRwIqafqE_gS3y{uEb{`9bYFTc}3XWU4Y}7!QmmjOe*c_AA4;$kM3T8 z&1AgfxvgFfuTgyAyK%*ouv;&~q|?03>%cZzbJ3o%>YsXE^_E=vrS)D8-_eGbUx{u! z0-MP&>CDP`9oV|Zb@7r{?eKEgxyN*6JEeA&xk7w(?^56|Ghh6m9<#@z5Uh?ucy&QH?%Thez8!vh0EiZ>% z)b?9VDe;nP;b9kbz5+SfSw%IFT>81)-XHu#yI*@HnpiwIB}_Wa4PFPfQNOEjW-?y# z(zm@FcF~}#_ms(AF(sG&te<;*_=!d=Yf6ciyy_QT4!dalHLpaSuJ7uO$i*k&h%}jW zYk%o=;Uh|4>vTu(yf2@cgY;zA_$zORSkbiWn0JRHo(`fNWhK#hzii*j#8TH)2X3O7 z*YA#w?$j^wYaD8L7J{efoEvsWd(S*hmaj}W@iTM|ZR+|j)ZzT5>)&n?A! zJ+GKlA3b_>+G5q+b<-pJJyqAO+;nVMCM!L?>GCV@ctG0E%U4xx!X%WUHPzh@w}^-A zufspQMYGC_>MD=h8BWm6fNlX3m*kuR81r{zBKQ)}4g$I7ioyO0_) zA9%d_LqBSjg=@1w9=#X68&%xiJ4u?m1Uk{adz(rWL#vkg3y!JMZb@Xpw6a%ciqjoF zSUUMvTc)Qu+Y#y6>056&b^8M=+t!o6t9N43rWdYEzxtDh_^=$jbLHPBKlV;@{fTwM zcHlWWP5W}#+y*_$OW`Ym{j;zk-vGb&!Pic+pFXG4lxT88?tiX)8UCxX>2F-nF1=*p z9g~0D@3eYMqWso^}_94-fo-5B+>(a^6A8nFS|4SNUw({V-k}u?)<^zmtSp{ zJL%WQOu;0kEdR|B=|St}r|;d-9upY1Y3794li#{@JY7N@`iG#L(~lGo>MB+bxG*)wN#1hbw0>v(x&c%>es_0UTDPqdW79iwsU|UfLhN1_F$nyR>g1k(S*sO zHD2|}f~aFOw_8WNFv5vD+?q`B1RfL|&Y${}X9fQJS=nrdvyGWgyuA9Ker!FQ4R1Z1 z|H;Go(hi;HnLu5(D?eE<`7bNFZ}40Yq|QC9{*Jfz{+RZ27CuuUJU>>A z`N<)xTk$Zse(IX)&RZZK>~y$U|8EoU^(~7oh!4o3^rNmNK4MjxM+=Xc{g0^LQThEv zMZbUJ_=!>O&aMj)sUDGXJI3Fg4xVYr&FQhKej*OUw!!{~T+>JM+$qZWw156z*uf6D zVgA}sJE*8E^Mzm9)?@D9p3m9RwH|Y}Wcg#x6m`rMf8`D3u=SWT!zWhV*0K6OUZ?s? z91ag%-CKOll_&^`zw~mZ7BxTIJBc@!`Ab>D!$m1+$O4|+DFdFOY2WW-f0?jr9}JRE zi0j9NxO^by8ff5EVcuoq(4sO;T<3w(7Vomu5^OyWSRydKzd|Yg5;?=8iDh*y-4T`glk0M}J^N%AD&DR{s%Cx2V%&gGW~-J(g+b z$DECs!#&?%W5t=CXAu@XHnv1|Yt46KQh(SfcpVDR)mTauMV^Oov<4sOh?l&^WKja%A7cY5@$zd1$5pwa82evq{i~6m_hdRbfu0@1hbPnX= zCC6I%)^1{S_gZ|YWA=JoRo>puPik5}t&=|`6?~{;`m(PvUVgF8ZvC~c2iW67odX;c zckl+9h#X+SoTCFA1k%?8s?1(~6&MS85PN>8V+L~2Y`h#RFdg{!vC@!5rlWT)PpVn& zpds-m5!07_gYojKT4N6#WXi#?Kn8M9(a9^yu>#Y9oAP35$fDLP~%RFx(4O!&OLa{g-&I*U9-by+{G-Od_7V^Z|ForC;m6?JJnvItul`7L3LK?ErB}buD zs#c36H2haQ=9|Ge2Ws#uo{73z>3Mb5K$|7C&<;GGXdm)C;og?N{?y8jjYoK+;{NV> zUsl@H^R+$vsC!xAx|f~R4Og}G_;jb6*ArgV-Sg0QUzUiMTz+ZKFH69?dtvBB^&6T> zG#~xNyP+rW+D$2pE_?mOyP=oop&#A-?6#D6-D(8Ay`1)op2O=g<8_Z+)6e9+Ce|&j z+y9TV?uAB58m)J3{k;V|)xEcQ7#>1UGX4=AigkmY=T`)_09ufmBQ1vAR%ln~tXXjO z!@U+C)c9G|anbuPo;yLd@)b<-z7#_TiuO&Z9cozQ=$aot-LZU(*U#bJnV)1eA7!&2 z?MJPvaIH`2Aiu5{UA=|R8ti%KN7-$7)n>fpRYSa-_8Ypt63wU|oDwFT+GD&9Y@@sD z@%I4ZC2uVAa@e^)T!@#vc$k;N4u817XIsWgUNPLuVTX6ueh$K zuPOI(*hO1*;tv4EOWrWj%V8JQzk=7Y#!DVpePM^!rmsXRUpt~id8p>liRRzlJuwnD zX0J7sXsNVyGh>0j{%H!MTLNv_;5g4izwW(V2W;8@ym4%pl7^mAu=xIzF?M3z%(t!% zliUsNtE1!K;-}cM+E&_TrPI8HwqH(y5+Dged#Vrj&SPh=@)fc6GP^ z3K?<=cyvfiomki7*GNzaDM8)ZEAhg!DihT4ghZohzfppfr}!|z%mWh4+)-2_p)xF< zF|jWF+XKG;`p+Bu-lII4{^ns(ZqM&hP}(oiiqkz0XVI3uO)2q86p@`io!7sIL^%~M zB^2vszK>6MkeU00M;Yrfr?U>P8_WTF4Uf<0u(&c0d!N8Qt|nohp~I6 z6EAtC$?1&GbmAp%FgfhpGo5(J%P;W$VHb`68$LlXUh-<=VHYihT)gDXCWl?L4s!95 z&zkT3!!CLca`BSanjCgfkA3(A$9Tz$GnW7SiP22R#Y z#Y9f25FxEE>#0o@9X|!7QX9i;6`)hCFF< zc?)UCqSh?rNoB#&WHF>6i_%Md40%!^@)pvNMYUPT6KBJtEpH(WSp=7P4SCXzY-pX8 zG-Od}7V@N8FiSwbddCjcCME-Al|hgELVoxF1pI z!qR$Yag|q~65D}?z9Qg|F1XwGKcXo8pRaXns5JX4+{LY|c(Lbemike5kHU4wS+NAy zqV@mNYl&AATzR?Yq3%9(F;-%Er8S?!z(?~Zbx&N53kyE**JN}b7GP5E{p-^tN8WWn zUbpYxxWB5ftW|~Tt9@8iM|)6bm4dTFK^5+uAUpYK__p^W|Ao7T)#Wm{5m%~o%hMej zmwCSWMpf6}f_|?QpR-EX`cQcd9ze!*|K920npDFz-Y|kU9{0`HdLA}$+c5lPN`P*H z5Wz);;g-+BaR2*oeCIy{f3p5K$$79)u->xhkPwwpM#`}CcAK$PthnGvVrDuPv6qoy z|G1(<*e}Yq92$SnHq3M^t+Hv}x_`bsehpIzl~cv?iSga-!aXSvZtlvZ@m9~nV9V|8 z|F>MA?sDl8U)wo6uVdvMeijX@_Rl54 zUtUTi)LmowofEgw`?1ExSvk}D z<-~Y=Km0yfhPuhBeLzVS-U*v`DHT8Hy};Pt2^%kYrSWv;?t~AJHy95;{!aJ+dHF-$ zKm5dtN^vVKKmn>v0gl|CFT_jUY;xGSKVOKKe3q37c5&za2p~WTsv`{JX;cs(1sMAer1o84rae3kbxXz9`TBDtiZ_m zU=9N5%f7+vwZveYcND(*f> z=N(-unt$M3&<&ePs@+{|X~03j9fJS;pKRr;>KX4#F<9P0pPDWbjkg>f>ZM1`lU}W2 zy*q!FRXpMO%5{F!t(I`zG(qluy~L5`XS)~uYexDvp9Nq(_#7< zU|c>l{5Z)e@IC=9wu~RfYpZfnjyhi}cb1+xDmNCIJPIE#8WBF-F?iMk#oJwWsfG=n z*Qo5kZ<$#h;-`SJ&~Nn`o`tKC;V}M4FOEls7pH)@Aon2<_kMYu=V7^}$EdImuEvJw zI^Dd{qC#Wl=Lv{l9mJi^qpWDFxTx6Ee^H*qCHIVtk0-9U9R3yTli~ z0u1A}$5O!neGpOkqA5I&bdC-2%R~dTE3h7}hA`an+HnWD-20ycn0}z z!aU878HFE6^K|mon{Q5vo*hzxBmU52W{(SyY;Yt0EH=)5_gNGVogF^ev9Zxd#<=CZ z*|-mGU$bkvU<{bM}Te zgthaBSRrURau()#%cSGv|dH;|}MB#}J9fpBtXvUS-K*&3eQe z&kaxMGIfgoKO0s3!AI%qm-B+Ky1jngI@m!wF9<7>H6P)eGe5jIB*mC#CrjO8_h=1w zblW2^ccAgU1-L$7FKp>|Vb}x3Q)l{6-c3SSKk2>TSK#gAv^GoTw?5pQ?`0DugLjjFLhkQ)Mh>`SMY{<5Y1 z*_M{^b>2SrEb*3>6-SY8X}NpUS1m2iebth6b7^VmH>Rbfek1rz)N`fUvTISeE=*}3 zt4!LL{`<;qam{66o1)?6w~tg(FhRN?H1<;qKIJif(b^5^M-;^wtfL+_||Tm^f|H zsOF9p`)!DL=+f|%PK9FTb;E*fyngu2FS<|azdUnq?yR@Z$}Ne8Zcck195UIOEwOjgq*r{Yz+Kw8gt#q^HkaW^h}FC0J$9w zLFWNm*ebeu8_D_MW?{>e709E%_bln~Cd98(J&cE65%!5Yo*Q=Lx*Q&Fyeb@er~(dx z$|0!gge0cL>F})aaXfrk*d|+Ag7c$I_IP-r%TJ2Nrr9gDzP2qlCpYKMAB8P|g9~n1 zobI;o<;lc9y|P`oaF%`ewh48_Z@DQ5gj4^BeJ^kK`k(I>ZvN|mXAz)codiAL97Ysu zYggWJrSQx855QVhIXnn%x>@*PaGo*!&v)nbn~TQQe}+y!73=c;>AROrsN+gbDC;w$ z^Wl4EjH1C!H|H}r9|kGQxZ}!v#`}DLv=5N4P#ZYE5LpxdeD|kUYN9jt4abJ8a(EEj za+C1kSva3-2JOo81}rz*i+dh)-^I6NlWqyl`pKxtH~;LN$;TqVfWaST9^32_7&-pU zF;715XNL#D`)oFSDOCbck=oJhp*i}bokoISvq=W(~#*hxb0`}Y@dK2#8Ybq z3>FUO+y7D8{W;?OaO*9c`V$ev>+gL>_>l-O9NqhWXOr+_{Dd67_nlOBjRb3t8aQS> zg3urc`o+R0VKR3h2=M`fQ?2@({V^6`$n<=GJCW`2HlYtQ`3b@I3-?H10UZ8$x?N5K7foEOmM*jTVu`Ck>L2%7H z8Q`WPeTo@8GQb%){cr!RXL{T27t%M)>6vRP@4KvDn}oxMU2((M&-?Cjco4js6`uK9 z&-$IFU$Q%||Ju0hUG;B{yUQ6ouy)Zr8N9Unh5BzH2m}0nMN_%(FZ%APfBvfC(ZmN; zVVhdum!W?-f_VLs-NIiV=lnbTfwd2;6}||%w7Dq@Mq&}XR5CE=nv>c5)}g4PnzfI%qeyDXov z1#tMHdHD)`nY=E|{=xQsx$L~`yqeG-1q+^jEM2ybPgeNxaDIUq{Hr{#KXl*J^xRuM z#!)jWclMB77d>;LKMH0neUNuQ6~yrnv{-n%eN*c%H2tT3<@K==LGbsYO}Jcca*iIY zn?FMa^KbdMzBhu<(fEhY9wHnjxg(Z-eKhf}q972SfqqW}@%m5wO87s#e}_L>_h_B) z;(b%I^)#ZvQ@!*GR&Nn~Ahb$RCOn8e69MusYv@8gAWeW^AQ*W^AZ5dbqhp(J{)q3Ho1og)cd*>eE zZ=Z0is~mBh0apk|sa>Us?|M70pS87j0j^q~55TqOTG9aOtrPNVKW;SfcUK?-OMuJ5 zz2f!r88_SBB7W8Se1&W?W}U&Vw}&i|qZv!T?{+T@a0Xl^T)Un4_+fed@dJ-f|9eAY zdiqf(=l)%uUKZMk=x zaHA4`YjKxh!g&-dysxGXcs955>L8GShs_b#blza!+ro7e_y8}i7p|j#c$Z|m~=Q-KW=&i+?Y2!qH6c7)BomUIjQ9!)Qu)O}o(V-j97&mv+ zJ4erjK9;h|Uyh|ue8zyc&RX*WkIR478?2ctfi4onH}1(BCuV1Y zpP!b0?0RiF3f?+vW9x*pONpfA&Ih1=+ufVf^gn%StN+Q+-%kJ8%)pmlRRGMWo&rwj!pC2J zRTCl(N89O$c%dUqbUOpnj{;+&Y3g&LH(c@ZtC}dYZfVKZ`$}Mo2Fa`|#Ro6HJNdeu zbJM+=dZa7Iy}$U%U;CNn<{iELCg9awemZ&VU*BIG<~+XrzS|~myRS|9$xG`et?fU3 z>Q(o9Tz>xA!wdtU`?pot#xTms3pC>{y^Z=7tV=pho7b{zfE(ZD;IhFJFdMlo!LBg)c<5L z(;r_K1ez%Y=WQPQToEckT$Sj1UH9~`y-m-3esTSz38w+Kj9JoW5+&}{3+b@R2Y`OP z^k3PS*N6Xl`9JA4-2W>81#U)|5CxhL9hL8G8rAdg-=^tkm1SUoM^Cu*6YOg4>(;<& z>2speM@7@9Xgw?1ZO-PcR?%#L5^b-CfNOc~-pyOJmRPfTteM*^{i4nIf6My-)JI9{ zSyJk&qzb?#U;r(_@hJZp@WmybKD8fiSG^xB<>Z@oUNX0yo9m6P{UWXLhcCao9h1WICJekY<4ZtD0@9`YC+Ht^!M~*>X@Gyp3qRb^K7gnD2ORNE70pk` z)BPRR)o@OlG~)Mn1hxU1&)C!b1CHGdXH`7i-;F&CXBj=+-;Ms2vR?vE_jj+EdzwC% z$?(fEa4nNoL zYR~i!IF>rWKt~U7^Z?W-2t-p(o(LTdG@5eJoWPOslFab3uxA9aQrA$Sjr)$GPr5qwjMis73nW-F8Kywv`#`wUcqz_kon5hgcpt(ba z$0Mo2%`?JO@Ed|wnwzdXUI3M&n0&dZkghO#WC2|suUZ}UIF+78nV92fqv=^R$1#R; za-unoHGF9N=sjVNo=k6?K^%F);xeED5QjtJKi?CM=*dzZZxW6Zj6OOZ8Nmq`W1>ME zCmDTYyntdZp?l#CzZ}yh9uTjF*!_9!1cRnv6kP$DJf}mmsYX*SnvqU4oS10N;v~a~ ziRQ#lHk=q}9)<&4cGKd&-;4D+4!|j;^Gb!Pl5RK{`x%rcdk1vKj-oOA}AX`G3FGx7T{J(T2G zL;=r?54{hSX0X`?ar~Om3@)1E*@koeqB(xuaONYL<2i=2B%(RaF`Oj=9iJ12L&9nC z@)(h~ouDPmSM)ILkdS-yn{e0{TLu7hn`kIe8X?t}Zf~ za?uR4&~Rd+IkSrmCkC3wzyLS>OH4oo(epqrGMt#`xu7qNzx4o?o|U=GR4y%`S+#G( zk5Yw&{idmWqk!f@ERKIh6|U71Q(0UFSZ1@#Adc4<&Fn;Tyw-3Q z=-PPOLt&3$*BQj|dZSrZ(Hw6u{E|3)7?a_O+-MNTn~Yu=vV`E1HpRHJq4e&f+_U6BEse-)1;5&h~s@muZ$-_d?=?L z8x+S&0G)k5*ar+^DMWL8&~TPcG{=VwXQ@SVeAw{Y;^j4%443Zv2624E=v(7wDdtXC zV-Uw0qi>Gihd8?$tS>}qK-!Bv?ae&xy?WY5^R%B#X@a(XlAiX7cpaatr&$QxnK^yb zh#Sred<{MAYwMMK={@e3#M4|gI(i)cKI7O&04PReCvl1^9 z;G&-d_M+j`5luY%V-s-Jh4fa#e~7V=-ex!_D*8vDw-?}|Iq7=CsUw0(s?GMu0?Hq-3qie5_#s=p?40JnP0?tnxhjihDgmYrrP^5F{ znvif#O#6wI&_qcKe~I_U+C-eCHX29aoR~HgY2h4&b7I z+<#qIawMlA6-E@T*G~LeEI#E)yms>6r1dCx?ZkHuKoc<>B{*B+IM!poCl_Ji@k$eUENOU&p6DL0ko$;Mx3J8oQfW`?hAo(%qY|MZ- z`LXD1%!oMoap-K!oH+UM=xnSIaq`Eav!RlQI{|^?9E6g`tDg-^vRn;T|9JEXCgQRY zCqL0JE-!KNlMLfFAWnX=Vcagn$)^otafp+zKxeB!2cLEClco?sqXG@5qMv}yMxFsq zL?_Nho)b9<9FQ7cYQe8#?IvaVG^c(2J*~qi>-$W@eFLCl$qO)NF zStlTHm4p0DIWzKC8^(;70r_QyF>~VNuQ7}jB2NBV!&ph;wb9pdC&nK80b#K~8ow-N+yMqf@4jXVu+K_|{e zo&jz}C(cHm6ZsB0aW?Xt@NMYC*~l}o+tG=$k)8+k7IUCfgLHUiunccVk#8hLJ_YINdk}w5iIb1e+31%z`Fqjb>4+1cfWY_A**H_;z<>@(N0v7454Bnl&!9hU z0OKbJP_V&3Vm~mRxU~f3kD*iFTH-knbXJIweiofFYl(Fr$P>4g0G)M)bSiKo2nON= zthvC%>x5u}YmFyvEkQYb6(+J7JaOt*5gNZaI)-ttFlUu_Ipo3Qk%qX<_+a0?$gVN4Msx zO1v;{)`C27YpxcoLt&*~2G5#N-TWt3n6X5<5Y#h}5^{ z3QnA5u$K4{2=c_OCCIZx`9;VEiB|xyq%^RWAWuAJ00vhy^2Dtrav)f}!XmUsgMYgAZI z(zK<_nwt}O;?`Vz>S7LRE^p*~^nUeZZE0LsASU@*yx_I4H{xR+Lz^?hvcCwt~beTB|kx?|b)r$s?w}|7|b#obN36p6}i_^JenK z1+}|<@%e6*-E+(5AODxzdX3DjsK8j-cSP)OOX4xKsy&y6V=ONgt4QX?PCOwNdkA>x z5@){;vPZ|iE%D!6)YH#)ZhzbQAtOqBXHG76V}*^$dz@ZrWAX#1V;aAwSDdf7`z>vi z-<&qcyVz?t064I4N%Dy;bvk4HDz9%sfE>!qfyv(W`X!{xo;5q-{I2nS3F)#YZ+89SXt9dUjdcImP=m>qHc;(Plgq|08i%;iU%zXS2oWv?v z%I!B)hu{HVJTr~vPaigIEcPKDG@k5rA1V(;l&vtPERtK!NbHP7$U_nJ7NJa<1AAc+ z@=!#{9hTD~xf;%a-Ek3Vc_^aVB9w`_6~R%B`!EEG{1u6>n@D+^7vAOq(y^EVl%UEI zD6vS#)znr6G5IS#ZAD6w|C%>;;-zv3G$UU{|fw&K$~ z_X<#gvMRSyB^HHx9cg_Ar`4}JG7Se9)%6}Iz9Q68~KXXh^^mh8&cCqB_JnlV>mPP@#QB-I z+Y{1dk3H(_i1X8V+Y{1dFM7<`5f>~z-21pt3s9kQP(az^E&z%A#e05Ss0GPicKKI6 z;rx*&Sak#@XdNI21!UK_03`BPb>E(lE_-9Ovm?%*dD`}bblJ62i1XJJY|nx2uj<(& z2Y&vAr*F^K4ll8ttH4eVc%`TRMz1Y7l-Km`kprKajlFkzV|AQ#yz-v5$#pkpFF|^f zjkUaWMvm8LzoPGqv5Hl$sux@?&7o^aM_jK?c$xHj_Pfo?@t^FR=#+iV=*hSPTK0^s z=vg;5?}Oo@rSe(a>h<55!*S+~1@UK4^?>d9O1H?^D9bFV8IXM4%c&?_Y88z0KU&-0 zzvHa}|C!Fc{K|pba^Muwgy5QBZ_uPtR9fDfZZRrZuk4>VCx!(a^ zLcl-e@QQOlp#R|h&nHSvUvBo~tIm!%KV3K|r*hCz|G~o93E_eK{$zfy;J$U}^NFPC z-L>&2QI^*gY{PU%9jJb z@L>HJuM5RESeEWiE4}(1;0OO9fiWym)K~w->G1bwj(R>JU6&`86Z$iL)adOwTplk` z_|>Gw?DTR_ufJwV!9Y85dLz*ri>@Zn;9ofQ@lN$0+kBt8GRr@7deuj6RGGq6ChXz$ z!;vp1u;T*yhhH`>H(xn*-jWSV{L99Do>RVNxlz2Y-`FeHuS#_eu{Eh4V@tNS%vS}D zq}M^-9o;pr<>M#-5C1FQd#T@)>X)t@XCG4yPmXD&AGWJrJ#tsQY{0HMuJ@2<&Ku6t z-|6IIdQL2cnnJrB)y}c(rw%~zH4m2TdRBLN#mJkuEeFp2fK>(Yh9xyUC++kS`mn7J z(-q_VFgreEgRvg|p_7Lk*JvNe8_shRHU7hm)$dg~->;lrb9X@wgst~df9sL`3vD{x)s_9zl`k*Q5Yk7Q+~-<(D5BmX8ZDDH z1qA3*s(C1) zF$E|=<9}C$6Dl$3WDu9EV2)aV{1spJvx`?=EkI{dIb1wG$0iv%fCH-Dg7amhR&;>OPvDeay3|_bKG5mK=gk#kXw?EZ0?hp5g{PLrW zaJ|#jH{wgVsXG%GLqFlMe>olge$%nrlhS1``o`H6=cj&KjBiIf`BO?CO2{bZvTvO; zlK5SZ-=2^zd*x1NN1T7$uMYQToUpu5Ika&3C?@-zi$N}bz=`km6=dtd3Ym;T4u8RwUuG|9jE=?^7@$*1AJ&Ihp|;NwE&Q1P z?1b9A{@-P?qxE=)}7S*ZTWk_wU}v925|1=K_$(PtSbc z>+ipLZ1+9}%BiTmb3%6i#|6Be%c!Oq?pyWv}e$>`3beXT9%r z^>6Fdy^n!%%I@Zz5bUoy`{Tm0K28_&vdh15cV|a(zv+(~{HuH6SQ#dtWM}7t*zjY% zblFSyaCXFnAM>TlUeU$b5f^^Umo9sCS7%3@zww;y3F)#o_xqu9dUk#i?%1E%dUM#oZt0g z)MPIw;y`x!S0-FOrg;NN^)sCdmO zyZn;_oImpT!+yIxAzk*;q_ZQ=A9dM=9=+PdV&l9`xGbYr=kU(m`TCp-Dl@J$2@@sGG-ga6ZI-EpN~bawYXW{{)am5{(c?#f-S^zmJ~ z$7kFhe(XX%|CFmX`(3WseK2p-HJ|3!n_%wM4ikGlz92JY=h(Z}_Q!A{qt z^dB)|M9LPTUZJA&X;JUj%FZ|IXqKNV+Iu;03U(yCf<0|Y>|@l4 ze}(i*i*jqq$Gqf?)$N0BCn|=zbz)s%UAocH?P=tu(>@6u;#V!0*SY$N$HO}Zjv%Nz zKOW`!MPqZvDx+r5XE4pITQS|~=*|c?F8+nTThwj<@`m4M9aB`~)>d+;8?!gQ6wax! z{s4!^hPhE2EnMdZc7Ln?zF%@<-yF*Pj1C`v$I|WjnnU|mKLUp$*&_#4@Y80yk8dBA zI@y2WgG4$zdieTL#j{f*zyEX`7>=E~@8fl`E!n!|yN!GShb^@go}(rolB$9q?bENl zr|$C~SB+x~^$zzBPA!|(H#5TGFPOcfBp6qpJ+|qQ62`B2Z%`^x`E=d4{~4U=c>mx` z>g!>tS?m5VZtZ=2Q@2m+dq(QyS%cRfQ+Qo!_j#YyVG(sN+;VT-U%Gx+_ulZ~sgg&>VgWy`{juxfx|ts=9QWa-qp*NON4|A=k3Uwni%;0?rgvWW<6l-~ zKioHe!b^`gy>Qp;KaYRHUw!k$mSQLV|BC&(;K z4Fk{W(yODs4{7*uHNNss_V-`DrAr~UFg(io0Dp=Kfko}TLOJPsyu7h4NXa_4n(eDwA1IWMUWs(Tl`FSZOty2r|BuBr zIq>5bT=|OEmEKZG`%@14cI$HzIedr6Vy}6f_TBxR)!`&nAFbvkQ`oS@>3I!q)MY7LmnH1D zEO+K`OkGtF-?BQqB4d_LS7gu*RJoE2s4?XG4S2OrK-hO_vrdLjN zJl{X&v)*YK)<5y5xg$<~^HrR!id0(#y*R4JK^N?K{a6+0ZJR&tpEnn*p?>01%g6S3 ze^cG_m*(U9jf&Jh_Xj2N)A;Xq@gdvg?)9*DqS0o4)dbfrq}nY13h`*ncK!RixyxKh3Q{<(U^o zEl$OrXv$9SxhQieuE!3sU9Y^$el_kFSKj}HMXx-t;(t1DW)3bs|H;Yueo0}{uO6IR zh;7>Ss(ae$+D=_{+Qycv&Kz~sm3`m>l~7lm0v}j(L#K*S?p#-l!3A;WZ^lZ`f(^a| z#YQ_jMYhAI@{(f9mb|{{YP?jrhHpxFWZj!r{mR_23e3XJL=~1u6O5nAYc3Z1a`?65 z&l>kib0U1jx=W(I3e3VeT+tX?5fb_(EBof)OV?c@5;5~o1ZoQjMJ7L3+0Xv!(z4cs z929_=TmvaP5WvTXnu}`~+HQX%Rr|gvJcnK-qTTfEy%U*r?TN)T`;S*Io{28l~Kr!Q+$hW`EqvvaA0A5@+m5DI%C7fsRYQO z(j1tKk5fsPz0vH53m>PFE_>;CHv!`Ozu(g@Azk)rvm?$QfXAhz%bqvE#Un0!+)BFa z+uD6j5#wnv1zP2X@It%#(*A8Z1JYm|GDX)%a#Q1d99>UwVY|S6=bJ^Wwf{ zmxm&<7NJZ?L{<)MhYqnw8_ ziIwvIF{AtyUt#ges~P`Cd^)B8C1|t+N~}`r|HlI4ulTZ~T>;9giQA4(;|pyIP=b2X zl~@emdTNt%`76HU80V+F+Osy}F@H<}N>FVHlvpdr1>5EVa@@-zNlkQ6v^cZVzj}Ku=-kFrl+;t

3COl)d%jkq2MV$$0k8f;0%Lea^*}-PWT(U5-&*~A zLb~p58c%U{#@9ZH=Z8$!N0G|Y%zm<8lX+^_ziWqI;3VXso7vduE&`cqhOIlm%K?Co za0T(x{F=*Z@rZ`l*KSmn*%Y=*IxKoUkGx9T%?lq=8{-du_O!8zRj$U%T`tX`OHbz~ z&tAl^!~Vu+@u*F?^RND`+th|LZSfblQJX4U+mm-TZa5#s18!$KKj9^_oDP3~^Ljks zX1eU9WVpb#}zz4?Fm# z*L2y7&U1Fe;TwIo24V6k`?d2yEWX9ZpAJlyy>gzjBhK&e()NUO*|X<6JL3GV8}QAp z>9RK(zlg)P$s7ESUhb8zI>b4A+?Sl^qt1=n^R-txx}_HZe`RL^V|e6sWE(GaI{a&f zz1r%?PI+y#myn0PF2U}H8IY-F)u!KgIRJuHxp=JTQlxkTXIAG*=Pd7f7oqdl`aMc7 zm^gp_%z8boR&u3_s;|&(co+9Mtn8-Td>K_n!!@{l{h(*f1#hm~^=s3s-$DtnhD#P1 zd1!!TMr|XLRJ6`MJ=Y9N90#3UWT6DA1 zF_GV43;s@Fx(da_p+A#%-HJj1xJSfp#^yHQ5h)ZFJ|boH7EN>kdfCxi4C?ha|5bHW z-0HmYZf{i=w@yYCmR#btZp){wwr<hIeV(p3?r4DE=kIpPac z#5Hj1;8^qSKk)pJJ~B3cgnZjFjtgJa{GYzWFLIV!mb=VmW61+fueLF^$?5zEdCE5Y zBFEzN>7;782x!l<>wb~b$|ttMGOi1WMdz%Or1mpy5lhdBQT*rm(P>yr&}etHLfd1L;% zy=pYwdEuc4+d%MbAD!f(h_btl5gi+gzz$f1JQPuH5z55F5U!~?LLQ1JS>-&GiMbhp zU9yj7@=!#zMJN;YyE#I&an#2%`71tI<@}XbJYe6gDtRcP(jt_JjBy5>1Y4s#6cJl( zYqCh@Rs=^itx^7pFSmH*RXoq6`aMc~Wja0X@K+BgeOsrxmKJQPuSkMmF_=2nE( z$5CsPzv8nNue^%K`E@I?Bo?2JDL@H|?sbkz%%z4gZ6}DyU-4BIue>4&7f2fmz=u8s zC_&zR&QXcQS=$Nl0p9!-UtzlPs`57D`Jqz*O3-KtlvqbO+hzrLZnM<_%I4>@g6z`pcblpB-f{NqCGOD1W=lx)72k+wqgmC4mq(19(1k}FUvF%FWPKk^ELb)OXcRNzhTRQkG6 z_UB!f8xk+0h%bKwpVNARcnG@?pZ8~{BcL|u)y8ticyUaCzt_ayKtX-E+S0fEpsAmS z`|5yG_Xvje_i*3*j>}Z_o*QHDyD_=djg>Z*{MY>UTpHZipFd@{K;4s7y`zF6H_okm zVt;W-80&7F4N#IY)0r&1ac*VLnvO*7#<`U}`L3G)d4k#j_~VTLO;BMDNaTLYZo2FZ zrX$Y%mc5m|#ArgEU}h2%2v7p?h(tj^2LW=x^%XV*2Akn9RE+D5rrdTwj^HBPd(^BO zBJ)s0gCcBH1d6Z-c_^av1DCUTF5?kp*)5bj6p^(EWnylwkP%ubN8LinU-3mBIzQ#b z283}9ZO5l$3Q&S7OQ6JBfHpvj&;sPI_`HwYgvzUhw;g{0UIi^c2`WriVy(RG1Yo9B ze52{gD+XAIyKR++W-R;IEm@g(*|1DSwk}!zim$hLz4TcoY-o=bVOU~YE!17dqM(_2qN zgDX%>axW4>bIJKXDs_jW_{ zuHVpTvu?*M2YJ82w~L18JN?pcod+U=VI#fAJD2{;0rlVD+*Hn=g(u27Ha}95FKgD8 zQ2#GKxUkq8^vfqeU~yNhJdqD#3>kvW#ojL;0U65~>5)Zed1}hk^4v=-*5irA<7JON z_YyQ5?Bym@l>Sswy3=Jw@xkDOJ^b#~0R5h|^gCPJx42OV9SqRpC1u~6!%jbVca-;f zLVyk%_Su#9onM<7-NtPRe$vXb&@{0i{=Hv2>`>m9;8gL+w!L-Q^eUz62iHrO6sJws zU{E~{cYZ}(?Uy}y;Zre%l|MVjSQm%ubP3m$lWoF7$N2R=#xSw)#+ZwPfB5Tt>9Qx| z&dzxLdSANir8&-yIQLk;>9SYkIy>UrWBsPfUfs^wkth81zI53e+B-Y)xL@yU0V-4u z3drl|0+1;D^}ZG;f7#_6-20Exn%p-7j#s*|%LF8l~7UH1CU z&W<>KgiJ`6T|0?5{tP7tx_i{O^HTosAzvpzpE1jD5(d0d5PUq<+nNK#eemeIwD#R& zdD8HmZ?L)4JE@a?{>q=%;!gO8JW3l5K}rqorn0>*l*%v2In0?7_=3N@RFx%_rmrvT(x$=_w(2XM> zU+v6=w&VKHmX!4J%PM;fPCxqVqoCqBS5{CF?iuZD6UV#%>Q{OHr9soF-t#&5y>yT{ z&ATh7a<8SeGiP|SJxVO1IQZ#wFPW1Uo}8YTzNL~rLEcO+m!_cSOz(i*aJoXqF6ZiN zFP-USz1{FO7Giyg1+&idMkgxvbx<3lorm^0C4-j+@1BWw7&rw@XX1^c5yF78Oh}#O z_0HEml%pV)h=ZZ{;HI;@>Ks(31J;?3sxPxg)j?SwZb!ki{eNDR%8nU+=)hH_;HRZ+ z!GrL{co2SzJqUj?9)$n2)r0VOpnaDI;hVE3YsUF!B-`V_@)6jI5m;M|r5?eJAVwX$ z)Sy2|KkD!+M&A!QZa_jm_;yEp<8WuMdeY$q{KF99>!CBZ;*%r2*fWE@*s^_r)qXk4 zd)!OtauG{9{_dgN9_^2tF!90*W(QqS`H zN@|~~NR@9}UlQ)|xOv_gop(Xq-gN8}vU?Dcg*yYr58^IhJtOc8e)lO5Kw}JaRtzS+ zi{n3!>ofJh%$Tos3%BZtm!BB->F6=350>{1^?%KrlKHOji|7A)cF$1%cVYa6dy1aR zynEPQb+zZ5?>*#on})mnBIHckf4N{^UJ&i39X@UL<+lyb=L=xxpuF7c&<;rotm6sj-l=5S zhVXT!n9(`90o&`Al30l?*{^ zLi7CNlRbj3&cM6EmKolj!P0VX=vhK)$NsroV$GS8a=q|wHT~~=uw|=0 z1i6^|Z@I;pZ_($>c_8(}bN_j6-n3W~=PA8@UZ&5E7wd@c_%QG5&#!R!w@vBHj+?jD z5dR)u4+^J$-i{Z?5g+hi{XWXW{EfNADd6eUf1YbUNrs=lda>@*>*vvsD*Et~>B0|r za^K>gn$jVTLslky2$G*+{`LE``2U3DC?NE2KdB}EJot9E1${D|3rf2R+T+OX8$W0* zCmvZAi)n)M5HQdx?zT@$#XlqYzm1_g5_3LN#YrYd)y&h_Wygoj_Aqo6tG&&Z`;* z9Ny&cbN+H#-7EdqJx_d(gLfR!@id1|`{w+*{6FTcP1A7M)RzyCfdN(h*BwUunQMRQ zrbL|J>G4Ctz1(?KvO#zmlHc@~(?a~jIsIyczv=H=eCapmhj`!dn{N}IJ7C>m3(fzh zZbzi&%dic}*V_cihE5BFXW@LGEvR43<12(ehU9PF+dpJt^KGBi38#O(Rs7`xr+uTs zn7`f_`skr^3LKuskEW3PK2*($yFI({LPM9L zbEe5~#*Dg5@8ch;VZc*Ug0aFGF!-r%DdLZuzP7h;PT<{nLx|5T`{Enn1CaZJEo(yj zoN52sEc~^74lJHEqb|hL!PsMKWEhU*TP$F0@00Hl-Vw=jZGtbpS-nd5XYk$M7WA*p z%O4ef0g_k54p_^D9$RznOTy_t!U{h5o+*C=o(@knCunaJtzOkaQ6ZB56;(6Q@<+QA zDbbN%yk0X0ED=BVrKhF{ABN=boBx!*J#xD6i|3tJ{J_rM;ezI$ijBc*Ca<0aU#FL6 zZuxq7X6~FhnPt~*>^NqJGu-_4#!SU6gF<}K=-?vZ7asFoX4>CZ)X=|n=F}5~)Bnm_ z2BnA}clk*}gfBquo4;Nj;>)fb^S$tkk$chG8&h*}{bhoSF4-uYi_g3K*$UW$9!`Cv;QB^gM zrDb5ijaKoKH$M8Va87WmF?8Pi7KWI78LDQYb8lTVTK-ecKWgpeV2OCmW3@Adqkzmp z^MCZ+<1RNm9ji+Hrg;B}eZv(+_vXj(H)i4!Zp^%~X<=sRwO@3r{lRTbhi9rYU(MMw z#D6U5d4ceokIZE5_aCmIf8m_>rU%oly_DL{|3psn*ZkmMlKNEVZx269CS|H>#KS5h4+B( zm$smG>C8WFlVJstH+4O5Ed$x+wQihnG? zCc5NRi>ZG+HKI@Vxp9`OiNsqq!ONW;YeNK4nKckBG=-3qE>&D%1r|@4P_i^Tb zP5#hZgg=Pf_l5b>+02yBS1y#{Bsia73mW>|%2mR9Bl*(Piq~?XH{5yj3&QDtx-l{I zmId2{bAktqiIodmm^dD}r-41@S-I-%Nmr$fx<0EOT-y~i(Qxz&SI$zR8AyJl1uWS1 z_NBsmow134cbxVDD)KNs};mvC(j@trrNTPV`r(6HC45mObQts&m&rP=d@ zYio%2{8zzM!nHNTqg&Hy$ETU9w+_v$T=9P9!()2Q#f8@trPs>whk;2fA#sB&lmmxlJ8;ub=z*fR`?~}^~JNEO@s?_Ta(`P@;GPC z-@?md<5q|3aw5*lNw}^W;=F2v>#8Bnt46r48kZ;gvGB=hdqtyxmyHa%Y>4x+5w2G> z;=F2v>#8Bnt46r48sfZagzKtF)4Z%`T1kQwKc>C9`bMgWh0zGTSL6t?sF@IYio#K z`QF4Egoj&${pXh`+0P$)=x!ObH^l$FXv+rS+8W|>D|YM@uB{x6{X!aDt;JHcv1P{&k$7Z0{Fe#speWhBy~=*1a#jtOdP)Sb7X6u45t^ zqKUB5I!??)nivaB(Vq*w>f#q))Xx-nJ@Cn!sr&ajdg7(a9j-(Rt}O}^ zEgJ0bu1K;P{+#%ec}Gvw#D^?vpP339@pbDznJ4^!1Bx;a!2e>*`{jd2PfTlKuIL&B zEU!JZgbQj)xd|BXAOcnaXMk`nGz0v1*Or!Wp$q3afBvzfY+dm|H)EmCT@j0Ep@u)T z8B7p2CepF~R}`cU+_L?tt5NY-ys}?n6_Zl@7anT(7Zl1~g_{8W8ToI(dzt+C7Z*$% zPH;FbGEr@KxFF(M5c3S(lHPvM9jJhb7Fh+H?1^~(2>iLGgmP25dE(U2EzX|{l|L9t zfzk{q?J<4bdNB%y>adj=ZsloP)~(l8V#_kvvhb`7Nc-#X-)(UdFyMI@NGStEDJQre zIJbZkXbZ5%sbi6hdwlf70lxBJE5~6gGZk3SYuyL`OR-ToVF4^+Je+P#DA_LmM@S9fQ#GLEEa1>4~{6-Z19EDSMf6*Bjj)td0h3n%4 z92G#hJz?M+g;VZ87&u4alsggz&QUn!-3SBcD4g={;Vm8ve8Z7}awl{Ka1>72ef>Ky z9EB6x1D*aHg;VZA7&u4al)DlJ-W4y)%?3g;kltRwkL%Nao@tLyYaoe~_OeZ-gncFv%FxvF>JIWs*7eFq~CN z=E(mlFcYz2$sBtU2F~gwbL>SJIGK>lu{YsZ+8rXN3=F|Op}`#@$s7}g^WaG4hzkhK zogv8_`x#CaC3Ea=I2rBF{bw-20Vb1P$sCi0lWNHv_d;hZX_ri@C37p>=@}SOE}1@( z)1+Do>6J`MC6h+Uq)swflT3yrlNHHiLNcqD%z`0L4hL2#Loy<>65(9+-snU)?qf0! z(>_7B-+TG}Sj!-TIqqvR>)JOMPZyRo*kF!BOlFBgf{WXw^92j`Fc=^Lg!7zh47MV;oBy${YcrrNt7O!WTq#R@r ziI7a9Mi@?VoSY2Fl1x@4lO4&VLNY0l%=#sh2gqp*$*_7ESiNMHDw!oqW_^-blVsK= znT1GZVI$GG+Z>Bc-X|73b&FTfn}r-~7{^g2?;Csqj=aIa54U*3dUN@Qn1$n5llKqC zFZ6o$=GGl*5XZwz9vWOkGiw=V5XY3s2L`KQE@nw325}s3GRu?9af0D2bwcpTLN7nf zN+%l3>Lj!JNrtmxCnrM&B(qw{tXlHuh&(1Dvu^pYe#mYMS+NYPTrx|Q%#tOSL}b<_ zob^d&A(C0x;pp5#j=a<<7xTVgaxi`ot`Zh=gy9^IG?|4R8C*mc)^(J@9FI1cH69(T zrVC3v#$b+9OlG-Lf;Z{HVy7C+@mP~t__2X^D=tUYeVoA@OHC#Rk~to4cu8>ltvDs5 z;sk>@o@nxfU_Q)gGBV8|vLKl(on$zfadI+bN-`OdOlBmL2FavDGHaJi4j{X&X2mkF za>*=HGE0-p5+$=H$*fH>3z5viPC@7Po*a=U^PQN04AV_MBKYA}T%RoDRD(F4X7bU& z_{E@>^~^Ac-^y?_CkX>mYdANC3C#U@Ur0e+i*%) z|HTGzyu{?Qg84L)hD#0N_#2aF1y919CL6yshzv+3Lzfv&R-Bv+S&~dPB$E}%q(CyM zkj%Ozvwp}7ONLd;zzQX^Qpqe$GE0=qnk2I}$t*-N3%ertFX}zua){h*j#rw@IwW(v z%JB1o@k_uU%emShj@OtxFSv+iR&}jG9C>m%!v(==n2WiS6+{4WoKF!l>y*s#I>NwN z^L4=|OK@gb^7TXkb6j9D%U=+5^Wnnke`heq8%!n>Hw5G1k|q&18hk}WCOJ15PBxsJ zjL}Cj*^o?DB$Ecoq(d_6mrNcYb4Z4j%fM?juO>)a37a7d)R+Cxqt%0}H%Rh?sE;g8BrO7N>GRNBt zuZYORmKZ)iIDRRP64~$#;<(i0>x20;la$*H;<(J@-vv*?oF+GcK^&KxOr9i@Bgy1$ zh53*oCnrN5C6gM-q)0OPkW5}67hp(+Y{cUsL?^y=MZVATU4jNgl+5v7!&$jxj`tZ(79?}L-*7S_nd1Y7lO4!BSp!4xK{Jpl$s8XtoU}>i z_^{!mP%`P0Oj;i?AJQk8K9W~*ektTmGC7n?(j-?!WU?ik3`r&{lF5W*Rxg<>gmN0y zvq~9QnPgTX`BBKV==@CmSVSiNG-2S6M`ZduL)dW1^ncdyYK&G#7Y%>1mHd+7Txe9@ z;NIQ#jy(m#26N)-UN)JyWa1kQuZhSk;FSn2c`dM44X2M};(s!{8t1QBVKuLrffYpM zO@?zpQTcVlxgg1$;Ef0_nfPYIITvNjzjusEy&2X;WG>>(2rik6_;Uo0%5NFY1xe<_ zZ%6zk<3JzSd`fw`b&@&i#1hwGtPKvh!|S;R%{p&S2gd_S^N8wrQPvUUD4cQ@oh9?w z%ZG9noj7OGiK47i$5A*}rc*>2r)~m(Fo%&UNT)P}ZsED4fgCIiVb#UO1PbGea4N8^-~4@RZBI_2~dnjxI5nsd zY~21h6EvI|J^(%_d{{m50C>p&JOGC0*O4Opx{D8$N`A;5@pY8^gd`0;oMm@?8G3w+^jTrSPJ;bO-=^;iv zN)IvU>0S6CNWP-{5ThRDhZuFo4+Jz~)T8teqaLM)7b(rp5u@JQy@a%!F#xeX=BP79 zJz<#681=q}>5NhDXPC|y_5OzGh*8IN7q%{Z388^NGK5;r81=mj<3Qf1lQA})F7i7N zT?|rZqYrU5vM0YNt09K@ccE2|QCfvXX%!ZwRTx=h;_ zQCfwOMK+!|VMzjLWKWn_1#9V$DxTJT=!Hg#NGJ6{=xjV_#HsI#&PIlaQy+}ZMuvz} zAA-(ChKN(&51ow+5#NvX?@t7c6wyGv5S@(_5vM*BosA3;r+xrB8yO-_{Xld!GDMvE zFmyIDM4WmNddPngBMk(GqqC8sBs%qj(AjvXh*P)gyZJAFBY=rP9z6Qehd3MABThZa zD*i(1z$mT4qO=N&(kd)UtFS1m!lJAimfnR{IYwy}7Nu2KlvZIOttcvqE-cEbFvlwP zpR|#xk?6(fY@~=d^@Gvb$PjVrqtMyN5OM0G(b>olaq45x*~k!a>W84Sk)i!Ce+Y~v zf<}sHpnfPi8xIW87Tks;#L$Dy;4A>!0i=xk(&IQ0^AHZnxK1U)?-|FDrF8mLb| zXCp<#sZT^_BU8kwlQA|j#e+2oT?|qetHjyJp8Sl}bV#4TD6PVxvlej+*>4;pdm)6m(-6mjZgjEzijD^EffgVe<; zaW=9izazreUjU>}V3by2QCfvXX%!|~$)2z%tHPRD<^Btd(kd)UtFS1o!lJYai?S*# z$||umX%VfYjdY%Zelj{64;pdm)6v<;5OM0iLT4jG#HpW(&PIlaQ$G!zjSLZ|KEu8L zxr0Un0Q)nbJ7}ctbo4XO*~k#7qdpUzjSLZ|UWU#_hKQG;pNY;!hKN%?3!Uu*?mrC# z&L)CJibx&xS?FwJh&c7x=xk()ICV0{MyAN<9CR^AU91vkBYUAA_diOjf}^wwi_$7A zN~rkwrGLCyXp|{*XR_q>+vE2`eLjM*4(BX%*H&Yl~l$Rry6&O*bbLt)z`~ z&P6{5osA3;r+zLv8yO-_{XBFwGDMvEuhH4a5OM1B(Amfk@p-KOd?IM1hz9BxptF%8 z;?yrhXCp(zsh6X(m7x=-ei1qw87f1kela>586r;o67-ONQbYrROVQa#5pn9jL1!aF z#Hs%losCQpr%uM$$P^FSW$0p%x>zO7M)uNjjM6GBN~^Fat-_+T3X8HTEXt~3>0M}* zW0Y25QCfvXX%!aIipt2Iuqdm-9IM!W(kD=~k~Y$L1^VUaY-ETy^()cY$PjVrSD~|! zA>!1pMrR{K#Hn9{&PImjVg3-fmIxXtqJcVXY&>YhsaK%0ks;z0==0Ip$PjVr*P*kK zA>!1pM`t5L#Hptj;2$ ztP)2{hxExYN~^Fat-_+T3X9SzEXt~|D65x|Q?8_fYe6G@a*Wa{EJ~}eD6PVxtO|>= zD(nWWhV%&(t)z`~{vQ2ibT%?Xocb;3Y-ETy^@ZqcWQaKRMd)l~h&c6I(b>|Zhz0_S z(b>2t;?yhA*(%V9Q@;(JjSN+wQ(uD4Muvz}_tDwN5OL~D(b>ol@N@{=9zyP*(LjBf zVLWK0j(T7i86r-7xnX3AICV0{My9yEE6~Ltb+Ni4EC~SVlVg-tVNqIzMQIf#TFIWU zD67JnStX?cqqGW((kd)UtFS1o!lJASi?T{AO=_aF%2BkEHqv<~`W@(OWQaKRmFR3_ zh&c7T(Amfkaq4%Yvyma<)K|G9Y@~?PRiUp&XCp(zso#UnMuvz}zZad2 z3=yY(A37TuB2N8&bhg{M|1=PIfCw5XB6ZXsL}w#I#Hl}o&PIlaQ-2tpjZ6`zPR7{C z6j^=*T?|qWS>^uIz()Gy7^PKMlvZI;T7{8CHnJzIiU1nf6Gj#}e@LIeD6PVxvsq`vz<)6+|M^vgndHW-dnX^Ph3tc@ucVlDnh z2;?DJGvyc1X|opp0|e^Ct;H$Rw^|6k+=vC z!aX1kDnkB=hy0Km8mxgIM@@8JUI#`V$)~kAb>gJRTD%4Vb>i0I)X5e7T}#K}Z$Kii z46qibPMoA!i?4-1ow&6)b+Q-Tm(9>gH2tl`sS}T$PBQ!g>!-n5cx1VI(Vcn|I_Zm2 zO}QSOHf!;95U3Nk7N<<#=yv`YI@u%B;y+G>!8BS66H<>(LYcl#niGcjTlk0UMX9FD zSlXZsTVqZbLKetClxfOu^P9RT kU8InDbP~#RUW;xmKIz!;!#6z)-)(p2)GmF}Ykc_s0YN4*_W%F@ diff --git a/src/field3d.cpp b/src/field3d.cpp index d447ab1..1da54bd 100644 --- a/src/field3d.cpp +++ b/src/field3d.cpp @@ -77,6 +77,9 @@ namespace toruschess { void Field3D::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +// m_lib->paint_pawn(); +// return; + glBindTexture(GL_TEXTURE_2D, m_textureID); glEnable(GL_TEXTURE_2D); { diff --git a/src/media.qrc b/src/media.qrc index 1021410..0c94b0b 100644 --- a/src/media.qrc +++ b/src/media.qrc @@ -12,5 +12,6 @@ ../media/Chess_rdt45.svg ../media/Chess_qdt45.svg ../media/Chess_kdt45.svg + ../media/pawn.3ds diff --git a/src/piecelibrary.cpp b/src/piecelibrary.cpp index 35d98fd..65e0f1c 100644 --- a/src/piecelibrary.cpp +++ b/src/piecelibrary.cpp @@ -20,15 +20,125 @@ #include "piecelibrary.h" #include +#include + +#include +#include + +#include namespace toruschess { +typedef Lib3dsBool (*Lib3dsIoErrorFunc)(void *self); +typedef long (*Lib3dsIoSeekFunc)(void *self, long offset, Lib3dsIoSeek origin); +typedef long (*Lib3dsIoTellFunc)(void *self); +typedef size_t (*Lib3dsIoReadFunc)(void *self, void *buffer, size_t size); +typedef size_t (*Lib3dsIoWriteFunc)(void *self, const void *buffer, size_t size); + + Lib3dsBool io3ds_error(void *self); + long io3ds_seek(void *self, long offset, Lib3dsIoSeek origin); + long io3ds_tell(void *self); + size_t io3ds_read(void *self, void *buffer, size_t size); + size_t io3ds_write(void *self, const void *buffer, size_t size); + + class IO3ds { + public: + IO3ds(const QByteArray &data) : m_data(data), m_offset(0) { + m_io = lib3ds_io_new(this, io3ds_error, io3ds_seek, io3ds_tell, io3ds_read, io3ds_write); + } + ~IO3ds() { + lib3ds_io_free(m_io); + } + + long seek(long offset, Lib3dsIoSeek origin) { + switch (origin) { + case LIB3DS_SEEK_SET: + m_offset = offset; + break; + case LIB3DS_SEEK_CUR: + m_offset += offset; + break; + case LIB3DS_SEEK_END: + m_offset = m_data.length() + offset; + break; + } + return 0; + } + + long tell() { return m_offset; } + size_t read(void *buffer, size_t size) { + qDebug("read (size %i): data-len = %i, offset = %i", (int) size, m_data.length(), (int) m_offset); + if (m_offset >= m_data.length()) return 0; + size_t r = qMin(size, (size_t) m_data.length() - m_offset); + memcpy(buffer, m_data.constData() + m_offset, r); + m_offset += r; + qDebug("read: done with %i", (int) r); + return r; + } + size_t write(const void *, size_t ) { + return 0; + } + Lib3dsBool error() { + qDebug("3ds error"); + return true; + } + + Lib3dsIo* io() { return m_io; } + + private: + Lib3dsIo *m_io; + QByteArray m_data; + long m_offset; + }; + + Lib3dsBool io3ds_error(void *self) { + IO3ds *s = (IO3ds*) self; + return s->error(); + } + long io3ds_seek(void *self, long offset, Lib3dsIoSeek origin) { + IO3ds *s = (IO3ds*) self; + return s->seek(offset, origin); + } + long io3ds_tell(void *self) { + IO3ds *s = (IO3ds*) self; + return s->tell(); + } + size_t io3ds_read(void *self, void *buffer, size_t size) { + IO3ds *s = (IO3ds*) self; + return s->read(buffer, size); + } + size_t io3ds_write(void *self, const void *buffer, size_t size) { + IO3ds *s = (IO3ds*) self; + return s->write(buffer, size); + } + + + Lib3dsFile *read_3ds(const QByteArray &data) { + return lib3ds_file_load("media/pawn.3ds"); + IO3ds io(data); + Lib3dsFile *f = lib3ds_file_new(); + if (!lib3ds_file_read(f, io.io())) { + qDebug("data size: %i", (int) data.size()); + lib3ds_file_free(f); + return NULL; + } + return f; + } + + QByteArray loadResource(const QString &filename) { + QResource res(filename); + qDebug("res size: %i", (int) res.size()); + return QByteArray((const char*) res.data(), (int) res.size()); + } + PieceLibrary::PieceLibrary(QObject *parent) : QObject(parent), m_pieces(0), m_buffers(0) { + m_pawn = read_3ds(loadResource(":/media/pawn.3ds")); setSize(45, 45); } PieceLibrary::~PieceLibrary() { + lib3ds_file_free(m_pawn); delete [] m_pieces; delete [] m_buffers; } @@ -68,5 +178,15 @@ namespace toruschess { if (place <= 0 || place > 12) return; pt.drawImage(rect, *m_buffers[place-1]); } - + + + void PieceLibrary::paint_pawn() { + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3,GL_FLOAT,0,m_pawn->meshes->pointL); + for (unsigned int i = 0; i < m_pawn->meshes->faces; i++) { + glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, m_pawn->meshes->faceL[i].points); + } + glDisableClientState(GL_VERTEX_ARRAY); + } + } diff --git a/src/piecelibrary.h b/src/piecelibrary.h index c709201..b78e535 100644 --- a/src/piecelibrary.h +++ b/src/piecelibrary.h @@ -22,6 +22,8 @@ #include +#include + /** @author Stefan Bühler */ @@ -40,10 +42,14 @@ namespace toruschess { void paint(QPainter &pt, int place) const; void paint(QPainter &pt, int place, const QRect &rect) const; + void paint_pawn(); + private: QSvgRenderer **m_pieces; QImage **m_buffers; int m_width, m_height; + + Lib3dsFile *m_pawn; }; } diff --git a/src/src.pro b/src/src.pro index 9c9b466..be8315d 100644 --- a/src/src.pro +++ b/src/src.pro @@ -23,3 +23,5 @@ toruschess.h \ field3d.h CONFIG -= release +LIBS += -l3ds +