BLENDER_v225REND d1SRd:L,<SRModeling ^<\d,7F7 DATA M DATA MD DATADM DATAM4DDATA4MDATAM4DATAMTinDATATinMlDATAlM^TinDATA^MlDATA<N D DATA N< DATAN$6  4DATA$6NL(DATAL(N|$64DATA|NBL( DATABNTL|DTinDATATLN,dBTinDATA,dNTOTLl4DATATONM,dlDATAMN=TO^DATA=NM^TinDATANLm=l^DATALmN\TinDATA\NLm4DATAdOD7 4>;Dq\DATA>C;dDdCٿšݫD%ռfCC(BDC?z?]eOBDATAD;E>d/9DATAD7O =d DTinDATA =O,7D74^l?8?AHM  =5DATAh=I =\_u' =qsDATAB3= =B̽̌?B@ #< #<`jFzD YOBB̽̌?DATA3>> =N>2h"2?^?>DH̾k$WM?y?^K?ri?I>^?,0<C>WM?^"2?8H̾p?AjA?T3?Q}2h"2&?DG>>DH>p5.4?.y&DL?6AriA9>Q?姾@>?HJVC53 =DdCDv@CC(BDC?z?DATAD5E> =SAVE FILEFILEC:\theeth\Blender\Python\.\footwalker.blend\Text\Track_Axis.blendpyblendlendqDATA,7O =l^Tin?@AHM rI8:DATA8>,7>! 9?Dc?Ո>X࿾50mP??T5j?>Dc?I1Ո>mP? 9?S࿾?AjA?0W?g9! 90?$?B>X>)+1В?2C6_AjAm>>#j#604[=D_> 3թ2@99 DATABt?8,7zC̽̌?zC@ #< #<`jFzD VOBzC̽̌?DATAht?I9 ,7\_u! @>6DATA9C:t?,7DdCDv@CC(BDC?z?DATAD:E9,7SAVE FILEFILEC:\theeth\Blender\Python\.\Track_Axis.blendq0@SRd,<L4J:SRScriptsD,>t>DAATFFDATADM#?DATA#?M<DDATA<M =#?DATA =MT=<DATAT=M= =DATA=M=T=DATA=M,>=DATA,>M=DATAt>N>#?<DATA>N?t>#?T=DATA?NL?><=DATAL?N??T==DATA?N?L?DT=DATA?N$@? ==DATA$@Nl@?D=DATAl@N@$@ ==DATA@N@l@T=,>DATA@NDA@=,>DATADAN@=,>DATAAOlE=,>= = *dtBCDATAhtBI C 7 f>#DATA CCCtBDdCrCD RDC(BDC?z?DATADCE C/9DATAlEOTFAT=#?<=dDATATFOlEDT=,>= do? dTXZDATATXDYzCAzCA A@FB= A DATAY>ZTX????????8=i>o?fffAD&@??fffAo?ccc d4] @DATA4]D]zCAzCA1||1 A@FB= A DATA]> @4]????????8=H>o?fffA*@??fffA>DATAD @E]AVE TARGA/t1.blend9DATAAOL\ M|LMM8=>o?]]]^dlBEDATAlBBdCB̽̌?B̽̌? #< #<`jFzD SQB̽̌?DATAdC>ElB????????8=>o?fffA@??fffA*DcmP?Ո 9??U>AjA(??dA?)d??>)d????OBdP5???A&43??1= O5` ^? R?6#s}';?(j>??0]<2??ܿ{<$,??O">=-bk?̘>JP>7Ma8L@at?DOBdA? #=?>=@???OBDc?3Ո>mP? 9?U࿾?AjA??????$23OR?V1e1 ?C52Kl5?DOBdA? #=?>=@???OBV5Y??5>e>^ ?R6>1? MLƏ6?k<4?????>"?OakϘ8-NP7M? LA\8?DOBdA? #=?>=|8L9@???TYTYDATA|8DATAL9DATA,X]DATA`TYX Const?OBY5]VOBCircle.002Vl\\p @E7 B<@LƏ6?k<4???ɿ??>Y>q?y9T?S>s R?61C?>?a?^35?355b35+]?QdӸ?? >O?">eCE?Ҙ>X ?᷁>7M^\AAht?DOBdA? #=?>=@???DATApDATA\X?B@ L>?L=?HBHBHBHB<OB]5t`YOBELocmpty.001nMƏ\2@???I@f_ɿ??DZ񲻍$}D?DzCZq\g3}D$MƏ6?????3??._>?b:C/?! 9gkAlL?DOBdA? #=?>=y1@???DATAyDATA1OBt`5Lc]OBLamp.001 gqlrK@r]@<?????Q@D?a$?3 ś>pa??',m>K@UX@???!Dl?:>fdx?j}>>@o?W@kz@e9A?DOBdA? #=?>=@???OBLc5$ft`OBLamp.002 gqTr\fXBA?????Z~Ҽ!q%?{Q?zQ?\f A_I???F?O7?'?S?%s6>%'@?DdA? #=?>=@???OB$f5hLcOBLamp.003 gqlra @r]?????G?c ?3ؗj>a?OH ?/)\>a @X@???:j?C>% o{w?N8>w">CXn?ktA&@h97A?DOBdA? #=?>=@???OBh5k$fOBLamp.004 gqlr[@r]\\>?????A?'?ОXX>ra??'h*>[@X@???m?U3>M[ x?2>>p?D@v@;A?DOBdA? #=?>=@???OBk5nhOBPlane.001 zR+TNƏ6?L2?????f7?qYƛ2?} ?>کϳ$}D?NƏb@vU?` <?a <??2N?ߒ`%>_>Y>?A/?V{AMA!A?DOBdA? #=?>=@???DATAROBn5qkOBPlane.002<-s\rMƏ\2@????????MƏ\2@?????>Dc?-4 Ո>mP? 9?P࿾?AC zA?DOBdA? #=?>=@???DATAOBq5\tnOBTarget@@@??@@@?????k>D>0>m> >S?>A@?DOBdA? #=?>=@???OB\t54wqOBLamp gr????????????>Dc?*Ո>mP? 9?U࿾?A(jA?DdA? #=?>=@???OB4w5 z\tOBTrackmpty.001 V(?4+2zþѴJ>a? ?F1>cLA OA?DOBdA? #=?>=@???OB z5}4wOBEmpty$r???ʘe;>??1> S8?Oکϳ$}D?NƏ6?L2??????O ?-5`_> w>?/?\8}AkA?DOBdA? #=?>=|@???L}L}DATA|DATADATA,|]DATA`L}| Const?OB}5 zOBCircleVC @E7 B<@LƏ6?k<4???ɿ??>Y>q?y9T?S>s R?61C?>?a?^35?355b35+]?QdӸ?? >O?">eCE?Ҙ>X ?᷁>7M^\AAht?DOBdA? #=?>=@???DATACOB5}OBSphere4wԝk̽A:@4n?n????g?>@??9n@ʧ%?u; G?lp>%?ј?(n?n}??=?&K=?=?gPV?i>ܸTH?z>[F?>b\->>A!<@̔\A?DOBdA? #=?>=@???DATAkOB5OBPlanedr75&????????5&?????>Dc?Ո>mP? 9?V࿾?Ay܉A?DOBdA? #=?>=?@???DATA7MEl2MECircle.001j<dpб->?DATA rDATAd/&!H~@=$=H~>"=H~νH~&!:H~>e91>H~@=g91>H~ν>H~DATA<*ME2lMEPlane$LL`|X2@4&?^>Ii?&?DATA`rDATA|/X^>Ci?I^>FiII^AiIII^Li?III^Li?Fa>III^AiFa>III^>FiFa>II^>Ci?Fa>IڝV>0?V>0׾=IV0׾=IIV 0?IIIVM` ?IVN` ׾=IIV>O` ׾=IڝV>M` ?ڝV>M` ??IV>O` ?׾=IIVN` ?׾=IIIVM` ??IIV 0??IIV0?׾=IIIV>0?׾=IIڝV>0??IJW=s'? ?ZZ}=s'?f?ljGڌ=s'??@v0=s'?0?}u=s'?+T?=s'?Fx?}ڌ=s'??@v}=s'??ljJW=s'?I?Zqg)=s'?g?G`@>?@?@ @ @A!!AB""BC##CD$$DE%%EF&&FG''GH((HI)@)IJ*@*JK+@+KL,@,LM-@-MN.@.NO/@/OP0@0PQ11QR22RS33ST44TU55UV66VW77W8 ME2drMECircled.4f,rr@x͢<>>?DATA4f̞DATAr/&R׼ X$ X}e  X@vN)/U#Xlj;>6LXZ5EH~XG*mMmlX0BR@XwxSPڽXCR`Xw-mM X7EX;aC'XL)/{1X且c |9X"=Xw'T?XT⽑=XwĽz9X0{1XGtΎ]C' XZdt Xlj\V X@v5C` X}hW=Pڽ XEC@X}\V`lX@v0t4~XljGΎ$6LXZZU# XGljĽ X0@vx X}u }Ľ0@vU#GljΎB6LZZ~tR~ljG\Vql@v0BC@}eW=Pڽ2C`}\V @v`tljsΎfC'Z{1GĽ90R⽘=w%T? =wd 9L)/{1且;kC'4E*mM AR`wwSQڽAR Aw+mMl05El~G;\6LZM)/U#lje @v#2}%׼(>h>W=sf>}=a>@v=.Z>ljxΎ=O>Zht=C>G\V=N5>08C=%>w`W==>;C=>w\V="=lt=Ti=zΎ=Ɂ===且==]=l=w*>_=&>p=wj >=0P)/>=G;>ց=Z7E>`i=lj.mM>1=@vAR>>}vS>>@R>%>}%mM>N5>@v01E>C>ljG ;>O>ZZC)/>.Z>Glj[ >a>0@v>sf>}>sf>X}\ >a>X0@vC)/>.Z>XGlj ;>O>XZZ.E>C>XljG%mM>N5>X@v0>R>%>X}tS>>XAR>>X},mM>B=X@v6E>oi=Xlj;>恷=XZO)/>=XGi >=X0%>=Xw(>_=XY=x=Xw==X==X且{Ύ=܁=Xct=ai=X\V=0=X1C=>Xw]W==>X4C=%>Xw\V=N5>X0jt=C>XGvΎ=O>XZ=.Z>Xlj=a>X@vS=sf>X})>&h>X(>&h>v=j]R=sf>v=/=a>v=Pj]=.Z>v=0@uΎ=O>v=!=ht=C>v=@0\V=N5>v=*|!j]2C=%>v=U[W==>v=j]0C=>v=Uj]\V=0=v=P|!j]bt=bi=v=H0j]zΎ=܁=v===j]==v=0H==v=*X=y=v=/j]'>_=v=Wj]%>=v=Uj]h >=v=Pj]O)/>=v=dHj];>恷=v=!=j]6E>oi=v=@0,mM>B=v=PޖAR>>v=Uj]sS>>v=j]=R>%>v=/j]%mM>N5>v=*j].E>C>v=@dj] ;>O>v=!!–B)/>.Z>v=0Hj][ >a>v=*>sf>v=Uj]xނu=UĽu=|!PU#u=0HΎ$6Lu===t2~u=H0\V`lu=P|!GC@u=UjW=Pڽu=W7C`u=U\V u=Pޖftu=HdϖuΎ]C'u==!–{1u=0@Ľz9u=|!*T⽐=u=/(T?u=#=u=/c |9u=*L)/{1u=d@;aC'u=!!–7Eu=@dϖ-mM u=*ޖCR`u=/ySPڽu=BR@u=/+mMllu=*|!6EF~u=@0;<6Lu=!=N)/U#u=dHf u=P%u=U&R׼u=W.L׼?,?o ?V)/U#?;:6L?=ED~?3mMkl?KR@?SPڽ?LR`?5mM ??E?;aC'?S)/{1?l {9?+=?0T??e⽏=?Ľy9?{1?Ύ]C'?t?\V ?VC`?W=Pڽ?gC@?\V_l?t0~?Ύ6L?(U#?Ľ?؂? >sf>?S >a>?;)/>.Z>?;>O>?&E>C>?mM> N5>?5R>%>?kS>>?9R>>?$mM>E=?.E>ri=? ;>灷=?G)/>=?` >=?>=? >_=?H={=?==?==?jΎ=݁=?Ct=ci=?i\V=1=?C=>??C=%>?o\V=N5>?It=C>?fΎ=O>?=.Z>?=a>?A=sf>?!>&h>?>>?*]W=?>?`[Wv=>?YV<0=TȊ>?>wMWT9? A<:~0k>?3<BFP>?#<m 3>?-W>?֢<t =?WCF*=?YW:_=?>W9<%=? W0=K8<?>̉Wv=R;?Y<=G?<'>n?֢Wx>G?-WH<>ܱ;?#WV>8<?3Wn>%=?A Wz>~=?wM>W9>*=?VY<>*=?`[<>>?*]W>3>?`[-W3>P>?V#Wr>0k>?wM3Wn>l;>?AAWV>YȊ>?3wM<H<>>?#VWx>?>?-`[<ǽd%=?-`[<vq=?#V<u0c<?3wM<U:y ?AA<~<?wM3<lAF<@I?V#< <2c?`[-<<9bY?A <0>l?3<v{?#<ǽ 恾?-<(_?֢<y"恾?< I<{?Y<VDl?>̉<npY? <#}B?><AR'?Y<I ?<Pڽ?֢<Hc?-<?jI?#<?3<%n ? A<Vb<?>wM< IwM<n u= A<|u=3<:nIu=#<Jcu=-<Pڽu=֢<I u=<=S'u=Y<{$}Bu=><npYu= <VHlu=>̉<I<{u=Y<x$恾u=< _u=֢<ǽ!恾u=-<v{u=#<0>lu=3<~9dYu=A <}Bu=wM><BF?>v=-`[WH<>>v=#V<V>YȊ>v=3wMW n>l;>v=AA<w>0k>v=wM3W7>P>v=V#W>3>v=`[-W>>v=*]W>*=v=`[W;>*=v=VY<}>|=v=wM><n>%=v=A WV>8<v=3WI<>;v=#Wx>`Gv=-W/>nv=֢W=`Gv=Wv=8;v=Y<0=E8̉<9<%=u= W:^=u=>WBF)=u=YW6 =u=WH>u=֢W- 3>u=-<bBFP>u=#W:}0k>u=3<9v= A<0=TȊ>v=>wM<v=>v=YVW=?>v=`[< >>v=*]WDATA,r*@ ? ! "! #" $#@%$@&%@'&@('@)(@*)@+*@,+ -, .- /. 0/ 10  21  32  43@ 54@ 65@ 76@87@98@:9@;:@<; =< >= ?> `_@ `a^_ ab]^ bc\] cd[\@deZ[@efYZ@fgXY@ghWX@hiVW@ijUV@jkTU@klST lmRS mnQR noPQ opOP pqNO qrMN rsLM stKL@tuJK@uvIJ@vwHI@wxGH@xyFG@yzEF@z{DE@{|CD |}BC }~AB ~@A ~#~}(|}' |{({z@zy@xyG xwHvwG uvC tuC stC rs# rq(qp op' no# mn# lm# kl# jkC jiHih@ghG fgC efC deC cdC cb(ab' a`(`'    @@@@ @ @ @ @         @@@@@@@@              >?=><=;<:;9:897867564534231201/0./-.,-+,*+)*()'(&'%&$%#$"#!" !? @__^^]]\\[[ZZYYXXWWVVUUTTSSRRQQPPOONNMMLLKKJJIIHHGGFFEEDDCCBBAA@``ababcdcedfegfhghiijkjlkmlnmonpopqqrsrtsutvuwvwxyxyzz{{|}|}~~_@?  ^_ ! ]^!" \]"# [\#$@Z[$%@YZ%&@XY&'@WX'(@VW()@UV)*@TU*+@ST+, RS,- QR-. PQ./ OP/0 NO01 MN12 LM23 KL34@JK45@IJ56@HI67@GH78@FG89@EF9:@DE:;@CD;< BC<= AB=> @A>? ` a` ab cb cd@de@ef@fg@gh@ih@ji@jk@kl lm mn no op qp rq  r  s s  t@t  u@u  v@v w@xw@xy@zy@{z@|{ |} ~} ~ MEdr2\rMEPlane.001&ĶĶ\Q@AA?DATA\rDATAT/QA@AAA5@ 5`A@4@@@p5@A@@A@@@@`?@@H5?@(@@5@@A@@@@@@@@?A?@@@ĵ@@A@@@A4@@@ 4A@@@@@?@?@@@?@@@@@DATA*@?P@ 7O8 -N. #M$ L K J""I' (H*G,,F1 2E(4D66C; B2=A>A= <A>A<<B9B< 2B9 9C6:C9;C: 5D4 3D5 6D3 3E2/E3 (E/ /F,0F/ 1F0+G* )G+ ,G) )H(%H)H%%I"&I% 'I&!J  J!"JKKKLLLM# !M$M! &N- +N&.N+ 0O7 5O0 8O5:P? >P:@P>ME\r2ԝdrMEPlane.002+rTrTpWԸ?ָ?u?DATA$rDATATr/T??ii:?1]]?&i:??n!%r???%r? +#?L>AlYG2?t1 ?*=wMbF?`><VEW'GKR?>>ӽ`[JiV?F_>?_*]>HKR?=;`[51F?%[V$YG2?*s1 wMuW?L+#Az\x>>363H*>9D#2Q'>uz\L-sT ^N$O/R'rz[LsT9DY2>36>H*L +# z\^G2c*o1 uWFR$JKR[=/51iVk_>!_֢>EKRS>ӽJFu>lY>6?3>>tD?9>YzQ'_L?xz>~w5%O?N>`R'>XL?kz>,~%>D?9>#z>>6?3>3t&?yL>+#?AliG2?*=d1 ?wMbF?<;>V'EWMKR?ӽ>`[JiV?__>*]>BKR?c=`[51F?{㾛V$PG2?~1 *wMWu ?+#LA\zs>>633*H>D9#2!R'>[Lpz-Ts5 S5%ON/Q'_LwzTsD!9Y2G>63>*H +#L \zBG21 V+⽉WuF $>KR=51iV__>֢>TKRtӽ>JFE<>'EWG2:)=H1 ?bLL>*#?l?d3>6?≯t8>D?YzS'Yz>NL?~ͶN>$O?ZP'>z>jL?,~&>R9>D?#z=>4>$6?3tR2D_>E_ZRD_E_>Z?ꞿꞿ?ꞿ??ꞿԸ?Ѹ?ꞿӸ?ָӿꞿIԸӿҸӿꞿIIϸӿָ?ꞿIϸӿָ?IԸӿҸӿIIӸ?ָӿIԸ?Ѹ?DATA@r*p@@@,F@G'&F G('F G)(F G*) F G+*F G,+ F G-,F  G.-FG/. FG0/FG10FG21FG32F@G43FG54@FG65F@G76@F G87FG98FG:9FG;:F@G<;F@G=<FG>=F G?>@F G@?F !@GA@@F!"GBAF"#GCBF#$GDCF$%@GED F%G&E&'@'(@() @ )* @ *+ @ +, @ ,- @ -.@./@/0@01@12@23@34@45@56@67@78@89@9:@:;@;<@<=@=>@>?@?@  @A! !AB" "BC# #CD$ $DE% %E&@KHOLHINOIJMNJKLMSRRQQPPSRSLM@ QRMN PQNO@SPOL MEԝ2\rMESphereL+@Dr*P(,?5?5?DATA@lrDATAHr/*,`"~45R?T衾\Hw衾!a3衾Hy?衾lR?T>衾\JCH>y>`#>9RT>b=9RT>>bJC=9H>w?>`#l>9!?aᎳ>{r=9,`2"~5?>_p6sB뽁!5`V>>^r[V!t>_> p6'?6 Y33VlU 3&9VB뽈>!5?&>>`r?_V!g(,?ÿ_>Xy'(,?Ŀ_?ys>rf 3;Ks853Ծr>3Ŵs(,ÿ_X3Es(,Ŀ_>?2E'Ծr?f Ŵg825?>r?>;Kg&>XJCaV>`r_V>[tJC6 Y3V>JC`V>^r?[V>[ތgJC&>>9V>X?JCU> ?JClB=!?l_ ?sl_>?ɍ'lB=>!??lDATAD*P    @ @@  @! "@# $@ %&!&'"'(#()$)% )$ %) $%@(# )( #) '"@ ('"(@&!  '&!' % @ &% &@ $@ $   # # @"@"@ ! ! @  @    @@  @@   @ @@ @ @  @ @    MA̞! rMARedrial?????????L??2 ????MA r!r̞MARed.001?????????L???# ???=Tr?DATAPTrr????M&??????MAr!$r rMAYellowl.001??????????L??2 ????MA$r!lrrMARoyalBlue>?????????L??2 ????MAlr!r$rMALightGreen`?@>????????L??2 ????MAr!lrMAMaterial?????????L??2  ????TErTEBlend>@????????rDATAr???0>???????|?????????????????????????????????????????????????????????CAlr4rCACamera=B?A B?CAl4rrrCACamera.0012=B? A B?CAlr4rCACamera.0022=B? A4B?LArlrLALamp?!N???>A4B>??? B4B?@@LAlrTrrLALamp.001??ge?>A4B>??? B4B?@LATrlrLALamp.002????A4B>??? B4B?@@IPP A+:FRs B$B'AQ6V6QAbt=AQ:R:Q Aah AQ?N?Q0Ag0AQDIDQ@Aѷs@AQHEHQPAPAQM@MQ`AԿ`AQQ<QQpApAQV7VQA%AQ[4[QA AQ_1_QA-AQd.dQA_N8AQi,iQA@AQm*mQAKGAQr)rQA*dLAQw(wQAPAQ{'{QATAQ&QA7XAQ%QA[AQ%QA^AQ$QA_bAQ#QAeAQ#QAiAQ"QAۭmAQ!QBqBQ QBuBQQByBQQ Bu} BQQBtDBQQB<BQQB~BQQB9ZzBQQ BUr BQ Q$BNg$BQ"Q(BiY(BQ%Q,BG,BQ)Q0By10BQ-Q4B@4BQ2Q8B8BQ7QXBQ U Q\B?\BQXQ`B,?`BQZQdB%|S?dBQ\QhBv?hBQ]QlB?lBQ"_"QpB ?pBQ'a'QtBuڪ?tBQ,b,QxB?xBQ0d0Q|B?|BQ5f5QBر?BQ9g9QB?BQ>i>QBI@BQCkCQB @BQGmGQB@BQLpLQB#@BQQrQQB84.@BQUtUQB49@BQZvZQBC@BQ_x_QBM@BQczcQBV@BQh|hQB^@BQm~mQBe@BQqqQBBbk@BQvvQBio@BQzzQB ms@BQQByv@BQQBSx@BQQBuy@BQQBz@BQQBv{@BQQB-|@BQQBB|@BQQB<}@BQQB}@BQQB,}@BQQBRD~@BQQB~~@BQQB~@BQQB$~@BQQB@BQQB@@BQQBb@BQQB@BQQB@BQQBP@BQQB@BQQDATApr%d?q@?QQ@Cir@@QQ@@;s@@@QQ@ɟu@@Q##Q@Uw@@Q((Q@Rz@@Q,,Q@|@@Q11QA~@AQ66QAo@AQ::Q A&@ AQ??Q0A}@0AQDDQ@Ay@@AQHHQPAbs@PAQMMQ`ABl@`AQQQQpAc@pAQVVQA-X@AQ[}[QAsQN@AQ_{_QA~C@AQdxdQA\9@AQiviQA1@AQmumQA)@AQrsrQA#@AQwrwQA4@AQ{q{QAy@AQpQA@AQnQAu @AQmQA@AQlQAvC@AQkQAP(?AQiQA%?AQhQA?AQfQB!?BQcQB?BQaQBbt?BQ]Q B]x*? BQZQB>BQUQB@BQPQBCBQKQBziBQEQ B BQ?Q$B/$BQ9Q(B^,(BQ4Q,B!),BQ/Q0B5@0BQ*Q4BR4BQ'Q8Ba8BQ$Q#>QB-aBQC$CQB2F[BQG%GQBdTBQL&LQB@pLBQQ(QQBpVCBQU*UQB9BQZ,ZQBe-BQ_._QB2!BQc1cQBBQh3hQBzBQm6mQBBQq9qQBRٿBQv;vQBBQz=zQBQBQ@QBBQBQBg!BQCQBWzBQDQBQdBQEQB4QBQFQB@BQGQB1BQHQB $BQIQBBQIQB BQJQB;BQJQB*BQKQBS޾BQKQB̾BQLQBͻBQLQBBBQMQBPBQMQBCBQMQB]V}BQNQBAfBQNQBcdWBQNQDATAps%d?S?Q Q@@Q Q@@q@@Q Q@D@Q #Q@@Q (Q@@Q ,Q@q[@Q 1QAAQ 6QA U AQ :Q A AQ ?Q0AE0AQ DQ@A['@AQ HQPAb41PAQ MQ`AR:`AQ QQpA\BpAQ VQAJAQ [QA RAQ _QALXAQ dQA3]AQ iQA!bAQ mQAeAQ rQAhAQ wQAR1kAQ {QAGmAQ QAoAQ QAOrAQ QAXtAQ QANvAQ QASmyAQ QAk|AQ QAAQ QBBQ QB.BQ QBBQ Q B BQ QBՌBQ QB,ABQ QBΌABQ QB-ABQ Q ByA BQ Q$B {A$BQ Q(B*pA(BQ Q,BeA,BQ Q0BRZA0BQ Q4BOA4BQ Q8B?DA8BQ QQBE@BQ CQB⪭@BQ GQBߣ@BQ LQBz@BQQQQBՎ@BQUUQBҽ@BQZZQBp@BQ__QBe*Z@BQc}cQBC@BQhyhQB.@BQmtmQBR@BQqpqQB@BQvmvQB6n?BQzizQBg?BQfQBT?BQdQB?BQbQB) ?BQ`QBO?BQ_QB|?BQ^QBPg?BQ]QBzU?BQ\QBD?BQ[QBY6?BQZQBmy(?BQYQB?BQYQB)?BQXQB ?BQXQB]>BQWQB'W>BQWQB~>BQVQB!e>BQVQB`>BQUQBR>BQUQB>BQTQBr>BQTQIPP<-s\/s$rIPObIpo-s.s|€C:AOBDATAP-s)L.s?Ba@OB@DATAPL.s).s-s ?B?C-AOBp?DATAP.s)L.s\ ?BOBDATA%_ ?IP%AFFFƪA;A-/BiB2(Bn4@iBƁ@8DVXkfLBa@Ba@)Ba@xxxDATA %0!???%A?LLLofAD@A@B-B:@ZcpjBC-ABABf A8VlaBp ?Bp ? Bp ?PPPDATA\ %,!?`%A???;AA -B???'jBB B9?V?k?NBB#B???IPP\/s<-sIPTrack.006/s0sB@OBDATAP/s)l0s|1s?B`S@e~AOBdn ADATAPl0s)0s/s$Is?B^/"@OBd^DATAP0s)l0s`s?BmZAOB d.-ADATAp|1s%d?dA?Q Q@dA@Q Q@@0AeA@@Q Q@fA@Q #Q@gA@Q (Q@JWhA@Q ,Q@iA@Q 1QAkAAQ 6QAanmAAQ :Q ApoA AQ ?Q0AqA0AQ DQ@AӤsA@AQ HQPAwuAPAQ MQ`AwA`AQ QQpA̍yApAQ VQA1{AAQ [QA|AAQ _QA}AAQ dQAA~AAQ iQAe~AAQ mQAy}AAQ rQA|AAQ wQAzAAQ {QADxAAQ QAuAAQ QAEqAAQ QA=lAAQ QA9gAAQ QANObAAQ QAA[AAQ QATAAQ QB0LABQ QBeBABQ QB7ABQ Q B+A BQ QB(ABQ QB3ABQ QB;2@BQ QB@BQ Q B3@ BQ Q$B @$BQ Q(B.@(BQ Q,B@,BQQ0B/@0BQQ4BX@4BQQ8BxX@8BQQ@f@BQ99QBRCo@BQ>>QBy@BQCCQB@BQGGQBډ@BQLLQB`@BQQQQB3@BQUUQBbK@BQ ZQB4w@BQ _QBOܴ@BQ cQBGN@BQ hQB+@BQ mQBe@BQ qQB@BQ vQB@BQ zQBc@BQ QB@BQ QB\@BQ QBP@BQ QBn(@BQ QB@BQ QB^ABQ QBqPABQ QBABQ QB/ABQ QB'ABQ QBABQ QBZABQ QB7ABQ QByM ABQ QB8 ABQ QBv ABQ QB ABQ QB ABQ QB ABQ QB\d ABQ QBn ABQ QDATAp$Is%d?k~@?QQ@SS~@@QQ@@<~@@@QQ@b}@@Q##Q@]}@@Q((Q@π~@@Q,,Q@@@Q11QA8@AQ66QA>@AQ::Q A'@ AQ??Q0A@0AQDDQ@A܎@@AQHHQPA@PAQMMQ`A/@`AQQQQpA@pAQ VQA@AQ [QAJz@AQ _QAz޵@AQ dQA@AQ iQA}@AQ mQAx@AQ rQA|@AQ wQA@AQ {QA@AQ QAՈ@AQ QAb@AQ QA@AQ QA|@AQ QAٝ@AQ QAc@AQ QA1@AQ QB4@BQ QB·@BQ QB/"@BQ Q B.@ BQ QB@@BQ QB@BQ QB@BQ QBX@BQ Q BӾ@ BQ Q$BW@$BQ Q(BA@(BQ Q,B @,BQQ0B@@0BQQ4Bt@4BQQ8BG@8BQQ>QB@BQCCQB˅@BQGGQBŭ@BQLLQBk@BQQQQBU@BQUUQB#@BQZZQB~@BQ__QB6|@BQccQBٞ{@BQhhQB{@BQmmQBAz@BQqqQBq{@BQvvQBT%|@BQzzQBP|@BQQBJ}@BQQB*}@BQQBz{@BQQB@x@BQQB s@BQQB9&m@BQQBfd@BQQBBQUQBz=BQRQBBQOQB^BQMQDATAp`s%d?\F@?Q Q@l@@Q Q@@@@@Q Q@AQVQA}=AQRQA(AQMQAx9AQHQAvAQBQAڿAQ;QAAQ3QA =AQ+QBR'nBQ!QB݀BQQB]BQ Q Bs BQ QBv>BQ QBVBQ QB(BQ QB0=BQ Q BP BQ Q$Bb$BQ Q(Br(BQ Q,BǢ,BQ Q0BP0BQ Q4Bm4BQ Q8BZA8BQ QQBy!,ABQ CQB*ABQ GQBt)ABQ LQB!(ABQ QQBg&ABQ UQBS%ABQ ZQB#ABQ _QB"ABQ cQB>6 ABQ hQBcABQ mQBABQ qQBABQ vQBABQ zQB{KABQ QB]HABQ QBABQ QBABQ QB,ABQ QBnABQ QBUABQ QBQABQ QB[ABQ QBnABQ QBABQ QBߚABQ QBABQ QBABQ QB%ABQ QB<ABQ QBvABQ QB?ABQ QBABQ QB$ABQ QBdABQ QB.-ABQ QTXd\_usTXREAD ME FIRSTex_u_u_u++WDATAlsFREEDATAl7ětFREEDATA7_uls.FREEDATA_u7Lnu+pty"DATA sTo be used in Blender 2.25 onlyDATAětDATA0sthe settings in Track_Write is the one used to"DATA,Lnu"parent" the turret to the moving platform.TXds4t\_uTXTrack_Write.py|s8Ԧs$sL:L:4sDATA(|sC:\theeth\Blender\Python\Track_Axis.py_DATAԦs|kus(rackDATA|kukuԦs,nnonDATAkus|kuttFREEDATAsTluku|9001DATATlusssrackDATAs|)TluĬtFREEDATA|)L:s|6tYFREEDATAL:s|)sFREEDATAssL:Ts BDATAsDATALssss(DATAsܭsLsLs DATAܭs$sssFREEDATA$slsܭss)DATAlss$sDsDATAsslssDATAsDsssbDATADsss s DD NDATAsԯsDsdsJBDATAԯs$sss#DATA$slsԯsDs'DATAlss$ss"DATAsslssZDATAsDssLsBDATADssssDATAsԱsDss@DATAԱsssTs%DATAsdsԱss&DATAdssssDATAssds\sDATAsu8DATADtttl>u3 NMeDATAttDt>uDATAttt?uDATAtdttd?u to DATAdttt?u&eLisDATAttdt@u 0 ==DATAt DATA4t|ttXu1rPosDATA|tt4t4Yu DATAt u|t|Yuue",DATA uTutYu/ DATATuu u,Zu/FREEDATAuuTuZuFREEDATAuuZu#_ERRDATA,u"""DATAdu VECTOR FUNCTIONS VDATAu"""DATAufrom math import *EDATA,usDATA,du# Return a new vector initialised to zeroDATAudef ZeroVector():EEDATAu return [0.0, 0.0, 0.0]DATA\uDATALu#resize a until it is the same lenght as b, while retaining the orientationDATAudef resize(a,b):REEDATA(du return vecmul( vnorm(a), veclen(b) )DATAuDATAudef vecadd(a,b):REEDATA,<u return [a[0]+b[0], a[1]+b[1], a[2]+b[2]]DATAuDATAudef vecsub(a,b):REEDATA,$u return [a[0]-b[0], a[1]-b[1], a[2]-b[2]]DATAu DATAudef vecmul(a, s):EEDATA$ u return [a[0]*s, a[1]*s, a[2]*s]jpgDATAduDATAudef vecdiv(a, s):EEDATAu if s!=0.0: s = 1.0/s7DATA,u return vecmul(a, s)67DATAtuDATAXu# transform a Cartesian vector into a Geographic oriented vector ANGLES ARE IN DEGREESDATA4 udef makeGeo(v):DATA| u tv = [0.0, 0.0, 0.0]DATA u tv[0] = veclen(v)EDATA( u tv[1] = atan2(v[0], v[1]) * 180 / piDATA(d u tv[2] = asin(vecnorm(v)[2]) * 180 / piDATA u return tvlDATA uDATAP< u# transfrom a geographic vector into a Cartesian vector ANGLES ARE IN DEGREESITDATA udef makeCart(v):REEDATA u v[1] = v[1] / 180 * piDATAT u v[2] = v[2] / 180 * piDATA u tv = [0.0, 0.0, 0.0]DATA( u tv[0] = v[0] * cos(v[2]) * cos(v[1])DATA(< u tv[1] = v[0] * cos(v[2]) * sin(v[1])DATA u tv[2] = v[0] * sin(v[2])DATA u return tvaDATA4uDATADlu# return a copy of a vector, this is to prevent cross referencingEEDATA@u# like vector1 = vector2 which both point to the same objectderDATA\udef vcopy(v):peDATAu return [v[0], v[1], v[2]]DATAu DATA 4u# normalize, but don't modifyEEDATAudef vecnorm(v):DATAu # normalize vectorDATAu d = vdot(v, v)DATAdu if d>0.0: d = 1./sqrt(d)DATAu return vecmul(v, d)DATAu DATA <u# normalizeDATAudef vnorm(v):t DATAu # normalize vectorDATAu d = vdot(v, v)DATA \u if d>0.0:lDATA,u d = 1./sqrt(d); v[0]*=d; v[1]*=d; v[2]*=dDATA u return vAlDATATuDATA u# normalize and return length()DATAudef vnormlen(v):REEDATA,u # normalize vectorDATAtu d = vdot(v, v)DATA u if d>0.0: DATAu d = sqrt(d)AlDATA,Lu dv = 1./d; v[0]*=dv; v[1]*=dv; v[2]*=dvDATA u return dDATAuDATA(4u# normalize and return length squaredDATAudef vnormlensq(v):EDATAu # normalize vectorDATAu d = vdot(v, v)DATA du if d>0.0:lDATA0u dv = 1./sqrt(d); v[0]*=dv; v[1]*=dv; v[2]*=dvDATA u return d==DATA\u DATAu# dotproduct mDATAudef vdot(v1, v2):EEDATA$u # dot productoDATA0lu return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]DATAuDATA u# vector lengthDATATudef veclen(v):DATAu return sqrt(vdot(v, v))DATAuDATA,u# crossproductDATAtudef crossp(v1, v2):DATAu r = ZeroVector()EEDATA$u r[0] = v1[1]*v2[2] - v1[2]*v2[1]EEDATA$\u r[1] = v1[2]*v2[0] - v1[0]*v2[2]EEDATA$u r[2] = v1[0]*v2[1] - v1[1]*v2[0]EEDATA u return rDATATuDATAu# projection of v2 on v1DATAudef proj(v2, v1):EEDATA(,u # basic equation is (v1 v2 / v1 v1) v1DATA0u return vecmul(v1, vdot(v1, v2) / vdot(v1, v1))DATAuDATA$ u#######################DATAl uDATA u# calculate reflected directionDATA udef reflect(dirc, norm):DATA(T!u ndir = ZeroVector() # new directionDATA !u t = -2.0 * vdot(dirc, norm)tgaDATA$"u ndir[0] = t * norm[0] + dirc[0]REEDATA$\"u ndir[1] = t * norm[1] + dirc[1]DATA$"u ndir[2] = t * norm[2] + dirc[2]dx DATA #u return ndirDATAT#uDATA#u#######################DATA#uDATA4 $u# Curve calculation (cubic hermite interpolation)EEDATA`t$u# From p1 to p2, p0 & p3 are the points before and after these points to calculate the gradientDATA %u# t is the time valueDATA T%udef HCurve(p0, p1, p2, p3, t): DATA %u t2 = t * tDATA%u t3 = t2 * tDATA$<&u kp0 = (2.0 * t2 - t3 - t) * 0.5REEDATA$&u kp1 = 1.5 * t3 - 2.5 * t2 + 1.0REEDATA(&u kp2 = (4.0 * t2 - 3.0 * t3 + t) * 0.5DATAD'u kp3 = (t3 - t2) * 0.5[DATA'u r = ZeroVector()EEDATA@'u r[0] = p0[0] * kp0 + p1[0] * kp1 + p2[0] * kp2 + p3[0] * kp3tgDATA@L(u r[1] = p0[1] * kp0 + p1[1] * kp1 + p2[1] * kp2 + p3[1] * kp3FrDATA@(u r[2] = p0[2] * kp0 + p1[2] * kp1 + p2[2] * kp2 + p3[2] * kp3tsDATA <)u return rTADATA)uDATAD)u# alternate method, cubic interpolation, same arguments as HCurve:DATA 4*udef CCurve(p0, p1, p2, p3, t):1DATA *u t2 = t * tDATA*u t3 = t2 * tREEDATA+u d01 = vecsub(p0, p1) DATA$d+u a = vecsub(vecsub(p3, p2), d01)REEDATA+u b = vecsub(d01, a)DATA,u c = vecsub(p2, p0)DATAL,u r = ZeroVector()EEDATA,,u r[0] = a[0]*t3 + b[0]*t2 + c[0]*t + p1[0]DATA,,u r[1] = a[1]*t3 + b[1]*t2 + c[1]*t + p1[1]DATA,d-u r[2] = a[2]*t3 + b[2]*t2 + c[2]*t + p1[2]DATA -u return rDATA.uDATAL.u#########################DATA.u# MATRIX FUNCTIONSEDATA.u#########################DATAD/uDATAH|/u#returns a list of list of float from a Matrix object (unpickleable)DATA/udef convertFL(mtx):DATA <0u fmtx = []DATA0u for row in mtx: DATA 0u fmtx.append([x for x in row])DATA$1u return fmtxPNGDATAl1uDATA 1u# returns 3x3 identity matrixinDATA1udef MtxIdentity3x3():DATAD2u return [[ 1.0, 0.0, 0.0],DATA2u [ 0.0, 1.0, 0.0],DATA2u [ 0.0, 0.0, 1.0]]DATA,3uDATA d3u# returns 4x4 identity matrixyeDATA3udef MtxIdentity4x4():DATA 4u return [[ 1.0, 0.0, 0.0, 0.0],DATA\4u [ 0.0, 1.0, 0.0, 0.0],DATA4u [ 0.0, 0.0, 1.0, 0.0],DATA 5u [ 0.0, 0.0, 0.0, 1.0]]DATAd5uDATA@5u# multiplies two matrices, d determines 3x3(d=3) or 4x4(d=4)DATA6udef mulmat(m1, m2, d):DATA0\6u r = MtxIdentity4x4() #just for initialisationEDATA6u for i in range(d):DATA 7u for j in range(d):DATAT7u rij = 0.0DATA47u for k in range(d): rij += m1[i][k] * m2[k][j]REEDATA8u r[i][j] = rijen(DATA L8u return rDATA8uDATA88u# multiply 3X3 matrix (rotation, scaling) with vector48DATA49udef mulmatvec3x3(m, v):DATA|9u r = ZeroVector()NeDATA49u r[0] = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0]EDATA4,:u r[1] = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1]EDATA4:u r[2] = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2]EDATA :u return rDATAD;u DATAD|;u# multiply 4X3 matrix (rotation, scaling & translation) with vectorDATA;udef mulmatvec4x3(m, v):DATA<uDATA4l>u# transpose 3X3 matrix, the inverse rotation matrixDATA>udef transp3x3(m):DATA?u r = MtxIdentity3x3()EEDATAd?u for i in range(3):DATA(?u for j in range(3): r[i][j] = m[j][i]DATA @u return rprDATAL@uDATA,@u# creates rotation matrix around X, Y or ZDATA0@u# axis must be 'X', 'Y' or anything else=='Z'EEDATALTAu# angle in radians, all made equivalent to blenders matrices from RotXYZDATA Audef makeRotMtx(axis, angle):22DATA4Bu if axis=='X': DATA$|Bu rs, rc = sin(angle), cos(angle)EEDATABu mtx = [ [1.0, 0.0, 0.0],DATA,Cu [0.0, rc, rs],DATAtCu [0.0, -rs, rc] ]DATACu elif axis=='Y':DATA$Du rs, rc = sin(angle), cos(angle)EEDATA\Du mtx = [ [ rc, 0.0, -rs],DATADu [0.0, 1.0, 0.0],DATADu [ rs, 0.0, rc] ] pDATADEu else:DATA$|Eu rs, rc = sin(angle), cos(angle)EEDATAEu mtx = [ [ rc, rs, 0.0],DATA,Fu [-rs, rc, 0.0],BleDATAtFu [0.0, 0.0, 1.0] ]==DATA Fu return mtxDATAGuDATA$0.0: r = (acos(v[2]) / sqrt(r)) / piDATAUu u, v = v[0]*r, v[1]*rDATA0DVu theta, phi = atan2(v, u), pi*sqrt(u*u + v*v)EEDATA4Vu mtx = makeRotMtx3D(phi+0.5*pi, 0.5*pi-theta, 0.0)EDATA Wu return mtxDATA\WuDATA,Wu# only extract rotation component in DegreeDATAWudef mat2euler_rot(mat): DATA@TXu mtx = [list(mat[0][:3]), list(mat[1][:3]), list(mat[2][:3])] gDATA4Xu angle_y = -asin(max(min(mtx[0][2], 1.0), -1.0)) EEDATA4Yu C = cos(angle_y) EDATA|Yu if C!=0.0: C = 1.0/C (DATA0Yu angle_x = atan2(mtx[1][2] * C, mtx[2][2] * C) DATA0,Zu angle_z = atan2(mtx[0][1] * C, mtx[0][0] * C) DATAZuPDATA$Zu return [angle_x, angle_y, angle_z]TXd,~u4tTXRender.py~uuuuuLuDATA~uC:\theeth\Blender\Render.pyDATAuduu-FREEDATAduuuLuFREEDATAuuduuFREEDATAu2 "?@ABCDEFGH%I#$J%K%LMNOPQRSTUVW!XYZ[&\]^_'`(abcdefghijklmnopq) rstuv wxyz{ |}*jkl~+*, '`##ABMN(#/p%#)+,-ijklmAB&%I.%/:ijkl\]&%/I01!X222/34 %/hg5 6777   6 5 8&4  ''%9/ gh/4 !"0#:::6 5 $%&'()*  +#;,-./01<,-./01= 23456>78?@>9:[A;<B~jklC=D"4 > %/ ? @ AAB@CBDCEDFEG H(IhgJKL[MNOPF QRST6U%GGGV 'OWXYZ[ \']'^%94H_I` Ja b > c d/efgghijklmnopqrstuvwxyz{|}~I     H4  K+i%&ILMMM'`N  O7N{=PQ'KQ# MRS L  HP OjIT #(a =  U&VVW'TU E!"#f$%&'()X *+,-./01234VVVWYVVWZVVW5X6 7 8%&9:;<=>[[VVW?@X6A=:B CDEFGHIJKsLZM\ VVWX6A ]VVW^NOPQRSTUV_WXYZ [\` VVWX6 ]:^ CaVVWX6#_ :`a >bVV>WX6cVVW bcd2=efghij k l m ndQVVWopqrs$%tuvwxyz{|}~eeff% [ gh   Qiiii jjjiiWWWiiiih%  k l%KlllMm mm/ln  rsv} wyz { |o ooo /ml%Q$Jnoo o  p   qqqrrr/sss' !"#$t%uuu&'()*v '+WXYZ,-./w ww/0/12xW34 56789:;<=%']XYZ>vU?@y yyABC Dz zzVEFG H I{VJK|}V/L~MNOPQVRSVTUVVWXVYVWZ[\']^_E`abV c'+def bghbEiV cjklmn'+ HoVpqrs[MN tuvwxtyz n'+D{V|}Q'VR'+ ~eh V'+&/X: VRZ'^_ gEV '+S |!X! %z2VVWX6ut >VWXYZ']'^%efgghijklnopqz{'+ R  ????] V8eggijk    gikV[I % bV[H  VVWX6H_:[>JJJ% %E[n'['[M'['['Ho'   [%HopENDB