[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

grapher alternative



#|

Is your current grapher display of a hierarchy a little...gargantuan?

I have shamelessly plagiarized Apple's System 7 twist-down-triangle-folder
look-and-feel in a twist-down.

Credit must be given to Mike Engber and [a colleague who will kill me for
forgetting who he was] who suggested we code it a la Finder.

I have chosen to write this code to cache information such as a node's
children
and display string, as that speeds up drawing considerably.  It is memory
intensive, however.  If you wish to sacrifice speed for memory, it should
not
be too hard to patch.

One obvious "feature" is that nodes must test eq for this code to work. 
The
next version will allow eql and equal.  Perhaps some generic function will
be
allowed Real Soon Now.

Kudos to whomever wrote scrollers.lisp in the Library folder.  It handles
all
the grungy scrolling of the view, which I would have wasted weeks on, and
never gotten right.

Suggestions for improvement to scrollers.lisp:
  Take out (require :scroll-bar-dialog-items), as they are now built-in.

  Export:
    scroller
    scroll-bar-limits
    scroll-bar-page-size
    update-scroll-bars
    h-scroller
    v-scroller

  Alternatively to exporting h-scroller and v-scroller, one could defmethod
  scroll-bar-scroll-sizes and export it.

  Invalidate-view a scroller when its (- max min) changes to/from non-zero.

|#
"TANSTAAFL" Rich lynch@ils.nwu.edu

(This file must be converted with BinHex 4.0)

:$P4hDA0d,@4[GfiZFfPd!&0*9#&6593K!3!!!"r9!!!!!'D$8dP8)3!#!!!IeA*
-BA8"!!!!!!!!!!)#$QC[ER3YD@jQEbjXDA0`H(3!!!!!!!!"!!N!"J#KAc!!S!#
JpBB!RKei!+&I-J%,!"S"!!%,!"S!!!!!!+$eS&4&@&4$3d`b!3#NKkF5T)I$3J!
!!D!!!!@k!!!"'J!!!ZUDK1XZ!!!!!!!!6dN!!!3)+&!,3B-"MD3TFkI&'$CTaUa
T8FC1'6Gd@U!*iiB-Qc*b3+"!-BG1')NJ(*KjJl&&'MFVA8#F!mH-!)*8LQ#K-Q3
)%aN%FHVNk40Sd+0)N`)JGHL8K)!&G!8-!!U%eDYA5CU8f%,-'cTdhV54NqB-'MS
L`j!!)G-#cTZAG1D!+(PbBPJi(mfJ4@&RBF-jDI58QEYe6BV$$E!U4Y%Q$"kA(F[
J%4QMKFLqJ-9mE2(4c4NkD!MA2C`LX@)3""8)"%!J`HUM5!!ND-,bT0,EZ!%B!)!
!3!S!!`+S#+$20h$Ka(-I(6L9B!#%!+!E!8!Z$3d%dJKb!$!pJ"%T4BJ3P0!%bK3
T"$d!%2$[he&l"DJ0D0HHS!-!m(N"1`,Z-22'$Cd@DG`3E#"`4bS36BBd`6)N#3J
REq633A1Rc"`kCH5i!9(&64Sl)HHNSC-(4")h(eI@!3Q#S"`3'mZ!B&)QM-L%Cd"
-'C1QM*Xa(KN+P**Q$"UIC(EQ1BT'D8!f8jd#5F0QMJXhGqUi+%1Q6J1V1kDmDD1
6c8SkE(5DUA186TU#Fh!qT30L$TShGGK%&D-6MT`b,FL8-C13!#b)-'kLqM4kJSk
,XbJ5YS!6CXbD-'GdkKJcKNd+c'A``-R)p`3+JJCEK*Q$e'!$%,KckiCp8$&YSh4
Zkal1Zm@G0'6DK-%MI(MZiR($N!!"fYajcB)(hET"M+C-QM0SJPYrMVe&pqrK'k3
BIlS"#X9c4aDIACX[#K0[i0JY')E0pGKc`&(''+H*J*pqGlR4hhm("6KJ!e+838F
G)Z@9df1r'36#'fB`f)+$BlJJJR#[T5((4b#Jd%CJGX%49`Yfp&F(BQkKq&Tj#4(
N)BJTp+JHC[$4jD&[pD9ii(i+qPFFM`dBQ"q5#biTi"J35NJK6(VT4#4`'hBSjB!
LNMM(J!9&T5+,DEL)@)aXc0K#MIB9Pq-E1dlCifRY[EHBN!$&(CIFFNBqQ@#8j6(
T*),m+9RSP&91@''@)2LT("jGeJRQL,LKX*'*CUl)4SX[XZNQR#R+U4#GAa,SBjj
"bPGHG01j%G4pJLCU+B&0(MQSSJ!b'U'M@&i)+e#9TKTQTJ44Z&'+RS+kTS`dTQ'
MU6UQHZH2$Bc!"d03(*EBBSf4i9kV(QV(RAIJfDHVVGEQ@QZ5YcCkTBAGp99('j9
H5"p`,)#`T8(p3KE9X,)@ZqLP*-CPAfDR-SZQQM"#qkDdFH,BX,AAkSE##U@DL1+
Fkk%`jKKPJJ"bUB"TK)E*Tki+`QPmM!$NRUl'GPkkJ5)+ElZ(3XPVJljDqHL&Fpb
EElhlDLJ`#!3(aH'YakDSF)S-khMQTfQ'+M'T0mBfjkehRUBaab@Hb0I*0bUl-XK
i[J`#!JpdGfPcG#eNEhGZ,QaTFh!mLJ!!!!!!S2@J!!8mQJ#K)d)!!5Xi!+%M3J#
EY0!"4!!*!*[X,!!-d,3!Ql63!*Y849K83d0--J%!TFV6NUAF&NB!!!'X!!!mBJ!
!!2-!!"RSCYGb!!!!!!!!!#hd!!!%##M3$%'$!Bd%q#EJ#!!9!!B-H%1J$m',(!!
SbFFR!!L"#aXqS(-Rc4`k,FLmZH2'"4Z6F!33T&)%#j8K3jM)'!J!68#D0R(Uj)P
'jX@M5!Q@8MC08N!HBJ)'B*@dUY@V@,0U64U!PcQ#"+`'F!"%B#j9!RFK%AJ,h)B
JEZL8FH-Qc"`3*N"-#51Ac8Zj(`1Z6G$N6GdaElCU03!!!B!8%31S#+$[FH6*P4A
c$'J"J%`##3+#$V"CTJ!G!`83N8S`!%)!Vid!##8(&`*T"$2+$Q"%5T(9!58dJ6*
&#N%2R[rp)mJ%J+e"'!Dd8hl89L%k1`,ZS(-Rc4`k,FLmZH1QJF!GU8!d'G)%bj!
!*%P!1(NMK`kD1f81PT(M"N390fRXM*b6KNiH%%RF('aCKdiC%'BiJ["iNdQC-#6
6Z$N$BXUB0'AFM!RT8+#80'23!#8$JNNHT@LD"Q4c05U3!$4XjVK`FkH1Lc*NkQM
GXCD)36KX`Z5C!b)-#$4)j3#0qP*SA4"Y`VKa-a)%bcCJJHjmJe-SQC8l#aj-Z,"
N6MD2jBKGZjB+AVTMhM`'B4!%($P[l+4j60@-R$)hhjJ"%4ASQ6)Z3'KNI!HSAMF
Z@B!SJqGd5,Skdl5"Lj5-Ll93f2bFFj1k'kTEjY3jFh[Q'jNi1ABK[4bebMC*kG#
P`jKRA6'TBmXTkLB-@"eVBq$)!80L',KPV&@%(B)Gp*e`56#KQ`d`b!"$$!dd-!)
I%5C"9aj[e$(I'"Uq"K`)CqJ&"aU&NI&@A#r*pKGH)qf&aNYfXG%5(G+jB1-CYJP
'4af#r9$KA@'SC*K8k%NhaaaFQ4EA'@N!PBBHD)%3""`!RN$A&(2Ce!B)0d4Q%%)
+-G3#(A)d1C4d,9b@@30X[2(''Ld)4NDDX,&"@NPf%I3PC3`pem!3VjP)"f"e(!5
#'$FaU9**l%Q8aKSh&6%8S[2*#F)@GSA'KR4KR&((6AHJ`4YBGUj"+Q!hj54(!kV
H4JFG3K%9+Q-NJY$E(120DYKfhGP%&8LdLAC65hr&"B)4MShNCdC5#4R9'pBYCQZ
C0Zhd@E#M06T''&%0kiDUJF(khDj4e8@AA@i)Db9YH'(QB31@QMJ(A()C4QDX`S@
aRP5$cJXE'A69!3F)C1K9d&$"bV4DLf*`P4Y-JjD'AKXFjG'!8$BTV**`SS+NNK`
2*c%EKRABDK!DdXl"ECPQ3&8G(2q'0pr%&3Y(l"bLeS%C#1R5d3#LLp%kPE4`K%&
(9(iq34J)EiLK@SCdL@$'6cZq*J*TqaV0Xl"dY9(SS$BC@NBF-PYE@QMCmXE4'Jp
l&L"KH!ck-8[M&V4TACXZ0&`FGPSk0SpX2!c&5&,"3GFFEk!(BP)M3B96(8U*@j,
GGL)+EpiJ85A&6hC1i@C*'phKja*e+,3HEk+Lpr'dEe3laaLSEEU5#c,1HkHe2D8
KKPjb[+5QXVSP-DK8eaQ*0aX0Z"FLj'Hmp(VX-L+XSRZUPA'(F+&#KA*'Gf5iFl1
JkZZVVE#YJC`Eq9lA!''VRp&kaL#8H3BDG2Jj"DmK58kAUZ5G&Kpk(fV8mpiJ1mh
3lLhid3d9`J!TTY8%"#Ki64cUN!#'ei"!"`2F9![%!*5%0+P0CfK"5mV3KMQN)&r
l+J1-,*LZ1ab+JQa!L&$mT*XL&)FMG%LJEJ`$1`*+Ce8lj#(d0YK"'5&'23d)BJE
C3%3jY+"SYfN"5k#8a"d+M!a'+i-8HkK"$QUQLVT"`aDK0a)`JX!1Br4K'DXBK"L
1T$k`8NQ5'N8F11!`9RG*B`(VFTdck['(`[R168+M-kSmaJcSmBKSUVM%*[j4LNm
+#4qT8NFFNUCq%3UH'`JN)bcDT!A9Fk&GPPLB8#APNR4"33X!%`Bm!%BS+@#AB,U
cQ"Hi*R&EFd-,S)3D2r&K""&bL'G+)je"8DiZC+#+HiVQ%DE0aL1P19LBT+8#LU8
&6G4ad410KJB9'+Bpr(+)B2)!6B6ja6dU8pc[jR0-S18%FVmL%ClLplF+$SXZ#L(
-Fe"36'qL!!8(Jq!YJG-#DHT0"f1)bj&!F!,AS+@JMPP)#P*JaKfLS'A5JD!T*qF
AJ%Ed$QN#5e,#S,L$6C5L3G305M8UcmC)ai`SJ%1Kd%!B&k)J-*!!fUC(kU-i(CM
S0@0J6qmJb%bDNP5,2be$8#[QdM*-Y+)Th@%e4D-c,@C6$P(4D6HK'Y8,KQe3)cM
"hm,!"MJd)*CSM9!%kfP"$(,aKbCX`&SRD-m,jS5J3XN*4H9kb)6UDcf5!90PrPJ
B&)`KS6T`+aRPX&)800DRC6"$'(3Q3j63`6Cc-+-13[P%D,8N$H-D!4"33!-3d'#
P&0dV#JkC5&&4jE"X5'`M[GJ#)lBNP5J)TCFQ%bCGNT+aMHdR"&%`aC[N&LNJ,Hi
CNI[8VZV'Sf4SCNcIJ,%@S+bicA8Z#NL8K[N0DVV9YB0K)TRGVQkhYXSKPLSK'"J
m@$FK"LY*+'0CN!$SSU'm8FdYHSm)`9AHY*@JK'mB',*Fkm@5Zpl&Ea"AqPa1ILU
910@L(6%'J[lmejAp%D0Yk6"4pM*3`Y6pN!#&feYK2fliT'F&J@VlUP$!lUQh%03
6E`Il@i*pm!dK('%E'KY"0rNXT6jp!iF!H&R*J8!%8[#a-qq5&aHpT&(bSPFHA##
#LZU!@dXjNNj3dcSV#k8PYVNJPhmF4"emQ3lJiKPB`-KJ`lDVB%P*%q5##YU'!&N
K3dk2dHTmC#2-fFL0HNh9'&@VU)!&cL94N9d8GFTd2BE+9XEbFA4LD(I&f3arVV1
A,4YQK,lC3h+1R+D"I1BdKe@bB3N3N!"G!M1'BPV8hf%c'&(JD+[HDbLKTR1Xlbc
N1K"jcq-5341q4Xp"rq8JC8*BSi"f'SbK"G*!PV5@je0V+GikK+r@YCh,I1C19a[
CXFUej$EG%P1IJ*mN&3-@)9MV@&k8)q&5Xje%i)FJA+hG$0D0$PKpNiCQHYFUR69
eT"08Y&JCcll@Xj&&i,DYM@EJ5[89Y-XXEF60"q)&*`1j,bX(SQ#`$!6heFE6M",
NlE$0Za0-9VI9VB2hqYF,*d*N*aY$fR#V9LT+19EZ"#jJ@dBR2bPAV5Hq`bXIGY,
cdIR+EkjUER1kiaG8ZKKC6U+4`p[$1C8+cXB8KSEGC0rj!d&BamEJ0PGEkLe`PEK
(A@D%`jc2)[!cV"R&'%&VD*j5"e&+6TQR`2)*6hdFHT@MII4T1eb,D&GlYXG0kUG
lr1brbDVLrlhYSTIkkQ&&Ga[8E4F8d)%UlBDJUl51XPT$%1e8[mRR8EcU2,6Dhh1
AY88KVh)a8JFKLfGldGfZF,M,AGXT+m1Jl**hrLeklicb1i`&(qR#@rc`'ibmlB@
rGS"Eh[%AT$e@T%Mph&YIhjHA`jBb(jI0Vp[cS"I@SD5IEqHDprDc3F(Sp99kpD-
!p8cI#4Nk,2AfZrrN9XC[VNCjX[GFlI9H"60JPDG[[!FF2RGN6G"+bZ&V`F)4*J*
(0j'!"0BSje3V+*08fNCdqPCa1R'!BU5"#hK"h3Ce1Q##!XB39LGq&4D!VYG[,B-
(EZ"V"HKKlS9'+1KbHHD!#aH"H$#"@a)D&LJ8@83`m58Y(AJ6iJ@#NL1#&d5#-`0
J2KKI'pGT"jL&#KL$@`)$02Kk0jL$EE#$+*!!,-!"K!NRK(!RFcBKIN)K5HkKKNA
'CeS6G#JM(A*%K8DACFpRKe[)JS,BH19fG3ibKMDB"MLSJ`"S8@JA28c"Dd&iKm&
@"G5K6)b4HVJ$!T+)(,04Df)aH"6RI$S4LA1B@BE)F4k(LS5KLNjhL$,iAcRP'rA
5(cU!88`dBF"4')0bC@5J"Pr6G4R&BBV)8,CS-BqSBP@%!N&@L3mS!Qia,bKb,Nc
@)PMe)Z1&'(%a(if#,0Fa%ZXLBi-#BaJ9%P6f@)G%Fj8&CKd(LrV'@FSP@LJ3!c$
3(c*3!cD3!'rlTKGM!#FHi@YLm%3lN@)V&PPqY9"jjeM05'[#`SC[&f`0ChU)JNG
4KL,24ST&Ci@(0iL2pj!!UdKbDlD-%!4ZZ*Ck%0Pl`4B%0YFY5iC1eeBflX&mK!H
)1Q'5)B55UaKQ10N#1KQ,D(Ce*AH-9R*YD0KECN@*E@L**4&h5e)fTX36hPJVaIH
8T3&M1Y%cIXL451Q4&p59)5Q8)ePQ!RKZ@DNcGN*FHcB(,50*)q!#)k"jR#G3EZ*
ZBa-HlA&5C6GVPBCS+HQ'+pQ512G-KICTTk3L0&Q+0VNKKTQ#CSCpRRCSla+@-UJ
$N!#c"Le8HDM9M-qiP0%B%ceRC&fA)@"6+aGC,iT@%Sk4%UX"11YAHqPi9QV&@X,
R@Y#hN!$(C6fl*9J-%8[Y9N8L3)jrej'E-fJTp*SlacqQ9bKiT(f5ehf80h%A0@G
NPCE1+8D60hF&GJHaT&ZrHC!!L&5ESQ%Be(HG`k9E`YPE[UPqr3HFk9NCKiHF8G%
!8b"maePm@DPqc)N`emPpZ"HGT$LG5P'Gl#BXd9GlrPPpmX9FfaQIlIPF'a9M06J
`HAF#$fT4m&H5eqD6qGGr!N@GGq13!)pKEFQ'EC5hRH[j'%q99R`9@DdeRX3PI+&
SS"jkIp)(3HLTI*@4SNl9M,IA!ZETRHc*IV,CSZ'T5-UNSf,5PajbRXLeQhr(SbX
9R%TD%VA@!-9jGmI*T)FjSiqQ3)@@Iqed%i@#&Lp`49RN(!%UA2qdN!""qU6iaPA
2C5S!!d&F@K,pjhm"&d4T'(ph5DGdBCPZJ*Nl#P8HT8Je)8+p+!Gb)$")T&dCkQD
5H8SeQQd%+UQ@TN[HYk!'GRJ+CP%+86[IeCGffTMbH9qP1UPibRjkLU(P5D-hUPZ
N5SYD*"3(SA,pPRFkB(TpqDPT&9@!DT!!c'LN,jUN,cCB3X&*Uj&&(1U5rj5MapU
ERZUH9GU4-D'XRN5(KDQUJRN6PS+QBG1*10QY5jDBr#4m`q@QX&Tl$BT[q3C3,H9
j%hUU$(@KI"UTGhUUX55SK!U$rrGF2FQ*P3ULeQQJ2EQT+$UYD+9L`lTD,LUH9(&
Q(a4*LRUV5[&eB@!'FHLNZ[QHdQS#N!$b%Q-@A-,R6qrf)EN*8RFP0mc9UMK+P`3
PLGC9"Ye&2q%"(*pU85KcXJK4Ab5fXMR,M2FUSbAj9Sl85-TP@)LP!lEh9S8aA`F
QT`"VY,5&Y*&NTdZ,4M8'Y@FNY38kSRQR@b1,GE8U%jGeXI9kSlZUIL-VV1"CV0[
jJMlj(4QM(P@SXB@9XP#URSd9U5k)JJN,!he,Y"F@B)!lAaA@@'%3M&m6*iaD,cD
+S*mBZ)fPJ3HkFlV9Bkf$SSd9S6%DFP%bAc$&TTmEF9&5ZKR(Z9i,3C*)9*jPC"J
h2T'lIC1,Z'"R+'-A"d&V86+,B$E,XqK&'$0EXpr&@5[,Z5llA1`a-#MJ6DhEZc5
EB-R,ZT%e+0",[0-E3F6,J`MBK&#lZ[Ih2VL%!LZ`'!0c[G,VYIiA3F8dA%$eLqp
l3G+KXCjB[9le"J1c[&%R[PX#(kq#5cSJ2cBV`"c@ULJ`!Pp`V50""jX692389+M
&X)d&@iN&VPC&Y8""&lUP!p)a&-eNM-p&ZNd,29JE@da,@22a[HkRAdY8`SQPY8k
E`LdVYHGeHl##--5&`8jN`hJd`MkdZqG&BMNm4,4&BMkm+8#XYF*h`d3aa$jdY%Z
-4c!-28RF!N)m@ae%BP2m`khkVTkV%bM!5rLE4qhPEQ)m-'K8aZ[lSr*SY(E%%ND
Q@p2h+P,XRd`F`Bf9V'5eV*q8Z44m`PXl`mqPajh%V(kFY5LXZQm,X8`iB*GE,Xr
kT"lV"M`+!LD![j*$9Y3V4iNlTC-FRjF-"jPX*h`)FJe!"!CcR2Fb5aReVA#3!+e
G!f!Rf)5@dS8[k!E2i6BPSB&d3C%[X5fEBT%'!k6#mKcJ@*ej)"bfM),+,-Zh2%Q
R'Vb5""4NqXTTqK`L`blFLM2H3a9!`mb0$&*jGcE9'5AmSiIDM"R55EVc1bL#5m2
k@lKH5'!UV&hSqlXV+mh$kediLPaT3VI)5m2U#VDa#UI#mP45Z`088#DXh(6Q"6R
Up3+H1)IlE,-i!-4Qd#BFd3)3r9dCl5EcdG%BVG&1j"'[S88G,9!N$8(H0!-J)0)
M$G+3!14H+Ae4+pfm)'!$,feCV!HT()F31eZqlB`6*-h421fba2A6S!4"jDZr(lh
4-*e*cV8$3d#hk3'2q48D[3JFFf"G6&frp([2hq92GTL`TF`'2@eH@PfhA5eHblY
AcJAA1l3$U$aJ1m(3Cq,3%)6!64!I9-!BYpS4AKhB#'%(ljS'mBH8qQUSN!"M*+Q
8Jb%kb6jTUN+USJD-`%``Kd3Ydba"djD9Z(*k`&q3!0P,Xej2AG*SF0*'h4+aG0T
MNYU`XGSJE&kB2BGrE5p!!G5i,GL'$9AVfpM(`@jS'@091YRF@YP1GGQMVGN@GYS
XRG-lcGT"+pUNR5T&EG+aAG1Vj0VBMG*((GUe64Lh6GL$VG5p[@$$'N48EG9F$90
mlGHEb0lUiG9VIG@Jp+k@DhV)AEpb*0HkX309B-h9XXbdh%HZ1)QZLQEF1mqFbTd
mZ1$2M,MNDli6,Ebq@m$[UK*,j83bYAA%N6(T0aUcQe@e1m0Q40@0#91)$8'+EDq
J5N"INUSlihR&RDr)2Gf@'lC21UXa)04Pd0rjPPBXkV"(DT[jEApk1mQ9I0DHA+f
QGpCB'K*fT$"H9cBDL%FcUAkZl%Pip,IaYFiP1ecMQY3PfUbe)U+)9p#kkDidI,`
TqmmI8XrQ*GB`La"d$V4)IH&eAY'$JZGbqUl[,53C&Vhdim8Y)8D'3bDiK@cf8U+
I+YTeI3G6%*2)&Z3`"Aq'kZ8+L++ChNVF1mZE,VVr1Z&d6ZEK9Pr00+j!qpaT')j
acU"-RPS5h,#dLD5Q%@))`4l%,1**AU8(CXQBA'HDI0j(pXNS%mUMh,9C5K,(@@X
f-a[MP#qPQ5M)GqXB!qCdB,+mq&d4ePN8KM+'RHHZ@edSXqe*21i%*9lQMY5PRXq
PEV`!$EAXVYNf$G*R91&DG1&!,(@501)DPSUUZm)%r1#&#qVdc+$J49!l+ipA+qp
)lErXX5Ab(1'#h&9H(+q@JJ)qF"HJrDpmbJ-F6m$6bkFE,el[l2%@"I,L"I'*-r)
TMqr8km%S`qmQP,cV5mfc3I2i,ZY$AZZfq@dJ&h%Fkd*+$N%Sifbh`9M!,XV#ELI
%6UA4@K,((ZcI-HaJP*lGBkAUKqa0cc0S5Cp"(e60VZA6VRH,BZh!%8K65HeREkk
4'VZKLr$E2LC[X1Y3q+6JRPfYMUf'r+6SQ9UcqE#f$[3K0r4lZk1J62AeB5I#1+J
66#,r1#Be#!+0[`B-"GPSlD1%#rG8JELr1FLEY-IC#NTq,mQ!6kb-c&N*"49`mZ2
TB9ebmN04&eNFB9bp([Ad45+[d9L%,r5kC8UlAk4%$VHU,b14lrS+(rZ&F@9i1aq
4h,'qELZkhk-K(1ErY,0cMc,!Rp`d,&i*ApM52a,F[m,Y6VIkV1G[IVcb$XpiI3E
BG,9L2HqPlGcL&Im2,hhpIZ!DA2&GGDAZ*h9r$UCiVSbhm9$'b80j%!6NSBa9PYF
J#C4`HFm&j,@ZFbAc6P9)f&e#+kA%+$T!0N`2#X"j&T!!,NLL4qHj**Z0-fJU+V6
G(V)ad0)FZlTa"La5Y6Mf8k#qb`bX2@P0!a)b2UC&G-[I-b1rbU)-`$lbrHLHh@Y
3fmrGQ!LbJQ0%L*D)%pT'338m$@LT3Y35"#&1N!#%3%(*)384PqKD@(Y&3P#)YF#
5f-0,)!iN"8!%2M03024#)LN-+Z"1qC0Z4hUi6T@lA@"&V1JZe4+TjJr1B#Km)!L
JK-$!"[J!#)L$M8N&a**c``H)!)iaK(aJ#"J05)J%I)eJi!02C32'(cq)-Nj!)hb
%Ke!1,N)8`!HQ3,V!AhN!%Mi"%e%'-#&&dB5LTcE4(d!S#HQ!)85%UNS4-K45H!5
!3P[#$*!!d!L!(%EN#Z9+(j5&Ip!69X,!i!CZS5MFKAbJ#6b+9JJ#SQ&ZN`U3!,!
*8%-qN!!&-N3aK)Ab"aPf`QK)$A&KTY+&M(!M,!f2S$8b3VpD-MUJ"D5!EhJ-f@%
bj)EH-"3Q`P()"j!!J0lJCS8%*S#!I[8$3S""T)H%La-#3QN)+CcK2S5'3D"-J*`
`J"!9A$LdKq-`!R8%E+J2Fb%rM)K))5i83b29"Sr+aP)"k34!U)"Qe1eXeGPD#Ja
PNQQ@-3-)"D&b)#X8SXcF+5P)IY,0q3Np&j(da#GcL'J8)6pLH&"#l)`@'5!$G&S
-N!!"&dfcI*X0KE$##Nib5'TPFFd*lH!dN!!,,+*9&HXPpTXVL'-dLd%"+E##4Y`
%*+-peX89i!LB350G%+4i%qK42ZS2-D!'(-#9JK,6S(4BL@(`)AL1eS*(BX5-b#J
8icAB#"I`'XM+`iL(A@!03Jl$i"Heb1U,I-5$$-Jqp02NSPi$D#0YiJjFL!`K,A6
,1+&Adk0@$!%Qm!5Q`$AL(Aa"1UfieC)K[)j2-Rj`!JkmUrEe6c`Jjp-r1G!!ICL
`L+XB5NT%%f6a$-JT(A!@ad4,b#M[4[aSMC*cC1V0[6PSbj'c[,(2-Li35RS3IaV
(Z@`@IcD24XX-b)XJ3!EFJ"M3UXDMpC!!)R@J+eS2V-DR4*AA!SXZX6LH!*RSmG`
M5%%*NBqRp*Z%!Le@PjK4-[l[Ad@Q6-866d"#kQT5#$k+J3H*i2k2Iq`XF)c2d+2
qF!!Y*&e8LLKJ"YbMp+L24Tj2Z6%jjJPb#b0M*5VME@4pX+piP"%`11[!8dPmJr1
K,bi(0#%$9U*`c#Rj%@hYabUP@6J,J)36!T+K%%LX&X#8c%9a$,IaVm4%IV36Uk+
$E$%Hj(e*5!V**,AMkp+3!+1&3aj&mRLek*')a%FP8V-NabcB"VDJKQb41p)biXB
BU4PR*+e$5#f'-XC*$m)%QeKbE#cUD1C3&NAPMXi!N``4#d'%D$@#4'C1hr"MC'b
-6#C&jVHaRTm,1Bj)"8Aq1UjApC`HbFTfBZjUJF9Yar(#(3eVM%`%qq'k`8CHN!!
DUPaU49#mB*FZGZQSciGmF`+5+Pa*D*'`eXZV4"PjdGfXNPFTAS)PcmZ+b84#KT+
[f",0PRl%P(`5K*M&Mq)Fe5)%@ShTd3AdKpAB'ZALKGb14XBl,LU$8fBqT*P%MqU
429B4[JJYHf54qL84!TFN!!!!: