dillon@CORY.BERKELEY.EDU (Matt Dillon) (05/10/87)
Here is a little program I wrote to fool around with Bezier curves. It allows you to fool around with a 4 point bezier curve, using the mouse to move the points, and using a prop gadget to change the granularity of the curve generation loop. A granualarity of about 40 is almost indestinguishable from a granularity of 1, and draws the curve 40 times faster (as in, **fast**) Have Fun! -Matt #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create: # bezier.c # bezier.uue # This archive created: Sun May 10 13:32:34 1987 export PATH; PATH=/bin:/usr/bin:$PATH echo shar: "extracting 'bezier.c'" '(5624 characters)' if test -f 'bezier.c' then echo shar: "will not over-write existing file 'bezier.c'" else cat << \!Funky!Stuff! > 'bezier.c' /* * BEZIER.C * * Matthew Dillon. * Public Domain (no Copyrights whatsoever) * * -Assumes AZTEC compilation, +L (32 bit ints), with all AMIGA symbols * precompiled. Additionally expects certain typedefs and routines * found in MY.LIB, as well as some MY.LIB #include files. * * An experienced programmer can remove the MY.LIB dependancies * (openlibs() call), and figure out what typedefs have been assumed if * he wishes to compile the program. You can also simply extract the * Bezier functions for your own use. */ #include <typedefs.h> #include <xmisc.h> #define SHIFTS 9 #define ONE (1<<SHIFTS) typedef struct PropInfo XPI; typedef struct Image IM; extern IMESS *GetMsg(); #define MYGADGETS (WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE) NW Nw = { 64, 64, 320, 100, 0, 1, NEWSIZE|MOUSEBUTTONS|MOUSEMOVE|CLOSEWINDOW|GADGETDOWN|GADGETUP, MYGADGETS|REPORTMOUSE|ACTIVATE|NOCAREREFRESH, 0, 0, (UBYTE *)"Bezier", NULL, NULL, 32, 64, -1, -1, WBENCHSCREEN }; WIN *Win; RP *Rp; short Ux, Uy, Lx, Ly; short Step = 128; main(ac, av) char *av[]; { register IMESS *mess; short notdone = 1; short pt = -1; short ptarray[4][2]; short gy, gg = 0; XPI *po; init_gadgets(&Nw, &po); exiterr(!openlibs(INTUITION_LIB|GRAPHICS_LIB), "unable to open libs"); exiterr(!(Win = OpenWindow(&Nw)), "unable to open window"); Rp = Win->RPort; SetAPen(Rp, 1); setpoint(ptarray, 0, 32, 32); setpoint(ptarray, 1, 40, 40); setpoint(ptarray, 2, 50, 50); setpoint(ptarray, 3, 60, 60); setbounds(ptarray); while (notdone) { short mx, my, mm = 0; WaitPort(Win->UserPort); while (mess = GetMsg(Win->UserPort)) { switch(mess->Class) { case CLOSEWINDOW: notdone = 0; break; case NEWSIZE: setbounds(ptarray); break; case GADGETUP: case GADGETDOWN: { gg = mess->Class; gy = po->VertPot / 256; } break; case MOUSEBUTTONS: switch(mess->Code) { case SELECTDOWN: pt = getpoint(ptarray, mess->MouseX, mess->MouseY); break; case SELECTUP: pt = -1; break; } break; case MOUSEMOVE: if (gg == GADGETDOWN) { gy = po->VertPot / 256; break; } mm = 1; mx = mess->MouseX; my = mess->MouseY; break; default: break; } ReplyMsg(mess); } if (mm && pt >= 0) { movepoint(ptarray, pt, mx, my); drawcurve(ptarray); } if (gg) { char buf[32]; if (gg == GADGETUP) gg = 0; if (gy + 1 >= 0) Step = gy + 1; sprintf(buf, "gran: %4ld/%ld", Step, ONE); drawcurve(ptarray); Move(Rp, Ux + 1, Uy + 16); Text(Rp, buf, strlen(buf)); } } exiterr(1, NULL); } exiterr(n, str) char *str; { if (n) { if (str) puts(str); if (Win) CloseWindow(Win); closelibs(-1); exit(1); } } setbounds(a) register long *a; { Ux = Win->BorderLeft; Uy = Win->BorderTop; Lx = Win->Width - Win->BorderRight; Ly = Win->Height- Win->BorderBottom; drawcurve(a); } setpoint(a, pt, x, y) register short a[4][2]; { a[pt][0] = x; a[pt][1] = y; drawpoints(a, pt, pt + 1); } getpoint(a, x, y) register short a[4][2]; { register short i, bi; register long r, br; for (i = bi = 0, br = 0x7FFFFFFF; i < 4; ++i) { r = (x-a[i][0])*(x-a[i][0]) + (y-a[i][1])*(y-a[i][1]); if (r < br) { bi = i; br = r; } } return(bi); } movepoint(a, pt, x, y) register short a[4][2]; { SetAPen(Rp, 0); drawpoints(a, pt, pt + 1); SetAPen(Rp, 1); setpoint(a, pt, x, y); } #define S10(x) ((x) >> SHIFTS) #define S20(x) ((x) >> (2*SHIFTS)) /* * So I can use integer arithmatic, I am defining 512 as 1 (as far * as the mathematics go), which means that I must divide any power * multiplication by 512^(n-1). E.G. .5^2 = .25 ... to make 256^2 * equal 128, I must divide by 512^1 */ drawcurve(a) register short a[4][2]; { long m1[4]; /* t matrix */ long mr[4]; /* partial result matrix */ long corr[2]; register short t, i; char lastpt = 0; SetAPen(Rp, 0); RectFill(Rp, Ux, Uy, Lx - 1, Ly - 1); SetAPen(Rp, 1); drawpoints(a, 0, 4); Move(Rp, a[0][0], a[0][1]); for (t = 0; t <= ONE; t += Step) { /* t = 0 to 1 */ oncemore: m1[3] = ONE; m1[2] = t; m1[1] = t * t; m1[0] = m1[1] * t; mr[0] = -S20(m1[0] ) + S10(3*m1[1]) - 3*m1[2] + m1[3]; mr[1] = S20(3*m1[0]) - S10(6*m1[1]) + 3*m1[2]; mr[2] = -S20(3*m1[0]) + S10(3*m1[1]); mr[3] = S20(m1[0] ); for (i = 0; i < 2; ++i) { corr[i] = (mr[0] * a[0][i] + mr[1] * a[1][i] + mr[2] * a[2][i] + mr[3] * a[3][i]) >> SHIFTS; } Draw(Rp, corr[0], corr[1]); } if (lastpt == 0 && t - Step < ONE) { lastpt = 1; t = ONE; goto oncemore; } } drawpoints(a, is, ie) register short a[4][2]; { register short i; for (i = is; i < ie; ++i) { Move(Rp, a[i][0] - 2, a[i][1]); Draw(Rp, a[i][0] + 2, a[i][1]); Move(Rp, a[i][0], a[i][1] - 2); Draw(Rp, a[i][0], a[i][1] + 2); } } /* * GADGET ROUTINES! */ #define NG(nn) &Gadgets[nn+1] #define G_YGLOB 1 #define G_XGLOB 2 XPI Props[] = { { AUTOKNOB|FREEVERT , 0, 0, 0x1FFF, 0x1FFF } }; IM Images[] = { { 0,0,2,1,1, NULL, 1, 0, NULL }, }; GADGET Gadgets[] = { { NULL, -15, 11, 15, -19, GADGIMAGE|GADGHCOMP|GRELRIGHT|GRELHEIGHT, GADGIMMEDIATE|RIGHTBORDER|RELVERIFY,PROPGADGET, (APTR)&Images[0],NULL,NULL,0,(APTR)&Props[0], G_YGLOB, 0 }, }; GADGET *Gc; long GUx, GUy; init_gadgets(nw, ppo) NW *nw; XPI **ppo; { nw->FirstGadget = &Gadgets[0]; *ppo = &Props[0]; } !Funky!Stuff! fi # end of overwriting check echo shar: "extracting 'bezier.uue'" '(11291 characters)' if test -f 'bezier.uue' then echo shar: "will not over-write existing file 'bezier.uue'" else cat << \!Funky!Stuff! > 'bezier.uue' begin 644 bezier M```#\P`````````#``````````(```;<````_P````$```/I```&W$[Z"89" M97II97(``$Y5_[XO"CM\``'__CM\_____$)M_^A(;?_D2&R``DZZ!]A03TAZ M`KA(>``#3KH(OEA/2H!F!'`!8`)P`$C`+P!.N@+64$](>@*J2&R``DZZ&PA8 M3RE`@ZIF!'`!8`)P`$C`+P!.N@*R4$\@;(.J*6@`,H.N2'@``2\L@ZY.NAI^ M4$](>``@2'@`($*G2&W_[$ZZ`S1/[P`02'@`*$AX`"A(>``!2&W_[$ZZ`QQ/ M[P`02'@`,DAX`#)(>``"2&W_[$ZZ`P1/[P`02'@`/$AX`#Q(>``#2&W_[$ZZ M`NQ/[P`02&W_[$ZZ`G183TIM__YG``'>0FW_WB!L@ZHO*`!63KH9MEA/(&R# MJB\H`%9.NAEF6$\D0$J`9P``Z"`J`!1@``"F0FW__F```,Q(;?_L3KH"*EA/ M8```OCMJ`!;_Z"!M_^1P`#`H``3@B#M`_^I@``"D<``P*@`88"HP*@`B2,`O M`#(J`"!(P2\!2&W_[$ZZ`IA/[P`,.T#__&`8.WS____\8!"0O````&AGSI"\ M````@&?H8%X,;0`@_^AF$B!M_^1P`#`H``3@B#M`_^I@1#M\``'_WCMJ`"#_ MXCMJ`"+_X&`P8"Y5@&<`_V!=@&>"48!GPI"\````$&<`_UR0O````"!G`/]2 MD+P```'`9P#_,F#0+PI.NAB@6$]@`/\&2FW_WF<T2FW__&TN,"W_X$C`+P`R M+?_B2,$O`30M__Q(PB\"2&W_[$ZZ`G)/[P`02&W_[$ZZ`KQ83TIM_^AG``"* M#&T`0/_H9@1";?_H,"W_ZDC`4H!*@&T,,"W_ZDC`4H`Y0(`R2'@"`#`L@#)( MP"\`2'H`E$AM_[Y.N@O`3^\`$$AM_^Q.N@)J6$\P+(.D2,`@0$AH`!`R+(.B M2,%2@2\!+RR#KDZZ&#!/[P`,2&W_ODZZ$&983R\`2&W_OB\L@ZY.NAA(3^\` M#&``_AY"ITAX``%A0E!/)%].74YU=6YA8FQE('1O(&]P96X@;&EB<P!U;F%B M;&4@=&\@;W!E;B!W:6YD;W<`9W)A;CH@)31L9"\E;&0``$Y5``!*K0`(9S1* MK0`,9PHO+0`,3KH*'%A/2JR#JF<*+RR#JDZZ&`Y83TAX__].N@3.6$](>``! M3KH4Y%A/3EU.=4Y5```O"B1M``@@;(.J$"@`-DB`.4"#HB!L@ZH0*``W2(`Y M0(.D(&R#JC`H``A(P")L@ZH2*0`X2(%(P9"!.4"#IB!L@ZHP*``*2,`B;(.J M$BD`.4B!2,&0@3E`@Z@O"DZZ`3983R1?3EU.=4Y5```O"B1M``@@+0`,Y8`U MK0`2"``@+0`,Y8`@0-'*,6T`%@`"("T`#%*`+P`O+0`,+PI.N@,:3^\`#"1? M3EU.=4Y5``!(YP\@)&T`"'H`.`4N/'____]@:B`M``PR!$C!Y8$T,A@`2,*0 M@B(M``PV!$C#Y8,T,C@`2,*2@DZZ%4PO`"`M`!`V!$C#Y8,@0]'*-B@``DC# MD(,B+0`0-@1(P^6#(D/3RC8I``)(PY*#3KH5&BQ?+`[<@+R';`0Z!"X&4D2X M?``$;9`P!4C`3-\$\$Y=3G5.50``+PHD;0`(0J<O+(.N3KH63E!/("T`#%*` M+P`O+0`,+PI.N@)43^\`#$AX``$O+(.N3KH6*E!/+RT`%"\M`!`O+0`,+PI. MNO[@3^\`$"1?3EU.=4Y5_]9(YPP@)&T`"$(M_]="IR\L@ZY.NA7R4$\P+(.H M2,!3@"\`,BR#IDC!4X$O`30L@Z1(PB\"-BR#HDC#+P,O+(.N3KH5LD_O`!1( M>``!+RR#KDZZ%;103TAX``1"IR\*3KH!P$_O``PP*@`"2,`O`#(22,$O`2\L M@ZY.NA5H3^\`#'@`8``!9"M\```"`/_\,`1(P"M`__@P!,'$*T#_]#`$2,`B M+?_T3KH3]"M`__!R`R`M__1.NA/F=`GDH"8M__!T$N2C1(/0@W(#+P`@+?_X M3KH3RB!?D<#1[?_\*TC_X'(#("W_\$ZZ$[1T$N2@<@8O`"`M__1.NA.D=@GF MH"!?D<!R`R`M__A.NA.2T<`K2/_D<@,@+?_P3KH3@G02Y*!$@'(#+P`@+?_T M3KH3<'8)YJ`@7]'`*TC_Z"`M__!R$N*@*T#_['H`8'XP!4C`Y8!![?_8,@5( MP>.!+P`P,A@`2,`B+?_@3KH3-#0%2,+C@B)"T\HO`#`I``1(P"(M_^1.NA,: M)!_4@#8%2,/C@RQ#W<HP+@`(2,`B+?_H3KH2_M2`-@5(P^.#+$/=RC`N``Q( MP"(M_^Q.NA+DU(`F'W()XJ(A@C@`4D6Z?``";0#_?"\M_]PO+?_8+RR#KDZZ M$_)/[P`,V&R`,KA\`@!O`/Z82BW_UV8B,`1(P#(L@#)(P9"!L+P```(`;`X; M?``!_]<X/`(`8`#^<$S?!#!.74YU3E4``$CG""`D;0`(."T`#F```+PP!$C` MY8`@0-'*,"@``DC`+P`R!$C!Y8$T,A@`2,)5@B\"+RR#KDZZ$X9/[P`,,`1( MP.6`($#1RC`H``)(P"\`,@1(P>6!-#(8`$C"5((O`B\L@ZY.NA-&3^\`##`$ M2,#E@"!`T<HP*``"2,!5@"\`,@1(P>6!-#(8`$C"+P(O+(.N3KH3*D_O``PP M!$C`Y8`@0-'*,"@``DC`5(`O`#($2,'E@30R&`!(PB\"+RR#KDZZ$NI/[P`, M4D0P!$C`L*T`$&T`_SQ,WP003EU.=4Y5``!![(!>(FT`""-(`!)![(`T(FT` M#"*(3EU.=4Y5``!(YP@@."T`"D'Y````B"1(8"8(!```9QP@:@`$2I!G%"!J M``0O$$ZY```:/EA/(&H`!$*0XDQ0BDI$9P1*DF;23-\$$$Y=3G5G<F%P:&EC M<P!I;G1U:71I;VX`97AP86YS:6]N`&1I<VMF;VYT`'1R86YS;&%T;W(`:6-O M;@!M871H9F9P`&UA=&AT<F%N<P!M871H:65E961O=6)B87,`;6%T:&EE965S M:6YG8F%S`&QA>65R<P!C;&ES=`!P;W1G;P!T:6UE<@!X,34`>#$V``!.5?^\ M+PIP`#`M``HK0/^\0?D```"()$A@2@@M````"V<\+Q)(;?_`3KD```U&4$]( M>@!42&W_P$ZY```-'%!/(&H`!$J09A9"ITAM_\!.N0``&I!03R!J``0@@&<8 MXNT`"E"*2FT`"F<$2I)FK'`!)%].74YU+RW_O$ZY```((EA/<`!@ZBYL:6)R M87)Y``!A<$/L@V)%[(-BM<EF#C(\`"9K"'0`(L)1R?_\*4^#:BQX``0I3H-N M2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4"#<F8,+CP` M`X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y5```O"DAY M``$``#`L@U[!_``&+P!.NA`T4$\I0(-V9A1"ITAY``$``$ZZ#_A03RYL@VI. M=2!L@W9":``$(&R#=C%\``$`$")L@W8S?``!``H@;(-J("R#:I"H``10@"E` M@WH@;(-Z(+Q-04Y80J=.N@_H6$\D0$JJ`*QG,"\M``PO+0`(+PI.N@"T3^\` M#"E\`````8-^(&R#=@!H@```!"!L@W8`:(````I@1$AJ`%Q.NA`06$](:@!< M3KH/Q%A/*4"#@B!L@X)*J``D9Q`@;(."(F@`)"\13KH.\%A/+RR#@B\*3KH" MJE!/*6R#@H.&3KH.\"!L@W8@@$ZZ#Q`@;(-V(4``!F<62'@#[4AZ`"Q.N@[L M4$\@;(-V(4``#"\L@X8O+(.*3KKTX%!/0J=.N@T.6$\D7TY=3G4J`$Y5``!( MYPPP)&T`$"!M``@@*`"LY8`H`"!$("@`$.6`)D`0$TB`2,#0K0`,5(`I0(.. M0J<O+(..3KH.U%!/*4"#DF8(3-\,,$Y=3G40$TB`2,`O`"!+4H@O""\L@Y). MN@%:3^\`#$AZ`5`0$TB`2,#0K(.2+P!.N@&.4$\O+0`,+PHO+(.23KH!6D_O M``Q"K(.*)FR#DB1+$!-(@$C`*@"PO````"!G(+J\````"6<8NKP````,9Q"Z MO`````UG"+J\````"F8$4HM@S`P3`"!M``",#!,`(F8R4HL@2U*+$!!(@$C` M*@!G("!*4HH0A;J\````(F80#!,`(F8$4HM@!D(J__]@`F#28$0@2U*+$!!( M@$C`*@!G,+J\````(&<HNKP````)9R"ZO`````QG&+J\````#6<0NKP````* M9P@@2E**$(5@PB!*4HI"$$J%9@)3BU*L@XI@`/\\0A)"IR`L@XI2@.6`+P!. MN@V@4$\I0(.&9@A"K(.*8`#^QGH`)FR#DF`:(`7E@"!L@X8ABP@`+PM.N@9. M6$]2@-?`4H6ZK(.*;>`@!>6`(&R#AD*P"`!@`/Z.(`!,[P,```0@""(O``Q@ M`A#95\G__&<&4D%@`D(84<G__$YU,#Q__V`$,"\`#B!O``1*&&;\4T@B;P`( M4T`0V5?(__QG`D(0("\`!$YU(&\`!"`((F\`"!#99OQ.=4Y5```O"B1M``A* M$F<D($I2BA`02(!(P"\`3KH%QEA/L+S_____9@AP_R1?3EU.=6#82'@`"DZZ M!:I83V#L3E4``$CG#C`D;0`(0J=(>@".3KH,[%!/*4"#TF8(3-\,<$Y=3G4@ M;0`,(F@`)"\I``1.N@V$6$\H`&=22'H`;2!$+R@`-DZZ#5903R9`2H!G-$AX M`^TO"TZZ#!103RP`9R0@!N6`*@`@125H``@`I"5&`)Q(>`/M2'H`.$ZZ"_!0 M3R5``*`O!$ZZ#2)83R\L@]).N@P66$]"K(/28(!I8V]N+FQI8G)A<GD`5TE. M1$]7`"H`3E4``"\$*6T`"(-B2&T`$"\M``Q(>@`:3KH`O$_O``PH`"!L@V)" M$"`$*!].74YU3E4``"!L@V)2K(-B$"T`"Q"`2(!(P,"\````_TY=3G5.50`` M2.<(("1M`!`,K0````0`%&8((&T`""@08!1*K0`,;P@@;0`(*!!@!B!M``@H M$$*M`!1*K0`,;!)$K0`,2H1L"D2$*WP````!`!0B+0`,(`1.N@/20>R!$E.* M%+`(`"(M``P@!$ZZ`\HH`&;>2JT`%&<&4XH4O``M(`I,WP003EU.=4Y5_Q1( MYP@P)&T`""9M``Q"K?_X*VT`$/_\($M2BQ`02(!(P"@`9P`#,+B\````)68` M`PI"+?\B*WP````!__0K?````"#_\"M\```G$/_L($M2BQ`02(!(P"@`L+P` M```M9A!"K?_T($M2BQ`02(!(P"@`N+P````P9A0K?````##_\"!+4HL0$$B` M2,`H`+B\````*F8:(&W__%BM__PK4/_H($M2BQ`02(!(P"@`8#1"K?_H8")R M"B`M_^A.N@G`T(20O````#`K0/_H($M2BQ`02(!(P"@`0>R!)0@P``)(`&;2 MN+P````N9F(@2U*+$!!(@$C`*`"PO````"IF&B!M__Q8K?_\*U#_["!+4HL0 M$$B`2,`H`&`T0JW_[&`B<@H@+?_L3KH)5M"$D+P````P*T#_["!+4HL0$$B` M2,`H`$'L@24(,``"2`!FTBM\````!/_DN+P```!L9A8@2U*+$!!(@$C`*``K M?`````3_Y&`4N+P```!H9@P@2U*+$!!(@$C`*``@!&!^*WP````(_^!@'"M\ M````"O_@8!(K?````!#_X&`(*WS____V_^`O+?_D2&W_(B\M_^`O+?_\3KK] MM$_O`!`K0/_<("W_Y-&M__Q@6B!M__Q8K?_\*U#_W"\M_]Q.N@(<6$\K0/_D M8$H@;?_\6*W__"@00>W_(2M(_]P0A&`HD+P```!C9^)3@&>4D+P````+9P#_ M;EF`9[15@&<`_VY7@&<`_W)@S$'M_R*1[?_<*TC_Y"`M_^2PK?_L;P8K;?_L M_^1*K?_T9W`@;?_<#!``+6<*(FW_W`P1`"MF-`RM````,/_P9BI3K?_H(&W_ MW%*M_]P0$$B`2,`O`$Z26$^PO/____]F"G#_3-\,$$Y=3G5@&"\M__!.DEA/ ML+S_____9@1P_V#B4JW_^"`M_^A3K?_HL*W_Y&[:0JW_X&`D(&W_W%*M_]P0 M$$B`2,`O`$Z26$^PO/____]F!'#_8*I2K?_@(&W_W$H09PH@+?_@L*W_[&W* M("W_X-&M__A*K?_T9BI@&DAX`"!.DEA/L+S_____9@9P_V``_W!2K?_X("W_ MZ%.M_^BPK?_D;MA@&"\$3I)83["\_____V8&</]@`/](4JW_^&``_,0@+?_X M8`#_.$CG2`!"A$J`:@1$@%)$2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5( MYT@`0H1*@&H$1(!21$J!:@)$@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ` M3G5(YS``2$%*068@2$$V`30`0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5( M028!(@!"04A!2$!"0'0/T(#3@;:!8@22@U)`4<K_\DS?``Q.=2!O``0@"$H8 M9OR1P"`(4X!.=4Y5``!(;(&\+RT`"$ZZ``A03TY=3G5.50``+P0H+0`(+RT` M#"\$3KH`-%!/N+P````*9B8@;0`,$"@`#$B`2,`(```'9Q1(>/__+RT`#$ZZ M`/Y03R@?3EU.=6#X3E4``"\*)&T`#"!2L>H`!&4:("T`","\````_R\`+PI. MN@#04$\D7TY=3G4@4E*2$"T`"Q"`2(!(P,"\````_V#D3E4``"\*0>R!IB1( M($K5_````!8O"&$06$]![(->M<AEZB1?3EU.=4Y5``!(YP@@)&T`"'@`(`IF M"G#_3-\$$$Y=3G5**@`,9U0(*@`"``QG#$AX__\O"F%64$\H`!`J``U(@$C` M+P!.N@4(6$^(@`@J``$`#&<*+RH`"$ZZ`CQ83P@J``4`#&<4+RH`$DZZ`MA8 M3R\J`!).N@(@6$]"DD*J``1"J@`(0BH`#"`$8(Q.5?_^2.<(("1M``A!^O]" M*4B#E@@J``0`#&<*</],WP003EU.=0@J``(`#&<R*!*8J@`(+P0O*@`($"H` M#4B`2,`O`$ZZ`I9/[P`,L(1G$`CJ``0`#$*20JH`!'#_8+X,K?____\`#&80 M"*H``@`,0I)"J@`$<`!@I$JJ``AF""\*3KH`I%A/#&H``0`09C`;;0`/__]( M>``!2&W__Q`J``U(@$C`+P!.N@(R3^\`#+"\`````6:8("T`#&``_V`DJ@`( M,"H`$$C`T*H`""5```0(Z@`"``P@4E*2$"T`#Q"`2(!(P,"\````_V``_S!. M50``+PI![(&F)$A**@`,9QC5_````!9![(->M<AE"'``)%].74YU8.)"DD*J M``1"J@`((`I@ZDY5__PO"B1M``A(>`0`3KH`PEA/*T#__&88-7P``0`0(`K0 MO`````XE0``()%].74YU-7P$```0".H``0`,)6W__``($"H`#4B`2,`O`$ZZ M`-Y83TJ`9P8`*@"```Q@S$Y5``!(YP`P)&R#9F`4)E(@*@`$4(`O`"\*3KH$ M1E!/)$L@"F;H0JR#9DS?#`!.74YU3E4``"\*0?K_QBE(@YI"IR`M``A0@"\` M3KH#]%!/)$!*@&8(<``D7TY=3G4DK(-F)6T`"``$*4J#9B`*4(!@YDY5```O M+0`(8;983TY=3G5.50``2.<`,)?+)&R#9F`.(&T`"%&(L<IG$B9*)%(@"F;N M</],WPP`3EU.=2`+9P0FDF`$*5*#9B`J``10@"\`+PI.N@.<4$]P`SE4` M`"\*<@8@+0`(3KH"M"1`U>R#=DJM``AM$C`L@UY(P"(M``BR@&P$2I)F$"E\ M`````H.></\D7TY=3G5R!B`M``A.N@)\(&R#=B\P"`!.N@+(6$]*@&<$<`%@ M`G``8-9.50``+RT`"$ZZ`I)83TJ`9@Y.N@*<*4"#GG#_3EU.=7``8/A.50`` M2.<,("@M``A.N@!V<@8@!$ZZ`B8D0-7L@W9*A&T.,"R#7DC`N(!L!$J29A(I M?`````*#GG#_3-\$,$Y=3G4P*@`$P'P``V8,*7P````%@YYP_V#B+RT`$"\M M``PO$DZZ`E)/[P`,*@"PO/____]F#$ZZ`A8I0(.></]@NB`%8+9.5?_\2'@0 M`$*G3KH"PE!/*T#__`@```QG$DJL@WYF""`M__Q.74YU3KH`!G``8/1.50`` M2'@`!$AZ`!Y.N@'L+P!.N@'N3^\`#$AX``%.N@`,6$].74YU7D,*`$Y5``!* MK(.69P8@;(.63I`O+0`(3KH`"%A/3EU.=4Y5__PO!"MM``C__$JL@W9G+'@` M8`HO!$ZZ`,Y83U*$,"R#7DC`N(!M[#`L@U[!_``&+P`O+(-V3KH!UE!/2JR# MFF<&(&R#FDZ02JR#VF<*+RR#VDZZ`8Q83TJL@]9G"B\L@]9.N@%\6$]*K(/> M9PHO+(/>3KH!;%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?3G-* MK(."9BI*K(.29R(O+(..+RR#DDZZ`6!03R`L@XI2@.6`+P`O+(.&3KH!3%!/ M8`Y.N@$\+RR#@DZZ`7183R`M__PN;(-J3G4H'TY=3G5.50``2.<.("@M``AR M!B`$3KH`1"1`U>R#=DJ$;0XP+(->2,"X@&P$2I)F$BE\`````H.></],WP1P M3EU.=3`J``3`?(``9@@O$DZZ`"Y83T*2<`!@X$CG<``T`<3`)@%(0\;`2$-" M0]2#2$#`P4A`0D#0@DS?``Y.=2(O``0L;(-R3N[_W"(O``0L;(-R3N[_@B(O M``0L;(-R3N[_N"QL@W).[O_*+&R#<D[N_WPB+P`$+&R#<D[N_RA,[P`&``0L M;(-R3N[_XBQL@W).[O_$3.\`#@`$+&R#<D[N_]!(YP$$3.\@@``,+&R#;DZN M_Y1,WR"`3G5.^@`"(F\`!"QL@VY.[OYB3.\``P`$+&R#;D[N_SHB;P`$+&R# M;D[N_MHL;(-N3N[_?")O``0@+P`(+&R#;D[N_RY.^@`"(&\`!"QL@VY.[OZ, M3OH``BQL@VXB;P`$("\`"$[N_=A.^@`"(F\`!"QL@VY.[OZ&3.\``P`$+&R# M;D[N_LY.^@`"(&\`!"QL@VY.[OZ`(F\`!$SO``,`""QL@[Y.[O\*(F\`!$SO M``,`""QL@[Y.[O\0(F\`!$SO``\`""QL@[Y.[O[.(F\`!"`O``@L;(.^3N[^ MJB)O``0@;P`(("\`#"QL@[XO!TZN_\0N'TYU3.\#```$+&R#TD[N_Z`@;P`$ M+&R#TD[N_Z8@;P`$+&R#TD[N_[(@;P`$+&R#PD[N_[@@;P`$+&R#PD[N_S0` M``/L````!0````````A.```)(@``"3(```E(```)=`````,````!```(,``` M"0H```G\`````````_(```/J````V`!``$`!0`!D``$```)Z``(2#P`````` M````````!````````````"``0/____\``0"```4`````'_\?_P`````````` M`````````````@`!``$``````0```````````/_Q``L`#__M`%0`$P`#```` M2````````````````````#(``0````````AN```#O```"'<```/````(@0`` M`\0```B+```#R```")0```/,```(GP```]````BD```#U```"*P```/8```( MM@```]P```C&```#X```"-8```/D```(W0```^@```CC```#[```".D```/P M```([P```_0```CS```#^```````````,#$R,S0U-C<X.6%B8V1E9@```"`@ M("`@("`@(#`P,#`P("`@("`@("`@("`@("`@("`@D$!`0$!`0$!`0$!`0$!` M0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)`0$!`0$!`0$!`0$!`0$!`0$!`0%` M0$!`0$`*"@H*"@H"`@("`@("`@("`@("`@("`@("`D!`0$`@```````````` M``````$``````0`````````````````````!`0````$````````````````` M`````0(````!```````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M`````````````````````````````````````!0``````^P````2`````0`` M`&X```!^````C````)0```"<````I````*P```"T````O````,0```#,```` MU````-P```#D````[````/0```#\```!!````!$`````````&@```(@```"0 M````F````*````"H````L````+@```#`````R````-````#8````X````.@` ?``#P````^````0`````````#\@```^L````!```#\M`` ` end !Funky!Stuff! fi # end of overwriting check exit 0 # End of shell archive