I have thought about and refined the flow diagram.
The main change is that instead of one "vcl_lookup" function there
are now a "vcl_hit" and a "vcl_miss" function depending
on the outcome of the lookup.
The reasons for this change is to avoid having to handle some really
silly corner cases like having a hit and then ordering a fetch
instead of a pass etc.
Since we have the "lookup" recursion possibility, anything that
could be done before can be done afterwards too, but without the
risk of an object pileup on any given URL.
Minor changes to the graphs include bold lines for the normal flow,
annotation of which variables can be accessed in the VCL code.
On the "complete implementation graph" I have added the "recursive"
path where VCL code sends us back to lookup (dotted lines) and put
the "busy object" path in a subgraph/box of its own.
Dot(1) isn't very good for making this look simple, manual
placement will make it much more readable.
As always: comments and suggestions are most welcome.
Poul-Henning
begin 664 _.pdf
M)5!$1BTQ+C(*)<?LCZ(*-2`P(&]B:@H\/"],96YG=&@@-B`P(%(O1FEL=&5R
M("]&;&%T941E8V]D93X^"G-T<F5A;0IXG)U:37,<MQ&][Z\8ZQ+9%8_0^$92
M.3BQ8Z?*J<0*4SG$KA2U7)JTEZ3$#^5@^[_GO1X`,T-15G:M8NVB%XT!&J^[
M7_?XS6!&&0S_U<_MU>;-)EDS\.]J$YQ,7_?3URB&WRFI7R\V_QJN-WZ,H0S_
MW<CP5_Q=XH__7GZY249&%]W0/GUT,AH_!"]Y]#+<[C;_V.@&.-M'F\<RA)+,
M&`N>[[UU$$03RF@%C_-&()"%Q&63*6E*\YR0LQTE43(M,PLN^E-OO\>!9?I>
M/[97PQ]/-B]>IB&.P=HXG)QO)NO(X`I6R!%/\V-R93BYVCQ_N=ON+M_NAJ].
M3OZ.`[UYV-W=?WSRP^:+D\TW&R?<%@Y>)(TI#-84K!J&A*TD"9,!WK>#_-0.
MK!F=A04C=F*3[N#%B^%OKW[XW?`3GCY^\MMAN[_<7=_SVZO3[8^[Z[/QDU^X
MHS3ZX&&CDZ\WS\\?KK?#V^W^/[>[[=OAIX]_LWD^#,/E^?#M<ZZ"O^&C/PS/
MOOSBY-GP\\_#4O;5%Y]]_NS;C[L2_GM]>G?W^SK\Y?%:%_?WK__]V</]!39U
MN3V]WWW75M1?_G1S\^/E[KL/+[C'Q(?7*J5([>NM3->?4QJ#$#-=XLT(0_5Q
M*GETLAC[-)HX;'$!P`>T?9<M5DG&C%Y!9(T?B^MS]IOS(_6(/N^#C`"2#T7&
M:!7K51*Q9L&^'>8'CE,8?>[[;N,M@%YPPM`EKN0PEGF%/J[/V&YFB0]JB[9"
M,$!GFI]1QWA&VT6;T?==5WATCNVOP/DIA_(P#G8!_3AFYQ3.7^L]#_]\^75W
MHX)G9028OL'J3K/!?<9&\^(("8`H"[,E:T>35]?=9(M5U)1E<6UMCEYW#7/'
MZ5\<:AH+BV8^)8VNFF9R at 3FZQ%A&\0-"DL"WL9$N*<Z-87`A1NY""JZG#,[#
M)W)H0P#"B>>UMM^M6-YVTV[#NCSF-TG*A?&[ZR=@H:_.`>:V9^MO;5]-\='.
M#\6-L\P?W!IO8C+.7^[N'J8P3`,5<.G_:@=[9YOKN]O;GMUO.!R2 at NP11R
M5/_($D9+3[)>8T at R;O1^'G>T/Y:TL8U9J/&VS[#(2V,FTI&ZC`S6)CVYATU'
M_"S83%27$Q>8(ZV10M=R&4DG95R*+V-)@TN";?/.D/DPCZ;KLHS$A$\%@F=0
M@"2/R3)3)A-I>BE$I%5$'Z=W,)*9JW!4ES+`8_6RUE=A#0*3R0L@=\D$12D`
MD^0&5,FP3;`SD"4F2V.UWT-PO,BFW88=;5U2\=CU"=:^^@3D_FP.^[ZJXN.=
M'PID at 6V<D160OSJ]/MOOEEP".3_ at 0OP:SJ=WFB?O+VYO'KZ_>"=8.HF!@`F2
M'3@#C8HCC!'9R03+8)D1Q!,QF2WHE)O''=^/)6T\X[M+7$G$>0'<2['`-PSC
M840)FHUF@(.V%)K,<A?(D4(R.$<E"1Z!EB%L2C&T*&0X%42D?62&0D\-=`*L
MZCQ`*0%NX^Q",@?LH]0/13EQ8(U;H9S7,X,\P+6`N18))"%W)O!2!H1L#^>"
M%HH)I[`Y@]=^B`O>O/KA/930K1GAQ>7]FA!^1-7MZ?;B]-5^]V&>=K;;@P_?
MKHG:G,%K[E1",5$F;!]FP"\`)3*VA\]:B]R282X&2&.98YR`(T1ZF+<@U0C^
MCF2:Y*%F7V>0@/`4)`8WV%+@^F5*^`+OQN7:`N1%98EB`5O.BH8T`0E;@!&$
M-V?PN"+KA'^4_L%A$N=V>1TFSV\>KL\Z at B2"Y`B9G3.C@<<@43$=.V#7 at W8<
MC"")2*.(8O3`:,OAU<0CZ%Q=WMUU>)SO[K<7[T&!P5T'$D_<F".#0AWGE8IZ
MF#B33""[,;$ZF!ZW[DQ`D$""9?#P:<IZ)CI^]Q:!3MF/`3U!'*L"Y"X3/)'B
M+<#@P^I2C]$^]$H1M5&5X!DN at HYXM>_US?VPOM9&G%I at N)HE-8CV,=*H6J.-
MC7>C3%G'(4:3>S;9O`H":R1,<"*<C3[6YB@'.$KO8$L at J%OP"9P`2X8G.$##
MALT13'YA#!N]7KVUJ%:8-UB%!WS"'1C.^Z=A"<"$`9::Z(O6(*])[DG:&A.6
MQY"",KS&B*:-;)\G'\=L82!J:6,/"5PT^X5A9C@=IW^H&2U,$5#G+LVX3C(9
MF0UNB6PK4Q.E2Q"SE%=J902JXX%JQU3N%>5M#/,%@5>F>0:OHLP+U&%]`N97
M at 15-G5U=8/VR>$`=0Z%MH<UH6VPK/#K$H:3*PF\C=P"WLV5RN\^GK$1#?>H`
M!H"FLBFG9.KL9OMPA4"G$Q`'(DJ,U83SVYLK)M'=]OY=JH4-,*LM/%@`!Q[.%
MLE7D>_RR#+G(:K8 at ZZ$Z6H`V at _X8<MML^(E`EYA(H."5:2:G*S:FHJ`EA2!K
M"9:I%"4%4JDP+V1FI_TL":Y,>6J!V,.5#_9Z8P!77"08*"RN%W$V7\2$6`NX
MP"E=@.V\TM0FB9`@\ZO[(G:XB&5DYFAM#$J94J15^XS(MD1?H`WK$U at N3`)>
M%\N?INY`_-/B`76\W?0M5$G?8EWA\2$.+@,R`Q/U67A.5.[/S)\*1WI!!B26
M<-1VX\7N]&QW>S>5",6 at 3)5W,5O3]KN!UH*9^]C9!`V/4H_4*T<E6(@RAO[I
M:!_7PVBK"*>P60J+:!>!UBGJ855QO<)GU$.E*\+"-4S`6D;-(]0/#IK6 at -W$
M-;%JQJUM6@`UA84I7$"D-7PJSLS"WL`K6,,&JS,\4WN$+0SX26*(\O1+0B,E
MKQILD3%<!CQ6&WJ31DMCV]XU at M6CKMUH7='XM:STR0P?5?I3_;FJV+6&7U;L
M at H@1'U7ZA^@=WK/"$<'4V>ET3^3XEOAF.Z-NCGJ[&;O)K+D12>EZ"5&0*2*:
MPE(5GIW8!8'O.D0C!&_GH<$DSKH!_`5B6),%IT2]N7XSN%P0!%P,'+/@6BW+
MU5"4IK?9\ZT(,#D*:<5$(L3A%VH8-H66Y:FV8Z;RM+4;0"F+'HOULG7K`E.#
MZ+(^/4[OT$L1A"P&AN6UK#B#L`D1NPF0=96E'/V.0K1](BS!1A<^5%5H7?K^
M]Q/JJ$_4HV]/]Y=GZV)4L?;D:XA>P>[^OQ+V\OIN=WO_=.W2^FXM%1##4Z_,
ML2`G(JN/83Z(7^H9W=$PU8^;US495V'OV'7<[F??J'-6+8VC]"^4,[`K,S?:
M=%@B\Z&-UE&A\6/K$?>]7Y09\+5"-^PS:MYK"[1A[X9U28H:Q=L"$E/1%V+U
M$6T,C;J)/D,WV-27FS^8%CI6SQK?QOKJK+Z\JZ3/(53+^UEAP(ES*`=DV-KA
M:IZE;<U".FBM\WP7V;IB5I`DK'YJAV[NEB%Y:8W?,F77K$FC]9%;;:%)V0)P
M*79RB><ZA$!JUYIDW[,_:B3/9N<J*Q^E?W!:%KY:*JM:9G*\F1NRP<&+,TI$
ML0]?@O*MMI^`8&U"I]DV`#S&+<*Y3:"$)-JM2JSE936T$VQ?N^V-ASL!NK33
M.Q6/#I;5!GXM'AU(_M1[GHM'R)"E7"_LD%TM?O5A4?PY"WZ at +>JI0-2L?)3>
MP8;6WFWXE=J[=;QGH,Z2"7Y]+'Q9,@\7#0B0_*RLL3<2%FWZ6N]*AAS4@
MCM,[.`O"KDYQ\)[*N3MM<(P$/?X`=,A*6BA%N!@W&D"/<6FUB0Q'`+)R+Y/4
M`P/HH at V=+5S-DEI4[S=]F:F>6SG@,>H:W$O1:1EUA)BI_+?"_U6BP'!QZD)X
M>(#8I:1>>].:YR0$&1R3DKK.+#D8AC`/W'5 at B9;%U?BK[SB&[<W5Z_WN?K=H
MBH&?T at WAIR#@DVNP6YEH=]%V;R7M at KRK,;2`?3KM*L`B3DOJVD<PN"'V?S+6
MXIL<8RW=#K$ATX4+N:9I)?54=O.E3[%:CM8ZN5%'%L83Q2]\?2Y%K^XX/=IP
M02R4YL\G;B&GG=@2Q*2X[<1 at 5[6/TD[<WBVT$Z,JT?>L[<0>601%U.K$`7P/
MT;7MBF!#IC2RW+G'CZ3/]71KL!ZCOSSYHD.DY[B:)09H\7,+R;C(*-W&!5$_
MI]K`BV"QN8OF-1:[B"@[L,,V9W6*8]1YB&_P[W\[`*P)96YD<W1R96%M"F5N
M9&]B:@HV(#`@;V)J"C,P,C4*96YD;V)J"C$Q(#`@;V)J"CP\+TQE;F=T:"`Q
M,B`P(%(O1FEL=&5R("]&;&%T941E8V]D93X^"G-T<F5A;0IXG*U;VY(DMW%]
M[Z\H\L5+A5W$_6(''VA2$A5!A2UJ'7X@&8YA3P]GJ+F0<UF&0M*_^YP$$E75
MNS39;>[$1C>R`120R,O)1-8/DYGM9/C7/_=WNQ]VV9F)_^]VT=OV];9]C;7R
M.RG]Z_7NOZ?[G9]S+-./.SO]$?_Y]\7O=]G8V5D[Z6=(KLXE3IQI-G%Z/.S^
MO).'2^]J9U_+9$/*<PF3<]7-ODPAQ#2#+KT#_LT6Q!SQH\<*@\ME+FX*Q6$1
M'BOR-939;BBYN#GG,6K5)Q4S5U+&/(-R/5;W^"V88MOW_K&_F_[]]>[#+_(4
M9Y<PT^NK7>. at G7S)6'C"X_SL8YA>W^U>?7'8'V[>'*;/7K_^3VSEAY?#T_,'
MK[_;_?;U[D\[[[#EZC#08>MIL at F\L%/RX$@(;><_M8#RK at 6`S\'Y*?@Z1^]D
M`1]^./W'-]_]Z_0W/'S^S3]/^]N;P_TSOWUSL?_+X?YR_LT_N*`T&^M*G5Y_
MOGMU]7*_G][L;__G\;!_,_WM at W_:O9JFZ>9J^NH59\'_Z;V/IO=__]O7[T]_
M__NTIGWVVX\_??^K#\8 at _/O^XNGIWWKS'\=S73\_?__EQR_/UUC4S?[B^?"U
MSBB_?/+P\)>;P]<_/^$M.KY\+U22A+W!6C\'''_*>;:90C,HKLQ at T&C'%.;@
MEW:H:<YUVE/TP)8Y#M)JDA`KY)LR9(V;W>ARN[LZ:Q0%+W at HC<^3]S91=.]6
ME`@5P!J=S;,+:!>LV8XU:WN_"\;4>2'XZN(<EPF6=GO$?C<H+E.`)IW`A2I/
MU"?T-IZ@:]`>ND:=X&@7^_]#D-^I29731Q'H#!M`0?Y<3GCZKR\^'_J3YV at 3
MK,]88->CA=L^E3B;M&PAPC:$53LXMSYE::^&"PO=<ECR.\]7#=]IXZY/Y`/F
MH]7S&1\^"1N:H"\F)&"#!=8SF<3/NQ4%,ETK'FVPIC#9;-T,:^QY-GEIX_B=
M$;L\>EB<;EHFT&9[`OIW0H0MS3ST/CQBXI26!_0V!N at 2M(<N46<XVL3)XH+U
M1(\5)#L7V_CTAZ>GEV9VR2O\[DITT[^(F8O3Z\O=J\/CX\/CPLB$H^/:A at SY
MD&#'(>0)#DGTQ4-+T"-:2*5=VHL>'5&T[7!X<T[3F]$#+,,VH(L>XD/>E5CF
MM"B,S1$<B\*)T:?3L#*/M1K'`P/?,OV:QWQ+%Y'0<X:=*J#8SYQ-GAQ8E<`C
M<G[+U^`JI*.N!'2A-/D*ML(NU2%^P60LKZX%M$8<X$*!DX4<+3,L[2&B2E$)
MTQFZ!(YG#!D=J]`>NLH^P_$^3C=I4`I?-C+ZV<7]Y>UA#0O,#!\<HM\(ZL63
MN+SGZ\>'EV^OW[9^*54P?VW]^"W4(;FAPN?@X(?UT_:0W&.*MA?)'10#=`)P
MHVU;2Z)NAP+TD]B&S7+D3\C!K at 4P1!-F#P8`<#D<.YS%G,B08*A.8H4'C4C&
MJ[``5R8(FJ631!=/S&13M(2'&V-\SO"3;7*EK7(;D>?Q+):D0D)RF5R!<B7Z
M?A_A%@EM4XQTB[=+GX@^)@H.]8):ESXGZR)@9X"7<"E!@!O\_/'Z!@+VU:N'
M;[Z;OWEY^NM7'W"9T")H4NU"1M`'*?OQXN;Y;=DRX!\1:G?TX*A)AE+F;<A-
MDV#]N>X*?L#">LJ%K]B]@PML>@)W;FC=0$-?.DK%X0#?B7JX('/T*;2,ZW,]
M;_S)_*L%@@S^%7PF*_R[>GBYOQQ<<16.V(0I9O at SV*&[A5*:57`%,H]=QU(M
M#J)8+EL:^YV+SI)S[3?/*,<N`[7=IT9WI2#@8O`RAD=8;[>:O;<Q0A^N/71Q
M.L/1\D\U82(#&7$<X'2(C4&?/!X`VJ?[PX\39.RP%Q$BEC:F;.5+1?"CY\>7
M`WOA5Y<3G.%;W?87^^O#Q3>WAX^N+FZ?I#-68V(YZON'^Z?#X_-T]?#X;ECH
M(*J&3I8V5[!T!]^`8Y%F+113"'1C=A(.5$#Q!0+L=]%`<6',(%P0P"F:Q._H
M5'-K!!L\K2&[HAFIQ+YWU,9?^V\!<QC"B02CC'--4'TH"CE%PQD3]->$IC"#
MAI5+%##.+F7("^5]=`'4]':K+^<,/U5=(BT8)'D=[=X_\#36*N.Y:T0WZA9L
M(`:Q=`9SA9*='N,&/!9^V#>#'Q3\>XE*9?%NI>WSQO(]WW5!(IB#\?@%X>
M;A'G/VXC4)5$3^-H(W28H;U at L0KMK8$Z9>A&848#7;8+T&%+LPH9Q('!"B0&
M,.(=C2\\*T<X'05*F>!FPB\/F4(\!C=BK$AVLQY;[.WC.<$K%ESR79*:O<0"7
MBZ/J@^AD"9$2)\X$S(&N,7,O,='K!@?A\\/7[.=4KHUL2>*)-6/DP>G?ON5^F
MIX4/@A>=*(ZU at L@"(!H@%7P41"S&'L[Y2O^*V"1K_*V4YLD8FL%1&E*`YTT6
M7GVIFSQK_,E0@@A=',4")8[C.V8FRE`?8 at D?)+HJ<%,X!A^->&A;DC#;!W"Q
M,**`94I!HB^?:09M@>HQCH$+A^X!EP$#$SW[8NC)+>!I2R`PY@!<K9XTS"ZQ
M`P(4^`R;83=\E- at AB:.W.<26.+LZ;]C)?AK``\*'&0#R<#9OQQRKO`"[KKB'
M<%QB-XVW>GB.J8J`6H,@@``RXY"3YG\@B#4.VMT`11J.4&V*)^NTSS9#<,[X
MTS,%INUCL&2+20L>5<`)!S.318X&!;$W,)7/<(E07HOPMD6]X!V7U-N0HPC>
M0?]&#^8TQO#6:+-3YMBTP-J`O6,@//@,^IBZM]%='ZX]='$ZP]'R3PZ^$(&4
MR/$X7ML2HY\V at RU(Q`$V19B.#;JX?-B_W,&/2`\`"!?S$:2Y>GRX6\&>K<DO
MB/3]1G.I;TYB?42MQ.NV2-8C(W)RDJNBX=/H'%Q)WC%P0LA8Z!,T16$#0U4>
M$?C*\X`]3!UI)^R0"MAI>*IV0EA!4?.QBN/7'AO<<,;HD[47ZA\D,L?F31/5
MR^4HA(?@D*6[A-P46E9KJW at .!],6\QF)<1A+Q`9`.S!+(?\<:/@%:.'NYNEI
M((*KP_/^^MV.WT6<+=0C1N=:Y.*(-;'_R+0OE,#%*'%4I-VV;`/@>(&+D%D)
M&V"6(0\1H>L<Z48A6. at 8`[->#`LDLQ&!&!C;4PK&$(8T6>*4"`4"U(X0,GJ%
M6U(2,2_&U>,X^KSQE`1GL#@&]^.>9E`*8`.DW%;X+X*$@KF9 at 8$0M'N<UM[O
M+'.V,J+WB*6/Z#-HNS\#(Y22"!V8H^DS$&(SFZ;/Z&V,T%5TREAEG^%X'Z<:
M'(1)``F\>8*S2\VS_XYB(L:$.7)$Z5MC(C=$"'LN#X]/+164/3-`ZTR0&)PN
MGF]9'$?C&.S0&O">"`7[CLQV1<GF>#2P)<0OCJX/"#0:*@6M,"*L(("J0KF9
MKC#&RI5%A<=%W`<M%-$,3%YTH&!KRDP^Z6'=D;6&CP^E&+$9EKB-UV+5YF.+
M<];P4TT.<2%`)&:`%>@PZTH/HP7V`3P)2_+E;J%D9O09G_O&M8R8$NKF8*-H
M"+5-[D%I7!H4&'ZL>TR at S?X$BF`C1-YU,"/<AT=$1C#NXP&]S81`7X+VT"7J
M#$>;.%EF*TV5W^2/?B(:QY80(1SYRY=[AO<+3P6G;<31P1@",$?&.DS5.'AW
M:CYB4A]&<ZC<$:$W-47Y1G_OUQ&.,#S`*R+8IK2J.N"A7N=3"AC(Y-MHMU25
MXT4&A!&AAZ!8,:44GNH&C4I5)>6$<PX-TN*H*O5"^U#`SQMWLF3#JR3L-<`Z
MAQS>@?L,D$^V*\$>%!5L6D(7%\'N&;658"=>)X>E1W2&QSAFT/:0NT%1R=09
M5'+U&8MLZRHZ9:RRSW"\CY-35W"R`!6_EFQO(V+$[(66:27I at P*)8DJVMT.!
M;`+'CO8BZT<4;:^D72E=W)GN9;Z5,7R at -8`EE>SE$/=0O?BVGA%5X.!R;6(>
MH7<AKD[ZSP.O@%9ZAC,QLJ#A at WTRS?,W!.,8K'BWB9O/&W^RV"-T-+RE6(G]
M<=S<!68!(H-2L"`RK(L<D']FVD"%4MN+X(\>7:S'#-I>3E$I"0C=N2'X(<$6
M"NO[,WI[$7REC%7V&8[W<:[@!]K8GM3^_QCUOL&5J$?('Q.)!N"`:2'%MP8&
M,(EW(J(`N'7-F+A^?12,"&4*'7.`IY87B=10N4[R+0<+H63]!C.-A:5"180*
M"*7*V7E)9\(NU%;[@Z?'%H"?->QD44QR][V&%MM<A-[T:J;X;J&XYG9L26+C
MEAM&V#RSW#@2W[HF-MK#(YZ!<QDS:'MDHP?%)-?N/=L,+7E=QC.TC1%]%4H9
MJ^PS'._C9'01>.&*@P7J`;O;Y<'%[?[EEO<'ZUQKET4;PI$L7MQ?2L?GYUN!
MT<QB+M<,#2%_?WB<OOC=)WAZ>@L@(]#VS+PKZ`?8I)D"`P,O1LV2E`J,K4K6
M/);>*PK at S9!W"*I>)'(2?",L;FE,(-8,))+<&+8!O.<,IU!:@Q/E501!N>1.
M*E'.V;5BEJ`8Y^JAMB7^HCSZ$@[';30L8/H=V?,W%[<WE]O4N2C'.ZO!WMN8
MI5]00B:7/]NPVS(Y6_(*[@Q*]HG);VNA^@31'7-9!GHIKS`?PPR_HA08K$!W
MV6<8[0%%!B5FJ2(;,T13F)@>S^AM*)NN0GOH*OL,Q_LX5=F8Q8R!X^O<H\^/
M;V\?6%\GVH5]Q.2WVO7T_/!X\:W>S$6#_6YCSX?':9T2VZJ6#Q*U=>DDWZ%K
MF4Y6@@!+J![)5*PH,J.#C1+/,2?=*K"L+4X\PD#,U at 9)2#OJK25TL#9)(9%>
M!&\TZZSQI]I[EGM9AF6K2^(FB4OV*F=9R,*+GEUVC)\-LU$(Y(@*Z?.J':G[
M!;K9:CIT at WI7QI(M!G:<R3*)`FA7TX at EQ$MV`^URMJT,Q/$.B7$."S&*A-*5
M66+'@HQ^X7'.J)-Y5GAA&C8\VT0IFN];J:U2-'K.WC;,V(/KGO%9L"O<4O-;
MVD.*PMPR@[:7`%PI/<88,_089#QC1"EC%=I#5ZDS'.WC9!_IF<J+OU:48A/O
M^=U*$#'YG%@8P+I*;!#`J##>A8N7`CYM+_&OSK'2JEAX:[6*8T$QO%!<Q[_G
MC3M9LG#6 at 2!S)5E;^'44J9DH->:#(Y(14[T<,7O72\U7K$*J'G2I7NI5*MJ5
MR,(AP).`=UQ>+L&R!ETMW>MX&2#IG2HU&]"NQ,BP!6$X)A<V013O1Q:51)C5
M]3](.>$V!#M]].EY!Z!+HO45WX\",$T6:@79W4)A\3"3LCR\S+D\PT!%1MIF
M(IBW/ZL>3'73:_8)M-F?(#BY40STK[#(JTW0+9@^H3<%\\H2]'==H`X_VL+)
MZIP`,QE@$TS:]>L`_4JI&GM<_K*Y=`IP-8"'[[AT.LX!ZV$O598+I=5((AJ2
M&F^]='0Q,2NZJK)T(<@]U.C!>O'LEQE&6RL@!Z772(X9>@WE>,:HLARKT!ZZ
M2IWA:!^GERCQLFU;93F0Z*@\PB)AP;>!PY'M',"&R9/$Y"BSHV)$2[&,S&UU
M#5'6*`&PI0U@)1?1'J_Q6K"!/5MGA4L=Z`,*2<&C30`L4N+!6TD66$?*2S,!
M+-XEYQ*B,B-*W,LM+`/F0*5%'P8G"V%U at 7/.<!J!L>V^-D^@X63;K,Z02EK3
MBH at 3H!1XI^_8:$&E9S^CSJ/WZ33.$OH5<+O:O-UI^:?VV4"ZL\9O]J&@L-^J
M$9A6*\5Q/5_&,).IB46663/%^J)46LH"^XBL60`I"W at 51]H\)3-169!EQ'"F
MN9AP,4?(])SA<IN6<]W:T$%I)A!K;"G8;B&A<)$O#"PV%"K9Z at NUAV?AU;"A
MHSE,W*!T(Z at 3*`KL3Q at V5)<P4&)?H`X_VL+I"EW@>O/:AGYZ\[2_>+SL%_>V
M>O\KV5#>&O+^Q+`^- at JW$8GSQK[R.F^Y_`$<ES*N!8YKS;-C70E+;9)<Q7A.
MQ2(`#0DLQ#;1%!A#'")7]A8";)>W+^Y`2:G=^S<EO`7%M5*!5*KZ^_/&K97#
MD2HE[[`$8;/A89X;YD<@Y5H4W?*7^JX>\Y>@L(?/F7D[SRL)^DX/`RYO*?6*
M(!PL5]N+BP0=60>N!"GG#0"DT?6X5^H3F<"BG`W*JDSAK/&B4/U."E)<^JU,
M*W1;[M1:^9V+K?!D`+I1N^9H>40O`-;#J,(=`^%U!%MU>\NW98P4X3M(JKQ^
M17?`Z,\DR3V.<JPA1)[<MJN2+EZ^\YR(0UFMRO<,-Q5>_2TG6PPWXS-\51G)
M+,_*?`:1:Z%C3C1OA*>RO-BVNW/A("]@"8[6,G?.L.M5UFQAO%:]J&6&^TP2
M,'3.P\V&%HTIYT?0R_=RF#MHCG8<4;<P_6#D^C`QVZLEE-WAR36J+0O9\560
M=IL]\'Q'_KS)P226QAN:X)K?A&3Q-L`!%L70HNBSQHE$]J+&#L[OAD*IK?%\
MWT)L3TMBC.O-$6*HJ(\*_(Q/>N)>H8]])JDWHK?I4:D6I'H<"&6(16FMCM]S
M>39)17U+1GEHS=P+C,\9)MLL\M;$%!+\7!*5Y24PK_4C-\[5PG(R/\P"WY"6
M]L at W'U.TK='VF]%#X8^G!,0R()J^;[MYNXI>>2'=D1#[^W+ZEE3?[::Z[YQA
MU\+YAI\H[D$2P)XG#4Q3#;2V2HUDR*Q36U.\IWCHH*5+ACLV56Q]GV:AG%Y8
M:1FB%M:,`TFU>$5>39KV#W??WQZ>#ZO";@<C(Z]M\U-*/?MK?QX3A.5--IJ]
M.`U[S!J3T%X*M)*#LWS9U/.E0+KZJ4*\#5UE-X),(+)07,Z*-YIAJI#C(/E[
MM8PTG2FN^4)PGM1OG#-L[2B#"2T@[&Z18D_[[&'S6)=7`:%9D-JW6B#!X.-J
MJW0*Q`W&MH0,01%@.8OR,RN7J?Q,'*_WFL$.G+VNB')BQ7&L5LWK":BC[FSC
M),\:O][UJDQ3]G&WHL"2IJ5&M,(T`>\M;0B\\]W3=*2NM&66U3H8[=DP^FQK
M$L\9SWW\"7__"R>K2FAE;F1S=')E86T*96YD;V)J"C$R(#`@;V)J"C4Q.3D*
M96YD;V)J"C0@,"!O8FH*/#PO5'EP92]086=E+TUE9&EA0F]X(%LP(#`@-C$R
M(#<Y,ET*+U)O=&%T92`P+U!A<F5N="`S(#`@4 at HO4F5S;W5R8V5S/#PO4')O
M8U-E=%LO4$1&("]497AT70HO1F]N="`Y(#`@4 at H^/@HO0V]N=&5N=', at -2`P
M(%(*/CX*96YD;V)J"C$P(#`@;V)J"CP\+U1Y<&4O4&%G92]-961I84)O>"!;
M,"`P(#8Q,B`W.3)="B]2;W1A=&4@,"]087)E;G0@,R`P(%(*+U)E<V]U<F-E
M<SP\+U!R;V-3971;+U!$1B`O5&5X=%T*+T9O;G0@,3,@,"!2"CX^"B]#;VYT
M96YT<R`Q,2`P(%(*/CX*96YD;V)J"C,@,"!O8FH*/#P at +U1Y<&4 at +U!A9V5S
M("]+:61S(%L*-"`P(%(*,3`@,"!2"ET at +T-O=6YT(#(*/CX*96YD;V)J"C$@
M,"!O8FH*/#PO5'EP92`O0V%T86QO9R`O4&%G97,@,R`P(%(*/CX*96YD;V)J
M"CD@,"!O8FH*/#PO4C<*-R`P(%(O4C@*."`P(%(^/@IE;F1O8FH*,3,@,"!O
M8FH*/#PO4C<*-R`P(%(O4C@*."`P(%(^/@IE;F1O8FH*-R`P(&]B:@H\/"]"
M87-E1F]N="]4:6UE<RU2;VUA;B]4>7!E+T9O;G0*+U-U8G1Y<&4O5'EP93$^
M/@IE;F1O8FH*."`P(&]B:@H\/"]"87-E1F]N="]#;W5R:65R+U1Y<&4O1F]N
M=`HO4W5B='EP92]4>7!E,3X^"F5N9&]B:@HR(#`@;V)J"CP\+U!R;V1U8V5R
M*$=03"!':&]S='-C<FEP="`X+C$U*0HO0W)E871I;VY$871E*$0Z,C`P-C`V
M,3<R,3,P-#@I"B]-;V1$871E*$0Z,C`P-C`V,3<R,3,P-#@I/CYE;F1O8FH*
M>')E9 at HP(#$T"C`P,#`P,#`P,#`@-C4U,S4 at 9B`*,#`P,#`P.#<W,R`P,#`P
M,"!N(`HP,#`P,#`Y,#(V(#`P,#`P(&X@"C`P,#`P,#@W,#<@,#`P,#`@;B`*
M,#`P,#`P.#0R,B`P,#`P,"!N(`HP,#`P,#`P,#$U(#`P,#`P(&X@"C`P,#`P
M,#,Q,3`@,#`P,#`@;B`*,#`P,#`P.#@Y."`P,#`P,"!N(`HP,#`P,#`X.38T
M(#`P,#`P(&X@"C`P,#`P,#@X,C$@,#`P,#`@;B`*,#`P,#`P.#4V,R`P,#`P
M,"!N(`HP,#`P,#`S,3,P(#`P,#`P(&X@"C`P,#`P,#@T,#$@,#`P,#`@;B`*
M,#`P,#`P.#@U.2`P,#`P,"!N(`IT<F%I;&5R"CP\("]3:7IE(#$T("]2;V]T
M(#$@,"!2("]);F9O(#(@,"!2"B])1"!;**IGM]-N[\JB=U=[YIFP3Z\I**IG
IM]-N[\JB=U=[YIFP3Z\I70H^/@IS=&%R='AR968*.3$S-0HE)45/1 at H`
`
end
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
The main change is that instead of one "vcl_lookup" function there
are now a "vcl_hit" and a "vcl_miss" function depending
on the outcome of the lookup.
The reasons for this change is to avoid having to handle some really
silly corner cases like having a hit and then ordering a fetch
instead of a pass etc.
Since we have the "lookup" recursion possibility, anything that
could be done before can be done afterwards too, but without the
risk of an object pileup on any given URL.
Minor changes to the graphs include bold lines for the normal flow,
annotation of which variables can be accessed in the VCL code.
On the "complete implementation graph" I have added the "recursive"
path where VCL code sends us back to lookup (dotted lines) and put
the "busy object" path in a subgraph/box of its own.
Dot(1) isn't very good for making this look simple, manual
placement will make it much more readable.
As always: comments and suggestions are most welcome.
Poul-Henning
begin 664 _.pdf
M)5!$1BTQ+C(*)<?LCZ(*-2`P(&]B:@H\/"],96YG=&@@-B`P(%(O1FEL=&5R
M("]&;&%T941E8V]D93X^"G-T<F5A;0IXG)U:37,<MQ&][Z\8ZQ+9%8_0^$92
M.3BQ8Z?*J<0*4SG$KA2U7)JTEZ3$#^5@^[_GO1X`,T-15G:M8NVB%XT!&J^[
M7_?XS6!&&0S_U<_MU>;-)EDS\.]J$YQ,7_?3URB&WRFI7R\V_QJN-WZ,H0S_
MW<CP5_Q=XH__7GZY249&%]W0/GUT,AH_!"]Y]#+<[C;_V.@&.-M'F\<RA)+,
M&`N>[[UU$$03RF@%C_-&()"%Q&63*6E*\YR0LQTE43(M,PLN^E-OO\>!9?I>
M/[97PQ]/-B]>IB&.P=HXG)QO)NO(X`I6R!%/\V-R93BYVCQ_N=ON+M_NAJ].
M3OZ.`[UYV-W=?WSRP^:+D\TW&R?<%@Y>)(TI#-84K!J&A*TD"9,!WK>#_-0.
MK!F=A04C=F*3[N#%B^%OKW[XW?`3GCY^\MMAN[_<7=_SVZO3[8^[Z[/QDU^X
MHS3ZX&&CDZ\WS\\?KK?#V^W^/[>[[=OAIX]_LWD^#,/E^?#M<ZZ"O^&C/PS/
MOOSBY-GP\\_#4O;5%Y]]_NS;C[L2_GM]>G?W^SK\Y?%:%_?WK__]V</]!39U
MN3V]WWW75M1?_G1S\^/E[KL/+[C'Q(?7*J5([>NM3->?4QJ#$#-=XLT(0_5Q
M*GETLAC[-)HX;'$!P`>T?9<M5DG&C%Y!9(T?B^MS]IOS(_6(/N^#C`"2#T7&
M:!7K51*Q9L&^'>8'CE,8?>[[;N,M@%YPPM`EKN0PEGF%/J[/V&YFB0]JB[9"
M,$!GFI]1QWA&VT6;T?==5WATCNVOP/DIA_(P#G8!_3AFYQ3.7^L]#_]\^75W
MHX)G9028OL'J3K/!?<9&\^(("8`H"[,E:T>35]?=9(M5U)1E<6UMCEYW#7/'
MZ5\<:AH+BV8^)8VNFF9R at 3FZQ%A&\0-"DL"WL9$N*<Z-87`A1NY""JZG#,[#
M)W)H0P#"B>>UMM^M6-YVTV[#NCSF-TG*A?&[ZR=@H:_.`>:V9^MO;5]-\='.
M#\6-L\P?W!IO8C+.7^[N'J8P3`,5<.G_:@=[9YOKN]O;GMUO.!R2 at NP11R
M5/_($D9+3[)>8T at R;O1^'G>T/Y:TL8U9J/&VS[#(2V,FTI&ZC`S6)CVYATU'
M_"S83%27$Q>8(ZV10M=R&4DG95R*+V-)@TN";?/.D/DPCZ;KLHS$A$\%@F=0
M@"2/R3)3)A-I>BE$I%5$'Z=W,)*9JW!4ES+`8_6RUE=A#0*3R0L@=\D$12D`
MD^0&5,FP3;`SD"4F2V.UWT-PO,BFW88=;5U2\=CU"=:^^@3D_FP.^[ZJXN.=
M'PID at 6V<D160OSJ]/MOOEEP".3_ at 0OP:SJ=WFB?O+VYO'KZ_>"=8.HF!@`F2
M'3@#C8HCC!'9R03+8)D1Q!,QF2WHE)O''=^/)6T\X[M+7$G$>0'<2['`-PSC
M840)FHUF@(.V%)K,<A?(D4(R.$<E"1Z!EB%L2C&T*&0X%42D?62&0D\-=`*L
MZCQ`*0%NX^Q",@?LH]0/13EQ8(U;H9S7,X,\P+6`N18))"%W)O!2!H1L#^>"
M%HH)I[`Y@]=^B`O>O/KA/930K1GAQ>7]FA!^1-7MZ?;B]-5^]V&>=K;;@P_?
MKHG:G,%K[E1",5$F;!]FP"\`)3*VA\]:B]R282X&2&.98YR`(T1ZF+<@U0C^
MCF2:Y*%F7V>0@/`4)`8WV%+@^F5*^`+OQN7:`N1%98EB`5O.BH8T`0E;@!&$
M-V?PN"+KA'^4_L%A$N=V>1TFSV\>KL\Z at B2"Y`B9G3.C@<<@43$=.V#7 at W8<
MC"")2*.(8O3`:,OAU<0CZ%Q=WMUU>)SO[K<7[T&!P5T'$D_<F".#0AWGE8IZ
MF#B33""[,;$ZF!ZW[DQ`D$""9?#P:<IZ)CI^]Q:!3MF/`3U!'*L"Y"X3/)'B
M+<#@P^I2C]$^]$H1M5&5X!DN at HYXM>_US?VPOM9&G%I at N)HE-8CV,=*H6J.-
MC7>C3%G'(4:3>S;9O`H":R1,<"*<C3[6YB@'.$KO8$L at J%OP"9P`2X8G.$##
MALT13'YA#!N]7KVUJ%:8-UB%!WS"'1C.^Z=A"<"$`9::Z(O6(*])[DG:&A.6
MQY"",KS&B*:-;)\G'\=L82!J:6,/"5PT^X5A9C@=IW^H&2U,$5#G+LVX3C(9
MF0UNB6PK4Q.E2Q"SE%=J902JXX%JQU3N%>5M#/,%@5>F>0:OHLP+U&%]`N97
M at 15-G5U=8/VR>$`=0Z%MH<UH6VPK/#K$H:3*PF\C=P"WLV5RN\^GK$1#?>H`
M!H"FLBFG9.KL9OMPA4"G$Q`'(DJ,U83SVYLK)M'=]OY=JH4-,*LM/%@`!Q[.%
MLE7D>_RR#+G(:K8 at ZZ$Z6H`V at _X8<MML^(E`EYA(H."5:2:G*S:FHJ`EA2!K
M"9:I%"4%4JDP+V1FI_TL":Y,>6J!V,.5#_9Z8P!77"08*"RN%W$V7\2$6`NX
MP"E=@.V\TM0FB9`@\ZO[(G:XB&5DYFAM#$J94J15^XS(MD1?H`WK$U at N3`)>
M%\N?INY`_-/B`76\W?0M5$G?8EWA\2$.+@,R`Q/U67A.5.[/S)\*1WI!!B26
M<-1VX\7N]&QW>S>5",6 at 3)5W,5O3]KN!UH*9^]C9!`V/4H_4*T<E6(@RAO[I
M:!_7PVBK"*>P60J+:!>!UBGJ855QO<)GU$.E*\+"-4S`6D;-(]0/#IK6 at -W$
M-;%JQJUM6@`UA84I7$"D-7PJSLS"WL`K6,,&JS,\4WN$+0SX26*(\O1+0B,E
MKQILD3%<!CQ6&WJ31DMCV]XU at M6CKMUH7='XM:STR0P?5?I3_;FJV+6&7U;L
M at H@1'U7ZA^@=WK/"$<'4V>ET3^3XEOAF.Z-NCGJ[&;O)K+D12>EZ"5&0*2*:
MPE(5GIW8!8'O.D0C!&_GH<$DSKH!_`5B6),%IT2]N7XSN%P0!%P,'+/@6BW+
MU5"4IK?9\ZT(,#D*:<5$(L3A%VH8-H66Y:FV8Z;RM+4;0"F+'HOULG7K`E.#
MZ+(^/4[OT$L1A"P&AN6UK#B#L`D1NPF0=96E'/V.0K1](BS!1A<^5%5H7?K^
M]Q/JJ$_4HV]/]Y=GZV)4L?;D:XA>P>[^OQ+V\OIN=WO_=.W2^FXM%1##4Z_,
ML2`G(JN/83Z(7^H9W=$PU8^;US495V'OV'7<[F??J'-6+8VC]"^4,[`K,S?:
M=%@B\Z&-UE&A\6/K$?>]7Y09\+5"-^PS:MYK"[1A[X9U28H:Q=L"$E/1%V+U
M$6T,C;J)/D,WV-27FS^8%CI6SQK?QOKJK+Z\JZ3/(53+^UEAP(ES*`=DV-KA
M:IZE;<U".FBM\WP7V;IB5I`DK'YJAV[NEB%Y:8W?,F77K$FC]9%;;:%)V0)P
M*79RB><ZA$!JUYIDW[,_:B3/9N<J*Q^E?W!:%KY:*JM:9G*\F1NRP<&+,TI$
ML0]?@O*MMI^`8&U"I]DV`#S&+<*Y3:"$)-JM2JSE936T$VQ?N^V-ASL!NK33
M.Q6/#I;5!GXM'AU(_M1[GHM'R)"E7"_LD%TM?O5A4?PY"WZ at +>JI0-2L?)3>
MP8;6WFWXE=J[=;QGH,Z2"7Y]+'Q9,@\7#0B0_*RLL3<2%FWZ6N]*AAS4@
MCM,[.`O"KDYQ\)[*N3MM<(P$/?X`=,A*6BA%N!@W&D"/<6FUB0Q'`+)R+Y/4
M`P/HH at V=+5S-DEI4[S=]F:F>6SG@,>H:W$O1:1EUA)BI_+?"_U6BP'!QZD)X
M>(#8I:1>>].:YR0$&1R3DKK.+#D8AC`/W'5 at B9;%U?BK[SB&[<W5Z_WN?K=H
MBH&?T at WAIR#@DVNP6YEH=]%V;R7M at KRK,;2`?3KM*L`B3DOJVD<PN"'V?S+6
MXIL<8RW=#K$ATX4+N:9I)?54=O.E3[%:CM8ZN5%'%L83Q2]\?2Y%K^XX/=IP
M02R4YL\G;B&GG=@2Q*2X[<1 at 5[6/TD[<WBVT$Z,JT?>L[<0>601%U.K$`7P/
MT;7MBF!#IC2RW+G'CZ3/]71KL!ZCOSSYHD.DY[B:)09H\7,+R;C(*-W&!5$_
MI]K`BV"QN8OF-1:[B"@[L,,V9W6*8]1YB&_P[W\[`*P)96YD<W1R96%M"F5N
M9&]B:@HV(#`@;V)J"C,P,C4*96YD;V)J"C$Q(#`@;V)J"CP\+TQE;F=T:"`Q
M,B`P(%(O1FEL=&5R("]&;&%T941E8V]D93X^"G-T<F5A;0IXG*U;VY(DMW%]
M[Z\H\L5+A5W$_6(''VA2$A5!A2UJ'7X@&8YA3P]GJ+F0<UF&0M*_^YP$$E75
MNS39;>[$1C>R`120R,O)1-8/DYGM9/C7/_=WNQ]VV9F)_^]VT=OV];9]C;7R
M.RG]Z_7NOZ?[G9]S+-./.SO]$?_Y]\7O=]G8V5D[Z6=(KLXE3IQI-G%Z/.S^
MO).'2^]J9U_+9$/*<PF3<]7-ODPAQ#2#+KT#_LT6Q!SQH\<*@\ME+FX*Q6$1
M'BOR-939;BBYN#GG,6K5)Q4S5U+&/(-R/5;W^"V88MOW_K&_F_[]]>[#+_(4
M9Y<PT^NK7>. at G7S)6'C"X_SL8YA>W^U>?7'8'V[>'*;/7K_^3VSEAY?#T_,'
MK[_;_?;U[D\[[[#EZC#08>MIL at F\L%/RX$@(;><_M8#RK at 6`S\'Y*?@Z1^]D
M`1]^./W'-]_]Z_0W/'S^S3]/^]N;P_TSOWUSL?_+X?YR_LT_N*`T&^M*G5Y_
MOGMU]7*_G][L;__G\;!_,_WM at W_:O9JFZ>9J^NH59\'_Z;V/IO=__]O7[T]_
M__NTIGWVVX\_??^K#\8 at _/O^XNGIWWKS'\=S73\_?__EQR_/UUC4S?[B^?"U
MSBB_?/+P\)>;P]<_/^$M.KY\+U22A+W!6C\'''_*>;:90C,HKLQ at T&C'%.;@
MEW:H:<YUVE/TP)8Y#M)JDA`KY)LR9(V;W>ARN[LZ:Q0%+W at HC<^3]S91=.]6
ME`@5P!J=S;,+:!>LV8XU:WN_"\;4>2'XZN(<EPF6=GO$?C<H+E.`)IW`A2I/
MU"?T-IZ@:]`>ND:=X&@7^_]#D-^I29731Q'H#!M`0?Y<3GCZKR\^'_J3YV at 3
MK,]88->CA=L^E3B;M&PAPC:$53LXMSYE::^&"PO=<ECR.\]7#=]IXZY/Y`/F
MH]7S&1\^"1N:H"\F)&"#!=8SF<3/NQ4%,ETK'FVPIC#9;-T,:^QY-GEIX_B=
M$;L\>EB<;EHFT&9[`OIW0H0MS3ST/CQBXI26!_0V!N at 2M(<N46<XVL3)XH+U
M1(\5)#L7V_CTAZ>GEV9VR2O\[DITT[^(F8O3Z\O=J\/CX\/CPLB$H^/:A at SY
MD&#'(>0)#DGTQ4-+T"-:2*5=VHL>'5&T[7!X<T[3F]$#+,,VH(L>XD/>E5CF
MM"B,S1$<B\*)T:?3L#*/M1K'`P/?,OV:QWQ+%Y'0<X:=*J#8SYQ-GAQ8E<`C
M<G[+U^`JI*.N!'2A-/D*ML(NU2%^P60LKZX%M$8<X$*!DX4<+3,L[2&B2E$)
MTQFZ!(YG#!D=J]`>NLH^P_$^3C=I4`I?-C+ZV<7]Y>UA#0O,#!\<HM\(ZL63
MN+SGZ\>'EV^OW[9^*54P?VW]^"W4(;FAPN?@X(?UT_:0W&.*MA?)'10#=`)P
MHVU;2Z)NAP+TD]B&S7+D3\C!K at 4P1!-F#P8`<#D<.YS%G,B08*A.8H4'C4C&
MJ[``5R8(FJ631!=/S&13M(2'&V-\SO"3;7*EK7(;D>?Q+):D0D)RF5R!<B7Z
M?A_A%@EM4XQTB[=+GX@^)@H.]8):ESXGZR)@9X"7<"E!@!O\_/'Z!@+VU:N'
M;[Z;OWEY^NM7'W"9T")H4NU"1M`'*?OQXN;Y;=DRX!\1:G?TX*A)AE+F;<A-
MDV#]N>X*?L#">LJ%K]B]@PML>@)W;FC=0$-?.DK%X0#?B7JX('/T*;2,ZW,]
M;_S)_*L%@@S^%7PF*_R[>GBYOQQ<<16.V(0I9O at SV*&[A5*:57`%,H]=QU(M
M#J)8+EL:^YV+SI)S[3?/*,<N`[7=IT9WI2#@8O`RAD=8;[>:O;<Q0A^N/71Q
M.L/1\D\U82(#&7$<X'2(C4&?/!X`VJ?[PX\39.RP%Q$BEC:F;.5+1?"CY\>7
M`WOA5Y<3G.%;W?87^^O#Q3>WAX^N+FZ?I#-68V(YZON'^Z?#X_-T]?#X;ECH
M(*J&3I8V5[!T!]^`8Y%F+113"'1C=A(.5$#Q!0+L=]%`<6',(%P0P"F:Q._H
M5'-K!!L\K2&[HAFIQ+YWU,9?^V\!<QC"B02CC'--4'TH"CE%PQD3]->$IC"#
MAI5+%##.+F7("^5]=`'4]':K+^<,/U5=(BT8)'D=[=X_\#36*N.Y:T0WZA9L
M(`:Q=`9SA9*='N,&/!9^V#>#'Q3\>XE*9?%NI>WSQO(]WW5!(IB#\?@%X>
M;A'G/VXC4)5$3^-H(W28H;U at L0KMK8$Z9>A&848#7;8+T&%+LPH9Q('!"B0&
M,.(=C2\\*T<X'05*F>!FPB\/F4(\!C=BK$AVLQY;[.WC.<$K%ESR79*:O<0"7
MBZ/J@^AD"9$2)\X$S(&N,7,O,='K!@?A\\/7[.=4KHUL2>*)-6/DP>G?ON5^F
MIX4/@A>=*(ZU at L@"(!H@%7P41"S&'L[Y2O^*V"1K_*V4YLD8FL%1&E*`YTT6
M7GVIFSQK_,E0@@A=',4")8[C.V8FRE`?8 at D?)+HJ<%,X!A^->&A;DC#;!W"Q
M,**`94I!HB^?:09M@>HQCH$+A^X!EP$#$SW[8NC)+>!I2R`PY@!<K9XTS"ZQ
M`P(4^`R;83=\E- at AB:.W.<26.+LZ;]C)?AK``\*'&0#R<#9OQQRKO`"[KKB'
M<%QB-XVW>GB.J8J`6H,@@``RXY"3YG\@B#4.VMT`11J.4&V*)^NTSS9#<,[X
MTS,%INUCL&2+20L>5<`)!S.318X&!;$W,)7/<(E07HOPMD6]X!V7U-N0HPC>
M0?]&#^8TQO#6:+-3YMBTP-J`O6,@//@,^IBZM]%='ZX]='$ZP]'R3PZ^$(&4
MR/$X7ML2HY\V at RU(Q`$V19B.#;JX?-B_W,&/2`\`"!?S$:2Y>GRX6\&>K<DO
MB/3]1G.I;TYB?42MQ.NV2-8C(W)RDJNBX=/H'%Q)WC%P0LA8Z!,T16$#0U4>
M$?C*\X`]3!UI)^R0"MAI>*IV0EA!4?.QBN/7'AO<<,;HD[47ZA\D,L?F31/5
MR^4HA(?@D*6[A-P46E9KJW at .!],6\QF)<1A+Q`9`.S!+(?\<:/@%:.'NYNEI
M((*KP_/^^MV.WT6<+=0C1N=:Y.*(-;'_R+0OE,#%*'%4I-VV;`/@>(&+D%D)
M&V"6(0\1H>L<Z48A6. at 8`[->#`LDLQ&!&!C;4PK&$(8T6>*4"`4"U(X0,GJ%
M6U(2,2_&U>,X^KSQE`1GL#@&]^.>9E`*8`.DW%;X+X*$@KF9 at 8$0M'N<UM[O
M+'.V,J+WB*6/Z#-HNS\#(Y22"!V8H^DS$&(SFZ;/Z&V,T%5TREAEG^%X'Z<:
M'(1)``F\>8*S2\VS_XYB(L:$.7)$Z5MC(C=$"'LN#X]/+164/3-`ZTR0&)PN
MGF]9'$?C&.S0&O">"`7[CLQV1<GF>#2P)<0OCJX/"#0:*@6M,"*L(("J0KF9
MKC#&RI5%A<=%W`<M%-$,3%YTH&!KRDP^Z6'=D;6&CP^E&+$9EKB-UV+5YF.+
M<];P4TT.<2%`)&:`%>@PZTH/HP7V`3P)2_+E;J%D9O09G_O&M8R8$NKF8*-H
M"+5-[D%I7!H4&'ZL>TR at S?X$BF`C1-YU,"/<AT=$1C#NXP&]S81`7X+VT"7J
M#$>;.%EF*TV5W^2/?B(:QY80(1SYRY=[AO<+3P6G;<31P1@",$?&.DS5.'AW
M:CYB4A]&<ZC<$:$W-47Y1G_OUQ&.,#S`*R+8IK2J.N"A7N=3"AC(Y-MHMU25
MXT4&A!&AAZ!8,:44GNH&C4I5)>6$<PX-TN*H*O5"^U#`SQMWLF3#JR3L-<`Z
MAQS>@?L,D$^V*\$>%!5L6D(7%\'N&;658"=>)X>E1W2&QSAFT/:0NT%1R=09
M5'+U&8MLZRHZ9:RRSW"\CY-35W"R`!6_EFQO(V+$[(66:27I at P*)8DJVMT.!
M;`+'CO8BZT<4;:^D72E=W)GN9;Z5,7R at -8`EE>SE$/=0O?BVGA%5X.!R;6(>
MH7<AKD[ZSP.O@%9ZAC,QLJ#A at WTRS?,W!.,8K'BWB9O/&W^RV"-T-+RE6(G]
M<=S<!68!(H-2L"`RK(L<D']FVD"%4MN+X(\>7:S'#-I>3E$I"0C=N2'X(<$6
M"NO[,WI[$7REC%7V&8[W<:[@!]K8GM3^_QCUOL&5J$?('Q.)!N"`:2'%MP8&
M,(EW(J(`N'7-F+A^?12,"&4*'7.`IY87B=10N4[R+0<+H63]!C.-A:5"180*
M"*7*V7E)9\(NU%;[@Z?'%H"?->QD44QR][V&%MM<A-[T:J;X;J&XYG9L26+C
MEAM&V#RSW#@2W[HF-MK#(YZ!<QDS:'MDHP?%)-?N/=L,+7E=QC.TC1%]%4H9
MJ^PS'._C9'01>.&*@P7J`;O;Y<'%[?[EEO<'ZUQKET4;PI$L7MQ?2L?GYUN!
MT<QB+M<,#2%_?WB<OOC=)WAZ>@L@(]#VS+PKZ`?8I)D"`P,O1LV2E`J,K4K6
M/);>*PK at S9!W"*I>)'(2?",L;FE,(-8,))+<&+8!O.<,IU!:@Q/E501!N>1.
M*E'.V;5BEJ`8Y^JAMB7^HCSZ$@[';30L8/H=V?,W%[<WE]O4N2C'.ZO!WMN8
MI5]00B:7/]NPVS(Y6_(*[@Q*]HG);VNA^@31'7-9!GHIKS`?PPR_HA08K$!W
MV6<8[0%%!B5FJ2(;,T13F)@>S^AM*)NN0GOH*OL,Q_LX5=F8Q8R!X^O<H\^/
M;V\?6%\GVH5]Q.2WVO7T_/!X\:W>S$6#_6YCSX?':9T2VZJ6#Q*U=>DDWZ%K
MF4Y6@@!+J![)5*PH,J.#C1+/,2?=*K"L+4X\PD#,U at 9)2#OJK25TL#9)(9%>
M!&\TZZSQI]I[EGM9AF6K2^(FB4OV*F=9R,*+GEUVC)\-LU$(Y(@*Z?.J':G[
M!;K9:CIT at WI7QI(M!G:<R3*)`FA7TX at EQ$MV`^URMJT,Q/$.B7$."S&*A-*5
M66+'@HQ^X7'.J)-Y5GAA&C8\VT0IFN];J:U2-'K.WC;,V(/KGO%9L"O<4O-;
MVD.*PMPR@[:7`%PI/<88,_089#QC1"EC%=I#5ZDS'.WC9!_IF<J+OU:48A/O
M^=U*$#'YG%@8P+I*;!#`J##>A8N7`CYM+_&OSK'2JEAX:[6*8T$QO%!<Q[_G
MC3M9LG#6 at 2!S)5E;^'44J9DH->:#(Y(14[T<,7O72\U7K$*J'G2I7NI5*MJ5
MR,(AP).`=UQ>+L&R!ETMW>MX&2#IG2HU&]"NQ,BP!6$X)A<V013O1Q:51)C5
M]3](.>$V!#M]].EY!Z!+HO45WX\",$T6:@79W4)A\3"3LCR\S+D\PT!%1MIF
M(IBW/ZL>3'73:_8)M-F?(#BY40STK[#(JTW0+9@^H3<%\\H2]'==H`X_VL+)
MZIP`,QE@$TS:]>L`_4JI&GM<_K*Y=`IP-8"'[[AT.LX!ZV$O598+I=5((AJ2
M&F^]='0Q,2NZJK)T(<@]U.C!>O'LEQE&6RL@!Z772(X9>@WE>,:HLARKT!ZZ
M2IWA:!^GERCQLFU;93F0Z*@\PB)AP;>!PY'M',"&R9/$Y"BSHV)$2[&,S&UU
M#5'6*`&PI0U@)1?1'J_Q6K"!/5MGA4L=Z`,*2<&C30`L4N+!6TD66$?*2S,!
M+-XEYQ*B,B-*W,LM+`/F0*5%'P8G"V%U at 7/.<!J!L>V^-D^@X63;K,Z02EK3
MBH at 3H!1XI^_8:$&E9S^CSJ/WZ33.$OH5<+O:O-UI^:?VV4"ZL\9O]J&@L-^J
M$9A6*\5Q/5_&,).IB46663/%^J)46LH"^XBL60`I"W at 51]H\)3-169!EQ'"F
MN9AP,4?(])SA<IN6<]W:T$%I)A!K;"G8;B&A<)$O#"PV%"K9Z at NUAV?AU;"A
MHSE,W*!T(Z at 3*`KL3Q at V5)<P4&)?H`X_VL+I"EW@>O/:AGYZ\[2_>+SL%_>V
M>O\KV5#>&O+^Q+`^- at JW$8GSQK[R.F^Y_`$<ES*N!8YKS;-C70E+;9)<Q7A.
MQ2(`#0DLQ#;1%!A#'")7]A8";)>W+^Y`2:G=^S<EO`7%M5*!5*KZ^_/&K97#
MD2HE[[`$8;/A89X;YD<@Y5H4W?*7^JX>\Y>@L(?/F7D[SRL)^DX/`RYO*?6*
M(!PL5]N+BP0=60>N!"GG#0"DT?6X5^H3F<"BG`W*JDSAK/&B4/U."E)<^JU,
M*W1;[M1:^9V+K?!D`+I1N^9H>40O`-;#J,(=`^%U!%MU>\NW98P4X3M(JKQ^
M17?`Z,\DR3V.<JPA1)[<MJN2+EZ^\YR(0UFMRO<,-Q5>_2TG6PPWXS-\51G)
M+,_*?`:1:Z%C3C1OA*>RO-BVNW/A("]@"8[6,G?.L.M5UFQAO%:]J&6&^TP2
M,'3.P\V&%HTIYT?0R_=RF#MHCG8<4;<P_6#D^C`QVZLEE-WAR36J+0O9\560
M=IL]\'Q'_KS)P226QAN:X)K?A&3Q-L`!%L70HNBSQHE$]J+&#L[OAD*IK?%\
MWT)L3TMBC.O-$6*HJ(\*_(Q/>N)>H8]])JDWHK?I4:D6I'H<"&6(16FMCM]S
M>39)17U+1GEHS=P+C,\9)MLL\M;$%!+\7!*5Y24PK_4C-\[5PG(R/\P"WY"6
M]L at W'U.TK='VF]%#X8^G!,0R()J^;[MYNXI>>2'=D1#[^W+ZEE3?[::Z[YQA
MU\+YAI\H[D$2P)XG#4Q3#;2V2HUDR*Q36U.\IWCHH*5+ACLV56Q]GV:AG%Y8
M:1FB%M:,`TFU>$5>39KV#W??WQZ>#ZO";@<C(Z]M\U-*/?MK?QX3A.5--IJ]
M.`U[S!J3T%X*M)*#LWS9U/.E0+KZJ4*\#5UE-X),(+)07,Z*-YIAJI#C(/E[
MM8PTG2FN^4)PGM1OG#-L[2B#"2T@[&Z18D_[[&'S6)=7`:%9D-JW6B#!X.-J
MJW0*Q`W&MH0,01%@.8OR,RN7J?Q,'*_WFL$.G+VNB')BQ7&L5LWK":BC[FSC
M),\:O][UJDQ3]G&WHL"2IJ5&M,(T`>\M;0B\\]W3=*2NM&66U3H8[=DP^FQK
M$L\9SWW\"7__"R>K2FAE;F1S=')E86T*96YD;V)J"C$R(#`@;V)J"C4Q.3D*
M96YD;V)J"C0@,"!O8FH*/#PO5'EP92]086=E+TUE9&EA0F]X(%LP(#`@-C$R
M(#<Y,ET*+U)O=&%T92`P+U!A<F5N="`S(#`@4 at HO4F5S;W5R8V5S/#PO4')O
M8U-E=%LO4$1&("]497AT70HO1F]N="`Y(#`@4 at H^/@HO0V]N=&5N=', at -2`P
M(%(*/CX*96YD;V)J"C$P(#`@;V)J"CP\+U1Y<&4O4&%G92]-961I84)O>"!;
M,"`P(#8Q,B`W.3)="B]2;W1A=&4@,"]087)E;G0@,R`P(%(*+U)E<V]U<F-E
M<SP\+U!R;V-3971;+U!$1B`O5&5X=%T*+T9O;G0@,3,@,"!2"CX^"B]#;VYT
M96YT<R`Q,2`P(%(*/CX*96YD;V)J"C,@,"!O8FH*/#P at +U1Y<&4 at +U!A9V5S
M("]+:61S(%L*-"`P(%(*,3`@,"!2"ET at +T-O=6YT(#(*/CX*96YD;V)J"C$@
M,"!O8FH*/#PO5'EP92`O0V%T86QO9R`O4&%G97,@,R`P(%(*/CX*96YD;V)J
M"CD@,"!O8FH*/#PO4C<*-R`P(%(O4C@*."`P(%(^/@IE;F1O8FH*,3,@,"!O
M8FH*/#PO4C<*-R`P(%(O4C@*."`P(%(^/@IE;F1O8FH*-R`P(&]B:@H\/"]"
M87-E1F]N="]4:6UE<RU2;VUA;B]4>7!E+T9O;G0*+U-U8G1Y<&4O5'EP93$^
M/@IE;F1O8FH*."`P(&]B:@H\/"]"87-E1F]N="]#;W5R:65R+U1Y<&4O1F]N
M=`HO4W5B='EP92]4>7!E,3X^"F5N9&]B:@HR(#`@;V)J"CP\+U!R;V1U8V5R
M*$=03"!':&]S='-C<FEP="`X+C$U*0HO0W)E871I;VY$871E*$0Z,C`P-C`V
M,3<R,3,P-#@I"B]-;V1$871E*$0Z,C`P-C`V,3<R,3,P-#@I/CYE;F1O8FH*
M>')E9 at HP(#$T"C`P,#`P,#`P,#`@-C4U,S4 at 9B`*,#`P,#`P.#<W,R`P,#`P
M,"!N(`HP,#`P,#`Y,#(V(#`P,#`P(&X@"C`P,#`P,#@W,#<@,#`P,#`@;B`*
M,#`P,#`P.#0R,B`P,#`P,"!N(`HP,#`P,#`P,#$U(#`P,#`P(&X@"C`P,#`P
M,#,Q,3`@,#`P,#`@;B`*,#`P,#`P.#@Y."`P,#`P,"!N(`HP,#`P,#`X.38T
M(#`P,#`P(&X@"C`P,#`P,#@X,C$@,#`P,#`@;B`*,#`P,#`P.#4V,R`P,#`P
M,"!N(`HP,#`P,#`S,3,P(#`P,#`P(&X@"C`P,#`P,#@T,#$@,#`P,#`@;B`*
M,#`P,#`P.#@U.2`P,#`P,"!N(`IT<F%I;&5R"CP\("]3:7IE(#$T("]2;V]T
M(#$@,"!2("]);F9O(#(@,"!2"B])1"!;**IGM]-N[\JB=U=[YIFP3Z\I**IG
IM]-N[\JB=U=[YIFP3Z\I70H^/@IS=&%R='AR968*.3$S-0HE)45/1 at H`
`
end
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.