%!PS-Adobe-2.0 %%Title: bpf-usenix93-preprint %%Creator: Van Jacobson (van@ee.lbl.gov) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments /TeXDict 200 dict def TeXDict begin /bdef{bind def}def /@start{72 720 translate}bdef /@startdoc{72 exch div dup neg scale 0 0 transform round exch round exch itransform translate /@TeXSave save def}def /@letter{/letter where{ pop letter initmatrix}if}def /@note{/note where{pop note initmatrix}if}def /@legal{/legal where{pop legal initmatrix}if 0 216 translate}def /@landscape{ 90 rotate 72 -72 translate}def /@manualfeed{statusdict /manualfeed true put} def /@copies{/#copies exch def}def /@newfont{/newname exch def newname 7 dict def newname load begin /FontType 3 def dup neg matrix scale /FontMatrix exch def /FontBBox[0 0 1 1]def /BitMaps 128 array def /BuildChar{CharBuilder}def /Encoding 256 array def 0 1 255{Encoding exch /.undef put}for end newname newname load definefont pop}bdef /ch-image{ch-data 0 get}bdef /ch-width{ ch-data 1 get}bdef /ch-height{ch-data 2 get}bdef /ch-xoff{ch-data 3 get}bdef /ch-yoff{ch-data 4 get}bdef /ch-tfmw{ch-data 5 get}bdef /CharBuilder{/ch-code exch def /font-dict exch def /ch-data font-dict /BitMaps get ch-code get def ch-data null eq not{ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}imagemask}if}bdef /@sf{setfont}bdef /@dc{/ch-code exch def dup 0 get length 2 lt{pop[<00>1 1 0 0 8.00]}if /ch-data exch def currentfont /BitMaps get ch-code ch-data put currentfont /Encoding get ch-code dup( ) cvs cvn put}bdef /@DRAFTF{gsave newpath @draftf-font setfont 0.95 setgray 600 2800 moveto -60 rotate(Draft)show grestore}bdef /@DRAFTM{gsave newpath @draftm-font setfont 0.95 setgray 2100 70 moveto(Draft)dup stringwidth exch neg exch neg rmoveto show grestore}bdef /@bop0{pop}bdef /@bop1{pop /SaveImage save def}bdef /@draft{/@draftf-font /Helvetica-Bold findfont[1200 0 0 -1200 0 0]makefont def /@draftm-font /Helvetica-Bold findfont[400 0 0 -400 0 0] makefont def /@bop1{1 le{@DRAFTF}{@DRAFTM}ifelse /SaveImage save def}bdef} bdef /@eop{showpage SaveImage restore}bdef /@end{end}bdef /p{moveto}bdef /r{0 rmoveto}bdef /s{show}bdef /m{exch 0 rmoveto show}bdef /c{c-string dup 0 4 -1 roll put show}bdef /c-string( )def /ru{/dy exch neg def /dx exch def /x currentpoint /y exch def def newpath x y moveto dx 0 rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x y moveto}bdef /psf$TeXscale{65781.76 div}def gsave initgraphics /DocumentInitState[matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit]cvx def grestore /startTexFig{/psf$SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix{DefFigCTM setmatrix} def /defaultmatrix{DefFigCTM exch copy}def /initgraphics{DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix}def /showpage{initgraphics}def /erasepage{initgraphics} def /copypage{initgraphics}def}bdef /doclip{llx lly urx ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}bdef /endTexFig{end psf$SavedState restore}def /ReEncodeForTeX{/newfontname exch def /basefontname exch def /TeXstr 30 string def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put} ifelse}{pop pop}ifelse}forall basefontdict /MathFontName known not{/TeXvec basefontname TeXstr cvs(Courier)search{pop pop pop TeXcourvec}{pop TeXnormalvec}ifelse def TeXvec aload pop TeXvec length 2 idiv{newfont /Encoding get 3 1 roll put}repeat}if newfontname newfont definefont pop}bdef /TeXnormalvec[8#014 /fi 8#015 /fl 8#020 /dotlessi 8#022 /grave 8#023 /acute 8#024 /caron 8#025 /breve 8#026 /macron 8#027 /ring 8#030 /cedilla 8#031 /germandbls 8#032 /ae 8#033 /oe 8#034 /oslash 8#035 /AE 8#036 /OE 8#037 /Oslash 8#042 /quotedblright 8#074 /exclamdown 8#076 /questiondown 8#134 /quotedblleft 8#136 /circumflex 8#137 /dotaccent 8#173 /endash 8#174 /emdash 8#175 /hungarumlat 8#176 /tilde 8#177 /dieresis]def /TeXcourvec[8#016 /exclamdown 8#017 /questiondown 8#020 /dotlessi 8#022 /grave 8#023 /acute 8#024 /caron 8#025 /breve 8#026 /macron 8#027 /ring 8#030 /cedilla 8#031 /germandbls 8#032 /ae 8#033 /oe 8#034 /oslash 8#035 /AE 8#036 /OE 8#037 /Oslash 8#074 /less 8#076 /greater 8#134 /backslash 8#136 /circumflex 8#137 /underscore 8#173 /braceleft 8#174 /bar 8#175 /braceright 8#177 /dieresis]def /TeXPSmakefont{/TeXsize exch def findfont[TeXsize 0 0 TeXsize neg 0 0] makefont}bdef /ObliqueFont{/ObliqueAngle exch def /ObliqueBaseName exch def /ObliqueFontName exch def /ObliqueTransform[1 0 ObliqueAngle sin ObliqueAngle cos div 1 0 0]def /basefontdict ObliqueBaseName findfont ObliqueTransform makefont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy newfont 3 1 roll put}{ exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName ObliqueFontName put ObliqueFontName newfont definefont pop}bdef /SmallCapsFont {/SmallCapsBaseName exch def /SmallCapsFontName exch def /basefontdict SmallCapsBaseName findfont def /newfont basefontdict maxlength 10 add dict def newfont begin /FontName SmallCapsFontName def /FontBaseDict basefontdict 1000 scalefont def /FontSCDict FontBaseDict .8 scalefont def /FontType 3 def /BuildChar{SmallCapChar}def /FontMatrix dup basefontdict exch get def /FontBBox dup basefontdict exch get def /Encoding dup basefontdict exch get def end SmallCapsFontName newfont definefont pop}bdef /SmallCapChar{/achar(A) def achar exch 0 exch put begin achar 0 get dup 97 ge exch 122 le and{achar 0 achar 0 get 32 sub put FontSCDict}{FontBaseDict}ifelse setfont achar stringwidth setcharwidth newpath 0 0 moveto achar show end}bdef /MathEncodingVec[/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon1 /Phi /Psi /Omega /alpha /beta /gamma /delta /epsilon /zeta /nu /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /omega /epsilon /theta1 /omega1 /rho /sigma /phi1 /arrowleft /arrowleft /arrowright /arrowright /suchthat /congruent /proportional /angle /zero /one /two /three /four /five /six /seven /eight /nine /period /comma /less /slash /greater /asteriskmath /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /registerserif /copyrightserif /trademarkserif /logicalor /logicaland /section /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /dotlessi /j /weierstrass /macron /breve]def /MathCharVec[71 68 81 76 88 80 83 161 70 89 87 97 98 103 100 101 122 110 113 105 107 108 109 110 120 112 114 115 116 117 102 99 121 119 101 74 118 114 115 106 172 172 174 174 39 64 181 208 48 49 50 51 52 53 54 55 56 57 46 44 60 47 62 42 182 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 210 211 212 218 217 167 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 245 106 195 197 198]def /MathDictVec[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0]def /MathOblique{3 copy ObliqueFont pop pop MathFont}bdef /MathFont{/MathSymName exch def /MathBaseName exch def /MathFontName exch def /basefontdict MathBaseName findfont def /newfont basefontdict maxlength 10 add dict def newfont begin /FontName MathFontName def /FontDictArray[basefontdict 1000 scalefont MathSymName findfont 950 scalefont /Symbol findfont 950 scalefont]def /FontType 3 def /BuildChar{ MathFontChar}def /FontMatrix dup basefontdict exch get def /FontBBox dup basefontdict exch get def /Encoding dup basefontdict exch get dup length array copy def /WhichFont MathDictVec def /WhichChar MathCharVec def MathEncodingVec Encoding copy pop /achar(A)def end MathFontName newfont definefont pop}bdef /MathFontChar{exch begin achar exch 0 exch put FontDictArray WhichFont achar 0 get get get setfont achar dup 0 get WhichChar exch get 0 exch put achar stringwidth FontBBox setcachedevice newpath 0 0 moveto achar show end}bdef /@flushfonts{@TeXSave restore /@TeXSave save def}bdef end %%EndProlog TeXDict begin @start 300 @startdoc %%Page: 1 1 save /Times-Roman /t-rom.510 ReEncodeForTeX /t-rom.510 /t-rom.510 70.833209 TeXPSmakefont def 1 /cmsy10.360 @newfont cmsy10.360 @sf [<00C00000E00000C00000C00040C080E0C1C0F0C3C07CCF801EDE0003F00000C00003F0001EDE00 7CCF80F0C3C0E0C1C040C08000C00000C00000E00000C000> 24 21 -3 -2 24.906] 3 @dc /Times-Roman /t-rom.360 ReEncodeForTeX /t-rom.360 /t-rom.360 49.999929 TeXPSmakefont def 1 /cmsy8.300 @newfont cmsy8.300 @sf [<04000400040004000E000E000E000E000E000E000E000E000E000E000E000E000E00040075C0FF E075C0040004000E000E000E000E000E000400> 16 29 -2 6 15.682] 121 @dc /Times-Bold /t-bol.420 ReEncodeForTeX /t-bol.420 /t-bol.420 58.333229 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def 1 /cmsy6.300 @newfont cmsy6.300 @sf [<0C000C008C40EDC07F800C007F80EDC08C400C000C00> 16 11 -3 -1 15.912] 3 @dc /Times-Bold /t-bol.240 ReEncodeForTeX /t-bol.240 /t-bol.240 33.333265 TeXPSmakefont def [<181818181818181818181818181818FFFF1818181818> 8 22 -3 5 14.298] 121 @dc /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def 1 /cmsy10.300 @newfont cmsy10.300 @sf [<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF807E0> 16 16 -2 -2 20.755] 15 @dc /Times-Roman /t-rom.210 ReEncodeForTeX /t-rom.210 /t-rom.210 29.166582 TeXPSmakefont def /Times-Roman /t-rom.180 ReEncodeForTeX /t-rom.180 /t-rom.180 24.999965 TeXPSmakefont def 1 @bop1 t-rom.510 @sf 655 178 p (The)s 18(BSD)m 18(Packet)m 18(Filter:)m 270 270 p 65 c 17(New)m 18(Architecture)m 18(for)m 18(User)m -1(-level)m 17(Packet)m 18(Capture)m cmsy10.360 @sf 1704 244 p 3 c t-rom.360 @sf 621 390 p (Steven)s 13(McCanne)m cmsy8.300 @sf 964 372 p 121 c t-rom.360 @sf 994 390 p (and)s 13 r 86 c -5(an)m 12(Jacobson)m cmsy8.300 @sf 1353 372 p 121 c t-rom.360 @sf 675 448 p (Lawrence)s 12(Berkeley)m 13(Laboratory)m 780 506 p (One)s 13(Cyclotron)m 12(Road)m 782 565 p (Berkeley)s -2 r 44 c 12(CA)m 12(94720)m 608 623 p (mccanne@ee.lbl.gov)s -2 r 44 c 11(van@ee.lbl.gov)m 791 720 p (December)s 12(19,)m 13(1992)m t-bol.420 @sf -62 873 p (Abstract)s t-rom.300 @sf -62 974 p (Many)s 6(versions)m 8(of)m 7(Unix)m 8(provide)m 7(facilities)m 7(for)m 8(user)m (-level)s 6(packet)m -62 1024 p (capture,)s 14(making)m 15(possible)m 14(the)m 14(use)m 14(of)m 15(general)m 14(purpose)m 14(work-)m -62 1074 p (stations)s 10(for)m 11(network)m 11(monitoring.)m 18(Because)m 11(network)m 11(monitors)m -62 1124 p (run)s 7(as)m 7(user)m (-level)s 7(processes,)m 8(packets)m 8(must)m 8(be)m 8(copied)m 7(across)m 8(the)m -62 1174 p (kernel/user)s -1(-space)m 10(protection)m 12(boundary)m -2 r 46 c 17(This)m 12(copying)m 11(can)m 11(be)m -62 1224 p (minimized)s 9(by)m 10(deploying)m 10 r 97 c 10(kernel)m 10(agent)m 10(called)m 10 r 97 c t-ita.300 @sf 10(packet)m 10(\014lter)m t-rom.300 @sf 44 c -62 1273 p (which)s 12(discards)m 13(unwanted)m 13(packets)m 13(as)m 13(early)m 13(as)m 14(possible.)m 23(The)m -62 1323 p (original)s 7(Unix)m 8(packet)m 8(\014lter)m 8(was)m 7(designed)m 8(around)m 8 r 97 c 8(stack-based)m -62 1373 p (\014lter)s 10(evaluator)m 10(that)m 11(performs)m 11(sub-optimally)m 10(on)m 11(current)m 11(RISC)m -62 1423 p (CPUs.)s 26(The)m 15(BSD)m 14(Packet)m 14(Filter)m 15(\(BPF\))m 14(uses)m 14 r 97 c 15(new)m -2 r 44 c 14(register)m 45 c -62 1473 p (based)s 14(\014lter)m 15(evaluator)m 15(that)m 15(is)m 15(up)m 15(to)m 15(20)m 15(times)m 15(faster)m 15(than)m 15(the)m -62 1522 p (original)s 13(design.)m 28(BPF)m 14(also)m 14(uses)m 15 r 97 c 14(straightforward)m 14(buf)m (fering)s -62 1572 p (strategy)s 11(that)m 13(makes)m 12(its)m 13(overall)m 12(performance)m 12(up)m 13(to)m 12(100)m 13(times)m -62 1622 p (faster)s 9(than)m 11(Sun')m -1 r 115 c 9(NIT)m 10(running)m 11(on)m 10(the)m 11(same)m 10(hardware.)m t-bol.420 @sf -62 1771 p 49 c 57(Intr)m (oduction)s t-rom.300 @sf -62 1873 p (Unix)s 9(has)m 11(become)m 10(synonymous)m 10(with)m 11(high)m 10(quality)m 10(networking)m -62 1922 p (and)s 7(today')m -1 r 115 c 7(Unix)m 8(users)m 9(depend)m 8(on)m 8(having)m 9(reliable,)m 8(responsive)m -62 1972 p (network)s 11(access.)m 22(Unfortunately)m -2 r 44 c 12(this)m 13(dependence)m 12(means)m 13(that)m -62 2022 p (network)s 13(trouble)m 14(can)m 15(make)m 14(it)m 14(impossible)m 14(to)m 14(get)m 15(useful)m 14(work)m -62 2072 p (done)s 13(and)m 13(increasingly)m 14(users)m 13(and)m 14(system)m 14(administrators)m 13(\014nd)m -62 2122 p (that)s 15 r 97 c 16(lar)m (ge)s 15(part)m 16(of)m 16(their)m 16(time)m 15(is)m 16(spent)m 16(isolating)m 16(and)m 16(\014xing)m -62 2172 p (network)s 10(problems.)m 16(Problem)m 10(solving)m 11(requires)m 10(appropriate)m 11(di-)m -62 2221 p (agnostic)s 14(and)m 15(analysis)m 15(tools)m 14(and,)m 16(ideally)m -1 r 44 c 15(these)m 15(tools)m 14(should)m -62 2271 p (be)s 9(available)m 9(where)m 10(the)m 9(problems)m 10(are|on)m 9(Unix)m 10(workstations.)m -62 2321 p 84 c -3 r 111 c 10(allow)m 11(such)m 11(tools)m 11(to)m 12(be)m 11(constructed,)m 11 r 97 c 11(kernel)m 11(must)m 11(contain)m -62 2371 p (some)s 14(facility)m 15(that)m 15(gives)m 14(user)m (-level)s 14(programs)m 15(access)m 15(to)m 15(raw)m -2 r 44 c -62 2421 p (unprocessed)s 10(network)m 11(traf)m (\014c.[)s 55 c 93 c 11(Most)m 11(of)m 11(today')m -1 r 115 c 10(workstation)m -62 2470 p (operating)s 15(systems)m 16(contain)m 16(such)m 16 r 97 c 16(facility)m -2 r 44 c 17(e.g.,)m 17(NIT[)m (10)s 93 c 16(in)m -62 2506 p 402 2 ru cmsy6.300 @sf -20 2533 p 3 c t-bol.240 @sf -2 2544 p (This)s 11(is)m 12 r 97 c 12(pr)m (eprint)s 11(of)m 12 r 97 c 12(paper)m 12(to)m 12(be)m 12(pr)m (esented)s 12(at)m 12(the)m 12(1993)m 12 r 87 c (inter)s -62 2584 p (USENIX)s 7(confer)m (ence,)s 8(January)m 8(25{29,)m 9(1993,)m 8(San)m 8(Diego,)m 9(CA.)m cmsy6.300 @sf -18 2613 p 121 c t-rom.240 @sf -2 2625 p (This)s 9(work)m 11(was)m 10(supported)m 11(by)m 10(the)m 11(Director)m -1 r 44 c 10(Of)m (\014ce)s 10(of)m 11(Ener)m (gy)s 10(Research,)m -62 2664 p (Scienti\014c)s 5(Computing)m 5(Staf)m (f,)s 6(of)m 6(the)m 5(U.S.)m 6(Department)m 6(of)m 5(Ener)m (gy)s 5(under)m 6(Contract)m -62 2704 p (No.)s 11(DE-AC03-76SF00098.)m t-rom.300 @sf 1032 873 p (SunOS,)s 7(the)m 8(Ultrix)m 7(Packet)m 7(Filter[)m 50 c 93 c 8(in)m 7(DEC')m -1 r 115 c 6(Ultrix)m 8(and)m 7(Snoop)m 1032 923 p (in)s 10(SGI')m -1 r 115 c 10(IRIX.)m 1073 981 p (These)s 8(kernel)m 7(facilities)m 7(derive)m 7(from)m 7(pioneering)m 7(work)m 7(done)m 7(at)m 1032 1031 p (CMU)s 8(and)m 8(Stanford)m 8(to)m 8(adapt)m 7(the)m 8(Xerox)m 8(Alto)m 8(`packet)m 8(\014lter)m 2 r 39 c 8(to)m 7 r 97 c 1032 1081 p (Unix)s 7(kernel[)m 56 c (].)s 15(When)m 7(completed)m 7(in)m 7(1980,)m 8(the)m 7(CMU/Stanford)m 1032 1131 p (Packet)s 7(Filter)m -1 r 44 c 7(CSPF)m -2 r 44 c 6(provided)m 7 r 97 c 6(much)m 7(needed)m 7(and)m 7(widely)m 7(used)m 1032 1181 p (facility)s -2 r 46 c 18(However)m 11(on)m 11(today')m -1 r 115 c 10(machines)m 12(its)m 11(performance,)m 12(and)m 1032 1230 p (the)s 17(performance)m 16(of)m 17(its)m 17(descendents,)m 18(leave)m 17(much)m 17(to)m 16(be)m 17(de-)m 1032 1280 p (sired)s 14 r 124 c 15 r 97 c 14(design)m 15(that)m 14(was)m 14(entirely)m 15(appropriate)m 14(for)m 15 r 97 c 14(64KB)m 1032 1330 p (PDP-1)s -1 r 49 c 11(is)m 11(simply)m 11(not)m 12 r 97 c 11(good)m 11(match)m 12(to)m 11 r 97 c 11(16MB)m 11(Sparcstation)m 1032 1380 p (2.)s 23(This)m 13(paper)m 13(describes)m 13(the)m 13(BSD)m 13(Packet)m 13(Filter)m 44 c 12(BPF)m -2 r 44 c 12 r 97 c 13(new)m 1032 1430 p (kernel)s 13(architecture)m 14(for)m 13(packet)m 13(capture.)m 25(BPF)m 13(of)m (fers)s 13(substan-)m 1032 1479 p (tial)s 14(performance)m 13(improvement)m 14(over)m 13(existing)m 14(packet)m 14(capture)m 1032 1529 p (facilities|10)s 7(to)m 8(150)m 7(times)m 7(faster)m 7(than)m 8(Sun')m -2 r 115 c 7(NIT)m 7(and)m 7(1.5)m 8(to)m 7(20)m 1032 1579 p (times)s 9(faster)m 8(than)m 9(CSPF)m 8(on)m 9(the)m 8(same)m 9(hardware)m 9(and)m 8(traf)m (\014c)s 8(mix.)m 1032 1629 p (The)s 15(performance)m 14(increase)m 15(is)m 14(the)m 15(result)m 14(of)m 15(two)m 14(architectural)m 1032 1679 p (improvements:)s cmsy10.300 @sf 1073 1771 p 15 c t-rom.300 @sf 21(BPF)m 12(uses)m 12 r 97 c 12(re-designed,)m 13(register)m (-based)s 11(`\014lter)m 12(machine')m 1115 1820 p (that)s 13(can)m 13(be)m 12(implemented)m 13(ef)m (\014ciently)s 12(on)m 13(today')m -1 r 115 c 11(register)m 1115 1870 p (based)s 17(RISC)m 18(CPU.)m 17(CSPF)m 17(used)m 17 r 97 c 18(memory-stack-based)m 1115 1920 p (\014lter)s 12(machine)m 12(that)m 12(worked)m 12(well)m 12(on)m 12(the)m 12(PDP-1)m 49 c 11(but)m 12(is)m 12 r 97 c 1115 1970 p (poor)s 10(match)m 11(to)m 10(memory-bottlenecked)m 11(modern)m 10(CPUs.)m cmsy10.300 @sf 1073 2053 p 15 c t-rom.300 @sf 21(BPF)m 11(uses)m 10 r 97 c 11(simple,)m 10(non-shared)m 11(buf)m (fer)s 9(model)m 11(made)m 10(pos-)m 1115 2103 p (sible)s 16(by)m 16(today')m -1 r 115 c 15(lar)m (ger)s 15(address)m 16(spaces.)m 32(The)m 16(model)m 16(is)m 1115 2153 p (very)s 10(ef)m (\014cient)s 10(for)m 10(the)m 11(`usual)m 10(cases')m 11(of)m 10(packet)m 11(capture.)m t-rom.210 @sf 1988 2138 p 49 c t-rom.300 @sf 1073 2245 p (In)s 11(this)m 10(paper)m -1 r 44 c 9(we)m 11(present)m 10(the)m 10(design)m 10(of)m 10(BPF)m -2 r 44 c 9(outline)m 10(how)m 11(it)m 1032 2294 p (interfaces)s 13(with)m 12(the)m 13(rest)m 12(of)m 13(the)m 13(system,)m 13(and)m 12(describe)m 13(the)m 13(new)m 1032 2344 p (approach)s 17(to)m 18(the)m 17(\014ltering)m 17(mechanism.)m 37(Finally)m -2 r 44 c 18(we)m 17(present)m 1032 2394 p (performance)s 15(measurements)m 15(of)m 15(BPF)m -3 r 44 c 14(NIT)m -2 r 44 c 14(and)m 15(CSPF)m 15(which)m 1032 2444 p (show)s 10(why)m 11(BPF)m 10(performs)m 11(better)m 10(than)m 10(the)m 11(other)m 10(approaches.)m 1032 2479 p 402 2 ru t-rom.180 @sf 1077 2507 p 49 c t-rom.240 @sf 1092 2519 p (As)s 9(opposed)m 10(to,)m 10(for)m 9(example,)m 10(the)m 10 r 65 c -3(T&T)m 8(STREAMS)m 10(buf)m (fer)s 9(model)m 9(used)m 1032 2558 p (by)s 8(NIT)m 7(which)m 8(has)m 8(enough)m 8(options)m 7(to)m 8(be)m 8 r 84 c (uring)s 6(complete)m 8(but)m 8(appears)m 8(to)m 7(be)m 8 r 97 c 1032 2598 p (poor)s 8(match)m 9(to)m 8(any)m 8(practical)m 9(problem.)m t-rom.300 @sf 977 2828 p 49 c @eop restore %%Page: 2 2 save /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Bold /t-bol.420 ReEncodeForTeX /t-bol.420 /t-bol.420 58.333229 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def 2 @bop1 t-rom.300 @sf -62 -99 p 50 c t-obl.300 @sf 1568(BPF)m 14 r 123 c 14(The)m 14(BSD)m 14(Packet)m 14(Filter)m t-bol.420 @sf -62 45 p 50 c 57(The)m 15(Network)m 14 r 84 c -4(ap)m t-rom.300 @sf -62 147 p (BPF)s 16(has)m 17(two)m 18(main)m 17(components:)m 29(the)m 17(network)m 18(tap)m 17(and)m 17(the)m -62 197 p (packet)s 7(\014lter)m -1 r 46 c 14(The)m 9(network)m 8(tap)m 9(collects)m 8(copies)m 9(of)m 8(packets)m 8(from)m -62 246 p (the)s 9(network)m 10(device)m 9(drivers)m 10(and)m 10(delivers)m 10(them)m 10(to)m 10(listening)m 9(ap-)m -62 296 p (plications.)s 19(The)m 12(\014lter)m 12(decides)m 12(if)m 12 r 97 c 11(packet)m 12(should)m 12(be)m 12(accepted)m -62 346 p (and,)s 8(if)m 8(so,)m 9(how)m 9(much)m 9(of)m 8(it)m 9(to)m 8(copy)m 9(to)m 8(the)m 9(listening)m 8(application.)m -20 405 p (Figure)s 7 r 49 c 9(illustrates)m 8(BPF')m -1 r 115 c 8(interface)m 8(with)m 9(the)m 9(rest)m 8(of)m 9(the)m 8(sys-)m -62 455 p (tem.)s 24(When)m 13 r 97 c 13(packet)m 14(arrives)m 13(at)m 14 r 97 c 13(network)m 14(interface)m 13(the)m 13(link)m -62 504 p (level)s 10(device)m 12(driver)m 11(normally)m 11(sends)m 12(it)m 11(up)m 12(the)m 11(system)m 11(protocol)m -62 554 p (stack.)s 14(But)m 10(when)m 10(BPF)m 10(is)m 10(listening)m 10(on)m 10(this)m 10(interface,)m 10(the)m 10(driver)m -62 604 p (\014rst)s 6(calls)m 7(BPF)m -2 r 46 c 6(BPF)m 7(feeds)m 8(the)m 7(packet)m 7(to)m 7(each)m 8(participating)m 7(pro-)m -62 654 p (cess')s 10(\014lter)m -2 r 46 c 16(This)m 10(user)m (-de\014ned)s 10(\014lter)m 11(decides)m 10(whether)m 11 r 97 c 10(packet)m -62 704 p (is)s 10(to)m 10(be)m 11(accepted)m 10(and)m 11(how)m 10(many)m 11(bytes)m 11(of)m 10(each)m 11(packet)m 10(should)m -62 753 p (be)s 10(saved.)m 16(For)m 10(each)m 11(\014lter)m 11(that)m 10(accepts)m 11(the)m 10(packet,)m 11(BPF)m 11(copies)m -62 803 p (the)s 6(requested)m 8(amount)m 7(of)m 7(data)m 8(to)m 7(the)m 7(buf)m (fer)s 7(associated)m 7(with)m 7(that)m -62 853 p (\014lter)s -2 r 46 c 22(The)m 13(device)m 13(driver)m 13(then)m 13(regains)m 13(control.)m 23(If)m 13(the)m 13(packet)m -62 903 p (was)s 6(not)m 8(addressed)m 7(to)m 7(the)m 7(local)m 8(host,)m 7(the)m 8(driver)m 7(returns)m 7(from)m 7(the)m -62 953 p (interrupt.)s 15(Otherwise,)m 10(normal)m 10(protocol)m 11(processing)m 10(proceeds.)m -62 1012 p 15866553 13169235 8288501 19668746 32035717 39600619 startTexFig /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 52 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Helvetica reencodeISO def /Helvetica-Bold reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def Begin [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 57 238 ] concat 231 146 231 194 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 217 238 ] concat 231 146 231 194 Line End Begin %I Line 1 0 0 [12 4] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 -58 ] concat 15 458 463 458 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 137 238 ] concat 231 146 231 194 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 335 322 335 354 Line End Begin %I Rect 0 0 0 [12 4] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 0.991826 1.49886e-09 0 0.75317 146.888 339.098 ] concat 23 242 231 442 Rect End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 143 234 327 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 303 234 335 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 223 234 327 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 143 234 127 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 223 234 135 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 303 234 143 306 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 127 322 199 354 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 127 322 127 354 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 127 322 55 354 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 55 426 55 474 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 55 378 55 402 Line End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 -31 286 ] concat 287 146 351 178 Rect End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 41 270 ] concat 135 314 183 338 Rect End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 41 318 ] concat 135 314 183 338 Rect End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 137 262 ] concat 63 466 32 24 Elli End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 185 648 ] concat [ (buffer) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 188.5 600 ] concat [ (filter) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 178.5 738 ] concat [ (network) (monitor) ] Text End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 321 334 ] concat 159 210 8 8 Elli End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.915094 -0 -0 0.677009 184.009 389.01 ] concat 271 290 375 418 Rect End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 261.5 458 ] concat [ (link-level) ( driver) ] Text End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 49 286 ] concat 287 146 351 178 Rect End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 341.5 458 ] concat [ (link-level) ( driver) ] Text End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 129 286 ] concat 287 146 351 178 Rect End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 421.5 458 ] concat [ (link-level) ( driver) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 457.084 638.671 ] concat [ (protocol) ( stack) ] Text End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 217 230 ] concat 55 426 55 474 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 217 230 ] concat 55 378 55 402 Line End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 113 270 ] concat 135 314 183 338 Rect End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 113 318 ] concat 135 314 183 338 Rect End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 209 262 ] concat 63 466 32 24 Elli End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 257 648 ] concat [ (buffer) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 260.5 600 ] concat [ (filter) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 250.5 738 ] concat [ (network) (monitor) ] Text End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 289 230 ] concat 55 426 55 474 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 289 230 ] concat 55 378 55 402 Line End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 185 270 ] concat 135 314 183 338 Rect End Begin %I Rect 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 185 318 ] concat 135 314 183 338 Rect End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 281 262 ] concat 63 466 32 24 Elli End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 329 648 ] concat [ (buffer) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 332.5 600 ] concat [ (filter) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 330 732 ] concat [ (rarpd) ] Text End Begin %I Line 1 0 0 [12 4] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 15 458 463 458 Line End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 544 707 ] concat [ (user) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 544 683 ] concat [ (kernel) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 544 419 ] concat [ (kernel) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 12 SetF [ 1 0 0 1 544 387 ] concat [ (network) ] Text End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 113 334 ] concat 159 210 8 8 Elli End Begin %I Text 0 0 0 SetCFg Helvetica-Bold 14 SetF [ 1 0 0 1 192 557 ] concat [ (BPF) ] Text End End %I eop showpage end endTexFig 223 1937 p (Figure)s 10(1:)m h-med.300 @sf 16(BPF)m 11(Overview)m t-rom.300 @sf -20 2037 p (Since)s 12 r 97 c 14(process)m 14(might)m 13(want)m 14(to)m 14(look)m 14(at)m 13(every)m 14(packet)m 14(on)m 14 r 97 c -62 2086 p (network)s 16(and)m 16(the)m 17(time)m 17(between)m 17(packets)m 16(can)m 17(be)m 17(only)m 17 r 97 c 16(few)m -62 2136 p (microseconds,)s 11(it)m 12(is)m 12(not)m 12(possible)m 12(to)m 12(do)m 12 r 97 c 12(read)m 11(system)m 12(call)m 12(per)m -62 2186 p (packet)s 13(and)m 14(BPF)m 14(must)m 14(collect)m 14(the)m 14(data)m 14(from)m 14(several)m 14(packets)m -62 2236 p (and)s 11(return)m 11(it)m 12(as)m 11 r 97 c 12(unit)m 12(when)m 11(the)m 12(monitoring)m 12(application)m 11(does)m -62 2286 p 97 c 8(read.)m 15 r 84 c -2 r 111 c 8(maintain)m 9(packet)m 9(boundaries,)m 9(BPF)m 9(encapsulates)m 9(the)m -62 2336 p (captured)s 9(data)m 11(from)m 10(each)m 10(packet)m 10(with)m 11 r 97 c 10(header)m 10(that)m 10(includes)m 11 r 97 c -62 2385 p (time)s 9(stamp,)m 11(length,)m 10(and)m 11(of)m (fsets)s 9(for)m 11(data)m 10(alignment.)m t-bol.360 @sf -62 2513 p (2.1)s 49(Packet)m 12(Filtering)m t-rom.300 @sf -62 2600 p (Because)s 9(network)m 11(monitors)m 10(often)m 10(want)m 11(only)m 10 r 97 c 10(small)m 11(subset)m 10(of)m -62 2650 p (network)s 13(traf)m (\014c,)s 14 r 97 c 14(dramatic)m 13(performance)m 14(gain)m 14(is)m 14(realized)m 14(by)m 1032 45 p (\014ltering)s 12(out)m 11(unwanted)m 12(packets)m 12(in)m 12(interrupt)m 11(context.)m 20 r 84 c -2 r 111 c 11(min-)m 1032 95 p (imize)s 13(memory)m 12(traf)m (\014c,)s 13(the)m 12(major)m 13(bottleneck)m 13(in)m 12(most)m 13(modern)m 1032 145 p (workstations,)s 16(the)m 15(packet)m 15(should)m 15(be)m 15(\014ltered)m 15(`in)m 15(place')m 15(\(e.g.,)m 1032 195 p (where)s 11(the)m 12(network)m 11(interface)m 12(DMA)m 11(engine)m 11(put)m 12(it\))m 11(rather)m 11(than)m 1032 244 p (copied)s 12(to)m 12(some)m 11(other)m 12(kernel)m 12(buf)m (fer)s 11(before)m 12(\014ltering.)m 20(Thus,)m 12(if)m 1032 294 p (the)s 10(packet)m 9(is)m 10(not)m 10(accepted,)m 9(only)m 10(those)m 10(bytes)m 9(that)m 10(were)m 10(needed)m 1032 344 p (by)s 10(the)m 11(\014ltering)m 10(process)m 11(are)m 10(referenced)m 10(by)m 11(the)m 10(host.)m 1073 403 p (In)s 8(contrast,)m 8(SunOS')m -1 r 115 c 6(STREAMS)m 7(NIT)m 8 r 91 c (10)s 93 c 7(copies)m 7(the)m 8(pack-)m 1032 453 p (ets)s 7(before)m 6(\014ltering)m 7(and)m 6(as)m 7 r 97 c 7(result)m 6(suf)m (fers)s 6 r 97 c 7(performance)m 7(degra-)m 1032 502 p (dation.)s 15(The)m 8(STREAMS)m 8(packet)m 8(\014lter)m 8(module)m 8 r 40 c t-ita.300 @sf (nit)s 2 r 13 2 ru 13(pf\(4M\))m t-rom.300 @sf 41 c 8(sits)m 1032 552 p (on)s 8(top)m 8(of)m 8(the)m 8(packet)m 8(capture)m 8(module)m 8 r 40 c t-ita.300 @sf (nit)s 3 r 13 2 ru 12(if\(4M\))m t-rom.300 @sf (\).)s 8(Each)m 8(packet)m 1032 602 p (received)s 11(is)m 12(copied)m 11(to)m 11(an)m 12(mbuf,)m 11(and)m 11(passed)m 12(of)m 102 c 10(to)m 12(NIT)m -2 r 44 c 10(which)m 1032 652 p (then)s 17(allocates)m 17 r 97 c 17(STREAMS)m 17(message)m 17(buf)m (fer)s 16(and)m 17(copies)m 17(in)m 1032 702 p (the)s 12(packet.)m 19(The)m 12(message)m 12(buf)m (fer)s 11(is)m 11(then)m 12(sent)m 12(upstream)m 12(to)m 11(the)m 1032 751 p (packet)s 11(\014lter)m 44 c 10(which)m 12(may)m 11(decide)m 11(to)m 12(discard)m 11(the)m 12(packet.)m 18(Thus,)m 1032 801 p 97 c 9(copy)m 10(of)m 9(each)m 10(packet)m 9(is)m 9(always)m 10(made,)m 9(and)m 10(many)m 9(CPU)m 10(cycles)m 1032 851 p (will)s 10(be)m 11(wasted)m 10(copying)m 11(unwanted)m 10(packets.)m t-bol.360 @sf 1032 979 p (2.2)s 50 r 84 c -4(ap)m 12(Performance)m 12(Measur)m (ements)s t-rom.300 @sf 1032 1065 p (Before)s 12(discussing)m 12(the)m 12(details)m 12(of)m 12(the)m 11(packet)m 12(\014lter)m 44 c 11(we)m 12(present)m 1032 1115 p (some)s 11(measurements)m 11(which)m 11(compare)m 11(the)m 11(the)m 11(relative)m 11(costs)m 12(of)m 1032 1165 p (the)s 10(BPF)m 9(and)m 10(SunOS)m 10(STREAMS)m 9(buf)m (fering)s 9(models.)m 16(This)m 10(per-)m 1032 1215 p (formance)s 10(is)m 11(independent)m 10(of)m 11(the)m 10(packet)m 10(\014ltering)m 11(machinery)m -2 r 46 c 1073 1274 p 87 c -2 r 101 c 14(con\014gured)m 15(both)m 15(BPF)m 14(and)m 15(NIT)m 15(into)m 15(the)m 15(same)m 15(SunOS)m 1032 1323 p (4.1.1)s 9(kernel,)m 9(and)m 9(took)m 9(our)m 9(measurements)m 9(on)m 9 r 97 c 9(Sparcstation)m 10(2.)m 1032 1373 p (The)s 14(measurements)m 13(re\015ect)m 14(the)m 14(overhead)m 13(incurred)m 14(during)m 14(the)m 1032 1423 p (interrupt)s 10(processing)m 10 r 124 c 10(i.e.,)m 10(how)m 11(long)m 10(it)m 10(takes)m 10(each)m 10(system)m 10(to)m 1032 1473 p (stash)s 11(the)m 11(packet)m 11(into)m 11 r 97 c 11(buf)m (fer)s -2 r 46 c 16(For)m 11(BPF)m 11(we)m 11(simply)m 11(measured)m 1032 1523 p (the)s 10(before)m 10(and)m 11(after)m 10(times)m 10(of)m 11(the)m 10(tap)m 10(call,)m t-ita.300 @sf 10(bpf)m 3 r 13 2 ru 12(tap\(\))m t-rom.300 @sf 44 c 11(using)m 10(the)m 1032 1573 p (Sparcstation')s -1 r 115 c 8(microsecond)m 9(clock.)m 16(For)m 9(NIT)m 9(we)m 10(measured)m 9(the)m 1032 1622 p (time)s 10(of)m 9(the)m 10(tap)m 10(call)m t-ita.300 @sf 9(snit)m 3 r 13 2 ru 12(intr\(\))m t-rom.300 @sf 10(plus)m 10(the)m 9(additional)m 10(overhead)m 10(of)m 1032 1672 p (copying)s 10(promiscuous)m 9(packets)m 10(to)m 10(mbufs.)m 15(\(Promiscuous)m 10(pack-)m 1032 1722 p (ets)s 13(are)m 13(those)m 13(packets)m 13(which)m 13(were)m 13(not)m 13(addressed)m 13(to)m 13(the)m 13(local)m 1032 1772 p (host,)s 16(and)m 15(are)m 15(present)m 16(only)m 15(because)m 15(the)m 15(packet)m 15(\014lter)m 15(is)m 15(run-)m 1032 1822 p (ning.\))s 20(In)m 11(other)m 12(words,)m 12(we)m 12(included)m 12(the)m 11(performance)m 12(hit)m 12(that)m 1032 1871 p (NIT)s 7(takes)m 6(for)m 7(not)m 7(\014ltering)m 6(packets)m 7(in)m 6(place.)m 15 r 84 c -2 r 111 c 6(obtain)m 6(accurate)m 1032 1921 p (timings,)s 13(interrupts)m 12(were)m 13(locked)m 12(out)m 12(during)m 13(the)m 12(instrumented)m 1032 1971 p (code)s 10(segments.)m 1073 2030 p (The)s 9(data)m 9(sets)m 9(were)m 9(taken)m 9(as)m 9 r 97 c 9(histogram)m 8(of)m 9(processing)m 9(time)m 1032 2080 p (versus)s 15(packet)m 15(length.)m 28 r 87 c -2 r 101 c 14(plotted)m 15(the)m 14(mean)m 15(processing)m 15(per)m 1032 2129 p (packet)s 9(versus)m 10(packet)m 9(size,)m 9(for)m 10(two)m 9(con\014gurations:)m 15(an)m 9(\\accept)m 1032 2179 p (all")s 10(\014lter)m 44 c 9(and)m 11 r 97 c 10(\\reject)m 10(all")m 11(\014lter)m -1 r 46 c 1073 2238 p (In)s 18(the)m 17(\014rst)m 17(case,)m 19(the)m 17(STREAMS)m 17(NIT)m 17(buf)m (fering)s 17(module)m 1032 2288 p 40 c t-ita.300 @sf (nit)s 2 r 13 2 ru 13(buf\(4M\))m t-rom.300 @sf 41 c 11(was)m 11(pushed)m 11(on)m 11(the)m 11(NIT)m 11(stream)m 11(with)m 11(its)m t-ita.300 @sf 11(chunk-)m 1032 2338 p (size)s t-rom.300 @sf 17(parameter)m 17(set)m 17(to)m 17(the)m 18(16K)m 17(bytes.)m 35(Similarly)m -1 r 44 c 18(BPF)m 17(was)m 1032 2387 p (con\014gured)s 12(to)m 13(use)m 12(16K)m 13(buf)m (fers.)s 21(The)m 12(packet)m 13(\014ltering)m 12(module)m 1032 2437 p (which)s 9(usually)m 8(sits)m 9(between)m 9(the)m 8(NIT)m 9(interface)m 8(and)m 9(NIT)m 9(buf)m (fer-)s 1032 2487 p (ing)s 10(modules)m 10(was)m 11(omitted)m 10(to)m 10(ef)m (fect)s 10(\\accept)m 10(all")m 10(semantics.)m 16(In)m 1032 2537 p (both)s 12(cases,)m 12(no)m 12(truncation)m 12(limits)m 12(were)m 12(speci\014ed.)m 20(This)m 12(data)m 12(is)m 1032 2587 p (shown)s 10(in)m 11(Figure)m 10(2.)m 16(Both)m 10(BPF)m 11(and)m 10(NIT)m 10(show)m 11 r 97 c 10(linear)m 11(growth)m 1032 2636 p (with)s 7(captured)m 7(packet)m 7(size)m 7(re\015ecting)m 7(the)m 7(cost)m 7(of)m 7(packet-to-\014lter)m 1032 2686 p (buf)s (fer)s 11(copies.)m 21(However)m 12(the)m 12(dif)m (ferent)s 11(slopes)m 12(of)m 12(the)m 12(BPF)m 12(and)m @eop restore %%Page: 3 3 save /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Roman /t-rom.210 ReEncodeForTeX /t-rom.210 /t-rom.210 29.166582 TeXPSmakefont def 1 /cmmi10.300 @newfont cmmi10.300 @sf [<600000E000007000007000007000007000003800003800003BE0E03E19901E07881C03881C0388 1C03880E01C00E01C00E01C00E01C00700E00700E00700E00700E0038070038070038070018030> 24 26 -1 8 25.012] 22 @dc /Times-Roman /t-rom.180 ReEncodeForTeX /t-rom.180 /t-rom.180 24.999965 TeXPSmakefont def /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def /Times-Italic /t-ita.240 ReEncodeForTeX /t-ita.240 /t-ita.240 33.333265 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.420 ReEncodeForTeX /t-bol.420 /t-bol.420 58.333229 TeXPSmakefont def 3 @bop1 t-obl.300 @sf -62 -99 p 87 c -2(inter)m 13(USENIX)m 14 r 123 c 14(Jan.,)m 14(1993)m 14 r 123 c 13(San)m 14(Diego,)m 14(CA)m t-rom.300 @sf 1270 r 51 c 257 4 p 23037275 15156103 914458 -37625850 50047420 -5379665 startTexFig -90 rotate 100 dict begin /bd {bind def} def /I {Coord SetPage 1 setlinecap 1 setlinejoin LineTypes {RastersPerPoint ScaleArray} forall /Helvetica findfont PointSize RastersPerPoint mul Cex mul scalefont setfont} bd /A {PageBegin} bd /B {newpath} bd /C {currentpoint stroke moveto} bd /E {stroke} bd /M {moveto} bd /L {lineto} bd /S {moveto lineto stroke} bd /F {closepath fill} bd /P {gsave moveto Pch-x Pch-y rmoveto Pch Show grestore} bd /T {/Adjust exch def gsave translate StringRot rotate 0 0 moveto dup stringwidth pop neg Adjust mul Text-y rmoveto Show grestore} bd /X {erasepage InPage {PageEnd} if} bd /Z {gsave showpage grestore PageEnd} bd /W {end} bd /St {1 sub LineTypes dup 3 1 roll length Rem floor get 0 setdash} bd /Sw {abs 2 div RastersPerPoint mul setlinewidth SetClip} bd /Sc {dup dup 1 lt exch 0 ge and {1 exch sub setgray} {1 sub Colors dup 3 1 roll length Rem floor get dup type /arraytype eq {aload pop sethsbcolor} {setgray} ifelse} ifelse} bd /Sp {Pch exch 0 exch put gsave newpath 0 0 moveto Pch false charpath flattenpath pathbbox exch 3 1 roll add 2 div neg /Pch-y exch def add 2 div neg /Pch-x exch def grestore} bd /Sx {dup Cex div /Ratio exch def /Cex exch def currentfont Ratio scalefont setfont /Pch-x Pch-x Ratio mul def /Pch-y Pch-y Ratio mul def /Text-y Text-y Ratio mul def} bd /So {4 1 roll exch 4 -1 roll Plot astore pop SetClip} bd /Sg {4 1 roll exch 4 -1 roll Figure astore pop SetClip} bd /Sr {/StringRot exch def} bd /Sd {0 eq /ClipToPlot exch def SetClip} bd /Sf {dup 0 lt /Outline exch def abs 1 sub Fonts dup 3 1 roll length Rem floor get findfont PointSize Cex mul RastersPerPoint mul scalefont dup setfont dup /FontMatrix get /Matrix exch def /FontBBox get aload pop Matrix transform 4 2 roll Matrix transform exch pop add 2 div neg /Text-y exch def pop} bd /InPage false def /Clip 4 array def /Page 4 array def /Figure [0 0 1 1] def /Plot [0 0 1 1] def /ClipToPlot true def /Cex 1 def /Outline false def /Pch 1 string def /Pch-x 0 def /Pch-y 0 def /Text-y 0 def /LineTypes [ % in default units [] [1 2] [4 4] [8 4] [13 3] [16 2 2 2] [8 2 2 2] [1 13] [6 5] [12 4] ] def /Rem {2 copy div floor mul sub floor cvi} bd /RastersPerPoint {RastersPerInch 72 div} bd /ScaleArray {/Factor exch def /Array exch bd 0 1 Array length 1 sub {dup Array exch get Factor mul Array 3 1 roll put} for} bd /Coord {Region aload pop /uy exch def /ux exch def /ly exch def /lx exch def uy ly sub ux lx sub Landscape {exch} if /Width exch def /Height exch def lx ly translate Landscape {90 rotate 0 Height neg translate} if 1 RastersPerPoint div dup scale} bd /Show {Outline {false charpath stroke} {show} ifelse} bd /BoxClip {/CLW currentlinewidth def 2 {CLW add 4 1 roll} repeat 2 {CLW sub 4 1 roll} repeat initclip newpath 2 index exch 2 index exch dup 6 index exch moveto 3 {lineto} repeat closepath clip newpath} bd /Subregion {/A exch def /Uy exch def /Ux exch def /Ly exch def /Lx exch def Ux Lx sub A 0 get mul Lx add Uy Ly sub A 1 get mul Ly add Ux Lx sub A 2 get mul Lx add Uy Ly sub A 3 get mul Ly add} bd /SetFigure {Page aload pop Figure Subregion} bd /SetPlot {SetFigure Plot Subregion} bd /SetClip {ClipToPlot {SetPlot} {SetFigure} ifelse BoxClip} bd /SetPage {0 0 Width Height Page astore RastersPerPoint ScaleArray} bd /PageBegin {save /PageContext exch def /InPage true def} bd /PageEnd {PageContext restore /InPage false def} bd /Landscape true def /Region [20.8788 11.802 590.881 780.438] def /RastersPerInch 300 def /PointSize 14 def /Fonts [ /Helvetica /Courier /Times-Roman /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Italic /Times-Bold /Times-BoldItalic /Symbol /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold /NewCenturySchlbk-Italic /NewCenturySchlbk-BoldItalic /Palatino-Roman /Palatino-Bold /Palatino-Italic /Palatino-BoldItalic /ZapfChancery-MediumItalic /ZapfDingbats ] def /Colors [ 0 0.6 0.3 0.9 0.4 0.7 0.1 0.5 0.8 0.2 ] def I A 1 St 1 Sw 1 Sc 42 Sp 1 Sx 0.0896133 0.9541 0.150315 0.879158 So 0 1 0 1 Sg 0 Sr 1 Sd 1 Sf (Packet Size \(bytes\)) 1671 112 0.5 T 90 Sr (Mean Per Packet Overhead \(usec\)) 42 1223 0.5 T 0 Sr 287 357 287 322 S 633 357 633 322 S 979 357 979 322 S 1325 357 1325 322 S 1671 357 1671 322 S 2017 357 2017 322 S 2363 357 2363 322 S 2710 357 2710 322 S 3056 357 3056 322 S 287 357 3056 357 S (0) 287 252 0.5 T (200) 633 252 0.5 T (400) 979 252 0.5 T (600) 1325 252 0.5 T (800) 1671 252 0.5 T (1000) 2017 252 0.5 T (1200) 2363 252 0.5 T (1400) 2710 252 0.5 T (1600) 3056 252 0.5 T 287 357 252 357 S 287 604 252 604 S 287 852 252 852 S 287 1099 252 1099 S 287 1346 252 1346 S 287 1593 252 1593 S 287 1841 252 1841 S 287 2088 252 2088 S 287 357 287 2088 S (0) 217 357 1 T (100) 217 604 1 T (200) 217 852 1 T (300) 217 1099 1 T (400) 217 1346 1 T (500) 217 1593 1 T (600) 217 1841 1 T (700) 217 2088 1 T 0 Sd B 287 2088 M 287 357 L 3056 357 L 3056 2088 L 287 2088 L E 2 Sp B 393 611 M 404 588 L 381 588 L 393 611 L E B 394 628 M 406 605 L 383 605 L 394 628 L E B 396 629 M 407 606 L 385 606 L 396 629 L E B 398 624 M 409 602 L 386 602 L 398 624 L E B 399 622 M 411 599 L 388 599 L 399 622 L E B 401 627 M 412 604 L 390 604 L 401 627 L E B 403 631 M 414 609 L 392 609 L 403 631 L E B 405 635 M 416 612 L 393 612 L 405 635 L E B 406 622 M 418 600 L 395 600 L 406 622 L E B 408 640 M 419 618 L 397 618 L 408 640 L E B 410 627 M 421 604 L 399 604 L 410 627 L E B 412 626 M 423 604 L 400 604 L 412 626 L E B 413 620 M 425 598 L 402 598 L 413 620 L E B 415 641 M 426 618 L 404 618 L 415 641 L E B 417 629 M 428 607 L 406 607 L 417 629 L E B 419 632 M 430 609 L 407 609 L 419 632 L E B 420 624 M 431 602 L 409 602 L 420 624 L E B 422 634 M 433 611 L 411 611 L 422 634 L E B 424 632 M 435 610 L 412 610 L 424 632 L E B 425 636 M 437 614 L 414 614 L 425 636 L E B 427 627 M 438 605 L 416 605 L 427 627 L E B 429 637 M 440 615 L 418 615 L 429 637 L E B 431 638 M 442 616 L 419 616 L 431 638 L E B 432 638 M 444 616 L 421 616 L 432 638 L E B 434 629 M 445 607 L 423 607 L 434 629 L E B 436 640 M 447 617 L 425 617 L 436 640 L E B 438 639 M 449 616 L 426 616 L 438 639 L E B 439 640 M 451 618 L 428 618 L 439 640 L E B 441 634 M 452 611 L 430 611 L 441 634 L E B 443 643 M 454 621 L 431 621 L 443 643 L E B 444 641 M 456 618 L 433 618 L 444 641 L E B 446 643 M 457 621 L 435 621 L 446 643 L E B 448 634 M 459 612 L 437 612 L 448 634 L E B 450 648 M 461 625 L 438 625 L 450 648 L E B 451 643 M 463 620 L 440 620 L 451 643 L E B 453 648 M 464 626 L 442 626 L 453 648 L E B 455 638 M 466 615 L 444 615 L 455 638 L E B 457 650 M 468 627 L 445 627 L 457 650 L E B 458 649 M 470 626 L 447 626 L 458 649 L E B 460 651 M 471 628 L 449 628 L 460 651 L E B 462 642 M 473 620 L 451 620 L 462 642 L E B 464 656 M 475 633 L 452 633 L 464 656 L E B 465 649 M 476 627 L 454 627 L 465 649 L E B 467 654 M 478 632 L 456 632 L 467 654 L E B 469 645 M 480 623 L 457 623 L 469 645 L E B 470 652 M 482 629 L 459 629 L 470 652 L E B 472 658 M 483 635 L 461 635 L 472 658 L E B 474 657 M 485 635 L 463 635 L 474 657 L E B 476 649 M 487 626 L 464 626 L 476 649 L E B 477 694 M 489 672 L 466 672 L 477 694 L E B 479 682 M 490 659 L 468 659 L 479 682 L E B 481 692 M 492 670 L 470 670 L 481 692 L E B 483 690 M 494 667 L 471 667 L 483 690 L E B 484 686 M 496 663 L 473 663 L 484 686 L E B 486 689 M 497 666 L 475 666 L 486 689 L E B 488 697 M 499 674 L 476 674 L 488 697 L E B 489 676 M 501 653 L 478 653 L 489 676 L E B 491 683 M 502 661 L 480 661 L 491 683 L E B 493 690 M 504 668 L 482 668 L 493 690 L E B 495 688 M 506 665 L 483 665 L 495 688 L E B 496 679 M 508 656 L 485 656 L 496 679 L E B 498 693 M 509 671 L 487 671 L 498 693 L E B 500 694 M 511 672 L 489 672 L 500 694 L E B 502 701 M 513 678 L 490 678 L 502 701 L E B 503 678 M 515 656 L 492 656 L 503 678 L E B 505 709 M 516 687 L 494 687 L 505 709 L E B 507 692 M 518 670 L 496 670 L 507 692 L E B 508 712 M 520 689 L 497 689 L 508 712 L E B 510 694 M 521 671 L 499 671 L 510 694 L E B 512 700 M 523 677 L 501 677 L 512 700 L E B 514 708 M 525 686 L 502 686 L 514 708 L E B 515 705 M 527 683 L 504 683 L 515 705 L E B 517 695 M 528 672 L 506 672 L 517 695 L E B 519 697 M 530 675 L 508 675 L 519 697 L E B 521 699 M 532 676 L 509 676 L 521 699 L E B 522 701 M 534 678 L 511 678 L 522 701 L E B 524 699 M 535 677 L 513 677 L 524 699 L E B 526 704 M 537 681 L 515 681 L 526 704 L E B 528 700 M 539 677 L 516 677 L 528 700 L E B 529 708 M 541 685 L 518 685 L 529 708 L E B 531 699 M 542 676 L 520 676 L 531 699 L E B 533 715 M 544 692 L 521 692 L 533 715 L E B 534 712 M 546 689 L 523 689 L 534 712 L E B 536 719 M 547 697 L 525 697 L 536 719 L E B 538 701 M 549 678 L 527 678 L 538 701 L E B 540 696 M 551 673 L 528 673 L 540 696 L E B 541 713 M 553 691 L 530 691 L 541 713 L E B 543 698 M 554 676 L 532 676 L 543 698 L E B 545 697 M 556 675 L 534 675 L 545 697 L E B 547 723 M 558 700 L 535 700 L 547 723 L E B 548 710 M 560 688 L 537 688 L 548 710 L E B 550 698 M 561 676 L 539 676 L 550 698 L E B 552 749 M 563 727 L 541 727 L 552 749 L E B 553 699 M 565 676 L 542 676 L 553 699 L E B 555 717 M 566 694 L 544 694 L 555 717 L E B 557 706 M 568 684 L 546 684 L 557 706 L E B 559 737 M 570 714 L 547 714 L 559 737 L E B 560 692 M 572 670 L 549 670 L 560 692 L E B 562 716 M 573 693 L 551 693 L 562 716 L E B 564 731 M 575 708 L 553 708 L 564 731 L E B 566 704 M 577 682 L 554 682 L 566 704 L E B 567 710 M 579 687 L 556 687 L 567 710 L E B 569 718 M 580 695 L 558 695 L 569 718 L E B 571 709 M 582 687 L 560 687 L 571 709 L E B 573 794 M 584 771 L 561 771 L 573 794 L E B 574 727 M 585 705 L 563 705 L 574 727 L E B 576 720 M 587 698 L 565 698 L 576 720 L E B 579 704 M 591 682 L 568 682 L 579 704 L E B 581 732 M 592 709 L 570 709 L 581 732 L E B 583 721 M 594 699 L 572 699 L 583 721 L E B 585 690 M 596 667 L 573 667 L 585 690 L E B 586 702 M 598 679 L 575 679 L 586 702 L E B 588 729 M 599 707 L 577 707 L 588 729 L E B 590 720 M 601 698 L 579 698 L 590 720 L E B 592 708 M 603 686 L 580 686 L 592 708 L E B 593 690 M 605 667 L 582 667 L 593 690 L E B 595 690 M 606 667 L 584 667 L 595 690 L E B 597 722 M 608 700 L 585 700 L 597 722 L E B 598 723 M 610 700 L 587 700 L 598 723 L E B 600 682 M 611 660 L 589 660 L 600 682 L E B 602 713 M 613 690 L 591 690 L 602 713 L E B 604 721 M 615 699 L 592 699 L 604 721 L E B 605 734 M 617 711 L 594 711 L 605 734 L E B 607 704 M 618 682 L 596 682 L 607 704 L E B 609 724 M 620 702 L 598 702 L 609 724 L E B 611 725 M 622 703 L 599 703 L 611 725 L E B 612 730 M 624 707 L 601 707 L 612 730 L E B 614 721 M 625 699 L 603 699 L 614 721 L E B 616 700 M 627 677 L 605 677 L 616 700 L E B 618 726 M 629 704 L 606 704 L 618 726 L E B 619 714 M 630 692 L 608 692 L 619 714 L E B 621 717 M 632 695 L 610 695 L 621 717 L E B 623 737 M 634 714 L 611 714 L 623 737 L E B 624 722 M 636 699 L 613 699 L 624 722 L E B 626 741 M 637 719 L 615 719 L 626 741 L E B 628 699 M 639 676 L 617 676 L 628 699 L E B 630 716 M 641 693 L 618 693 L 630 716 L E B 631 836 M 643 813 L 620 813 L 631 836 L E B 633 728 M 644 706 L 622 706 L 633 728 L E B 635 744 M 646 722 L 624 722 L 635 744 L E B 637 724 M 648 701 L 625 701 L 637 724 L E B 638 736 M 650 714 L 627 714 L 638 736 L E B 640 718 M 651 696 L 629 696 L 640 718 L E B 642 721 M 653 698 L 630 698 L 642 721 L E B 645 735 M 656 712 L 634 712 L 645 735 L E B 647 737 M 658 714 L 636 714 L 647 737 L E B 649 731 M 660 708 L 637 708 L 649 731 L E B 650 752 M 662 729 L 639 729 L 650 752 L E B 652 742 M 663 720 L 641 720 L 652 742 L E B 654 737 M 665 714 L 643 714 L 654 737 L E B 656 735 M 667 712 L 644 712 L 656 735 L E B 659 740 M 670 718 L 648 718 L 659 740 L E B 661 895 M 672 872 L 650 872 L 661 895 L E B 662 714 M 674 692 L 651 692 L 662 714 L E B 664 732 M 675 709 L 653 709 L 664 732 L E B 666 725 M 677 703 L 655 703 L 666 725 L E B 668 881 M 679 859 L 656 859 L 668 881 L E B 669 722 M 681 699 L 658 699 L 669 722 L E B 671 771 M 682 749 L 660 749 L 671 771 L E B 673 736 M 684 714 L 662 714 L 673 736 L E B 676 721 M 688 698 L 665 698 L 676 721 L E B 680 740 M 691 717 L 669 717 L 680 740 L E B 682 715 M 693 693 L 670 693 L 682 715 L E B 683 759 M 695 736 L 672 736 L 683 759 L E B 685 737 M 696 714 L 674 714 L 685 737 L E B 687 742 M 698 720 L 675 720 L 687 742 L E B 688 729 M 700 707 L 677 707 L 688 729 L E B 690 800 M 701 777 L 679 777 L 690 800 L E B 692 732 M 703 709 L 681 709 L 692 732 L E B 694 1004 M 705 981 L 682 981 L 694 1004 L E B 695 773 M 707 750 L 684 750 L 695 773 L E B 697 737 M 708 714 L 686 714 L 697 737 L E B 699 728 M 710 706 L 688 706 L 699 728 L E B 702 714 M 714 692 L 691 692 L 702 714 L E B 704 734 M 715 712 L 693 712 L 704 734 L E B 706 771 M 717 749 L 695 749 L 706 771 L E B 707 717 M 719 694 L 696 694 L 707 717 L E B 709 759 M 720 736 L 698 736 L 709 759 L E B 711 701 M 722 678 L 700 678 L 711 701 L E B 713 982 M 724 959 L 701 959 L 713 982 L E B 714 756 M 726 734 L 703 734 L 714 756 L E B 716 725 M 727 703 L 705 703 L 716 725 L E B 718 741 M 729 718 L 707 718 L 718 741 L E B 720 717 M 731 694 L 708 694 L 720 717 L E B 721 736 M 733 713 L 710 713 L 721 736 L E B 723 761 M 734 739 L 712 739 L 723 761 L E B 725 744 M 736 722 L 714 722 L 725 744 L E B 728 754 M 740 732 L 717 732 L 728 754 L E B 732 729 M 743 707 L 720 707 L 732 729 L E B 735 722 M 746 699 L 724 699 L 735 722 L E B 737 762 M 748 740 L 726 740 L 737 762 L E B 739 750 M 750 727 L 727 727 L 739 750 L E B 742 724 M 753 702 L 731 702 L 742 724 L E B 744 744 M 755 722 L 733 722 L 744 744 L E B 746 754 M 757 732 L 734 732 L 746 754 L E B 749 748 M 760 726 L 738 726 L 749 748 L E B 751 780 M 762 757 L 739 757 L 751 780 L E B 752 790 M 764 768 L 741 768 L 752 790 L E B 756 766 M 767 743 L 745 743 L 756 766 L E B 759 734 M 771 712 L 748 712 L 759 734 L E B 763 751 M 774 728 L 752 728 L 763 751 L E B 765 850 M 776 828 L 753 828 L 765 850 L E B 766 752 M 778 729 L 755 729 L 766 752 L E B 768 1068 M 779 1046 L 757 1046 L 768 1068 L E B 770 785 M 781 762 L 759 762 L 770 785 L E B 772 765 M 783 743 L 760 743 L 772 765 L E B 773 769 M 784 746 L 762 746 L 773 769 L E B 775 790 M 786 767 L 764 767 L 775 790 L E B 777 763 M 788 740 L 765 740 L 777 763 L E B 778 781 M 790 759 L 767 759 L 778 781 L E B 780 818 M 791 796 L 769 796 L 780 818 L E B 782 776 M 793 754 L 771 754 L 782 776 L E B 784 787 M 795 765 L 772 765 L 784 787 L E B 785 768 M 797 746 L 774 746 L 785 768 L E B 787 1053 M 798 1031 L 776 1031 L 787 1053 L E B 789 752 M 800 729 L 778 729 L 789 752 L E B 791 756 M 802 734 L 779 734 L 791 756 L E B 796 776 M 807 754 L 784 754 L 796 776 L E B 797 773 M 809 751 L 786 751 L 797 773 L E B 799 734 M 810 712 L 788 712 L 799 734 L E B 801 744 M 812 722 L 790 722 L 801 744 L E B 804 753 M 816 730 L 793 730 L 804 753 L E B 806 763 M 817 740 L 795 740 L 806 763 L E B 808 774 M 819 751 L 797 751 L 808 774 L E B 810 749 M 821 727 L 798 727 L 810 749 L E B 811 765 M 823 742 L 800 742 L 811 765 L E B 813 766 M 824 744 L 802 744 L 813 766 L E B 817 784 M 828 761 L 805 761 L 817 784 L E B 818 784 M 829 761 L 807 761 L 818 784 L E B 820 791 M 831 769 L 809 769 L 820 791 L E B 822 766 M 833 744 L 810 744 L 822 766 L E B 823 873 M 835 850 L 812 850 L 823 873 L E B 825 759 M 836 736 L 814 736 L 825 759 L E B 827 782 M 838 760 L 816 760 L 827 782 L E B 829 732 M 840 709 L 817 709 L 829 732 L E B 830 848 M 842 825 L 819 825 L 830 848 L E B 832 785 M 843 762 L 821 762 L 832 785 L E B 834 771 M 845 748 L 823 748 L 834 771 L E B 837 765 M 849 742 L 826 742 L 837 765 L E B 839 798 M 850 775 L 828 775 L 839 798 L E B 841 792 M 852 770 L 829 770 L 841 792 L E B 844 761 M 855 739 L 833 739 L 844 761 L E B 846 776 M 857 754 L 835 754 L 846 776 L E B 848 783 M 859 760 L 836 760 L 848 783 L E B 851 774 M 862 751 L 840 751 L 851 774 L E B 853 791 M 864 769 L 842 769 L 853 791 L E B 855 796 M 866 774 L 843 774 L 855 796 L E B 856 790 M 868 768 L 845 768 L 856 790 L E B 858 756 M 869 734 L 847 734 L 858 756 L E B 860 784 M 871 761 L 849 761 L 860 784 L E B 861 853 M 873 830 L 850 830 L 861 853 L E B 867 818 M 878 795 L 855 795 L 867 818 L E B 872 779 M 883 756 L 861 756 L 872 779 L E B 875 838 M 887 816 L 864 816 L 875 838 L E B 877 889 M 888 866 L 866 866 L 877 889 L E B 879 781 M 890 759 L 868 759 L 879 781 L E B 881 794 M 892 771 L 869 771 L 881 794 L E B 882 821 M 894 798 L 871 798 L 882 821 L E B 884 779 M 895 756 L 873 756 L 884 779 L E B 886 732 M 897 709 L 874 709 L 886 732 L E B 887 764 M 899 741 L 876 741 L 887 764 L E B 889 813 M 900 791 L 878 791 L 889 813 L E B 891 780 M 902 758 L 880 758 L 891 780 L E B 893 792 M 904 770 L 881 770 L 893 792 L E B 894 797 M 906 775 L 883 775 L 894 797 L E B 896 771 M 907 749 L 885 749 L 896 771 L E B 898 785 M 909 762 L 887 762 L 898 785 L E B 901 795 M 913 773 L 890 773 L 901 795 L E B 903 813 M 914 791 L 892 791 L 903 813 L E B 905 786 M 916 764 L 894 764 L 905 786 L E B 906 821 M 918 798 L 895 798 L 906 821 L E B 908 801 M 919 778 L 897 778 L 908 801 L E B 910 823 M 921 801 L 899 801 L 910 823 L E B 912 792 M 923 770 L 900 770 L 912 792 L E B 913 803 M 925 781 L 902 781 L 913 803 L E B 915 815 M 926 792 L 904 792 L 915 815 L E B 917 1085 M 928 1063 L 906 1063 L 917 1085 L E B 922 794 M 933 771 L 911 771 L 922 794 L E B 924 794 M 935 771 L 913 771 L 924 794 L E B 927 801 M 939 779 L 916 779 L 927 801 L E B 929 774 M 940 751 L 918 751 L 929 774 L E B 932 800 M 944 777 L 921 777 L 932 800 L E B 934 816 M 945 793 L 923 793 L 934 816 L E B 936 888 M 947 865 L 925 865 L 936 888 L E B 939 796 M 951 774 L 928 774 L 939 796 L E B 941 870 M 952 848 L 930 848 L 941 870 L E B 943 788 M 954 766 L 932 766 L 943 788 L E B 945 855 M 956 833 L 933 833 L 945 855 L E B 946 786 M 958 764 L 935 764 L 946 786 L E B 950 826 M 961 804 L 938 804 L 950 826 L E B 951 826 M 963 803 L 940 803 L 951 826 L E B 955 910 M 966 887 L 944 887 L 955 910 L E B 957 816 M 968 793 L 945 793 L 957 816 L E B 958 801 M 970 779 L 947 779 L 958 801 L E B 969 964 M 980 942 L 958 942 L 969 964 L E B 971 825 M 982 803 L 959 803 L 971 825 L E B 972 837 M 983 815 L 961 815 L 972 837 L E B 974 828 M 985 806 L 963 806 L 974 828 L E B 976 962 M 987 939 L 964 939 L 976 962 L E B 977 826 M 989 803 L 966 803 L 977 826 L E B 983 920 M 994 898 L 971 898 L 983 920 L E B 984 833 M 996 810 L 973 810 L 984 833 L E B 986 826 M 997 803 L 975 803 L 986 826 L E B 988 838 M 999 816 L 977 816 L 988 838 L E B 991 813 M 1003 791 L 980 791 L 991 813 L E B 993 813 M 1004 791 L 982 791 L 993 813 L E B 995 839 M 1006 817 L 983 817 L 995 839 L E B 996 854 M 1008 831 L 985 831 L 996 854 L E B 998 819 M 1009 797 L 987 797 L 998 819 L E B 1000 836 M 1011 813 L 989 813 L 1000 836 L E B 1002 848 M 1013 825 L 990 825 L 1002 848 L E B 1005 821 M 1016 798 L 994 798 L 1005 821 L E B 1007 841 M 1018 818 L 996 818 L 1007 841 L E B 1009 854 M 1020 832 L 997 832 L 1009 854 L E B 1010 833 M 1022 811 L 999 811 L 1010 833 L E B 1012 848 M 1023 825 L 1001 825 L 1012 848 L E B 1014 828 M 1025 806 L 1003 806 L 1014 828 L E B 1016 818 M 1027 796 L 1004 796 L 1016 818 L E B 1017 837 M 1028 814 L 1006 814 L 1017 837 L E B 1019 816 M 1030 794 L 1008 794 L 1019 816 L E B 1021 829 M 1032 807 L 1009 807 L 1021 829 L E B 1022 812 M 1034 789 L 1011 789 L 1022 812 L E B 1024 820 M 1035 797 L 1013 797 L 1024 820 L E B 1026 885 M 1037 863 L 1015 863 L 1026 885 L E B 1029 823 M 1041 801 L 1018 801 L 1029 823 L E B 1031 806 M 1042 783 L 1020 783 L 1031 806 L E B 1033 849 M 1044 827 L 1022 827 L 1033 849 L E B 1035 761 M 1046 739 L 1023 739 L 1035 761 L E B 1036 854 M 1048 832 L 1025 832 L 1036 854 L E B 1038 816 M 1049 793 L 1027 793 L 1038 816 L E B 1040 812 M 1051 790 L 1028 790 L 1040 812 L E B 1041 823 M 1053 801 L 1030 801 L 1041 823 L E B 1043 951 M 1054 929 L 1032 929 L 1043 951 L E B 1045 806 M 1056 783 L 1034 783 L 1045 806 L E B 1047 838 M 1058 816 L 1035 816 L 1047 838 L E B 1050 853 M 1061 830 L 1039 830 L 1050 853 L E B 1052 855 M 1063 832 L 1041 832 L 1052 855 L E B 1054 846 M 1065 824 L 1042 824 L 1054 846 L E B 1055 864 M 1067 842 L 1044 842 L 1055 864 L E B 1057 875 M 1068 853 L 1046 853 L 1057 875 L E B 1059 863 M 1070 840 L 1048 840 L 1059 863 L E B 1060 838 M 1072 816 L 1049 816 L 1060 838 L E B 1064 883 M 1075 860 L 1053 860 L 1064 883 L E B 1066 847 M 1077 825 L 1054 825 L 1066 847 L E B 1067 836 M 1079 813 L 1056 813 L 1067 836 L E B 1071 813 M 1082 791 L 1060 791 L 1071 813 L E B 1074 834 M 1086 812 L 1063 812 L 1074 834 L E B 1076 858 M 1087 835 L 1065 835 L 1076 858 L E B 1078 838 M 1089 816 L 1067 816 L 1078 838 L E B 1080 895 M 1091 872 L 1068 872 L 1080 895 L E B 1081 854 M 1093 831 L 1070 831 L 1081 854 L E B 1083 883 M 1094 861 L 1072 861 L 1083 883 L E B 1085 863 M 1096 840 L 1073 840 L 1085 863 L E B 1086 858 M 1098 835 L 1075 835 L 1086 858 L E B 1088 853 M 1099 830 L 1077 830 L 1088 853 L E B 1092 860 M 1103 837 L 1080 837 L 1092 860 L E B 1095 844 M 1106 821 L 1084 821 L 1095 844 L E B 1097 883 M 1108 860 L 1086 860 L 1097 883 L E B 1099 878 M 1110 855 L 1087 855 L 1099 878 L E B 1102 874 M 1113 852 L 1091 852 L 1102 874 L E B 1104 858 M 1115 835 L 1093 835 L 1104 858 L E B 1105 863 M 1117 840 L 1094 840 L 1105 863 L E B 1112 855 M 1124 833 L 1101 833 L 1112 855 L E B 1116 808 M 1127 786 L 1105 786 L 1116 808 L E B 1119 855 M 1131 833 L 1108 833 L 1119 855 L E B 1123 857 M 1134 834 L 1112 834 L 1123 857 L E B 1125 865 M 1136 843 L 1113 843 L 1125 865 L E B 1126 886 M 1137 864 L 1115 864 L 1126 886 L E B 1128 873 M 1139 850 L 1117 850 L 1128 873 L E B 1130 916 M 1141 893 L 1118 893 L 1130 916 L E B 1131 880 M 1143 858 L 1120 858 L 1131 880 L E B 1133 886 M 1144 863 L 1122 863 L 1133 886 L E B 1137 847 M 1148 824 L 1125 824 L 1137 847 L E B 1140 882 M 1151 859 L 1129 859 L 1140 882 L E B 1142 862 M 1153 839 L 1131 839 L 1142 862 L E B 1144 827 M 1155 804 L 1132 804 L 1144 827 L E B 1145 897 M 1157 874 L 1134 874 L 1145 897 L E B 1149 902 M 1160 879 L 1137 879 L 1149 902 L E B 1150 893 M 1162 870 L 1139 870 L 1150 893 L E B 1152 927 M 1163 905 L 1141 905 L 1152 927 L E B 1154 869 M 1165 847 L 1143 847 L 1154 869 L E B 1157 886 M 1169 864 L 1146 864 L 1157 886 L E B 1159 938 M 1170 915 L 1148 915 L 1159 938 L E B 1161 930 M 1172 907 L 1150 907 L 1161 930 L E B 1163 878 M 1174 855 L 1151 855 L 1163 878 L E B 1164 897 M 1176 875 L 1153 875 L 1164 897 L E B 1166 872 M 1177 849 L 1155 849 L 1166 872 L E B 1168 914 M 1179 892 L 1157 892 L 1168 914 L E B 1170 912 M 1181 890 L 1158 890 L 1170 912 L E B 1171 888 M 1182 865 L 1160 865 L 1171 888 L E B 1173 905 M 1184 882 L 1162 882 L 1173 905 L E B 1175 892 M 1186 869 L 1163 869 L 1175 892 L E B 1178 875 M 1189 853 L 1167 853 L 1178 875 L E B 1180 878 M 1191 855 L 1169 855 L 1180 878 L E B 1182 892 M 1193 870 L 1170 870 L 1182 892 L E B 1183 862 M 1195 839 L 1172 839 L 1183 862 L E B 1185 912 M 1196 890 L 1174 890 L 1185 912 L E B 1187 915 M 1198 892 L 1176 892 L 1187 915 L E B 1189 868 M 1200 845 L 1177 845 L 1189 868 L E B 1190 892 M 1202 870 L 1179 870 L 1190 892 L E B 1192 915 M 1203 892 L 1181 892 L 1192 915 L E B 1194 885 M 1205 863 L 1182 863 L 1194 885 L E B 1195 1000 M 1207 977 L 1184 977 L 1195 1000 L E B 1197 867 M 1208 844 L 1186 844 L 1197 867 L E B 1199 885 M 1210 863 L 1188 863 L 1199 885 L E B 1201 905 M 1212 883 L 1189 883 L 1201 905 L E B 1202 912 M 1214 890 L 1191 890 L 1202 912 L E B 1204 937 M 1215 915 L 1193 915 L 1204 937 L E B 1206 939 M 1217 917 L 1195 917 L 1206 939 L E B 1208 996 M 1219 974 L 1196 974 L 1208 996 L E B 1209 903 M 1221 881 L 1198 881 L 1209 903 L E B 1211 903 M 1222 881 L 1200 881 L 1211 903 L E B 1213 906 M 1224 884 L 1202 884 L 1213 906 L E B 1214 888 M 1226 865 L 1203 865 L 1214 888 L E B 1216 878 M 1227 855 L 1205 855 L 1216 878 L E B 1218 918 M 1229 896 L 1207 896 L 1218 918 L E B 1220 908 M 1231 885 L 1208 885 L 1220 908 L E B 1221 910 M 1233 887 L 1210 887 L 1221 910 L E B 1223 939 M 1234 917 L 1212 917 L 1223 939 L E B 1227 890 M 1238 868 L 1215 868 L 1227 890 L E B 1228 931 M 1240 909 L 1217 909 L 1228 931 L E B 1230 863 M 1241 840 L 1219 840 L 1230 863 L E B 1232 906 M 1243 883 L 1221 883 L 1232 906 L E B 1234 952 M 1245 929 L 1222 929 L 1234 952 L E B 1239 937 M 1250 915 L 1227 915 L 1239 937 L E B 1240 931 M 1252 908 L 1229 908 L 1240 931 L E B 1242 920 M 1253 897 L 1231 897 L 1242 920 L E B 1244 922 M 1255 900 L 1233 900 L 1244 922 L E B 1246 947 M 1257 924 L 1234 924 L 1246 947 L E B 1247 950 M 1259 928 L 1236 928 L 1247 950 L E B 1249 873 M 1260 850 L 1238 850 L 1249 873 L E B 1251 876 M 1262 854 L 1240 854 L 1251 876 L E B 1254 910 M 1266 888 L 1243 888 L 1254 910 L E B 1256 941 M 1267 918 L 1245 918 L 1256 941 L E B 1258 957 M 1269 934 L 1247 934 L 1258 957 L E B 1259 850 M 1271 828 L 1248 828 L 1259 850 L E B 1261 937 M 1272 915 L 1250 915 L 1261 937 L E B 1263 905 M 1274 882 L 1252 882 L 1263 905 L E B 1265 926 M 1276 904 L 1253 904 L 1265 926 L E B 1266 953 M 1278 931 L 1255 931 L 1266 953 L E B 1268 938 M 1279 916 L 1257 916 L 1268 938 L E B 1270 964 M 1281 942 L 1259 942 L 1270 964 L E B 1275 943 M 1286 921 L 1264 921 L 1275 943 L E B 1277 903 M 1288 881 L 1266 881 L 1277 903 L E B 1279 932 M 1290 910 L 1267 910 L 1279 932 L E B 1280 932 M 1292 910 L 1269 910 L 1280 932 L E B 1282 888 M 1293 865 L 1271 865 L 1282 888 L E B 1284 989 M 1295 966 L 1272 966 L 1284 989 L E B 1287 899 M 1298 876 L 1276 876 L 1287 899 L E B 1289 952 M 1300 929 L 1278 929 L 1289 952 L E B 1296 922 M 1307 900 L 1285 900 L 1296 922 L E B 1303 937 M 1314 915 L 1291 915 L 1303 937 L E B 1304 1199 M 1316 1177 L 1293 1177 L 1304 1199 L E B 1306 982 M 1317 959 L 1295 959 L 1306 982 L E B 1310 917 M 1321 895 L 1298 895 L 1310 917 L E B 1311 913 M 1323 891 L 1300 891 L 1311 913 L E B 1313 935 M 1324 912 L 1302 912 L 1313 935 L E B 1317 940 M 1328 918 L 1305 918 L 1317 940 L E B 1324 911 M 1335 889 L 1312 889 L 1324 911 L E B 1329 917 M 1340 895 L 1317 895 L 1329 917 L E B 1330 917 M 1342 895 L 1319 895 L 1330 917 L E B 1332 930 M 1343 907 L 1321 907 L 1332 930 L E B 1334 942 M 1345 919 L 1323 919 L 1334 942 L E B 1339 962 M 1350 939 L 1328 939 L 1339 962 L E B 1344 930 M 1356 907 L 1333 907 L 1344 930 L E B 1346 1021 M 1357 999 L 1335 999 L 1346 1021 L E B 1348 910 M 1359 887 L 1336 887 L 1348 910 L E B 1351 979 M 1362 957 L 1340 957 L 1351 979 L E B 1360 967 M 1371 944 L 1349 944 L 1360 967 L E B 1363 945 M 1375 922 L 1352 922 L 1363 945 L E B 1365 983 M 1376 960 L 1354 960 L 1365 983 L E B 1367 833 M 1378 811 L 1356 811 L 1367 833 L E B 1369 930 M 1380 907 L 1357 907 L 1369 930 L E B 1372 944 M 1383 921 L 1361 921 L 1372 944 L E B 1375 972 M 1387 949 L 1364 949 L 1375 972 L E B 1377 917 M 1388 895 L 1366 895 L 1377 917 L E B 1379 942 M 1390 919 L 1368 919 L 1379 942 L E B 1381 915 M 1392 892 L 1369 892 L 1381 915 L E B 1388 892 M 1399 870 L 1376 870 L 1388 892 L E B 1391 967 M 1402 944 L 1380 944 L 1391 967 L E B 1393 916 M 1404 894 L 1381 894 L 1393 916 L E B 1400 962 M 1411 939 L 1388 939 L 1400 962 L E B 1403 935 M 1414 912 L 1392 912 L 1403 935 L E B 1405 959 M 1416 937 L 1394 937 L 1405 959 L E B 1407 947 M 1418 924 L 1395 924 L 1407 947 L E B 1412 957 M 1423 934 L 1401 934 L 1412 957 L E B 1413 944 M 1425 922 L 1402 922 L 1413 944 L E B 1420 1234 M 1432 1211 L 1409 1211 L 1420 1234 L E B 1426 953 M 1437 930 L 1414 930 L 1426 953 L E B 1427 957 M 1439 934 L 1416 934 L 1427 957 L E B 1429 944 M 1440 922 L 1418 922 L 1429 944 L E B 1431 959 M 1442 936 L 1420 936 L 1431 959 L E B 1433 982 M 1444 959 L 1421 959 L 1433 982 L E B 1434 953 M 1446 930 L 1423 930 L 1434 953 L E B 1438 942 M 1449 919 L 1426 919 L 1438 942 L E B 1439 939 M 1451 917 L 1428 917 L 1439 939 L E B 1443 947 M 1454 924 L 1432 924 L 1443 947 L E B 1448 969 M 1459 947 L 1437 947 L 1448 969 L E B 1450 974 M 1461 952 L 1439 952 L 1450 974 L E B 1452 957 M 1463 934 L 1440 934 L 1452 957 L E B 1453 939 M 1465 917 L 1442 917 L 1453 939 L E B 1458 1053 M 1470 1031 L 1447 1031 L 1458 1053 L E B 1462 975 M 1473 953 L 1451 953 L 1462 975 L E B 1464 986 M 1475 964 L 1452 964 L 1464 986 L E B 1467 1075 M 1478 1053 L 1456 1053 L 1467 1075 L E B 1469 977 M 1480 954 L 1458 954 L 1469 977 L E B 1471 1024 M 1482 1001 L 1459 1001 L 1471 1024 L E B 1476 958 M 1487 935 L 1465 935 L 1476 958 L E B 1478 939 M 1489 917 L 1466 917 L 1478 939 L E B 1479 930 M 1490 907 L 1468 907 L 1479 930 L E B 1481 977 M 1492 954 L 1470 954 L 1481 977 L E B 1484 949 M 1496 927 L 1473 927 L 1484 949 L E B 1488 983 M 1499 960 L 1477 960 L 1488 983 L E B 1491 982 M 1503 959 L 1480 959 L 1491 982 L E B 1497 1277 M 1508 1255 L 1485 1255 L 1497 1277 L E B 1498 962 M 1510 939 L 1487 939 L 1498 962 L E B 1503 1012 M 1515 990 L 1492 990 L 1503 1012 L E B 1512 1001 M 1523 979 L 1501 979 L 1512 1001 L E B 1516 1012 M 1527 989 L 1504 989 L 1516 1012 L E B 1517 938 M 1529 916 L 1506 916 L 1517 938 L E B 1521 967 M 1532 944 L 1510 944 L 1521 967 L E B 1523 962 M 1534 939 L 1511 939 L 1523 962 L E B 1528 1054 M 1539 1032 L 1516 1032 L 1528 1054 L E B 1531 974 M 1542 952 L 1520 952 L 1531 974 L E B 1535 952 M 1546 929 L 1523 929 L 1535 952 L E B 1538 1014 M 1549 991 L 1527 991 L 1538 1014 L E B 1543 1042 M 1555 1020 L 1532 1020 L 1543 1042 L E B 1545 962 M 1556 939 L 1534 939 L 1545 962 L E B 1554 1010 M 1565 987 L 1542 987 L 1554 1010 L E B 1555 1058 M 1567 1036 L 1544 1036 L 1555 1058 L E B 1559 1019 M 1570 996 L 1548 996 L 1559 1019 L E B 1561 994 M 1572 971 L 1549 971 L 1561 994 L E B 1564 1003 M 1575 980 L 1553 980 L 1564 1003 L E B 1566 1005 M 1577 983 L 1555 983 L 1566 1005 L E B 1573 986 M 1584 964 L 1561 964 L 1573 986 L E B 1580 1038 M 1591 1016 L 1568 1016 L 1580 1038 L E B 1588 1014 M 1600 991 L 1577 991 L 1588 1014 L E B 1592 1020 M 1603 997 L 1580 997 L 1592 1020 L E B 1599 994 M 1610 972 L 1587 972 L 1599 994 L E B 1602 1043 M 1613 1021 L 1591 1021 L 1602 1043 L E B 1607 1004 M 1619 981 L 1596 981 L 1607 1004 L E B 1611 1097 M 1622 1074 L 1600 1074 L 1611 1097 L E B 1612 1036 M 1624 1013 L 1601 1013 L 1612 1036 L E B 1614 977 M 1625 954 L 1603 954 L 1614 977 L E B 1618 1006 M 1629 984 L 1606 984 L 1618 1006 L E B 1623 1041 M 1634 1018 L 1612 1018 L 1623 1041 L E B 1632 972 M 1643 949 L 1620 949 L 1632 972 L E B 1633 1026 M 1645 1004 L 1622 1004 L 1633 1026 L E B 1640 1025 M 1651 1002 L 1629 1002 L 1640 1025 L E B 1642 972 M 1653 949 L 1631 949 L 1642 972 L E B 1647 1119 M 1658 1096 L 1636 1096 L 1647 1119 L E B 1649 1015 M 1660 992 L 1638 992 L 1649 1015 L E B 1652 1051 M 1664 1028 L 1641 1028 L 1652 1051 L E B 1656 1009 M 1667 986 L 1645 986 L 1656 1009 L E B 1663 996 M 1674 973 L 1651 973 L 1663 996 L E B 1664 1298 M 1676 1276 L 1653 1276 L 1664 1298 L E B 1670 1071 M 1681 1048 L 1658 1048 L 1670 1071 L E B 1673 1011 M 1684 989 L 1662 989 L 1673 1011 L E B 1677 1011 M 1688 989 L 1665 989 L 1677 1011 L E B 1683 1020 M 1695 998 L 1672 998 L 1683 1020 L E B 1690 1038 M 1702 1016 L 1679 1016 L 1690 1038 L E B 1692 1080 M 1703 1058 L 1681 1058 L 1692 1080 L E B 1697 1051 M 1709 1028 L 1686 1028 L 1697 1051 L E B 1711 1113 M 1722 1090 L 1700 1090 L 1711 1113 L E B 1713 984 M 1724 961 L 1702 961 L 1713 984 L E B 1725 1042 M 1736 1020 L 1714 1020 L 1725 1042 L E B 1730 1029 M 1741 1006 L 1719 1006 L 1730 1029 L E B 1735 1043 M 1747 1020 L 1724 1020 L 1735 1043 L E B 1737 1063 M 1748 1041 L 1726 1041 L 1737 1063 L E B 1739 1033 M 1750 1011 L 1728 1011 L 1739 1033 L E B 1742 1051 M 1754 1028 L 1731 1028 L 1742 1051 L E B 1744 1679 M 1755 1656 L 1733 1656 L 1744 1679 L E B 1746 1169 M 1757 1147 L 1734 1147 L 1746 1169 L E B 1747 1059 M 1759 1037 L 1736 1037 L 1747 1059 L E B 1749 1066 M 1760 1043 L 1738 1043 L 1749 1066 L E B 1753 1034 M 1764 1011 L 1741 1011 L 1753 1034 L E B 1756 1204 M 1767 1182 L 1745 1182 L 1756 1204 L E B 1761 1082 M 1773 1059 L 1750 1059 L 1761 1082 L E B 1763 1130 M 1774 1107 L 1752 1107 L 1763 1130 L E B 1766 1233 M 1778 1210 L 1755 1210 L 1766 1233 L E B 1770 1083 M 1781 1060 L 1759 1060 L 1770 1083 L E B 1773 986 M 1785 964 L 1762 964 L 1773 986 L E B 1777 1056 M 1788 1033 L 1766 1033 L 1777 1056 L E B 1779 1075 M 1790 1053 L 1767 1053 L 1779 1075 L E B 1784 1132 M 1795 1110 L 1773 1110 L 1784 1132 L E B 1787 1058 M 1799 1036 L 1776 1036 L 1787 1058 L E B 1801 1071 M 1812 1048 L 1790 1048 L 1801 1071 L E B 1808 1113 M 1819 1090 L 1797 1090 L 1808 1113 L E B 1818 1113 M 1830 1090 L 1807 1090 L 1818 1113 L E B 1825 1021 M 1837 999 L 1814 999 L 1825 1021 L E B 1829 1366 M 1840 1344 L 1818 1344 L 1829 1366 L E B 1836 1085 M 1847 1063 L 1824 1063 L 1836 1085 L E B 1841 1115 M 1852 1093 L 1830 1093 L 1841 1115 L E B 1843 994 M 1854 971 L 1831 971 L 1843 994 L E B 1851 1051 M 1863 1028 L 1840 1028 L 1851 1051 L E B 1853 1105 M 1864 1083 L 1842 1083 L 1853 1105 L E B 1856 1214 M 1868 1191 L 1845 1191 L 1856 1214 L E B 1858 1103 M 1869 1080 L 1847 1080 L 1858 1103 L E B 1863 1118 M 1875 1095 L 1852 1095 L 1863 1118 L E B 1867 989 M 1878 966 L 1856 966 L 1867 989 L E B 1869 1118 M 1880 1095 L 1857 1095 L 1869 1118 L E B 1870 1116 M 1882 1094 L 1859 1094 L 1870 1116 L E B 1877 1137 M 1888 1115 L 1866 1115 L 1877 1137 L E B 1882 1199 M 1894 1177 L 1871 1177 L 1882 1199 L E B 1884 1110 M 1895 1088 L 1873 1088 L 1884 1110 L E B 1886 1179 M 1897 1157 L 1875 1157 L 1886 1179 L E B 1900 1172 M 1911 1149 L 1888 1149 L 1900 1172 L E B 1905 1132 M 1916 1110 L 1894 1110 L 1905 1132 L E B 1908 1127 M 1920 1105 L 1897 1105 L 1908 1127 L E B 1919 1115 M 1930 1093 L 1908 1093 L 1919 1115 L E B 1926 1133 M 1937 1111 L 1914 1111 L 1926 1133 L E B 1927 1152 M 1939 1130 L 1916 1130 L 1927 1152 L E B 1933 1155 M 1944 1132 L 1921 1132 L 1933 1155 L E B 1934 1090 M 1946 1068 L 1923 1068 L 1934 1090 L E B 1938 1150 M 1949 1127 L 1927 1127 L 1938 1150 L E B 1940 1158 M 1951 1136 L 1928 1136 L 1940 1158 L E B 1953 1148 M 1965 1125 L 1942 1125 L 1953 1148 L E B 1957 1174 M 1968 1152 L 1946 1152 L 1957 1174 L E B 1960 1163 M 1972 1141 L 1949 1141 L 1960 1163 L E B 1969 1132 M 1980 1110 L 1958 1110 L 1969 1132 L E B 1978 1140 M 1989 1117 L 1966 1117 L 1978 1140 L E B 1981 1194 M 1992 1172 L 1970 1172 L 1981 1194 L E B 1985 1075 M 1996 1053 L 1973 1053 L 1985 1075 L E B 1988 1136 M 1999 1114 L 1977 1114 L 1988 1136 L E B 1993 1120 M 2004 1098 L 1982 1098 L 1993 1120 L E B 1995 1181 M 2006 1159 L 1984 1159 L 1995 1181 L E B 2002 1261 M 2013 1238 L 1991 1238 L 2002 1261 L E B 2004 1132 M 2015 1110 L 1992 1110 L 2004 1132 L E B 2007 1173 M 2018 1150 L 1996 1150 L 2007 1173 L E B 2012 1147 M 2023 1125 L 2001 1125 L 2012 1147 L E B 2016 1115 M 2027 1093 L 2004 1093 L 2016 1115 L E B 2019 1133 M 2030 1111 L 2008 1111 L 2019 1133 L E B 2024 1177 M 2036 1154 L 2013 1154 L 2024 1177 L E B 2028 1484 M 2039 1461 L 2017 1461 L 2028 1484 L E B 2030 1177 M 2041 1154 L 2018 1154 L 2030 1177 L E B 2035 1193 M 2046 1171 L 2023 1171 L 2035 1193 L E B 2042 1033 M 2053 1011 L 2030 1011 L 2042 1033 L E B 2045 1155 M 2056 1132 L 2034 1132 L 2045 1155 L E B 2050 1199 M 2062 1177 L 2039 1177 L 2050 1199 L E B 2054 1130 M 2065 1107 L 2042 1107 L 2054 1130 L E B 2057 1169 M 2068 1147 L 2046 1147 L 2057 1169 L E B 2061 1177 M 2072 1154 L 2049 1154 L 2061 1177 L E B 2064 1132 M 2075 1110 L 2053 1110 L 2064 1132 L E B 2066 1177 M 2077 1154 L 2055 1154 L 2066 1177 L E B 2068 1237 M 2079 1215 L 2056 1215 L 2068 1237 L E B 2075 1221 M 2086 1199 L 2063 1199 L 2075 1221 L E B 2076 1130 M 2087 1107 L 2065 1107 L 2076 1130 L E B 2080 1432 M 2091 1409 L 2068 1409 L 2080 1432 L E B 2081 1162 M 2093 1140 L 2070 1140 L 2081 1162 L E B 2085 1254 M 2096 1231 L 2074 1231 L 2085 1254 L E B 2088 2082 M 2100 2059 L 2077 2059 L 2088 2082 L E B 2090 1213 M 2101 1191 L 2079 1191 L 2090 1213 L E B 2094 1209 M 2105 1187 L 2082 1187 L 2094 1209 L E B 2099 1129 M 2110 1106 L 2087 1106 L 2099 1129 L E B 2100 1145 M 2112 1122 L 2089 1122 L 2100 1145 L E B 2102 1375 M 2113 1352 L 2091 1352 L 2102 1375 L E B 2118 1204 M 2129 1181 L 2107 1181 L 2118 1204 L E B 2120 1184 M 2131 1162 L 2108 1162 L 2120 1184 L E B 2130 1217 M 2141 1195 L 2119 1195 L 2130 1217 L E B 2139 1169 M 2150 1147 L 2127 1147 L 2139 1169 L E B 2140 1160 M 2152 1137 L 2129 1137 L 2140 1160 L E B 2142 1217 M 2153 1194 L 2131 1194 L 2142 1217 L E B 2147 1200 M 2158 1178 L 2136 1178 L 2147 1200 L E B 2152 1244 M 2164 1222 L 2141 1222 L 2152 1244 L E B 2154 1237 M 2165 1215 L 2143 1215 L 2154 1237 L E B 2161 1812 M 2172 1790 L 2150 1790 L 2161 1812 L E B 2164 1216 M 2176 1194 L 2153 1194 L 2164 1216 L E B 2166 1305 M 2177 1283 L 2155 1283 L 2166 1305 L E B 2168 1239 M 2179 1217 L 2157 1217 L 2168 1239 L E B 2173 1272 M 2184 1250 L 2162 1250 L 2173 1272 L E B 2175 1187 M 2186 1164 L 2164 1164 L 2175 1187 L E B 2177 1226 M 2188 1204 L 2165 1204 L 2177 1226 L E B 2180 1211 M 2191 1189 L 2169 1189 L 2180 1211 L E B 2182 1230 M 2193 1208 L 2171 1208 L 2182 1230 L E B 2184 1249 M 2195 1226 L 2172 1226 L 2184 1249 L E B 2196 1236 M 2207 1214 L 2184 1214 L 2196 1236 L E B 2203 1226 M 2214 1204 L 2191 1204 L 2203 1226 L E B 2204 1177 M 2216 1154 L 2193 1154 L 2204 1177 L E B 2208 1669 M 2219 1646 L 2197 1646 L 2208 1669 L E B 2209 1194 M 2221 1172 L 2198 1172 L 2209 1194 L E B 2211 1221 M 2222 1199 L 2200 1199 L 2211 1221 L E B 2213 1228 M 2224 1205 L 2202 1205 L 2213 1228 L E B 2220 1172 M 2231 1149 L 2209 1149 L 2220 1172 L E B 2223 1578 M 2235 1556 L 2212 1556 L 2223 1578 L E B 2225 1189 M 2236 1167 L 2214 1167 L 2225 1189 L E B 2227 1281 M 2238 1258 L 2216 1258 L 2227 1281 L E B 2230 1202 M 2241 1179 L 2219 1179 L 2230 1202 L E B 2232 1214 M 2243 1191 L 2221 1191 L 2232 1214 L E B 2237 1305 M 2248 1282 L 2226 1282 L 2237 1305 L E B 2242 1187 M 2254 1164 L 2231 1164 L 2242 1187 L E B 2244 1188 M 2255 1166 L 2233 1166 L 2244 1188 L E B 2249 1239 M 2261 1216 L 2238 1216 L 2249 1239 L E B 2251 1221 M 2262 1199 L 2240 1199 L 2251 1221 L E B 2254 1207 M 2266 1184 L 2243 1184 L 2254 1207 L E B 2261 1194 M 2273 1172 L 2250 1172 L 2261 1194 L E B 2265 1217 M 2276 1195 L 2254 1195 L 2265 1217 L E B 2270 1518 M 2281 1496 L 2259 1496 L 2270 1518 L E B 2286 1224 M 2297 1201 L 2274 1201 L 2286 1224 L E B 2287 1229 M 2299 1206 L 2276 1206 L 2287 1229 L E B 2293 1211 M 2304 1189 L 2281 1189 L 2293 1211 L E B 2299 1205 M 2311 1183 L 2288 1183 L 2299 1205 L E B 2305 1239 M 2316 1216 L 2293 1216 L 2305 1239 L E B 2306 1220 M 2318 1198 L 2295 1198 L 2306 1220 L E B 2310 1204 M 2321 1182 L 2299 1182 L 2310 1204 L E B 2312 1226 M 2323 1204 L 2300 1204 L 2312 1226 L E B 2317 1226 M 2328 1204 L 2306 1204 L 2317 1226 L E B 2318 1216 M 2330 1194 L 2307 1194 L 2318 1216 L E B 2322 1219 M 2333 1196 L 2311 1196 L 2322 1219 L E B 2324 1202 M 2335 1179 L 2312 1179 L 2324 1202 L E B 2327 1215 M 2338 1193 L 2316 1193 L 2327 1215 L E B 2332 1303 M 2344 1280 L 2321 1280 L 2332 1303 L E B 2346 1167 M 2357 1144 L 2335 1144 L 2346 1167 L E B 2348 1216 M 2359 1194 L 2337 1194 L 2348 1216 L E B 2350 1221 M 2361 1199 L 2338 1199 L 2350 1221 L E B 2351 1540 M 2363 1518 L 2340 1518 L 2351 1540 L E B 2355 1378 M 2366 1355 L 2344 1355 L 2355 1378 L E B 2357 1265 M 2368 1242 L 2345 1242 L 2357 1265 L E B 2358 1187 M 2370 1164 L 2347 1164 L 2358 1187 L E B 2362 1183 M 2373 1161 L 2351 1161 L 2362 1183 L E B 2363 1162 M 2375 1140 L 2352 1140 L 2363 1162 L E B 2367 1224 M 2378 1201 L 2356 1201 L 2367 1224 L E B 2376 1481 M 2387 1459 L 2364 1459 L 2376 1481 L E B 2377 1305 M 2389 1282 L 2366 1282 L 2377 1305 L E B 2381 1262 M 2392 1240 L 2370 1240 L 2381 1262 L E B 2383 1229 M 2394 1206 L 2371 1206 L 2383 1229 L E B 2389 1281 M 2401 1259 L 2378 1259 L 2389 1281 L E B 2395 1292 M 2406 1269 L 2383 1269 L 2395 1292 L E B 2400 1234 M 2411 1211 L 2389 1211 L 2400 1234 L E B 2402 1365 M 2413 1342 L 2390 1342 L 2402 1365 L E B 2403 1246 M 2415 1224 L 2392 1224 L 2403 1246 L E B 2405 1224 M 2416 1201 L 2394 1201 L 2405 1224 L E B 2407 1280 M 2418 1257 L 2395 1257 L 2407 1280 L E B 2408 1258 M 2420 1236 L 2397 1236 L 2408 1258 L E B 2417 1308 M 2428 1286 L 2406 1286 L 2417 1308 L E B 2419 1263 M 2430 1241 L 2408 1241 L 2419 1263 L E B 2421 1182 M 2432 1159 L 2409 1159 L 2421 1182 L E B 2422 1310 M 2434 1288 L 2411 1288 L 2422 1310 L E B 2424 1207 M 2435 1184 L 2413 1184 L 2424 1207 L E B 2426 1241 M 2437 1219 L 2415 1219 L 2426 1241 L E B 2431 1459 M 2442 1436 L 2420 1436 L 2431 1459 L E B 2447 1273 M 2458 1251 L 2435 1251 L 2447 1273 L E B 2452 1219 M 2463 1196 L 2440 1196 L 2452 1219 L E B 2459 1874 M 2470 1852 L 2447 1852 L 2459 1874 L E B 2473 1325 M 2484 1302 L 2461 1302 L 2473 1325 L E B 2474 1456 M 2485 1434 L 2463 1434 L 2474 1456 L E B 2478 1268 M 2489 1246 L 2466 1246 L 2478 1268 L E B 2481 1249 M 2492 1226 L 2470 1226 L 2481 1249 L E B 2483 1293 M 2494 1271 L 2472 1271 L 2483 1293 L E B 2486 1476 M 2498 1454 L 2475 1454 L 2486 1476 L E B 2488 1352 M 2499 1329 L 2477 1329 L 2488 1352 L E B 2493 1359 M 2505 1336 L 2482 1336 L 2493 1359 L E B 2500 1355 M 2511 1333 L 2489 1333 L 2500 1355 L E B 2502 1268 M 2513 1246 L 2491 1246 L 2502 1268 L E B 2509 1293 M 2520 1271 L 2498 1271 L 2509 1293 L E B 2519 1305 M 2530 1283 L 2508 1283 L 2519 1305 L E B 2521 1271 M 2532 1248 L 2510 1248 L 2521 1271 L E B 2533 1418 M 2544 1395 L 2522 1395 L 2533 1418 L E B 2535 1304 M 2546 1282 L 2524 1282 L 2535 1304 L E B 2542 1268 M 2553 1246 L 2530 1246 L 2542 1268 L E B 2543 1369 M 2555 1346 L 2532 1346 L 2543 1369 L E B 2549 1406 M 2560 1383 L 2537 1383 L 2549 1406 L E B 2552 1224 M 2563 1201 L 2541 1201 L 2552 1224 L E B 2554 1325 M 2565 1303 L 2543 1303 L 2554 1325 L E B 2556 1549 M 2567 1527 L 2544 1527 L 2556 1549 L E B 2559 1288 M 2570 1266 L 2548 1266 L 2559 1288 L E B 2561 1301 M 2572 1278 L 2550 1278 L 2561 1301 L E B 2564 1419 M 2575 1397 L 2553 1397 L 2564 1419 L E B 2576 1356 M 2588 1334 L 2565 1334 L 2576 1356 L E B 2583 1310 M 2594 1288 L 2572 1288 L 2583 1310 L E B 2590 1313 M 2601 1290 L 2579 1290 L 2590 1313 L E B 2592 1402 M 2603 1379 L 2581 1379 L 2592 1402 L E B 2595 1273 M 2607 1251 L 2584 1251 L 2595 1273 L E B 2604 1249 M 2615 1226 L 2593 1226 L 2604 1249 L E B 2609 1301 M 2620 1278 L 2598 1278 L 2609 1301 L E B 2611 1429 M 2622 1407 L 2600 1407 L 2611 1429 L E B 2614 1370 M 2626 1347 L 2603 1347 L 2614 1370 L E B 2618 1318 M 2629 1295 L 2607 1295 L 2618 1318 L E B 2621 1357 M 2633 1335 L 2610 1335 L 2621 1357 L E B 2623 1343 M 2634 1320 L 2612 1320 L 2623 1343 L E B 2625 1239 M 2636 1216 L 2614 1216 L 2625 1239 L E B 2627 1372 M 2638 1350 L 2615 1350 L 2627 1372 L E B 2628 1291 M 2639 1268 L 2617 1268 L 2628 1291 L E B 2637 1374 M 2648 1351 L 2626 1351 L 2637 1374 L E B 2639 1293 M 2650 1271 L 2627 1271 L 2639 1293 L E B 2642 1330 M 2653 1308 L 2631 1308 L 2642 1330 L E B 2644 1788 M 2655 1765 L 2633 1765 L 2644 1788 L E B 2649 1380 M 2660 1357 L 2638 1357 L 2649 1380 L E B 2651 1348 M 2662 1325 L 2639 1325 L 2651 1348 L E B 2652 1357 M 2664 1335 L 2641 1335 L 2652 1357 L E B 2654 1365 M 2665 1342 L 2643 1342 L 2654 1365 L E B 2658 1342 M 2669 1319 L 2646 1319 L 2658 1342 L E B 2661 1463 M 2672 1441 L 2650 1441 L 2661 1463 L E B 2663 1872 M 2674 1849 L 2652 1849 L 2663 1872 L E B 2673 1571 M 2684 1549 L 2662 1549 L 2673 1571 L E B 2687 1362 M 2698 1340 L 2676 1340 L 2687 1362 L E B 2689 1484 M 2700 1462 L 2678 1462 L 2689 1484 L E B 2692 1904 M 2704 1881 L 2681 1881 L 2692 1904 L E B 2697 1328 M 2709 1305 L 2686 1305 L 2697 1328 L E B 2704 1921 M 2716 1899 L 2693 1899 L 2704 1921 L E B 2706 1355 M 2717 1332 L 2695 1332 L 2706 1355 L E B 2715 1276 M 2726 1253 L 2704 1253 L 2715 1276 L E B 2716 1310 M 2728 1288 L 2705 1288 L 2716 1310 L E B 2723 1372 M 2735 1350 L 2712 1350 L 2723 1372 L E B 2732 1366 M 2743 1344 L 2721 1344 L 2732 1366 L E B 2736 1336 M 2747 1314 L 2724 1314 L 2736 1336 L E B 2741 1370 M 2752 1347 L 2729 1347 L 2741 1370 L E B 2742 1318 M 2754 1295 L 2731 1295 L 2742 1318 L E B 2744 1392 M 2755 1370 L 2733 1370 L 2744 1392 L E B 2746 1263 M 2757 1241 L 2735 1241 L 2746 1263 L E B 2756 1649 M 2768 1627 L 2745 1627 L 2756 1649 L E B 2761 1340 M 2773 1318 L 2750 1318 L 2761 1340 L E B 2763 1338 M 2774 1315 L 2752 1315 L 2763 1338 L E B 2770 1370 M 2781 1347 L 2759 1347 L 2770 1370 L E B 2784 1338 M 2795 1315 L 2773 1315 L 2784 1338 L E B 2789 2032 M 2800 2010 L 2778 2010 L 2789 2032 L E B 2810 1394 M 2821 1372 L 2799 1372 L 2810 1394 L E B 2812 1283 M 2823 1261 L 2800 1261 L 2812 1283 L E B 2819 1919 M 2830 1896 L 2807 1896 L 2819 1919 L E B 2824 2042 M 2835 2020 L 2813 2020 L 2824 2042 L E B 2829 1372 M 2840 1350 L 2818 1350 L 2829 1372 L E B 2834 1456 M 2845 1434 L 2823 1434 L 2834 1456 L E B 2838 1701 M 2849 1679 L 2826 1679 L 2838 1701 L E B 2839 1459 M 2851 1436 L 2828 1436 L 2839 1459 L E B 2848 1417 M 2859 1394 L 2837 1394 L 2848 1417 L E B 2850 1365 M 2861 1342 L 2838 1342 L 2850 1365 L E B 2869 1457 M 2880 1435 L 2858 1435 L 2869 1457 L E B 2874 1281 M 2885 1258 L 2863 1258 L 2874 1281 L E B 2876 1404 M 2887 1382 L 2864 1382 L 2876 1404 L E B 2881 1344 M 2892 1322 L 2870 1322 L 2881 1344 L E B 2891 1946 M 2903 1923 L 2880 1923 L 2891 1946 L E B 2896 1394 M 2908 1372 L 2885 1372 L 2896 1394 L E B 2900 1424 M 2911 1402 L 2889 1402 L 2900 1424 L E B 2902 1348 M 2913 1325 L 2890 1325 L 2902 1348 L E B 2907 1481 M 2918 1459 L 2896 1459 L 2907 1481 L E B 2909 1477 M 2920 1454 L 2897 1454 L 2909 1477 L E 5 Sp B 393 432 M 404 421 L 393 410 L 381 421 L 393 432 L E B 394 435 M 406 423 L 394 412 L 383 423 L 394 435 L E B 396 431 M 407 419 L 396 408 L 385 419 L 396 431 L E B 398 431 M 409 420 L 398 409 L 386 420 L 398 431 L E B 399 434 M 411 423 L 399 412 L 388 423 L 399 434 L E B 401 435 M 412 423 L 401 412 L 390 423 L 401 435 L E B 403 430 M 414 419 L 403 408 L 392 419 L 403 430 L E B 405 434 M 416 423 L 405 412 L 393 423 L 405 434 L E B 406 435 M 418 424 L 406 412 L 395 424 L 406 435 L E B 408 438 M 419 426 L 408 415 L 397 426 L 408 438 L E B 410 432 M 421 421 L 410 410 L 399 421 L 410 432 L E B 412 433 M 423 422 L 412 411 L 400 422 L 412 433 L E B 413 436 M 425 425 L 413 414 L 402 425 L 413 436 L E B 415 440 M 426 429 L 415 418 L 404 429 L 415 440 L E B 417 434 M 428 423 L 417 411 L 406 423 L 417 434 L E B 419 436 M 430 425 L 419 414 L 407 425 L 419 436 L E B 420 438 M 431 427 L 420 415 L 409 427 L 420 438 L E B 422 439 M 433 428 L 422 417 L 411 428 L 422 439 L E B 424 436 M 435 424 L 424 413 L 412 424 L 424 436 L E B 425 437 M 437 426 L 425 415 L 414 426 L 425 437 L E B 427 439 M 438 428 L 427 417 L 416 428 L 427 439 L E B 429 440 M 440 429 L 429 418 L 418 429 L 429 440 L E B 431 438 M 442 427 L 431 415 L 419 427 L 431 438 L E B 432 440 M 444 428 L 432 417 L 421 428 L 432 440 L E B 434 440 M 445 429 L 434 418 L 423 429 L 434 440 L E B 436 442 M 447 431 L 436 420 L 425 431 L 436 442 L E B 438 439 M 449 427 L 438 416 L 426 427 L 438 439 L E B 439 440 M 451 429 L 439 418 L 428 429 L 439 440 L E B 441 442 M 452 431 L 441 419 L 430 431 L 441 442 L E B 443 443 M 454 432 L 443 421 L 431 432 L 443 443 L E B 444 440 M 456 429 L 444 417 L 433 429 L 444 440 L E B 446 442 M 457 430 L 446 419 L 435 430 L 446 442 L E B 448 443 M 459 432 L 448 420 L 437 432 L 448 443 L E B 450 445 M 461 434 L 450 423 L 438 434 L 450 445 L E B 451 442 M 463 430 L 451 419 L 440 430 L 451 442 L E B 453 443 M 464 432 L 453 421 L 442 432 L 453 443 L E B 455 445 M 466 434 L 455 422 L 444 434 L 455 445 L E B 457 448 M 468 437 L 457 425 L 445 437 L 457 448 L E B 458 443 M 470 432 L 458 421 L 447 432 L 458 443 L E B 460 446 M 471 435 L 460 424 L 449 435 L 460 446 L E B 462 446 M 473 435 L 462 424 L 451 435 L 462 446 L E B 464 448 M 475 437 L 464 425 L 452 437 L 464 448 L E B 465 444 M 476 433 L 465 422 L 454 433 L 465 444 L E B 467 447 M 478 435 L 467 424 L 456 435 L 467 447 L E B 469 449 M 480 438 L 469 426 L 457 438 L 469 449 L E B 470 451 M 482 440 L 470 429 L 459 440 L 470 451 L E B 472 447 M 483 436 L 472 425 L 461 436 L 472 447 L E B 474 448 M 485 436 L 474 425 L 463 436 L 474 448 L E B 476 449 M 487 438 L 476 426 L 464 438 L 476 449 L E B 477 452 M 489 440 L 477 429 L 466 440 L 477 452 L E B 479 447 M 490 436 L 479 425 L 468 436 L 479 447 L E B 481 449 M 492 437 L 481 426 L 470 437 L 481 449 L E B 483 453 M 494 442 L 483 430 L 471 442 L 483 453 L E B 484 452 M 496 441 L 484 430 L 473 441 L 484 452 L E B 486 449 M 497 438 L 486 426 L 475 438 L 486 449 L E B 488 452 M 499 441 L 488 429 L 476 441 L 488 452 L E B 489 450 M 501 439 L 489 428 L 478 439 L 489 450 L E B 491 453 M 502 442 L 491 431 L 480 442 L 491 453 L E B 493 450 M 504 439 L 493 428 L 482 439 L 493 450 L E B 495 453 M 506 442 L 495 431 L 483 442 L 495 453 L E B 496 453 M 508 442 L 496 431 L 485 442 L 496 453 L E B 498 453 M 509 441 L 498 430 L 487 441 L 498 453 L E B 500 451 M 511 440 L 500 429 L 489 440 L 500 451 L E B 502 453 M 513 442 L 502 431 L 490 442 L 502 453 L E B 503 454 M 515 442 L 503 431 L 492 442 L 503 454 L E B 505 458 M 516 446 L 505 435 L 494 446 L 505 458 L E B 507 454 M 518 443 L 507 431 L 496 443 L 507 454 L E B 508 453 M 520 442 L 508 431 L 497 442 L 508 453 L E B 510 457 M 521 446 L 510 435 L 499 446 L 510 457 L E B 512 460 M 523 448 L 512 437 L 501 448 L 512 460 L E B 514 456 M 525 445 L 514 434 L 502 445 L 514 456 L E B 515 458 M 527 447 L 515 436 L 504 447 L 515 458 L E B 517 459 M 528 447 L 517 436 L 506 447 L 517 459 L E B 519 460 M 530 449 L 519 438 L 508 449 L 519 460 L E B 521 458 M 532 447 L 521 435 L 509 447 L 521 458 L E B 522 456 M 534 445 L 522 434 L 511 445 L 522 456 L E B 524 458 M 535 446 L 524 435 L 513 446 L 524 458 L E B 526 461 M 537 449 L 526 438 L 515 449 L 526 461 L E B 528 458 M 539 446 L 528 435 L 516 446 L 528 458 L E B 529 461 M 541 449 L 529 438 L 518 449 L 529 461 L E B 531 461 M 542 450 L 531 439 L 520 450 L 531 461 L E B 533 465 M 544 454 L 533 442 L 521 454 L 533 465 L E B 534 458 M 546 447 L 534 436 L 523 447 L 534 458 L E B 536 463 M 547 452 L 536 441 L 525 452 L 536 463 L E B 538 462 M 549 451 L 538 439 L 527 451 L 538 462 L E B 540 465 M 551 453 L 540 442 L 528 453 L 540 465 L E B 541 460 M 553 449 L 541 438 L 530 449 L 541 460 L E B 543 458 M 554 447 L 543 436 L 532 447 L 543 458 L E B 545 461 M 556 450 L 545 439 L 534 450 L 545 461 L E B 547 462 M 558 451 L 547 440 L 535 451 L 547 462 L E B 548 465 M 560 454 L 548 442 L 537 454 L 548 465 L E B 550 458 M 561 446 L 550 435 L 539 446 L 550 458 L E B 552 474 M 563 463 L 552 452 L 541 463 L 552 474 L E B 553 464 M 565 453 L 553 442 L 542 453 L 553 464 L E B 555 464 M 566 453 L 555 442 L 544 453 L 555 464 L E B 557 468 M 568 457 L 557 446 L 546 457 L 557 468 L E B 559 486 M 570 474 L 559 463 L 547 474 L 559 486 L E B 560 452 M 572 441 L 560 430 L 549 441 L 560 452 L E B 562 464 M 573 453 L 562 441 L 551 453 L 562 464 L E B 564 451 M 575 440 L 564 429 L 553 440 L 564 451 L E B 566 468 M 577 457 L 566 446 L 554 457 L 566 468 L E B 567 462 M 579 451 L 567 439 L 556 451 L 567 462 L E B 569 466 M 580 455 L 569 444 L 558 455 L 569 466 L E B 571 468 M 582 456 L 571 445 L 560 456 L 571 468 L E B 573 512 M 584 500 L 573 489 L 561 500 L 573 512 L E B 574 476 M 585 465 L 574 454 L 563 465 L 574 476 L E B 576 468 M 587 457 L 576 446 L 565 457 L 576 468 L E B 579 470 M 591 458 L 579 447 L 568 458 L 579 470 L E B 581 482 M 592 471 L 581 460 L 570 471 L 581 482 L E B 583 469 M 594 458 L 583 446 L 572 458 L 583 469 L E B 585 452 M 596 441 L 585 430 L 573 441 L 585 452 L E B 586 478 M 598 466 L 586 455 L 575 466 L 586 478 L E B 588 470 M 599 458 L 588 447 L 577 458 L 588 470 L E B 590 471 M 601 460 L 590 448 L 579 460 L 590 471 L E B 592 470 M 603 459 L 592 448 L 580 459 L 592 470 L E B 593 472 M 605 461 L 593 450 L 582 461 L 593 472 L E B 595 470 M 606 458 L 595 447 L 584 458 L 595 470 L E B 597 472 M 608 460 L 597 449 L 585 460 L 597 472 L E B 598 461 M 610 450 L 598 439 L 587 450 L 598 461 L E B 600 457 M 611 446 L 600 435 L 589 446 L 600 457 L E B 602 482 M 613 470 L 602 459 L 591 470 L 602 482 L E B 604 473 M 615 462 L 604 451 L 592 462 L 604 473 L E B 605 482 M 617 470 L 605 459 L 594 470 L 605 482 L E B 607 476 M 618 464 L 607 453 L 596 464 L 607 476 L E B 609 468 M 620 457 L 609 446 L 598 457 L 609 468 L E B 611 475 M 622 463 L 611 452 L 599 463 L 611 475 L E B 612 497 M 624 486 L 612 475 L 601 486 L 612 497 L E B 614 475 M 625 464 L 614 452 L 603 464 L 614 475 L E B 616 467 M 627 456 L 616 445 L 605 456 L 616 467 L E B 618 477 M 629 466 L 618 455 L 606 466 L 618 477 L E B 619 473 M 630 462 L 619 451 L 608 462 L 619 473 L E B 621 480 M 632 468 L 621 457 L 610 468 L 621 480 L E B 623 485 M 634 474 L 623 462 L 611 474 L 623 485 L E B 624 477 M 636 466 L 624 454 L 613 466 L 624 477 L E B 626 489 M 637 477 L 626 466 L 615 477 L 626 489 L E B 628 485 M 639 474 L 628 463 L 617 474 L 628 485 L E B 630 472 M 641 461 L 630 450 L 618 461 L 630 472 L E B 631 477 M 643 466 L 631 455 L 620 466 L 631 477 L E B 633 484 M 644 473 L 633 462 L 622 473 L 633 484 L E B 635 470 M 646 458 L 635 447 L 624 458 L 635 470 L E B 637 485 M 648 474 L 637 463 L 625 474 L 637 485 L E B 638 481 M 650 470 L 638 459 L 627 470 L 638 481 L E B 640 480 M 651 468 L 640 457 L 629 468 L 640 480 L E B 642 484 M 653 473 L 642 461 L 630 473 L 642 484 L E B 645 479 M 656 468 L 645 457 L 634 468 L 645 479 L E B 647 482 M 658 471 L 647 460 L 636 471 L 647 482 L E B 649 487 M 660 475 L 649 464 L 637 475 L 649 487 L E B 650 504 M 662 493 L 650 482 L 639 493 L 650 504 L E B 652 484 M 663 472 L 652 461 L 641 472 L 652 484 L E B 654 472 M 665 461 L 654 450 L 643 461 L 654 472 L E B 656 490 M 667 479 L 656 468 L 644 479 L 656 490 L E B 659 487 M 670 475 L 659 464 L 648 475 L 659 487 L E B 661 531 M 672 520 L 661 509 L 650 520 L 661 531 L E B 662 475 M 674 463 L 662 452 L 651 463 L 662 475 L E B 664 475 M 675 463 L 664 452 L 653 463 L 664 475 L E B 666 481 M 677 470 L 666 459 L 655 470 L 666 481 L E B 668 476 M 679 465 L 668 453 L 656 465 L 668 476 L E B 669 475 M 681 463 L 669 452 L 658 463 L 669 475 L E B 671 484 M 682 473 L 671 462 L 660 473 L 671 484 L E B 673 488 M 684 476 L 673 465 L 662 476 L 673 488 L E B 676 472 M 688 461 L 676 450 L 665 461 L 676 472 L E B 680 489 M 691 478 L 680 466 L 669 478 L 680 489 L E B 682 482 M 693 471 L 682 460 L 670 471 L 682 482 L E B 683 512 M 695 500 L 683 489 L 672 500 L 683 512 L E B 685 475 M 696 463 L 685 452 L 674 463 L 685 475 L E B 687 491 M 698 480 L 687 469 L 675 480 L 687 491 L E B 688 480 M 700 468 L 688 457 L 677 468 L 688 480 L E B 690 503 M 701 492 L 690 481 L 679 492 L 690 503 L E B 692 491 M 703 479 L 692 468 L 681 479 L 692 491 L E B 694 470 M 705 458 L 694 447 L 682 458 L 694 470 L E B 695 510 M 707 499 L 695 488 L 684 499 L 695 510 L E B 697 502 M 708 491 L 697 479 L 686 491 L 697 502 L E B 699 508 M 710 497 L 699 485 L 688 497 L 699 508 L E B 702 524 M 714 513 L 702 502 L 691 513 L 702 524 L E B 704 480 M 715 468 L 704 457 L 693 468 L 704 480 L E B 706 484 M 717 473 L 706 462 L 695 473 L 706 484 L E B 707 484 M 719 473 L 707 462 L 696 473 L 707 484 L E B 709 502 M 720 491 L 709 479 L 698 491 L 709 502 L E B 711 522 M 722 510 L 711 499 L 700 510 L 711 522 L E B 713 504 M 724 493 L 713 482 L 701 493 L 713 504 L E B 714 500 M 726 489 L 714 478 L 703 489 L 714 500 L E B 716 493 M 727 481 L 716 470 L 705 481 L 716 493 L E B 718 496 M 729 485 L 718 474 L 707 485 L 718 496 L E B 720 497 M 731 486 L 720 474 L 708 486 L 720 497 L E B 721 486 M 733 475 L 721 464 L 710 475 L 721 486 L E B 723 477 M 734 466 L 723 455 L 712 466 L 723 477 L E B 725 507 M 736 495 L 725 484 L 714 495 L 725 507 L E B 728 495 M 740 484 L 728 473 L 717 484 L 728 495 L E B 732 502 M 743 491 L 732 479 L 720 491 L 732 502 L E B 735 477 M 746 466 L 735 455 L 724 466 L 735 477 L E B 737 511 M 748 500 L 737 489 L 726 500 L 737 511 L E B 739 504 M 750 492 L 739 481 L 727 492 L 739 504 L E B 742 484 M 753 473 L 742 462 L 731 473 L 742 484 L E B 744 522 M 755 510 L 744 499 L 733 510 L 744 522 L E B 746 489 M 757 478 L 746 467 L 734 478 L 746 489 L E B 749 510 M 760 499 L 749 488 L 738 499 L 749 510 L E B 751 503 M 762 492 L 751 481 L 739 492 L 751 503 L E B 752 507 M 764 496 L 752 485 L 741 496 L 752 507 L E B 756 505 M 767 494 L 756 483 L 745 494 L 756 505 L E B 759 484 M 771 473 L 759 462 L 748 473 L 759 484 L E B 763 503 M 774 492 L 763 481 L 752 492 L 763 503 L E B 765 578 M 776 567 L 765 556 L 753 567 L 765 578 L E B 766 492 M 778 481 L 766 469 L 755 481 L 766 492 L E B 768 497 M 779 486 L 768 474 L 757 486 L 768 497 L E B 770 512 M 781 500 L 770 489 L 759 500 L 770 512 L E B 772 508 M 783 497 L 772 485 L 760 497 L 772 508 L E B 773 511 M 784 500 L 773 489 L 762 500 L 773 511 L E B 775 510 M 786 499 L 775 488 L 764 499 L 775 510 L E B 777 514 M 788 502 L 777 491 L 765 502 L 777 514 L E B 778 509 M 790 498 L 778 487 L 767 498 L 778 509 L E B 780 497 M 791 486 L 780 474 L 769 486 L 780 497 L E B 782 507 M 793 495 L 782 484 L 771 495 L 782 507 L E B 784 514 M 795 503 L 784 492 L 772 503 L 784 514 L E B 785 531 M 797 519 L 785 508 L 774 519 L 785 531 L E B 787 536 M 798 525 L 787 514 L 776 525 L 787 536 L E B 789 497 M 800 486 L 789 474 L 778 486 L 789 497 L E B 791 536 M 802 525 L 791 514 L 779 525 L 791 536 L E B 796 489 M 807 478 L 796 467 L 784 478 L 796 489 L E B 797 514 M 809 502 L 797 491 L 786 502 L 797 514 L E B 799 522 M 810 510 L 799 499 L 788 510 L 799 522 L E B 801 541 M 812 530 L 801 519 L 790 530 L 801 541 L E B 804 501 M 816 489 L 804 478 L 793 489 L 804 501 L E B 806 520 M 817 508 L 806 497 L 795 508 L 806 520 L E B 808 504 M 819 493 L 808 482 L 797 493 L 808 504 L E B 810 528 M 821 517 L 810 505 L 798 517 L 810 528 L E B 811 504 M 823 493 L 811 481 L 800 493 L 811 504 L E B 813 489 M 824 478 L 813 467 L 802 478 L 813 489 L E B 817 539 M 828 528 L 817 516 L 805 528 L 817 539 L E B 818 531 M 829 520 L 818 509 L 807 520 L 818 531 L E B 820 545 M 831 534 L 820 522 L 809 534 L 820 545 L E B 822 509 M 833 498 L 822 487 L 810 498 L 822 509 L E B 823 518 M 835 507 L 823 496 L 812 507 L 823 518 L E B 825 525 M 836 514 L 825 502 L 814 514 L 825 525 L E B 827 522 M 838 510 L 827 499 L 816 510 L 827 522 L E B 829 494 M 840 483 L 829 472 L 817 483 L 829 494 L E B 830 536 M 842 525 L 830 514 L 819 525 L 830 536 L E B 832 517 M 843 506 L 832 495 L 821 506 L 832 517 L E B 834 517 M 845 505 L 834 494 L 823 505 L 834 517 L E B 837 522 M 849 510 L 837 499 L 826 510 L 837 522 L E B 839 525 M 850 514 L 839 502 L 828 514 L 839 525 L E B 841 534 M 852 523 L 841 511 L 829 523 L 841 534 L E B 844 524 M 855 513 L 844 502 L 833 513 L 844 524 L E B 846 497 M 857 486 L 846 474 L 835 486 L 846 497 L E B 848 524 M 859 513 L 848 502 L 836 513 L 848 524 L E B 851 504 M 862 493 L 851 482 L 840 493 L 851 504 L E B 853 517 M 864 506 L 853 495 L 842 506 L 853 517 L E B 855 536 M 866 525 L 855 514 L 843 525 L 855 536 L E B 856 534 M 868 523 L 856 512 L 845 523 L 856 534 L E B 858 531 M 869 520 L 858 509 L 847 520 L 858 531 L E B 860 559 M 871 547 L 860 536 L 849 547 L 860 559 L E B 861 559 M 873 547 L 861 536 L 850 547 L 861 559 L E B 867 515 M 878 503 L 867 492 L 855 503 L 867 515 L E B 872 556 M 883 545 L 872 534 L 861 545 L 872 556 L E B 875 529 M 887 518 L 875 506 L 864 518 L 875 529 L E B 877 525 M 888 514 L 877 503 L 866 514 L 877 525 L E B 879 529 M 890 518 L 879 506 L 868 518 L 879 529 L E B 881 542 M 892 531 L 881 519 L 869 531 L 881 542 L E B 882 514 M 894 503 L 882 492 L 871 503 L 882 514 L E B 884 539 M 895 528 L 884 516 L 873 528 L 884 539 L E B 886 504 M 897 493 L 886 482 L 874 493 L 886 504 L E B 887 529 M 899 518 L 887 506 L 876 518 L 887 529 L E B 889 507 M 900 495 L 889 484 L 878 495 L 889 507 L E B 891 545 M 902 534 L 891 523 L 880 534 L 891 545 L E B 893 523 M 904 512 L 893 500 L 881 512 L 893 523 L E B 894 546 M 906 535 L 894 524 L 883 535 L 894 546 L E B 896 539 M 907 528 L 896 516 L 885 528 L 896 539 L E B 898 531 M 909 519 L 898 508 L 887 519 L 898 531 L E B 901 535 M 913 524 L 901 512 L 890 524 L 901 535 L E B 903 535 M 914 524 L 903 513 L 892 524 L 903 535 L E B 905 545 M 916 534 L 905 523 L 894 534 L 905 545 L E B 906 548 M 918 537 L 906 526 L 895 537 L 906 548 L E B 908 537 M 919 525 L 908 514 L 897 525 L 908 537 L E B 910 519 M 921 508 L 910 497 L 899 508 L 910 519 L E B 912 564 M 923 552 L 912 541 L 900 552 L 912 564 L E B 913 522 M 925 510 L 913 499 L 902 510 L 913 522 L E B 915 540 M 926 529 L 915 517 L 904 529 L 915 540 L E B 917 569 M 928 557 L 917 546 L 906 557 L 917 569 L E B 922 518 M 933 507 L 922 495 L 911 507 L 922 518 L E B 924 531 M 935 520 L 924 509 L 913 520 L 924 531 L E B 927 559 M 939 547 L 927 536 L 916 547 L 927 559 L E B 929 541 M 940 530 L 929 519 L 918 530 L 929 541 L E B 932 514 M 944 503 L 932 492 L 921 503 L 932 514 L E B 934 543 M 945 532 L 934 520 L 923 532 L 934 543 L E B 936 572 M 947 560 L 936 549 L 925 560 L 936 572 L E B 939 519 M 951 508 L 939 497 L 928 508 L 939 519 L E B 941 546 M 952 535 L 941 524 L 930 535 L 941 546 L E B 943 545 M 954 534 L 943 522 L 932 534 L 943 545 L E B 945 512 M 956 500 L 945 489 L 933 500 L 945 512 L E B 946 555 M 958 544 L 946 532 L 935 544 L 946 555 L E B 950 548 M 961 537 L 950 525 L 938 537 L 950 548 L E B 951 514 M 963 503 L 951 492 L 940 503 L 951 514 L E B 955 581 M 966 570 L 955 558 L 944 570 L 955 581 L E B 957 549 M 968 538 L 957 527 L 945 538 L 957 549 L E B 958 559 M 970 547 L 958 536 L 947 547 L 958 559 L E B 969 551 M 980 540 L 969 529 L 958 540 L 969 551 L E B 971 543 M 982 532 L 971 520 L 959 532 L 971 543 L E B 972 556 M 983 545 L 972 534 L 961 545 L 972 556 L E B 974 554 M 985 543 L 974 531 L 963 543 L 974 554 L E B 976 523 M 987 512 L 976 500 L 964 512 L 976 523 L E B 977 517 M 989 505 L 977 494 L 966 505 L 977 517 L E B 983 558 M 994 547 L 983 536 L 971 547 L 983 558 L E B 984 556 M 996 545 L 984 533 L 973 545 L 984 556 L E B 986 623 M 997 612 L 986 600 L 975 612 L 986 623 L E B 988 546 M 999 535 L 988 524 L 977 535 L 988 546 L E B 991 562 M 1003 551 L 991 540 L 980 551 L 991 562 L E B 993 519 M 1004 508 L 993 497 L 982 508 L 993 519 L E B 995 548 M 1006 536 L 995 525 L 983 536 L 995 548 L E B 996 560 M 1008 549 L 996 538 L 985 549 L 996 560 L E B 998 592 M 1009 580 L 998 569 L 987 580 L 998 592 L E B 1000 583 M 1011 572 L 1000 561 L 989 572 L 1000 583 L E B 1002 562 M 1013 551 L 1002 539 L 990 551 L 1002 562 L E B 1005 529 M 1016 518 L 1005 506 L 994 518 L 1005 529 L E B 1007 524 M 1018 513 L 1007 502 L 996 513 L 1007 524 L E B 1009 567 M 1020 556 L 1009 544 L 997 556 L 1009 567 L E B 1010 544 M 1022 533 L 1010 521 L 999 533 L 1010 544 L E B 1012 552 M 1023 541 L 1012 530 L 1001 541 L 1012 552 L E B 1014 570 M 1025 559 L 1014 548 L 1003 559 L 1014 570 L E B 1016 549 M 1027 538 L 1016 526 L 1004 538 L 1016 549 L E B 1017 559 M 1028 547 L 1017 536 L 1006 547 L 1017 559 L E B 1019 591 M 1030 580 L 1019 568 L 1008 580 L 1019 591 L E B 1021 567 M 1032 556 L 1021 545 L 1009 556 L 1021 567 L E B 1022 542 M 1034 531 L 1022 520 L 1011 531 L 1022 542 L E B 1024 557 M 1035 546 L 1024 535 L 1013 546 L 1024 557 L E B 1026 573 M 1037 562 L 1026 551 L 1015 562 L 1026 573 L E B 1029 536 M 1041 525 L 1029 514 L 1018 525 L 1029 536 L E B 1031 569 M 1042 557 L 1031 546 L 1020 557 L 1031 569 L E B 1033 571 M 1044 560 L 1033 548 L 1022 560 L 1033 571 L E B 1035 576 M 1046 565 L 1035 553 L 1023 565 L 1035 576 L E B 1036 539 M 1048 528 L 1036 516 L 1025 528 L 1036 539 L E B 1038 581 M 1049 570 L 1038 558 L 1027 570 L 1038 581 L E B 1040 583 M 1051 572 L 1040 561 L 1028 572 L 1040 583 L E B 1041 581 M 1053 570 L 1041 558 L 1030 570 L 1041 581 L E B 1043 583 M 1054 572 L 1043 561 L 1032 572 L 1043 583 L E B 1045 536 M 1056 525 L 1045 514 L 1034 525 L 1045 536 L E B 1047 534 M 1058 523 L 1047 511 L 1035 523 L 1047 534 L E B 1050 593 M 1061 582 L 1050 571 L 1039 582 L 1050 593 L E B 1052 556 M 1063 545 L 1052 534 L 1041 545 L 1052 556 L E B 1054 572 M 1065 560 L 1054 549 L 1042 560 L 1054 572 L E B 1055 544 M 1067 533 L 1055 521 L 1044 533 L 1055 544 L E B 1057 593 M 1068 582 L 1057 571 L 1046 582 L 1057 593 L E B 1059 591 M 1070 580 L 1059 568 L 1048 580 L 1059 591 L E B 1060 567 M 1072 556 L 1060 545 L 1049 556 L 1060 567 L E B 1064 556 M 1075 545 L 1064 534 L 1053 545 L 1064 556 L E B 1066 583 M 1077 572 L 1066 561 L 1054 572 L 1066 583 L E B 1067 547 M 1079 536 L 1067 524 L 1056 536 L 1067 547 L E B 1071 544 M 1082 533 L 1071 521 L 1060 533 L 1071 544 L E B 1074 541 M 1086 530 L 1074 519 L 1063 530 L 1074 541 L E B 1076 541 M 1087 530 L 1076 519 L 1065 530 L 1076 541 L E B 1078 564 M 1089 552 L 1078 541 L 1067 552 L 1078 564 L E B 1080 620 M 1091 609 L 1080 598 L 1068 609 L 1080 620 L E B 1081 570 M 1093 558 L 1081 547 L 1070 558 L 1081 570 L E B 1083 581 M 1094 570 L 1083 558 L 1072 570 L 1083 581 L E B 1085 561 M 1096 550 L 1085 539 L 1073 550 L 1085 561 L E B 1086 633 M 1098 622 L 1086 610 L 1075 622 L 1086 633 L E B 1088 567 M 1099 556 L 1088 545 L 1077 556 L 1088 567 L E B 1092 582 M 1103 570 L 1092 559 L 1080 570 L 1092 582 L E B 1095 578 M 1106 567 L 1095 555 L 1084 567 L 1095 578 L E B 1097 544 M 1108 533 L 1097 521 L 1086 533 L 1097 544 L E B 1099 598 M 1110 587 L 1099 576 L 1087 587 L 1099 598 L E B 1102 572 M 1113 560 L 1102 549 L 1091 560 L 1102 572 L E B 1104 544 M 1115 533 L 1104 521 L 1093 533 L 1104 544 L E B 1105 545 M 1117 534 L 1105 523 L 1094 534 L 1105 545 L E B 1112 544 M 1124 533 L 1112 521 L 1101 533 L 1112 544 L E B 1116 549 M 1127 538 L 1116 526 L 1105 538 L 1116 549 L E B 1119 544 M 1131 533 L 1119 521 L 1108 533 L 1119 544 L E B 1123 595 M 1134 583 L 1123 572 L 1112 583 L 1123 595 L E B 1125 603 M 1136 592 L 1125 581 L 1113 592 L 1125 603 L E B 1126 588 M 1137 577 L 1126 566 L 1115 577 L 1126 588 L E B 1128 571 M 1139 560 L 1128 549 L 1117 560 L 1128 571 L E B 1130 592 M 1141 580 L 1130 569 L 1118 580 L 1130 592 L E B 1131 564 M 1143 552 L 1131 541 L 1120 552 L 1131 564 L E B 1133 597 M 1144 585 L 1133 574 L 1122 585 L 1133 597 L E B 1137 573 M 1148 562 L 1137 551 L 1125 562 L 1137 573 L E B 1140 580 M 1151 569 L 1140 558 L 1129 569 L 1140 580 L E B 1142 549 M 1153 538 L 1142 526 L 1131 538 L 1142 549 L E B 1144 585 M 1155 573 L 1144 562 L 1132 573 L 1144 585 L E B 1145 585 M 1157 574 L 1145 563 L 1134 574 L 1145 585 L E B 1149 613 M 1160 602 L 1149 591 L 1137 602 L 1149 613 L E B 1150 590 M 1162 579 L 1150 568 L 1139 579 L 1150 590 L E B 1152 634 M 1163 623 L 1152 612 L 1141 623 L 1152 634 L E B 1154 591 M 1165 580 L 1154 568 L 1143 580 L 1154 591 L E B 1157 551 M 1169 540 L 1157 529 L 1146 540 L 1157 551 L E B 1159 584 M 1170 573 L 1159 562 L 1148 573 L 1159 584 L E B 1161 619 M 1172 608 L 1161 597 L 1150 608 L 1161 619 L E B 1163 613 M 1174 602 L 1163 591 L 1151 602 L 1163 613 L E B 1164 611 M 1176 599 L 1164 588 L 1153 599 L 1164 611 L E B 1166 579 M 1177 568 L 1166 557 L 1155 568 L 1166 579 L E B 1168 632 M 1179 620 L 1168 609 L 1157 620 L 1168 632 L E B 1170 595 M 1181 583 L 1170 572 L 1158 583 L 1170 595 L E B 1171 559 M 1182 547 L 1171 536 L 1160 547 L 1171 559 L E B 1173 630 M 1184 619 L 1173 608 L 1162 619 L 1173 630 L E B 1175 595 M 1186 584 L 1175 572 L 1163 584 L 1175 595 L E B 1178 613 M 1189 602 L 1178 591 L 1167 602 L 1178 613 L E B 1180 570 M 1191 559 L 1180 548 L 1169 559 L 1180 570 L E B 1182 628 M 1193 617 L 1182 605 L 1170 617 L 1182 628 L E B 1183 588 M 1195 577 L 1183 566 L 1172 577 L 1183 588 L E B 1185 607 M 1196 596 L 1185 585 L 1174 596 L 1185 607 L E B 1187 573 M 1198 562 L 1187 551 L 1176 562 L 1187 573 L E B 1189 559 M 1200 547 L 1189 536 L 1177 547 L 1189 559 L E B 1190 653 M 1202 641 L 1190 630 L 1179 641 L 1190 653 L E B 1192 591 M 1203 580 L 1192 568 L 1181 580 L 1192 591 L E B 1194 593 M 1205 582 L 1194 571 L 1182 582 L 1194 593 L E B 1195 611 M 1207 599 L 1195 588 L 1184 599 L 1195 611 L E B 1197 573 M 1208 561 L 1197 550 L 1186 561 L 1197 573 L E B 1199 590 M 1210 579 L 1199 567 L 1188 579 L 1199 590 L E B 1201 611 M 1212 599 L 1201 588 L 1189 599 L 1201 611 L E B 1202 640 M 1214 629 L 1202 618 L 1191 629 L 1202 640 L E B 1204 643 M 1215 631 L 1204 620 L 1193 631 L 1204 643 L E B 1206 609 M 1217 598 L 1206 587 L 1195 598 L 1206 609 L E B 1208 645 M 1219 634 L 1208 623 L 1196 634 L 1208 645 L E B 1209 599 M 1221 587 L 1209 576 L 1198 587 L 1209 599 L E B 1211 635 M 1222 624 L 1211 613 L 1200 624 L 1211 635 L E B 1213 642 M 1224 631 L 1213 620 L 1202 631 L 1213 642 L E B 1214 620 M 1226 609 L 1214 598 L 1203 609 L 1214 620 L E B 1216 592 M 1227 581 L 1216 570 L 1205 581 L 1216 592 L E B 1218 637 M 1229 625 L 1218 614 L 1207 625 L 1218 637 L E B 1220 599 M 1231 588 L 1220 577 L 1208 588 L 1220 599 L E B 1221 659 M 1233 648 L 1221 636 L 1210 648 L 1221 659 L E B 1223 625 M 1234 614 L 1223 603 L 1212 614 L 1223 625 L E B 1227 627 M 1238 615 L 1227 604 L 1215 615 L 1227 627 L E B 1228 620 M 1240 609 L 1228 598 L 1217 609 L 1228 620 L E B 1230 577 M 1241 566 L 1230 555 L 1219 566 L 1230 577 L E B 1232 604 M 1243 592 L 1232 581 L 1221 592 L 1232 604 L E B 1234 578 M 1245 567 L 1234 556 L 1222 567 L 1234 578 L E B 1239 588 M 1250 577 L 1239 566 L 1227 577 L 1239 588 L E B 1240 613 M 1252 602 L 1240 590 L 1229 602 L 1240 613 L E B 1242 702 M 1253 691 L 1242 680 L 1231 691 L 1242 702 L E B 1244 609 M 1255 598 L 1244 587 L 1233 598 L 1244 609 L E B 1246 658 M 1257 646 L 1246 635 L 1234 646 L 1246 658 L E B 1247 611 M 1259 599 L 1247 588 L 1236 599 L 1247 611 L E B 1249 604 M 1260 593 L 1249 581 L 1238 593 L 1249 604 L E B 1251 599 M 1262 588 L 1251 577 L 1240 588 L 1251 599 L E B 1254 616 M 1266 605 L 1254 593 L 1243 605 L 1254 616 L E B 1256 612 M 1267 601 L 1256 590 L 1245 601 L 1256 612 L E B 1258 640 M 1269 629 L 1258 618 L 1247 629 L 1258 640 L E B 1259 576 M 1271 565 L 1259 553 L 1248 565 L 1259 576 L E B 1261 597 M 1272 586 L 1261 574 L 1250 586 L 1261 597 L E B 1263 566 M 1274 555 L 1263 544 L 1252 555 L 1263 566 L E B 1265 620 M 1276 609 L 1265 598 L 1253 609 L 1265 620 L E B 1266 654 M 1278 643 L 1266 631 L 1255 643 L 1266 654 L E B 1268 614 M 1279 603 L 1268 592 L 1257 603 L 1268 614 L E B 1270 606 M 1281 594 L 1270 583 L 1259 594 L 1270 606 L E B 1275 617 M 1286 606 L 1275 594 L 1264 606 L 1275 617 L E B 1277 615 M 1288 603 L 1277 592 L 1266 603 L 1277 615 L E B 1279 653 M 1290 641 L 1279 630 L 1267 641 L 1279 653 L E B 1280 665 M 1292 654 L 1280 642 L 1269 654 L 1280 665 L E B 1282 573 M 1293 562 L 1282 551 L 1271 562 L 1282 573 L E B 1284 609 M 1295 598 L 1284 587 L 1272 598 L 1284 609 L E B 1287 618 M 1298 607 L 1287 596 L 1276 607 L 1287 618 L E B 1289 633 M 1300 622 L 1289 610 L 1278 622 L 1289 633 L E B 1296 632 M 1307 620 L 1296 609 L 1285 620 L 1296 632 L E B 1303 602 M 1314 590 L 1303 579 L 1291 590 L 1303 602 L E B 1304 591 M 1316 580 L 1304 568 L 1293 580 L 1304 591 L E B 1306 643 M 1317 631 L 1306 620 L 1295 631 L 1306 643 L E B 1310 578 M 1321 567 L 1310 556 L 1298 567 L 1310 578 L E B 1311 629 M 1323 617 L 1311 606 L 1300 617 L 1311 629 L E B 1313 619 M 1324 608 L 1313 597 L 1302 608 L 1313 619 L E B 1317 618 M 1328 607 L 1317 596 L 1305 607 L 1317 618 L E B 1324 608 M 1335 597 L 1324 586 L 1312 597 L 1324 608 L E B 1329 638 M 1340 627 L 1329 615 L 1317 627 L 1329 638 L E B 1330 583 M 1342 572 L 1330 561 L 1319 572 L 1330 583 L E B 1332 632 M 1343 620 L 1332 609 L 1321 620 L 1332 632 L E B 1334 648 M 1345 636 L 1334 625 L 1323 636 L 1334 648 L E B 1339 660 M 1350 649 L 1339 638 L 1328 649 L 1339 660 L E B 1344 655 M 1356 644 L 1344 633 L 1333 644 L 1344 655 L E B 1346 645 M 1357 634 L 1346 623 L 1335 634 L 1346 645 L E B 1348 581 M 1359 570 L 1348 558 L 1336 570 L 1348 581 L E B 1351 629 M 1362 617 L 1351 606 L 1340 617 L 1351 629 L E B 1360 655 M 1371 644 L 1360 633 L 1349 644 L 1360 655 L E B 1363 625 M 1375 614 L 1363 603 L 1352 614 L 1363 625 L E B 1365 687 M 1376 676 L 1365 665 L 1354 676 L 1365 687 L E B 1367 648 M 1378 636 L 1367 625 L 1356 636 L 1367 648 L E B 1369 655 M 1380 644 L 1369 633 L 1357 644 L 1369 655 L E B 1372 645 M 1383 634 L 1372 623 L 1361 634 L 1372 645 L E B 1375 682 M 1387 671 L 1375 660 L 1364 671 L 1375 682 L E B 1377 667 M 1388 656 L 1377 645 L 1366 656 L 1377 667 L E B 1379 677 M 1390 666 L 1379 655 L 1368 666 L 1379 677 L E B 1381 650 M 1392 639 L 1381 628 L 1369 639 L 1381 650 L E B 1388 690 M 1399 678 L 1388 667 L 1376 678 L 1388 690 L E B 1391 675 M 1402 664 L 1391 652 L 1380 664 L 1391 675 L E B 1393 631 M 1404 620 L 1393 609 L 1381 620 L 1393 631 L E B 1400 649 M 1411 638 L 1400 627 L 1388 638 L 1400 649 L E B 1403 666 M 1414 655 L 1403 644 L 1392 655 L 1403 666 L E B 1405 695 M 1416 683 L 1405 672 L 1394 683 L 1405 695 L E B 1407 692 M 1418 681 L 1407 670 L 1395 681 L 1407 692 L E B 1412 603 M 1423 592 L 1412 581 L 1401 592 L 1412 603 L E B 1413 628 M 1425 617 L 1413 605 L 1402 617 L 1413 628 L E B 1420 606 M 1432 594 L 1420 583 L 1409 594 L 1420 606 L E B 1426 672 M 1437 661 L 1426 650 L 1414 661 L 1426 672 L E B 1427 628 M 1439 617 L 1427 605 L 1416 617 L 1427 628 L E B 1429 593 M 1440 582 L 1429 571 L 1418 582 L 1429 593 L E B 1431 632 M 1442 620 L 1431 609 L 1420 620 L 1431 632 L E B 1433 694 M 1444 683 L 1433 671 L 1421 683 L 1433 694 L E B 1434 610 M 1446 598 L 1434 587 L 1423 598 L 1434 610 L E B 1438 685 M 1449 674 L 1438 662 L 1426 674 L 1438 685 L E B 1439 603 M 1451 592 L 1439 581 L 1428 592 L 1439 603 L E B 1443 698 M 1454 687 L 1443 676 L 1432 687 L 1443 698 L E B 1448 658 M 1459 646 L 1448 635 L 1437 646 L 1448 658 L E B 1450 645 M 1461 634 L 1450 623 L 1439 634 L 1450 645 L E B 1452 649 M 1463 637 L 1452 626 L 1440 637 L 1452 649 L E B 1453 687 M 1465 676 L 1453 665 L 1442 676 L 1453 687 L E B 1458 754 M 1470 743 L 1458 732 L 1447 743 L 1458 754 L E B 1462 671 M 1473 659 L 1462 648 L 1451 659 L 1462 671 L E B 1464 707 M 1475 696 L 1464 685 L 1452 696 L 1464 707 L E B 1467 712 M 1478 701 L 1467 689 L 1456 701 L 1467 712 L E B 1469 632 M 1480 620 L 1469 609 L 1458 620 L 1469 632 L E B 1471 665 M 1482 654 L 1471 642 L 1459 654 L 1471 665 L E B 1476 677 M 1487 665 L 1476 654 L 1465 665 L 1476 677 L E B 1478 635 M 1489 624 L 1478 613 L 1466 624 L 1478 635 L E B 1479 672 M 1490 661 L 1479 650 L 1468 661 L 1479 672 L E B 1481 633 M 1492 622 L 1481 610 L 1470 622 L 1481 633 L E B 1484 620 M 1496 609 L 1484 598 L 1473 609 L 1484 620 L E B 1488 674 M 1499 662 L 1488 651 L 1477 662 L 1488 674 L E B 1491 630 M 1503 619 L 1491 608 L 1480 619 L 1491 630 L E B 1497 659 M 1508 648 L 1497 636 L 1485 648 L 1497 659 L E B 1498 648 M 1510 636 L 1498 625 L 1487 636 L 1498 648 L E B 1503 666 M 1515 654 L 1503 643 L 1492 654 L 1503 666 L E B 1512 606 M 1523 594 L 1512 583 L 1501 594 L 1512 606 L E B 1516 672 M 1527 661 L 1516 649 L 1504 661 L 1516 672 L E B 1517 682 M 1529 671 L 1517 660 L 1506 671 L 1517 682 L E B 1521 692 M 1532 681 L 1521 670 L 1510 681 L 1521 692 L E B 1523 722 M 1534 711 L 1523 699 L 1511 711 L 1523 722 L E B 1528 688 M 1539 677 L 1528 666 L 1516 677 L 1528 688 L E B 1531 693 M 1542 682 L 1531 671 L 1520 682 L 1531 693 L E B 1535 727 M 1546 716 L 1535 704 L 1523 716 L 1535 727 L E B 1538 630 M 1549 619 L 1538 608 L 1527 619 L 1538 630 L E B 1543 723 M 1555 712 L 1543 701 L 1532 712 L 1543 723 L E B 1545 695 M 1556 683 L 1545 672 L 1534 683 L 1545 695 L E B 1554 675 M 1565 664 L 1554 652 L 1542 664 L 1554 675 L E B 1555 728 M 1567 717 L 1555 706 L 1544 717 L 1555 728 L E B 1559 700 M 1570 688 L 1559 677 L 1548 688 L 1559 700 L E B 1561 705 M 1572 693 L 1561 682 L 1549 693 L 1561 705 L E B 1564 628 M 1575 617 L 1564 605 L 1553 617 L 1564 628 L E B 1566 680 M 1577 669 L 1566 657 L 1555 669 L 1566 680 L E B 1573 623 M 1584 612 L 1573 600 L 1561 612 L 1573 623 L E B 1580 660 M 1591 649 L 1580 638 L 1568 649 L 1580 660 L E B 1588 734 M 1600 723 L 1588 712 L 1577 723 L 1588 734 L E B 1592 695 M 1603 683 L 1592 672 L 1580 683 L 1592 695 L E B 1599 685 M 1610 673 L 1599 662 L 1587 673 L 1599 685 L E B 1602 742 M 1613 730 L 1602 719 L 1591 730 L 1602 742 L E B 1607 648 M 1619 636 L 1607 625 L 1596 636 L 1607 648 L E B 1611 673 M 1622 662 L 1611 651 L 1600 662 L 1611 673 L E B 1612 712 M 1624 701 L 1612 689 L 1601 701 L 1612 712 L E B 1614 687 M 1625 676 L 1614 665 L 1603 676 L 1614 687 L E B 1618 676 M 1629 665 L 1618 654 L 1606 665 L 1618 676 L E B 1623 655 M 1634 644 L 1623 633 L 1612 644 L 1623 655 L E B 1632 697 M 1643 686 L 1632 675 L 1620 686 L 1632 697 L E B 1633 648 M 1645 636 L 1633 625 L 1622 636 L 1633 648 L E B 1640 667 M 1651 656 L 1640 645 L 1629 656 L 1640 667 L E B 1642 685 M 1653 674 L 1642 662 L 1631 674 L 1642 685 L E B 1647 740 M 1658 729 L 1647 718 L 1636 729 L 1647 740 L E B 1649 666 M 1660 655 L 1649 643 L 1638 655 L 1649 666 L E B 1652 660 M 1664 649 L 1652 638 L 1641 649 L 1652 660 L E B 1656 630 M 1667 619 L 1656 608 L 1645 619 L 1656 630 L E B 1663 655 M 1674 644 L 1663 633 L 1651 644 L 1663 655 L E B 1664 771 M 1676 760 L 1664 749 L 1653 760 L 1664 771 L E B 1670 693 M 1681 682 L 1670 671 L 1658 682 L 1670 693 L E B 1673 658 M 1684 646 L 1673 635 L 1662 646 L 1673 658 L E B 1677 687 M 1688 676 L 1677 665 L 1665 676 L 1677 687 L E B 1683 727 M 1695 716 L 1683 704 L 1672 716 L 1683 727 L E B 1690 722 M 1702 711 L 1690 699 L 1679 711 L 1690 722 L E B 1692 774 M 1703 763 L 1692 751 L 1681 763 L 1692 774 L E B 1697 648 M 1709 636 L 1697 625 L 1686 636 L 1697 648 L E B 1711 799 M 1722 787 L 1711 776 L 1700 787 L 1711 799 L E B 1713 771 M 1724 760 L 1713 749 L 1702 760 L 1713 771 L E B 1725 698 M 1736 687 L 1725 676 L 1714 687 L 1725 698 L E B 1730 650 M 1741 639 L 1730 628 L 1719 639 L 1730 650 L E B 1735 715 M 1747 704 L 1735 693 L 1724 704 L 1735 715 L E B 1737 747 M 1748 735 L 1737 724 L 1726 735 L 1737 747 L E B 1739 700 M 1750 688 L 1739 677 L 1728 688 L 1739 700 L E B 1742 779 M 1754 767 L 1742 756 L 1731 767 L 1742 779 L E B 1744 781 M 1755 770 L 1744 759 L 1733 770 L 1744 781 L E B 1746 818 M 1757 807 L 1746 796 L 1734 807 L 1746 818 L E B 1747 720 M 1759 709 L 1747 698 L 1736 709 L 1747 720 L E B 1749 660 M 1760 649 L 1749 638 L 1738 649 L 1749 660 L E B 1753 720 M 1764 709 L 1753 698 L 1741 709 L 1753 720 L E B 1756 729 M 1767 718 L 1756 707 L 1745 718 L 1756 729 L E B 1761 737 M 1773 725 L 1761 714 L 1750 725 L 1761 737 L E B 1763 749 M 1774 738 L 1763 727 L 1752 738 L 1763 749 L E B 1766 723 M 1778 712 L 1766 701 L 1755 712 L 1766 723 L E B 1770 675 M 1781 664 L 1770 652 L 1759 664 L 1770 675 L E B 1773 658 M 1785 646 L 1773 635 L 1762 646 L 1773 658 L E B 1777 682 M 1788 671 L 1777 660 L 1766 671 L 1777 682 L E B 1779 663 M 1790 651 L 1779 640 L 1767 651 L 1779 663 L E B 1784 808 M 1795 797 L 1784 786 L 1773 797 L 1784 808 L E B 1787 702 M 1799 691 L 1787 680 L 1776 691 L 1787 702 L E B 1801 707 M 1812 696 L 1801 685 L 1790 696 L 1801 707 L E B 1808 735 M 1819 724 L 1808 713 L 1797 724 L 1808 735 L E B 1818 665 M 1830 654 L 1818 642 L 1807 654 L 1818 665 L E B 1825 732 M 1837 721 L 1825 709 L 1814 721 L 1825 732 L E B 1829 738 M 1840 727 L 1829 715 L 1818 727 L 1829 738 L E B 1836 720 M 1847 709 L 1836 697 L 1824 709 L 1836 720 L E B 1841 823 M 1852 812 L 1841 801 L 1830 812 L 1841 823 L E B 1843 677 M 1854 666 L 1843 655 L 1831 666 L 1843 677 L E B 1851 697 M 1863 686 L 1851 675 L 1840 686 L 1851 697 L E B 1853 756 M 1864 745 L 1853 734 L 1842 745 L 1853 756 L E B 1856 697 M 1868 686 L 1856 674 L 1845 686 L 1856 697 L E B 1858 742 M 1869 730 L 1858 719 L 1847 730 L 1858 742 L E B 1863 756 M 1875 745 L 1863 734 L 1852 745 L 1863 756 L E B 1867 786 M 1878 775 L 1867 764 L 1856 775 L 1867 786 L E B 1869 776 M 1880 765 L 1869 754 L 1857 765 L 1869 776 L E B 1870 727 M 1882 716 L 1870 705 L 1859 716 L 1870 727 L E B 1877 695 M 1888 683 L 1877 672 L 1866 683 L 1877 695 L E B 1882 742 M 1894 730 L 1882 719 L 1871 730 L 1882 742 L E B 1884 728 M 1895 717 L 1884 706 L 1873 717 L 1884 728 L E B 1886 808 M 1897 797 L 1886 786 L 1875 797 L 1886 808 L E B 1900 850 M 1911 839 L 1900 828 L 1888 839 L 1900 850 L E B 1905 753 M 1916 742 L 1905 730 L 1894 742 L 1905 753 L E B 1908 697 M 1920 686 L 1908 675 L 1897 686 L 1908 697 L E B 1919 692 M 1930 681 L 1919 670 L 1908 681 L 1919 692 L E B 1926 759 M 1937 747 L 1926 736 L 1914 747 L 1926 759 L E B 1927 714 M 1939 703 L 1927 692 L 1916 703 L 1927 714 L E B 1933 749 M 1944 738 L 1933 727 L 1921 738 L 1933 749 L E B 1934 813 M 1946 802 L 1934 791 L 1923 802 L 1934 813 L E B 1938 705 M 1949 693 L 1938 682 L 1927 693 L 1938 705 L E B 1940 772 M 1951 760 L 1940 749 L 1928 760 L 1940 772 L E B 1953 765 M 1965 754 L 1953 742 L 1942 754 L 1953 765 L E B 1957 833 M 1968 822 L 1957 811 L 1946 822 L 1957 833 L E B 1960 817 M 1972 806 L 1960 795 L 1949 806 L 1960 817 L E B 1969 799 M 1980 787 L 1969 776 L 1958 787 L 1969 799 L E B 1978 873 M 1989 861 L 1978 850 L 1966 861 L 1978 873 L E B 1981 853 M 1992 842 L 1981 830 L 1970 842 L 1981 853 L E B 1985 710 M 1996 698 L 1985 687 L 1973 698 L 1985 710 L E B 1988 700 M 1999 688 L 1988 677 L 1977 688 L 1988 700 L E B 1993 818 M 2004 807 L 1993 796 L 1982 807 L 1993 818 L E B 1995 801 M 2006 790 L 1995 779 L 1984 790 L 1995 801 L E B 2002 841 M 2013 829 L 2002 818 L 1991 829 L 2002 841 L E B 2004 714 M 2015 703 L 2004 692 L 1992 703 L 2004 714 L E B 2007 772 M 2018 761 L 2007 750 L 1996 761 L 2007 772 L E B 2012 808 M 2023 797 L 2012 786 L 2001 797 L 2012 808 L E B 2016 868 M 2027 857 L 2016 845 L 2004 857 L 2016 868 L E B 2019 826 M 2030 814 L 2019 803 L 2008 814 L 2019 826 L E B 2024 846 M 2036 834 L 2024 823 L 2013 834 L 2024 846 L E B 2028 828 M 2039 817 L 2028 806 L 2017 817 L 2028 828 L E B 2030 828 M 2041 817 L 2030 806 L 2018 817 L 2030 828 L E B 2035 792 M 2046 781 L 2035 769 L 2023 781 L 2035 792 L E B 2042 705 M 2053 693 L 2042 682 L 2030 693 L 2042 705 L E B 2045 717 M 2056 706 L 2045 694 L 2034 706 L 2045 717 L E B 2050 823 M 2062 812 L 2050 801 L 2039 812 L 2050 823 L E B 2054 769 M 2065 758 L 2054 746 L 2042 758 L 2054 769 L E B 2057 802 M 2068 791 L 2057 780 L 2046 791 L 2057 802 L E B 2061 846 M 2072 834 L 2061 823 L 2049 834 L 2061 846 L E B 2064 705 M 2075 693 L 2064 682 L 2053 693 L 2064 705 L E B 2066 702 M 2077 691 L 2066 680 L 2055 691 L 2066 702 L E B 2068 800 M 2079 789 L 2068 777 L 2056 789 L 2068 800 L E B 2075 749 M 2086 738 L 2075 727 L 2063 738 L 2075 749 L E B 2076 833 M 2087 822 L 2076 811 L 2065 822 L 2076 833 L E B 2080 732 M 2091 721 L 2080 709 L 2068 721 L 2080 732 L E B 2081 729 M 2093 718 L 2081 707 L 2070 718 L 2081 729 L E B 2085 754 M 2096 743 L 2085 732 L 2074 743 L 2085 754 L E B 2088 737 M 2100 725 L 2088 714 L 2077 725 L 2088 737 L E B 2090 780 M 2101 769 L 2090 758 L 2079 769 L 2090 780 L E B 2094 732 M 2105 721 L 2094 709 L 2082 721 L 2094 732 L E B 2099 776 M 2110 765 L 2099 754 L 2087 765 L 2099 776 L E B 2100 729 M 2112 718 L 2100 707 L 2089 718 L 2100 729 L E B 2102 821 M 2113 810 L 2102 798 L 2091 810 L 2102 821 L E B 2118 801 M 2129 790 L 2118 779 L 2107 790 L 2118 801 L E B 2120 739 M 2131 728 L 2120 717 L 2108 728 L 2120 739 L E B 2130 801 M 2141 789 L 2130 778 L 2119 789 L 2130 801 L E B 2139 752 M 2150 740 L 2139 729 L 2127 740 L 2139 752 L E B 2140 939 M 2152 928 L 2140 917 L 2129 928 L 2140 939 L E B 2142 801 M 2153 790 L 2142 779 L 2131 790 L 2142 801 L E B 2147 743 M 2158 732 L 2147 720 L 2136 732 L 2147 743 L E B 2152 772 M 2164 761 L 2152 750 L 2141 761 L 2152 772 L E B 2154 806 M 2165 794 L 2154 783 L 2143 794 L 2154 806 L E B 2161 756 M 2172 745 L 2161 734 L 2150 745 L 2161 756 L E B 2164 848 M 2176 837 L 2164 825 L 2153 837 L 2164 848 L E B 2166 801 M 2177 790 L 2166 779 L 2155 790 L 2166 801 L E B 2168 818 M 2179 807 L 2168 796 L 2157 807 L 2168 818 L E B 2173 886 M 2184 875 L 2173 864 L 2162 875 L 2173 886 L E B 2175 719 M 2186 708 L 2175 697 L 2164 708 L 2175 719 L E B 2177 873 M 2188 861 L 2177 850 L 2165 861 L 2177 873 L E B 2180 756 M 2191 745 L 2180 734 L 2169 745 L 2180 756 L E B 2182 870 M 2193 859 L 2182 848 L 2171 859 L 2182 870 L E B 2184 890 M 2195 879 L 2184 868 L 2172 879 L 2184 890 L E B 2196 724 M 2207 713 L 2196 702 L 2184 713 L 2196 724 L E B 2203 892 M 2214 881 L 2203 870 L 2191 881 L 2203 892 L E B 2204 868 M 2216 857 L 2204 845 L 2193 857 L 2204 868 L E B 2208 831 M 2219 819 L 2208 808 L 2197 819 L 2208 831 L E B 2209 806 M 2221 795 L 2209 783 L 2198 795 L 2209 806 L E B 2211 722 M 2222 711 L 2211 699 L 2200 711 L 2211 722 L E B 2213 807 M 2224 796 L 2213 785 L 2202 796 L 2213 807 L E B 2220 858 M 2231 847 L 2220 835 L 2209 847 L 2220 858 L E B 2223 848 M 2235 837 L 2223 825 L 2212 837 L 2223 848 L E B 2225 744 M 2236 733 L 2225 722 L 2214 733 L 2225 744 L E B 2227 803 M 2238 792 L 2227 781 L 2216 792 L 2227 803 L E B 2230 873 M 2241 861 L 2230 850 L 2219 861 L 2230 873 L E B 2232 781 M 2243 770 L 2232 759 L 2221 770 L 2232 781 L E B 2237 825 M 2248 813 L 2237 802 L 2226 813 L 2237 825 L E B 2242 729 M 2254 718 L 2242 707 L 2231 718 L 2242 729 L E B 2244 806 M 2255 795 L 2244 783 L 2233 795 L 2244 806 L E B 2249 737 M 2261 725 L 2249 714 L 2238 725 L 2249 737 L E B 2251 905 M 2262 894 L 2251 882 L 2240 894 L 2251 905 L E B 2254 850 M 2266 839 L 2254 828 L 2243 839 L 2254 850 L E B 2261 846 M 2273 834 L 2261 823 L 2250 834 L 2261 846 L E B 2265 884 M 2276 873 L 2265 862 L 2254 873 L 2265 884 L E B 2270 734 M 2281 723 L 2270 712 L 2259 723 L 2270 734 L E B 2286 915 M 2297 904 L 2286 892 L 2274 904 L 2286 915 L E B 2287 784 M 2299 772 L 2287 761 L 2276 772 L 2287 784 L E B 2293 889 M 2304 878 L 2293 866 L 2281 878 L 2293 889 L E B 2299 881 M 2311 870 L 2299 859 L 2288 870 L 2299 881 L E B 2305 902 M 2316 891 L 2305 880 L 2293 891 L 2305 902 L E B 2306 815 M 2318 803 L 2306 792 L 2295 803 L 2306 815 L E B 2310 789 M 2321 777 L 2310 766 L 2299 777 L 2310 789 L E B 2312 922 M 2323 911 L 2312 900 L 2300 911 L 2312 922 L E B 2317 779 M 2328 767 L 2317 756 L 2306 767 L 2317 779 L E B 2318 834 M 2330 823 L 2318 811 L 2307 823 L 2318 834 L E B 2322 897 M 2333 886 L 2322 875 L 2311 886 L 2322 897 L E B 2324 749 M 2335 738 L 2324 727 L 2312 738 L 2324 749 L E B 2327 764 M 2338 753 L 2327 741 L 2316 753 L 2327 764 L E B 2332 799 M 2344 787 L 2332 776 L 2321 787 L 2332 799 L E B 2346 791 M 2357 780 L 2346 769 L 2335 780 L 2346 791 L E B 2348 883 M 2359 871 L 2348 860 L 2337 871 L 2348 883 L E B 2350 764 M 2361 753 L 2350 741 L 2338 753 L 2350 764 L E B 2351 902 M 2363 891 L 2351 880 L 2340 891 L 2351 902 L E B 2355 842 M 2366 831 L 2355 820 L 2344 831 L 2355 842 L E B 2357 768 M 2368 756 L 2357 745 L 2345 756 L 2357 768 L E B 2358 907 M 2370 896 L 2358 885 L 2347 896 L 2358 907 L E B 2362 855 M 2373 844 L 2362 833 L 2351 844 L 2362 855 L E B 2363 752 M 2375 740 L 2363 729 L 2352 740 L 2363 752 L E B 2367 922 M 2378 911 L 2367 900 L 2356 911 L 2367 922 L E B 2376 794 M 2387 782 L 2376 771 L 2364 782 L 2376 794 L E B 2377 859 M 2389 848 L 2377 837 L 2366 848 L 2377 859 L E B 2381 904 M 2392 892 L 2381 881 L 2370 892 L 2381 904 L E B 2383 769 M 2394 758 L 2383 746 L 2371 758 L 2383 769 L E B 2389 860 M 2401 849 L 2389 837 L 2378 849 L 2389 860 L E B 2395 853 M 2406 842 L 2395 830 L 2383 842 L 2395 853 L E B 2400 769 M 2411 758 L 2400 746 L 2389 758 L 2400 769 L E B 2402 877 M 2413 866 L 2402 855 L 2390 866 L 2402 877 L E B 2403 821 M 2415 810 L 2403 798 L 2392 810 L 2403 821 L E B 2405 897 M 2416 886 L 2405 875 L 2394 886 L 2405 897 L E B 2407 904 M 2418 892 L 2407 881 L 2395 892 L 2407 904 L E B 2408 884 M 2420 873 L 2408 861 L 2397 873 L 2408 884 L E B 2417 858 M 2428 847 L 2417 836 L 2406 847 L 2417 858 L E B 2419 912 M 2430 901 L 2419 890 L 2408 901 L 2419 912 L E B 2421 959 M 2432 948 L 2421 937 L 2409 948 L 2421 959 L E B 2422 779 M 2434 767 L 2422 756 L 2411 767 L 2422 779 L E B 2424 878 M 2435 866 L 2424 855 L 2413 866 L 2424 878 L E B 2426 917 M 2437 906 L 2426 895 L 2415 906 L 2426 917 L E B 2431 841 M 2442 829 L 2431 818 L 2420 829 L 2431 841 L E B 2447 841 M 2458 829 L 2447 818 L 2435 829 L 2447 841 L E B 2452 899 M 2463 887 L 2452 876 L 2440 887 L 2452 899 L E B 2459 939 M 2470 928 L 2459 917 L 2447 928 L 2459 939 L E B 2473 835 M 2484 824 L 2473 813 L 2461 824 L 2473 835 L E B 2474 806 M 2485 795 L 2474 783 L 2463 795 L 2474 806 L E B 2478 808 M 2489 797 L 2478 786 L 2466 797 L 2478 808 L E B 2481 932 M 2492 921 L 2481 910 L 2470 921 L 2481 932 L E B 2483 944 M 2494 933 L 2483 922 L 2472 933 L 2483 944 L E B 2486 858 M 2498 847 L 2486 835 L 2475 847 L 2486 858 L E B 2488 880 M 2499 869 L 2488 858 L 2477 869 L 2488 880 L E B 2493 851 M 2505 840 L 2493 829 L 2482 840 L 2493 851 L E B 2500 878 M 2511 866 L 2500 855 L 2489 866 L 2500 878 L E B 2502 791 M 2513 780 L 2502 769 L 2491 780 L 2502 791 L E B 2509 937 M 2520 926 L 2509 915 L 2498 926 L 2509 937 L E B 2519 850 M 2530 839 L 2519 828 L 2508 839 L 2519 850 L E B 2521 927 M 2532 916 L 2521 905 L 2510 916 L 2521 927 L E B 2533 852 M 2544 840 L 2533 829 L 2522 840 L 2533 852 L E B 2535 948 M 2546 937 L 2535 926 L 2524 937 L 2535 948 L E B 2542 942 M 2553 931 L 2542 919 L 2530 931 L 2542 942 L E B 2543 939 M 2555 928 L 2543 917 L 2532 928 L 2543 939 L E B 2549 899 M 2560 888 L 2549 877 L 2537 888 L 2549 899 L E B 2552 836 M 2563 824 L 2552 813 L 2541 824 L 2552 836 L E B 2554 935 M 2565 923 L 2554 912 L 2543 923 L 2554 935 L E B 2556 854 M 2567 843 L 2556 832 L 2544 843 L 2556 854 L E B 2559 910 M 2570 899 L 2559 887 L 2548 899 L 2559 910 L E B 2561 982 M 2572 970 L 2561 959 L 2550 970 L 2561 982 L E B 2564 1019 M 2575 1007 L 2564 996 L 2553 1007 L 2564 1019 L E B 2576 890 M 2588 879 L 2576 868 L 2565 879 L 2576 890 L E B 2583 939 M 2594 928 L 2583 917 L 2572 928 L 2583 939 L E B 2590 811 M 2601 800 L 2590 788 L 2579 800 L 2590 811 L E B 2592 841 M 2603 829 L 2592 818 L 2581 829 L 2592 841 L E B 2595 962 M 2607 950 L 2595 939 L 2584 950 L 2595 962 L E B 2604 846 M 2615 834 L 2604 823 L 2593 834 L 2604 846 L E B 2609 915 M 2620 904 L 2609 892 L 2598 904 L 2609 915 L E B 2611 853 M 2622 842 L 2611 830 L 2600 842 L 2611 853 L E B 2614 863 M 2626 852 L 2614 840 L 2603 852 L 2614 863 L E B 2618 818 M 2629 807 L 2618 796 L 2607 807 L 2618 818 L E B 2621 908 M 2633 897 L 2621 886 L 2610 897 L 2621 908 L E B 2623 841 M 2634 829 L 2623 818 L 2612 829 L 2623 841 L E B 2625 794 M 2636 782 L 2625 771 L 2614 782 L 2625 794 L E B 2627 858 M 2638 847 L 2627 835 L 2615 847 L 2627 858 L E B 2628 954 M 2639 943 L 2628 932 L 2617 943 L 2628 954 L E B 2637 908 M 2648 897 L 2637 886 L 2626 897 L 2637 908 L E B 2639 824 M 2650 813 L 2639 802 L 2627 813 L 2639 824 L E B 2642 841 M 2653 829 L 2642 818 L 2631 829 L 2642 841 L E B 2644 1007 M 2655 996 L 2644 985 L 2633 996 L 2644 1007 L E B 2649 906 M 2660 895 L 2649 884 L 2638 895 L 2649 906 L E B 2651 991 M 2662 980 L 2651 969 L 2639 980 L 2651 991 L E B 2652 900 M 2664 889 L 2652 877 L 2641 889 L 2652 900 L E B 2654 1036 M 2665 1025 L 2654 1013 L 2643 1025 L 2654 1036 L E B 2658 897 M 2669 886 L 2658 875 L 2646 886 L 2658 897 L E B 2661 952 M 2672 941 L 2661 929 L 2650 941 L 2661 952 L E B 2663 833 M 2674 822 L 2663 811 L 2652 822 L 2663 833 L E B 2673 891 M 2684 880 L 2673 869 L 2662 880 L 2673 891 L E B 2687 883 M 2698 871 L 2687 860 L 2676 871 L 2687 883 L E B 2689 908 M 2700 897 L 2689 886 L 2678 897 L 2689 908 L E B 2692 811 M 2704 800 L 2692 788 L 2681 800 L 2692 811 L E B 2697 853 M 2709 842 L 2697 830 L 2686 842 L 2697 853 L E B 2704 942 M 2716 931 L 2704 919 L 2693 931 L 2704 942 L E B 2706 828 M 2717 817 L 2706 806 L 2695 817 L 2706 828 L E B 2715 811 M 2726 800 L 2715 788 L 2704 800 L 2715 811 L E B 2716 1078 M 2728 1067 L 2716 1055 L 2705 1067 L 2716 1078 L E B 2723 848 M 2735 837 L 2723 825 L 2712 837 L 2723 848 L E B 2732 916 M 2743 905 L 2732 894 L 2721 905 L 2732 916 L E B 2736 833 M 2747 822 L 2736 811 L 2724 822 L 2736 833 L E B 2741 1063 M 2752 1052 L 2741 1041 L 2729 1052 L 2741 1063 L E B 2742 936 M 2754 925 L 2742 913 L 2731 925 L 2742 936 L E B 2744 939 M 2755 928 L 2744 917 L 2733 928 L 2744 939 L E B 2746 836 M 2757 824 L 2746 813 L 2735 824 L 2746 836 L E B 2756 928 M 2768 917 L 2756 906 L 2745 917 L 2756 928 L E B 2761 823 M 2773 812 L 2761 801 L 2750 812 L 2761 823 L E B 2763 846 M 2774 834 L 2763 823 L 2752 834 L 2763 846 L E B 2770 984 M 2781 973 L 2770 961 L 2759 973 L 2770 984 L E B 2784 1041 M 2795 1030 L 2784 1018 L 2773 1030 L 2784 1041 L E B 2789 860 M 2800 849 L 2789 838 L 2778 849 L 2789 860 L E B 2810 865 M 2821 854 L 2810 843 L 2799 854 L 2810 865 L E B 2812 821 M 2823 810 L 2812 798 L 2800 810 L 2812 821 L E B 2819 994 M 2830 983 L 2819 971 L 2807 983 L 2819 994 L E B 2824 895 M 2835 884 L 2824 872 L 2813 884 L 2824 895 L E B 2829 1009 M 2840 997 L 2829 986 L 2818 997 L 2829 1009 L E B 2834 1009 M 2845 997 L 2834 986 L 2823 997 L 2834 1009 L E B 2838 1031 M 2849 1020 L 2838 1008 L 2826 1020 L 2838 1031 L E B 2839 890 M 2851 879 L 2839 868 L 2828 879 L 2839 890 L E B 2848 853 M 2859 842 L 2848 830 L 2837 842 L 2848 853 L E B 2850 1033 M 2861 1022 L 2850 1011 L 2838 1022 L 2850 1033 L E B 2869 944 M 2880 932 L 2869 921 L 2858 932 L 2869 944 L E B 2874 1048 M 2885 1037 L 2874 1026 L 2863 1037 L 2874 1048 L E B 2876 1014 M 2887 1002 L 2876 991 L 2864 1002 L 2876 1014 L E B 2881 976 M 2892 965 L 2881 953 L 2870 965 L 2881 976 L E B 2891 959 M 2903 948 L 2891 937 L 2880 948 L 2891 959 L E B 2896 1014 M 2908 1002 L 2896 991 L 2885 1002 L 2896 1014 L E B 2900 855 M 2911 844 L 2900 833 L 2889 844 L 2900 855 L E B 2902 935 M 2913 923 L 2902 912 L 2890 923 L 2902 935 L E B 2907 1100 M 2918 1089 L 2907 1078 L 2896 1089 L 2907 1100 L E B 2909 970 M 2920 959 L 2909 947 L 2897 959 L 2909 970 L E 0 Sc 42 Sp 1 Sd B 374 1841 M 374 1964 L 720 1964 L 720 1841 L F 1 Sc B 487 1934 M 499 1911 L 476 1911 L 487 1934 L E 2 Sw 3 St B 563 1922 M 715 1922 L E 1 St 0 Sw (NIT) 791 1922 0 T B 487 1857 M 499 1845 L 487 1834 L 476 1845 L 487 1857 L E B 2 Sw 563 1845 M 715 1845 L E 0 Sw (BPF) 791 1845 0 T 0 Sd B 287 602 M 313 676 L E 8 Sp 1 Sd B 298 602 M 276 602 L E B 287 614 M 287 591 L E B 276 614 M 298 591 L E B 276 591 M 298 614 L E 42 Sp (89.2) 313 701 0 T 0 Sd B 287 396 M 313 470 L E 8 Sp 1 Sd B 298 396 M 276 396 L E B 287 407 M 287 385 L E B 276 407 M 298 385 L E B 276 385 M 298 407 L E 42 Sp (5.7) 313 495 0 T 3 St 0 Sd 3 Sw B 287 602 M 3056 1457 L E 1 St B 287 396 M 3056 983 L E 0 Sw 0.8 Sx 1 Sd (NIT Incremental Overhead: 216 ns/byte) 1844 493 0 T (BPF Incremental Overhead: 148 ns/byte) 1844 431 0 T Z W endTexFig 643 1055 p (Figure)s 10(2:)m h-med.300 @sf 16(NIT)m 12(versus)m 11(BPF:)m 12(\\accept)m 11(all")m t-rom.300 @sf -62 1189 p (NIT)s 14(lines)m 14(show)m 15(that)m 14(BPF)m 15(does)m 15(its)m 14(copies)m 15(at)m 15(memory)m 14(speed)m -62 1238 p (\(148ns/byte\))s 8(while)m 9(NIT)m 10(runs)m 9(45%)m 9(slower)m 9(\(216ns/byte\).)m t-rom.210 @sf 845 1223 p 50 c t-rom.300 @sf 877 1238 p (The)s -62 1288 p (y-intercept)s 13(gives)m 14(the)m 14(\014xed)m 15(per)m (-packet)s 13(processing)m 14(overhead:)m -62 1338 p (The)s 15(overhead)m 15(of)m 16 r 97 c 15(BPF)m 16(call)m 15(is)m 16(about)m 15 r 54 c cmmi10.300 @sf 22 c t-rom.300 @sf 115 c 16(while)m 15(NIT)m 16(is)m 15(15)m -62 1388 p (times)s 10(worse)m 10(at)m 11(89)m cmmi10.300 @sf 22 c t-rom.300 @sf 115 c 10(per)m 11(packet.)m 16(Much)m 10(of)m 11(this)m 10(huge)m 11(disparity)m -62 1438 p (appears)s 11(to)m 13(be)m 12(due)m 13(to)m 12(the)m 13(cost)m 12(of)m 13(allocating)m 12(and)m 13(initializing)m 12 r 97 c -62 1487 p (buf)s -1(fer)m 14(under)m 14(the)m 14(remarkably)m 15(baroque)m 14 r 65 c -3(T&T)m 13(STREAM)m 14(I/O)m -62 1537 p (system.)s t-rom.210 @sf 63 1522 p 51 c t-rom.300 @sf -20 1596 p (Figure)s 6 r 51 c 7(shows)m 8(the)m 7(results)m 8(for)m 7(the)m 7(\\reject)m 8(all")m 7(con\014guration.)m -62 1646 p (Here)s 5(the)m 7(STREAMS)m 6(packet)m 7(\014lter)m 6(module)m 7(was)m 6(con\014gured)m 6(with)m -62 1696 p 97 c 7(\\reject)m 7(all")m 8(\014lter)m 7(and)m 8(pushed)m 7(directly)m 8(on)m 8(top)m 7(of)m 8(the)m 7(NIT)m 8(inter-)m -62 1745 p (face)s 8(module)m 9(\(the)m 9(NIT)m 8(buf)m (fering)s 8(module)m 9(was)m 9(not)m 9(used\).)m 15(Since)m -62 1795 p (the)s 11(\014lter)m 12(discards)m 12(all)m 12(packets,)m 12(the)m 12(processing)m 12(time)m 12(should)m 12(be)m -62 1845 p (constant,)s 8(independent)m 10(of)m 9(the)m 9(packet)m 9(size.)m 15(For)m 9(BPF)m 9(this)m 10(is)m 9(true)m -62 1895 p 124 c 13(we)m 14(see)m 15(essentially)m 14(the)m 14(same)m 14(\014xed)m 14(cost)m 14(as)m 15(last)m 14(time)m 14(\(5)m cmmi10.300 @sf 22 c t-rom.300 @sf 115 c -62 1945 p (instead)s 15(of)m 16 r 54 c 15(since)m 16(rejecting)m 16(avoids)m 16 r 97 c 16(call)m 16(to)m 15(the)m 16(BPF)m 16(copy)m -62 1994 p (routine\))s 13(and)m 14(no)m 14(ef)m (fect)s 13(due)m 13(to)m 14(packet)m 14(size.)m 26(However)m -1 r 44 c 14(as)m 14(ex-)m -62 2044 p (plained)s 8(earlier)m -1 r 44 c 8(NIT)m 9(doesn')m 116 c 9(\014lter)m 8(packets)m 9(in)m 9(place)m 9(but)m 9(instead)m -62 2080 p 402 2 ru t-rom.180 @sf -17 2108 p 50 c t-rom.240 @sf -2 2119 p (This)s 8(dif)m (ference)s 8(is)m 8(due)m 9(to)m 9(the)m 9(fact)m 8(that)m 9(NIT)m 9(is)m 8(not)m 9(as)m 9(careful)m 8(about)m 9(align-)m -62 2159 p (ment)s 6(as)m 7(BPF)m -1 r 46 c 6(The)m 7(network)m 7(driver)m 8(wants)m 7(the)m 7(IP)m 7(header)m 8(aligned)m 7(on)m 7 r 97 c 7(longword)m -62 2198 p (boundary)s -2 r 44 c 5(but)m 6(an)m 6(Ethernet)m 6(header)m 5(is)m 6(14)m 6(bytes)m 6(so)m 6(the)m 6(start)m 5(of)m 6(the)m 6(packet)m 6(is)m 6(short-)m -62 2238 p (word)s 7(aligned.)m 12(Since)m 8(NIT)m 7(copies)m 8(the)m 8(packet)m 7(to)m 8 r 97 c 8(longword)m 7(aligned)m 8(boundary)m -1 r 44 c -62 2277 p (an)s 10(inef)m (\014cient,)s 12(misaligned)m 11(bcopy)m 11(results.)m 22(This)m 11(oversight)m 12(will)m 11(be)m 11(felt)m 12(twice)m -62 2316 p 124 c 7(once)m 8(in)m 8(this)m 8(measurement,)m 8(and)m 8(again)m 8(at)m 8(the)m 8(user)m (-level,)s 7(when)m 8(for)m 8(instance,)m -62 2356 p 97 c 10(network)m 10(monitor)m 11(like)m t-ita.240 @sf 11(tcpdump)m t-rom.240 @sf 10(or)m t-ita.240 @sf 11(ether\014nd)m t-rom.240 @sf 11(must)m 11(copy)m 10(the)m 11(network-layer)m -62 2395 p (portion)s 7(of)m 9(the)m 8(packet)m 8(to)m 9 r 97 c 8(longword)m 8(aligned)m 9(boundary)m -2 r 46 c t-rom.180 @sf -17 2424 p 51 c t-rom.240 @sf -2 2436 p 89 c -3(ou)m 10(might)m 12(note)m 11(anomalous)m 12(behavior)m 11(near)m 12(the)m 11(origin)m 11(for)m 12(the)m 11(NIT)m 12(data)m -62 2475 p (in)s 9(both)m 9(this)m 10(and)m 9(the)m 10(following)m 9(graph.)m 16(STREAMS)m 10(must)m 9(allocate)m 10(an)m 9(mblk)m 10(\(a)m -62 2515 p (STREAMS)s 5(buf)m (fer)s 5(descriptor\))m 5(for)m 6(every)m 6(packet.)m 11(For)m 6(small)m 6(packets,)m 6(the)m 6(packet)m -62 2554 p (data)s 7(is)m 8(copied)m 7(into)m 8 r 97 c 8(region)m 8(of)m 8(the)m 7(mblk)m 8(while)m 8(lar)m (ge)s 7(packets)m 8(must)m 8(use)m 7 r 97 c 8(more)m -62 2594 p (elaborate)s 7(allocator)m 9(involving)m 8(additional)m 8(dblk)m 9(\(`data)m 8(block'\))m 8(allocations.)m t-rom.300 @sf 1032 1189 p (copies)s 10(packets)m 10(then)m 11(runs)m 10(the)m 10(\014lter)m 10(over)m 11(the)m 10(copies.)m t-rom.210 @sf 1860 1173 p 52 c t-rom.300 @sf 1892 1189 p (Thus)s 11(the)m 1032 1238 p (cost)s 15(of)m 16(running)m 15(NIT)m 16(increases)m 15(with)m 16(packet)m 15(size)m t-ita.300 @sf 16(even)m 15(when)m 1032 1288 p (the)s 13(packet)m 13(is)m 13(discar)m -1(ded)m 12(by)m 13(the)m 13(\014lter)m t-rom.300 @sf 46 c 23(For)m 12(lar)m (ge)s 13(packets,)m 13(this)m 1032 1338 p (gratuitous)s 12(copy)m 11(makes)m 12(NIT)m 12(almost)m 11(two)m 12(orders)m 11(of)m 12(magnitude)m 1032 1388 p (more)s 10(expensive)m 11(than)m 10(BPF)m 11(\(450)m cmmi10.300 @sf 22 c t-rom.300 @sf 115 c 10(vs.)m 10 r 53 c cmmi10.300 @sf 22 c t-rom.300 @sf (s\).)s 1073 1444 p (The)s 15(major)m 15(lesson)m 15(here)m 15(is)m 15(that)m 15(\014ltering)m 15(packets)m 15(early)m 15(and)m 1032 1494 p (in)s 11(place)m 10(pays)m 11(of)m (f.)s 16(While)m 10 r 97 c 11(STREAMS-like)m 11(design)m 10(might)m 11(ap-)m 1032 1544 p (pear)s 8(to)m 8(be)m 8(modular)m 8(and)m 8(elegant,)m 8(the)m 8(performance)m 8(implications)m 1032 1593 p (of)s 13(module)m 13(partitioning)m 13(need)m 13(to)m 13(be)m 13(considered)m 13(in)m 13(the)m 13(design.)m 1032 1643 p 87 c -2 r 101 c 11(claim)m 12(that)m 13(even)m 12 r 97 c 12(STREAMS-based)m 13(network)m 12(tap)m 12(should)m 1032 1693 p (include)s 11(the)m 12(packet)m 11(\014ltering)m 12(and)m 11(buf)m (fering)s 11(functionality)m 11(in)m 12(its)m 1032 1743 p (lowest)s 11(layer)m -1 r 46 c 17(There)m 11(is)m 12(very)m 11(little)m 11(design)m 11(advantage)m 12(in)m 11(factor-)m 1032 1793 p (ing)s 9(the)m 10(packet)m 9(\014lter)m 10(into)m 9 r 97 c 9(separate)m 10(streams)m 9(module,)m 10(but)m 9(great)m 1032 1843 p (performance)s 8(advantage)m 8(in)m 8(integrating)m 8(the)m 7(packet)m 8(\014lter)m 8(and)m 8(the)m 1032 1892 p (tap)s 10(into)m 11 r 97 c 10(single)m 11(unit.)m t-bol.420 @sf 1032 2037 p 51 c 58(The)m 15(Filter)m 14(Model)m t-rom.300 @sf 1032 2136 p (Assuming)s 6(one)m 7(uses)m 6(reasonable)m 7(care)m 6(in)m 6(the)m 7(design)m 6(of)m 6(the)m 7(buf)m (fer-)s 1032 2186 p (ing)s 8(model,)m t-rom.210 @sf 1208 2171 p 53 c t-rom.300 @sf 1233 2186 p (it)s 8(will)m 8(be)m 8(the)m 8(dominant)m 8(cost)m 8(of)m 8(packets)m 9(you)m 8(accept)m 1032 2236 p (while)s 10(the)m 9(packet)m 10(\014lter)m 9(computation)m 10(will)m 9(be)m 10(the)m 9(dominant)m 10(cost)m 1032 2285 p (of)s 11(packets)m 11(you)m 12(reject.)m 18(Most)m 11(applications)m 11(of)m 12 r 97 c 11(packet)m 11(capture)m 1032 2335 p (facility)s 15(reject)m 15(far)m 15(more)m 15(packets)m 16(than)m 15(they)m 15(accept)m 15(and,)m 16(thus,)m 1032 2385 p (good)s 9(performance)m 9(of)m 9(the)m 9(packet)m 9(\014lter)m 9(is)m 10(critical)m 9(to)m 9(good)m 9(over-)m 1032 2435 p (all)s 10(performance.)m 1032 2466 p 402 2 ru t-rom.180 @sf 1077 2493 p 52 c t-rom.240 @sf 1092 2505 p (The)s 9(copy)m 10(is)m 9(required)m 10(because)m 9(the)m 10(\014lter)m 9(is)m 10 r 97 c 9(separate)m 10(STREAM)m 9(module)m 1032 2545 p (pushed)s 12(on)m 12(top)m 12(of)m 11(the)m 12(capture)m 12(module)m 12(and,)m 13(thus,)m 12(the)m 12(capture)m 12(module)m 12(must)m 1032 2584 p (copy)s 9(data)m 9(to)m 8(STREAM)m 9(buf)m (fers)s 8(to)m 9(send)m 9(it)m 9(up)m 9(the)m 8(stream)m 9(to)m 9(the)m 9(\014lter)m 9(module.)m 1032 2623 p (As)s 7(was)m 6(the)m 7(case)m 7(with)m 7(capture/buf)m (fer)s 6(separation,)m 7(the)m 7(documentation)m 6(notes)m 7(this)m 1032 2663 p (capture/\014lter)s 8(separation)m 9(is)m 8 r 97 c 8(feature,)m 9(not)m 8 r 97 c 8(bug.)m t-rom.180 @sf 1077 2692 p 53 c t-rom.240 @sf 1092 2704 p (E.g.,)s t-ita.240 @sf 8(not)m t-rom.240 @sf 9(STREAMS.)m @eop restore %%Page: 4 4 save /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-Roman /t-rom.210 ReEncodeForTeX /t-rom.210 /t-rom.210 29.166582 TeXPSmakefont def 1 /cmsy10.300 @newfont cmsy10.300 @sf [<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF807E0> 16 16 -2 -2 20.755] 15 @dc /Times-Roman /t-rom.180 ReEncodeForTeX /t-rom.180 /t-rom.180 24.999965 TeXPSmakefont def /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def 4 @bop1 t-rom.300 @sf -62 -99 p 52 c t-obl.300 @sf 1568(BPF)m 14 r 123 c 14(The)m 14(BSD)m 14(Packet)m 14(Filter)m 257 4 p 23037275 15156103 914458 -37625850 50047420 -5379665 startTexFig -90 rotate 100 dict begin /bd {bind def} def /I {Coord SetPage 1 setlinecap 1 setlinejoin LineTypes {RastersPerPoint ScaleArray} forall /Helvetica findfont PointSize RastersPerPoint mul Cex mul scalefont setfont} bd /A {PageBegin} bd /B {newpath} bd /C {currentpoint stroke moveto} bd /E {stroke} bd /M {moveto} bd /L {lineto} bd /S {moveto lineto stroke} bd /F {closepath fill} bd /P {gsave moveto Pch-x Pch-y rmoveto Pch Show grestore} bd /T {/Adjust exch def gsave translate StringRot rotate 0 0 moveto dup stringwidth pop neg Adjust mul Text-y rmoveto Show grestore} bd /X {erasepage InPage {PageEnd} if} bd /Z {gsave showpage grestore PageEnd} bd /W {end} bd /St {1 sub LineTypes dup 3 1 roll length Rem floor get 0 setdash} bd /Sw {abs 2 div RastersPerPoint mul setlinewidth SetClip} bd /Sc {dup dup 1 lt exch 0 ge and {1 exch sub setgray} {1 sub Colors dup 3 1 roll length Rem floor get dup type /arraytype eq {aload pop sethsbcolor} {setgray} ifelse} ifelse} bd /Sp {Pch exch 0 exch put gsave newpath 0 0 moveto Pch false charpath flattenpath pathbbox exch 3 1 roll add 2 div neg /Pch-y exch def add 2 div neg /Pch-x exch def grestore} bd /Sx {dup Cex div /Ratio exch def /Cex exch def currentfont Ratio scalefont setfont /Pch-x Pch-x Ratio mul def /Pch-y Pch-y Ratio mul def /Text-y Text-y Ratio mul def} bd /So {4 1 roll exch 4 -1 roll Plot astore pop SetClip} bd /Sg {4 1 roll exch 4 -1 roll Figure astore pop SetClip} bd /Sr {/StringRot exch def} bd /Sd {0 eq /ClipToPlot exch def SetClip} bd /Sf {dup 0 lt /Outline exch def abs 1 sub Fonts dup 3 1 roll length Rem floor get findfont PointSize Cex mul RastersPerPoint mul scalefont dup setfont dup /FontMatrix get /Matrix exch def /FontBBox get aload pop Matrix transform 4 2 roll Matrix transform exch pop add 2 div neg /Text-y exch def pop} bd /InPage false def /Clip 4 array def /Page 4 array def /Figure [0 0 1 1] def /Plot [0 0 1 1] def /ClipToPlot true def /Cex 1 def /Outline false def /Pch 1 string def /Pch-x 0 def /Pch-y 0 def /Text-y 0 def /LineTypes [ % in default units [] [1 2] [4 4] [8 4] [13 3] [16 2 2 2] [8 2 2 2] [1 13] [6 5] [12 4] ] def /Rem {2 copy div floor mul sub floor cvi} bd /RastersPerPoint {RastersPerInch 72 div} bd /ScaleArray {/Factor exch def /Array exch bd 0 1 Array length 1 sub {dup Array exch get Factor mul Array 3 1 roll put} for} bd /Coord {Region aload pop /uy exch def /ux exch def /ly exch def /lx exch def uy ly sub ux lx sub Landscape {exch} if /Width exch def /Height exch def lx ly translate Landscape {90 rotate 0 Height neg translate} if 1 RastersPerPoint div dup scale} bd /Show {Outline {false charpath stroke} {show} ifelse} bd /BoxClip {/CLW currentlinewidth def 2 {CLW add 4 1 roll} repeat 2 {CLW sub 4 1 roll} repeat initclip newpath 2 index exch 2 index exch dup 6 index exch moveto 3 {lineto} repeat closepath clip newpath} bd /Subregion {/A exch def /Uy exch def /Ux exch def /Ly exch def /Lx exch def Ux Lx sub A 0 get mul Lx add Uy Ly sub A 1 get mul Ly add Ux Lx sub A 2 get mul Lx add Uy Ly sub A 3 get mul Ly add} bd /SetFigure {Page aload pop Figure Subregion} bd /SetPlot {SetFigure Plot Subregion} bd /SetClip {ClipToPlot {SetPlot} {SetFigure} ifelse BoxClip} bd /SetPage {0 0 Width Height Page astore RastersPerPoint ScaleArray} bd /PageBegin {save /PageContext exch def /InPage true def} bd /PageEnd {PageContext restore /InPage false def} bd /Landscape true def /Region [20.8788 11.802 590.881 780.438] def /RastersPerInch 300 def /PointSize 14 def /Fonts [ /Helvetica /Courier /Times-Roman /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Italic /Times-Bold /Times-BoldItalic /Symbol /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold /NewCenturySchlbk-Italic /NewCenturySchlbk-BoldItalic /Palatino-Roman /Palatino-Bold /Palatino-Italic /Palatino-BoldItalic /ZapfChancery-MediumItalic /ZapfDingbats ] def /Colors [ 0 0.6 0.3 0.9 0.4 0.7 0.1 0.5 0.8 0.2 ] def I A 1 St 1 Sw 1 Sc 42 Sp 1 Sx 0.0896133 0.9541 0.150315 0.879158 So 0 1 0 1 Sg 0 Sr 1 Sd 1 Sf (Packet Size \(bytes\)) 1671 112 0.5 T 90 Sr (Mean Per Packet Overhead \(usec\)) 42 1223 0.5 T 0 Sr 287 357 287 322 S 633 357 633 322 S 979 357 979 322 S 1325 357 1325 322 S 1671 357 1671 322 S 2017 357 2017 322 S 2363 357 2363 322 S 2710 357 2710 322 S 3056 357 3056 322 S 287 357 3056 357 S (0) 287 252 0.5 T (200) 633 252 0.5 T (400) 979 252 0.5 T (600) 1325 252 0.5 T (800) 1671 252 0.5 T (1000) 2017 252 0.5 T (1200) 2363 252 0.5 T (1400) 2710 252 0.5 T (1600) 3056 252 0.5 T 287 357 252 357 S 287 703 252 703 S 287 1049 252 1049 S 287 1396 252 1396 S 287 1742 252 1742 S 287 2088 252 2088 S 287 357 287 2088 S (0) 217 357 1 T (100) 217 703 1 T (200) 217 1049 1 T (300) 217 1396 1 T (400) 217 1742 1 T (500) 217 2088 1 T 0 Sd B 287 2088 M 287 357 L 3056 357 L 3056 2088 L 287 2088 L E 2 Sp B 393 694 M 404 671 L 381 671 L 393 694 L E B 394 709 M 406 686 L 383 686 L 394 709 L E B 396 699 M 407 676 L 385 676 L 396 699 L E B 398 697 M 409 675 L 386 675 L 398 697 L E B 399 700 M 411 678 L 388 678 L 399 700 L E B 401 702 M 412 679 L 390 679 L 401 702 L E B 403 703 M 414 681 L 392 681 L 403 703 L E B 405 714 M 416 692 L 393 692 L 405 714 L E B 406 700 M 418 677 L 395 677 L 406 700 L E B 408 717 M 419 695 L 397 695 L 408 717 L E B 410 696 M 421 674 L 399 674 L 410 696 L E B 412 713 M 423 690 L 400 690 L 412 713 L E B 413 702 M 425 679 L 402 679 L 413 702 L E B 415 715 M 426 693 L 404 693 L 415 715 L E B 417 703 M 428 681 L 406 681 L 417 703 L E B 419 710 M 430 687 L 407 687 L 419 710 L E B 420 705 M 431 683 L 409 683 L 420 705 L E B 422 709 M 433 686 L 411 686 L 422 709 L E B 424 710 M 435 688 L 412 688 L 424 710 L E B 425 714 M 437 691 L 414 691 L 425 714 L E B 427 710 M 438 688 L 416 688 L 427 710 L E B 429 713 M 440 691 L 418 691 L 429 713 L E B 431 717 M 442 694 L 419 694 L 431 717 L E B 432 713 M 444 691 L 421 691 L 432 713 L E B 434 713 M 445 690 L 423 690 L 434 713 L E B 436 716 M 447 694 L 425 694 L 436 716 L E B 438 713 M 449 691 L 426 691 L 438 713 L E B 439 717 M 451 694 L 428 694 L 439 717 L E B 441 716 M 452 694 L 430 694 L 441 716 L E B 443 719 M 454 696 L 431 696 L 443 719 L E B 444 719 M 456 696 L 433 696 L 444 719 L E B 446 720 M 457 697 L 435 697 L 446 720 L E B 448 725 M 459 703 L 437 703 L 448 725 L E B 450 732 M 461 709 L 438 709 L 450 732 L E B 451 722 M 463 700 L 440 700 L 451 722 L E B 453 734 M 464 712 L 442 712 L 453 734 L E B 455 726 M 466 703 L 444 703 L 455 726 L E B 457 726 M 468 703 L 445 703 L 457 726 L E B 458 726 M 470 704 L 447 704 L 458 726 L E B 460 734 M 471 712 L 449 712 L 460 734 L E B 462 728 M 473 705 L 451 705 L 462 728 L E B 464 740 M 475 718 L 452 718 L 464 740 L E B 465 728 M 476 705 L 454 705 L 465 728 L E B 467 732 M 478 709 L 456 709 L 467 732 L E B 469 740 M 480 718 L 457 718 L 469 740 L E B 470 748 M 482 726 L 459 726 L 470 748 L E B 472 737 M 483 715 L 461 715 L 472 737 L E B 474 743 M 485 721 L 463 721 L 474 743 L E B 476 740 M 487 718 L 464 718 L 476 740 L E B 477 951 M 489 929 L 466 929 L 477 951 L E B 479 943 M 490 921 L 468 921 L 479 943 L E B 481 951 M 492 929 L 470 929 L 481 951 L E B 483 953 M 494 931 L 471 931 L 483 953 L E B 484 945 M 496 922 L 473 922 L 484 945 L E B 486 941 M 497 918 L 475 918 L 486 941 L E B 488 949 M 499 926 L 476 926 L 488 949 L E B 489 956 M 501 934 L 478 934 L 489 956 L E B 491 948 M 502 925 L 480 925 L 491 948 L E B 493 947 M 504 924 L 482 924 L 493 947 L E B 495 947 M 506 925 L 483 925 L 495 947 L E B 496 948 M 508 926 L 485 926 L 496 948 L E B 498 935 M 509 913 L 487 913 L 498 935 L E B 500 927 M 511 904 L 489 904 L 500 927 L E B 502 930 M 513 907 L 490 907 L 502 930 L E B 503 923 M 515 900 L 492 900 L 503 923 L E B 505 939 M 516 916 L 494 916 L 505 939 L E B 507 926 M 518 904 L 496 904 L 507 926 L E B 508 913 M 520 890 L 497 890 L 508 913 L E B 510 926 M 521 904 L 499 904 L 510 926 L E B 512 946 M 523 924 L 501 924 L 512 946 L E B 514 952 M 525 929 L 502 929 L 514 952 L E B 515 951 M 527 928 L 504 928 L 515 951 L E B 517 945 M 528 923 L 506 923 L 517 945 L E B 519 946 M 530 924 L 508 924 L 519 946 L E B 521 945 M 532 923 L 509 923 L 521 945 L E B 522 943 M 534 921 L 511 921 L 522 943 L E B 524 947 M 535 925 L 513 925 L 524 947 L E B 526 926 M 537 903 L 515 903 L 526 926 L E B 528 919 M 539 897 L 516 897 L 528 919 L E B 529 939 M 541 916 L 518 916 L 529 939 L E B 531 931 M 542 908 L 520 908 L 531 931 L E B 533 934 M 544 912 L 521 912 L 533 934 L E B 534 927 M 546 904 L 523 904 L 534 927 L E B 536 957 M 547 935 L 525 935 L 536 957 L E B 538 936 M 549 913 L 527 913 L 538 936 L E B 540 977 M 551 954 L 528 954 L 540 977 L E B 541 984 M 553 961 L 530 961 L 541 984 L E B 543 1019 M 554 997 L 532 997 L 543 1019 L E B 545 982 M 556 960 L 534 960 L 545 982 L E B 548 988 M 560 966 L 537 966 L 548 988 L E B 552 983 M 563 961 L 541 961 L 552 983 L E B 555 993 M 566 970 L 544 970 L 555 993 L E B 557 973 M 568 950 L 546 950 L 557 973 L E B 559 967 M 570 945 L 547 945 L 559 967 L E B 562 991 M 573 969 L 551 969 L 562 991 L E B 566 1012 M 577 990 L 554 990 L 566 1012 L E B 567 986 M 579 964 L 556 964 L 567 986 L E B 569 992 M 580 970 L 558 970 L 569 992 L E B 571 974 M 582 952 L 560 952 L 571 974 L E B 573 974 M 584 952 L 561 952 L 573 974 L E B 574 978 M 585 955 L 563 955 L 574 978 L E B 576 995 M 587 973 L 565 973 L 576 995 L E B 578 1016 M 589 993 L 566 993 L 578 1016 L E B 583 998 M 594 975 L 572 975 L 583 998 L E B 585 1004 M 596 982 L 573 982 L 585 1004 L E B 586 957 M 598 935 L 575 935 L 586 957 L E B 588 1012 M 599 990 L 577 990 L 588 1012 L E B 590 1003 M 601 981 L 579 981 L 590 1003 L E B 592 1001 M 603 979 L 580 979 L 592 1001 L E B 595 974 M 606 952 L 584 952 L 595 974 L E B 597 1001 M 608 978 L 585 978 L 597 1001 L E B 598 1000 M 610 978 L 587 978 L 598 1000 L E B 600 1023 M 611 1000 L 589 1000 L 600 1023 L E B 602 1000 M 613 978 L 591 978 L 602 1000 L E B 604 1006 M 615 984 L 592 984 L 604 1006 L E B 605 989 M 617 966 L 594 966 L 605 989 L E B 607 1004 M 618 982 L 596 982 L 607 1004 L E B 611 1007 M 622 985 L 599 985 L 611 1007 L E B 612 1002 M 624 979 L 601 979 L 612 1002 L E B 614 1013 M 625 990 L 603 990 L 614 1013 L E B 618 1006 M 629 984 L 606 984 L 618 1006 L E B 621 1012 M 632 990 L 610 990 L 621 1012 L E B 623 1008 M 634 986 L 611 986 L 623 1008 L E B 624 1005 M 636 982 L 613 982 L 624 1005 L E B 626 1010 M 637 988 L 615 988 L 626 1010 L E B 628 991 M 639 968 L 617 968 L 628 991 L E B 630 1001 M 641 978 L 618 978 L 630 1001 L E B 631 1019 M 643 997 L 620 997 L 631 1019 L E B 633 1005 M 644 983 L 622 983 L 633 1005 L E B 635 996 M 646 974 L 624 974 L 635 996 L E B 638 1012 M 650 989 L 627 989 L 638 1012 L E B 640 1002 M 651 979 L 629 979 L 640 1002 L E B 642 1017 M 653 995 L 630 995 L 642 1017 L E B 645 1015 M 656 992 L 634 992 L 645 1015 L E B 647 1021 M 658 999 L 636 999 L 647 1021 L E B 649 1017 M 660 994 L 637 994 L 649 1017 L E B 650 1033 M 662 1010 L 639 1010 L 650 1033 L E B 652 1033 M 663 1010 L 641 1010 L 652 1033 L E B 656 1025 M 667 1003 L 644 1003 L 656 1025 L E B 657 1005 M 669 983 L 646 983 L 657 1005 L E B 659 1035 M 670 1012 L 648 1012 L 659 1035 L E B 661 1029 M 672 1007 L 650 1007 L 661 1029 L E B 666 1036 M 677 1014 L 655 1014 L 666 1036 L E B 669 1078 M 681 1055 L 658 1055 L 669 1078 L E B 671 1033 M 682 1010 L 660 1010 L 671 1033 L E B 673 1039 M 684 1017 L 662 1017 L 673 1039 L E B 676 1047 M 688 1024 L 665 1024 L 676 1047 L E B 680 1043 M 691 1021 L 669 1021 L 680 1043 L E B 687 1032 M 698 1009 L 675 1009 L 687 1032 L E B 692 1055 M 703 1033 L 681 1033 L 692 1055 L E B 694 1029 M 705 1007 L 682 1007 L 694 1029 L E B 695 1033 M 707 1010 L 684 1010 L 695 1033 L E B 697 1038 M 708 1015 L 686 1015 L 697 1038 L E B 701 1068 M 712 1045 L 689 1045 L 701 1068 L E B 702 1033 M 714 1010 L 691 1010 L 702 1033 L E B 704 1054 M 715 1031 L 693 1031 L 704 1054 L E B 706 1047 M 717 1024 L 695 1024 L 706 1047 L E B 713 1057 M 724 1035 L 701 1035 L 713 1057 L E B 714 1047 M 726 1024 L 703 1024 L 714 1047 L E B 716 1036 M 727 1014 L 705 1014 L 716 1036 L E B 720 1054 M 731 1031 L 708 1031 L 720 1054 L E B 721 1053 M 733 1031 L 710 1031 L 721 1053 L E B 723 1064 M 734 1042 L 712 1042 L 723 1064 L E B 725 1049 M 736 1026 L 714 1026 L 725 1049 L E B 727 1068 M 738 1045 L 715 1045 L 727 1068 L E B 728 1070 M 740 1047 L 717 1047 L 728 1070 L E B 730 1073 M 741 1050 L 719 1050 L 730 1073 L E B 733 1057 M 745 1035 L 722 1035 L 733 1057 L E B 735 1047 M 746 1024 L 724 1024 L 735 1047 L E B 737 1061 M 748 1038 L 726 1038 L 737 1061 L E B 739 1072 M 750 1050 L 727 1050 L 739 1072 L E B 740 1075 M 752 1052 L 729 1052 L 740 1075 L E B 742 1057 M 753 1035 L 731 1035 L 742 1057 L E B 747 1077 M 759 1054 L 736 1054 L 747 1077 L E B 749 1071 M 760 1049 L 738 1049 L 749 1071 L E B 751 1071 M 762 1049 L 739 1049 L 751 1071 L E B 752 1099 M 764 1076 L 741 1076 L 752 1099 L E B 754 1071 M 765 1049 L 743 1049 L 754 1071 L E B 756 1080 M 767 1057 L 745 1057 L 756 1080 L E B 761 1068 M 772 1045 L 750 1045 L 761 1068 L E B 763 1076 M 774 1053 L 752 1053 L 763 1076 L E B 770 1064 M 781 1042 L 759 1042 L 770 1064 L E B 772 1081 M 783 1058 L 760 1058 L 772 1081 L E B 773 1088 M 784 1066 L 762 1066 L 773 1088 L E B 777 1065 M 788 1043 L 765 1043 L 777 1065 L E B 778 1064 M 790 1042 L 767 1042 L 778 1064 L E B 780 1081 M 791 1059 L 769 1059 L 780 1081 L E B 782 1081 M 793 1058 L 771 1058 L 782 1081 L E B 787 1095 M 798 1073 L 776 1073 L 787 1095 L E B 789 1072 M 800 1050 L 778 1050 L 789 1072 L E B 791 1100 M 802 1078 L 779 1078 L 791 1100 L E B 797 1096 M 809 1073 L 786 1073 L 797 1096 L E B 799 1109 M 810 1087 L 788 1087 L 799 1109 L E B 801 1137 M 812 1114 L 790 1114 L 801 1137 L E B 804 1087 M 816 1064 L 793 1064 L 804 1087 L E B 806 1085 M 817 1062 L 795 1062 L 806 1085 L E B 808 1114 M 819 1092 L 797 1092 L 808 1114 L E B 810 1133 M 821 1111 L 798 1111 L 810 1133 L E B 811 1080 M 823 1057 L 800 1057 L 811 1080 L E B 813 1080 M 824 1057 L 802 1057 L 813 1080 L E B 815 1064 M 826 1042 L 804 1042 L 815 1064 L E B 817 1085 M 828 1062 L 805 1062 L 817 1085 L E B 818 1101 M 829 1078 L 807 1078 L 818 1101 L E B 820 1108 M 831 1085 L 809 1085 L 820 1108 L E B 825 1114 M 836 1091 L 814 1091 L 825 1114 L E B 827 1140 M 838 1118 L 816 1118 L 827 1140 L E B 832 1088 M 843 1066 L 821 1066 L 832 1088 L E B 834 1113 M 845 1091 L 823 1091 L 834 1113 L E B 836 1095 M 847 1073 L 824 1073 L 836 1095 L E B 837 1092 M 849 1069 L 826 1069 L 837 1092 L E B 839 1110 M 850 1088 L 828 1088 L 839 1110 L E B 841 1099 M 852 1076 L 829 1076 L 841 1099 L E B 844 1104 M 855 1081 L 833 1081 L 844 1104 L E B 848 1147 M 859 1125 L 836 1125 L 848 1147 L E B 849 1097 M 861 1075 L 838 1075 L 849 1097 L E B 853 1116 M 864 1094 L 842 1094 L 853 1116 L E B 856 1119 M 868 1096 L 845 1096 L 856 1119 L E B 860 1106 M 871 1083 L 849 1083 L 860 1106 L E B 861 1106 M 873 1083 L 850 1083 L 861 1106 L E B 865 1113 M 876 1090 L 854 1090 L 865 1113 L E B 867 1117 M 878 1094 L 855 1094 L 867 1117 L E B 868 1121 M 880 1099 L 857 1099 L 868 1121 L E B 872 1128 M 883 1106 L 861 1106 L 872 1128 L E B 879 1135 M 890 1113 L 868 1113 L 879 1135 L E B 881 1128 M 892 1106 L 869 1106 L 881 1128 L E B 891 1142 M 902 1119 L 880 1119 L 891 1142 L E B 894 1133 M 906 1111 L 883 1111 L 894 1133 L E B 898 1120 M 909 1097 L 887 1097 L 898 1120 L E B 901 1079 M 913 1056 L 890 1056 L 901 1079 L E B 903 1083 M 914 1061 L 892 1061 L 903 1083 L E B 905 1106 M 916 1083 L 894 1083 L 905 1106 L E B 906 1085 M 918 1062 L 895 1062 L 906 1085 L E B 908 1102 M 919 1080 L 897 1080 L 908 1102 L E B 912 1084 M 923 1061 L 900 1061 L 912 1084 L E B 915 1154 M 926 1132 L 904 1132 L 915 1154 L E B 919 1165 M 930 1142 L 907 1142 L 919 1165 L E B 922 1140 M 933 1118 L 911 1118 L 922 1140 L E B 926 1130 M 937 1107 L 914 1107 L 926 1130 L E B 929 1140 M 940 1118 L 918 1118 L 929 1140 L E B 931 1161 M 942 1139 L 919 1139 L 931 1161 L E B 932 1130 M 944 1107 L 921 1107 L 932 1130 L E B 938 1168 M 949 1145 L 926 1145 L 938 1168 L E B 941 1170 M 952 1147 L 930 1147 L 941 1170 L E B 943 1154 M 954 1132 L 932 1132 L 943 1154 L E B 945 1144 M 956 1121 L 933 1121 L 945 1144 L E B 948 1216 M 959 1194 L 937 1194 L 948 1216 L E B 950 1175 M 961 1153 L 938 1153 L 950 1175 L E B 951 1182 M 963 1159 L 940 1159 L 951 1182 L E B 953 1140 M 964 1118 L 942 1118 L 953 1140 L E B 957 1163 M 968 1141 L 945 1141 L 957 1163 L E B 960 1140 M 971 1118 L 949 1118 L 960 1140 L E B 962 1147 M 973 1125 L 951 1125 L 962 1147 L E B 964 1156 M 975 1134 L 952 1134 L 964 1156 L E B 965 1177 M 977 1154 L 954 1154 L 965 1177 L E B 967 1206 M 978 1184 L 956 1184 L 967 1206 L E B 969 1154 M 980 1132 L 958 1132 L 969 1154 L E B 971 1171 M 982 1148 L 959 1148 L 971 1171 L E B 974 1179 M 985 1156 L 963 1156 L 974 1179 L E B 976 1185 M 987 1163 L 964 1163 L 976 1185 L E B 977 1154 M 989 1132 L 966 1132 L 977 1154 L E B 983 1169 M 994 1147 L 971 1147 L 983 1169 L E B 984 1164 M 996 1142 L 973 1142 L 984 1164 L E B 986 1199 M 997 1177 L 975 1177 L 986 1199 L E B 990 1158 M 1001 1135 L 978 1135 L 990 1158 L E B 991 1175 M 1003 1152 L 980 1152 L 991 1175 L E B 993 1151 M 1004 1128 L 982 1128 L 993 1151 L E B 995 1218 M 1006 1196 L 983 1196 L 995 1218 L E B 996 1179 M 1008 1157 L 985 1157 L 996 1179 L E B 1002 1213 M 1013 1190 L 990 1190 L 1002 1213 L E B 1005 1185 M 1016 1162 L 994 1162 L 1005 1185 L E B 1009 1188 M 1020 1165 L 997 1165 L 1009 1188 L E B 1012 1201 M 1023 1178 L 1001 1178 L 1012 1201 L E B 1014 1180 M 1025 1158 L 1003 1158 L 1014 1180 L E B 1016 1175 M 1027 1152 L 1004 1152 L 1016 1175 L E B 1017 1204 M 1028 1182 L 1006 1182 L 1017 1204 L E B 1021 1216 M 1032 1194 L 1009 1194 L 1021 1216 L E B 1022 1180 M 1034 1157 L 1011 1157 L 1022 1180 L E B 1024 1175 M 1035 1152 L 1013 1152 L 1024 1175 L E B 1026 1194 M 1037 1171 L 1015 1171 L 1026 1194 L E B 1033 1215 M 1044 1192 L 1022 1192 L 1033 1215 L E B 1036 1210 M 1048 1187 L 1025 1187 L 1036 1210 L E B 1040 1216 M 1051 1194 L 1028 1194 L 1040 1216 L E B 1047 1196 M 1058 1173 L 1035 1173 L 1047 1196 L E B 1050 1182 M 1061 1159 L 1039 1159 L 1050 1182 L E B 1052 1206 M 1063 1184 L 1041 1184 L 1052 1206 L E B 1054 1215 M 1065 1193 L 1042 1193 L 1054 1215 L E B 1059 1203 M 1070 1180 L 1048 1180 L 1059 1203 L E B 1062 1210 M 1073 1187 L 1051 1187 L 1062 1210 L E B 1066 1236 M 1077 1214 L 1054 1214 L 1066 1236 L E B 1067 1235 M 1079 1213 L 1056 1213 L 1067 1235 L E B 1073 1213 M 1084 1190 L 1061 1190 L 1073 1213 L E B 1074 1189 M 1086 1166 L 1063 1166 L 1074 1189 L E B 1076 1192 M 1087 1170 L 1065 1170 L 1076 1192 L E B 1080 1220 M 1091 1197 L 1068 1197 L 1080 1220 L E B 1081 1201 M 1093 1178 L 1070 1178 L 1081 1201 L E B 1083 1241 M 1094 1218 L 1072 1218 L 1083 1241 L E B 1086 1203 M 1098 1180 L 1075 1180 L 1086 1203 L E B 1090 1251 M 1101 1229 L 1079 1229 L 1090 1251 L E B 1092 1236 M 1103 1214 L 1080 1214 L 1092 1236 L E B 1093 1282 M 1105 1260 L 1082 1260 L 1093 1282 L E B 1095 1230 M 1106 1208 L 1084 1208 L 1095 1230 L E B 1099 1223 M 1110 1201 L 1087 1201 L 1099 1223 L E B 1100 1203 M 1112 1180 L 1089 1180 L 1100 1203 L E B 1102 1241 M 1113 1218 L 1091 1218 L 1102 1241 L E B 1105 1241 M 1117 1218 L 1094 1218 L 1105 1241 L E B 1107 1213 M 1118 1190 L 1096 1190 L 1107 1213 L E B 1109 1230 M 1120 1208 L 1098 1208 L 1109 1230 L E B 1116 1248 M 1127 1225 L 1105 1225 L 1116 1248 L E B 1121 1220 M 1132 1197 L 1110 1197 L 1121 1220 L E B 1123 1222 M 1134 1200 L 1112 1200 L 1123 1222 L E B 1125 1265 M 1136 1242 L 1113 1242 L 1125 1265 L E B 1126 1260 M 1137 1237 L 1115 1237 L 1126 1260 L E B 1130 1244 M 1141 1222 L 1118 1222 L 1130 1244 L E B 1131 1216 M 1143 1194 L 1120 1194 L 1131 1216 L E B 1133 1232 M 1144 1210 L 1122 1210 L 1133 1232 L E B 1135 1275 M 1146 1253 L 1124 1253 L 1135 1275 L E B 1137 1222 M 1148 1200 L 1125 1200 L 1137 1222 L E B 1140 1282 M 1151 1260 L 1129 1260 L 1140 1282 L E B 1142 1256 M 1153 1234 L 1131 1234 L 1142 1256 L E B 1144 1240 M 1155 1217 L 1132 1217 L 1144 1240 L E B 1145 1244 M 1157 1222 L 1134 1222 L 1145 1244 L E B 1149 1379 M 1160 1357 L 1137 1357 L 1149 1379 L E B 1150 1265 M 1162 1242 L 1139 1242 L 1150 1265 L E B 1156 1256 M 1167 1233 L 1144 1233 L 1156 1256 L E B 1157 1260 M 1169 1238 L 1146 1238 L 1157 1260 L E B 1161 1313 M 1172 1291 L 1150 1291 L 1161 1313 L E B 1163 1270 M 1174 1248 L 1151 1248 L 1163 1270 L E B 1164 1285 M 1176 1262 L 1153 1262 L 1164 1285 L E B 1166 1234 M 1177 1211 L 1155 1211 L 1166 1234 L E B 1168 1261 M 1179 1239 L 1157 1239 L 1168 1261 L E B 1170 1234 M 1181 1211 L 1158 1211 L 1170 1234 L E B 1171 1317 M 1182 1294 L 1160 1294 L 1171 1317 L E B 1173 1265 M 1184 1242 L 1162 1242 L 1173 1265 L E B 1175 1237 M 1186 1215 L 1163 1215 L 1175 1237 L E B 1176 1269 M 1188 1247 L 1165 1247 L 1176 1269 L E B 1178 1244 M 1189 1222 L 1167 1222 L 1178 1244 L E B 1180 1279 M 1191 1256 L 1169 1256 L 1180 1279 L E B 1183 1291 M 1195 1268 L 1172 1268 L 1183 1291 L E B 1185 1284 M 1196 1262 L 1174 1262 L 1185 1284 L E B 1187 1267 M 1198 1244 L 1176 1244 L 1187 1267 L E B 1189 1268 M 1200 1246 L 1177 1246 L 1189 1268 L E B 1190 1289 M 1202 1267 L 1179 1267 L 1190 1289 L E B 1192 1265 M 1203 1242 L 1181 1242 L 1192 1265 L E B 1194 1244 M 1205 1222 L 1182 1222 L 1194 1244 L E B 1195 1232 M 1207 1210 L 1184 1210 L 1195 1232 L E B 1197 1268 M 1208 1246 L 1186 1246 L 1197 1268 L E B 1199 1257 M 1210 1234 L 1188 1234 L 1199 1257 L E B 1201 1283 M 1212 1261 L 1189 1261 L 1201 1283 L E B 1202 1275 M 1214 1253 L 1191 1253 L 1202 1275 L E B 1204 1255 M 1215 1232 L 1193 1232 L 1204 1255 L E B 1206 1320 M 1217 1298 L 1195 1298 L 1206 1320 L E B 1208 1261 M 1219 1239 L 1196 1239 L 1208 1261 L E B 1209 1293 M 1221 1271 L 1198 1271 L 1209 1293 L E B 1211 1317 M 1222 1294 L 1200 1294 L 1211 1317 L E B 1213 1255 M 1224 1232 L 1202 1232 L 1213 1255 L E B 1214 1265 M 1226 1242 L 1203 1242 L 1214 1265 L E B 1216 1277 M 1227 1255 L 1205 1255 L 1216 1277 L E B 1218 1280 M 1229 1258 L 1207 1258 L 1218 1280 L E B 1220 1301 M 1231 1278 L 1208 1278 L 1220 1301 L E B 1221 1268 M 1233 1246 L 1210 1246 L 1221 1268 L E B 1223 1300 M 1234 1277 L 1212 1277 L 1223 1300 L E B 1225 1280 M 1236 1258 L 1214 1258 L 1225 1280 L E B 1227 1278 M 1238 1255 L 1215 1255 L 1227 1278 L E B 1228 1302 M 1240 1280 L 1217 1280 L 1228 1302 L E B 1230 1282 M 1241 1260 L 1219 1260 L 1230 1282 L E B 1232 1282 M 1243 1260 L 1221 1260 L 1232 1282 L E B 1234 1230 M 1245 1208 L 1222 1208 L 1234 1230 L E B 1235 1317 M 1247 1295 L 1224 1295 L 1235 1317 L E B 1237 1298 M 1248 1276 L 1226 1276 L 1237 1298 L E B 1239 1287 M 1250 1265 L 1227 1265 L 1239 1287 L E B 1240 1308 M 1252 1286 L 1229 1286 L 1240 1308 L E B 1242 1310 M 1253 1287 L 1231 1287 L 1242 1310 L E B 1244 1279 M 1255 1256 L 1233 1256 L 1244 1279 L E B 1246 1265 M 1257 1242 L 1234 1242 L 1246 1265 L E B 1247 1279 M 1259 1256 L 1236 1256 L 1247 1279 L E B 1249 1291 M 1260 1269 L 1238 1269 L 1249 1291 L E B 1251 1296 M 1262 1274 L 1240 1274 L 1251 1296 L E B 1254 1279 M 1266 1256 L 1243 1256 L 1254 1279 L E B 1256 1285 M 1267 1263 L 1245 1263 L 1256 1285 L E B 1258 1311 M 1269 1289 L 1247 1289 L 1258 1311 L E B 1259 1301 M 1271 1278 L 1248 1278 L 1259 1301 L E B 1261 1306 M 1272 1284 L 1250 1284 L 1261 1306 L E B 1263 1282 M 1274 1260 L 1252 1260 L 1263 1282 L E B 1265 1314 M 1276 1291 L 1253 1291 L 1265 1314 L E B 1268 1305 M 1279 1282 L 1257 1282 L 1268 1305 L E B 1270 1300 M 1281 1277 L 1259 1277 L 1270 1300 L E B 1273 1300 M 1285 1277 L 1262 1277 L 1273 1300 L E B 1275 1310 M 1286 1287 L 1264 1287 L 1275 1310 L E B 1277 1327 M 1288 1305 L 1266 1305 L 1277 1327 L E B 1280 1301 M 1292 1279 L 1269 1279 L 1280 1301 L E B 1282 1280 M 1293 1258 L 1271 1258 L 1282 1280 L E B 1284 1310 M 1295 1287 L 1272 1287 L 1284 1310 L E B 1285 1284 M 1297 1261 L 1274 1261 L 1285 1284 L E B 1287 1277 M 1298 1255 L 1276 1255 L 1287 1277 L E B 1289 1268 M 1300 1245 L 1278 1245 L 1289 1268 L E B 1291 1272 M 1302 1249 L 1279 1249 L 1291 1272 L E B 1292 1277 M 1304 1255 L 1281 1255 L 1292 1277 L E B 1296 1275 M 1307 1253 L 1285 1253 L 1296 1275 L E B 1299 1288 M 1311 1265 L 1288 1265 L 1299 1288 L E B 1303 1317 M 1314 1294 L 1291 1294 L 1303 1317 L E B 1304 1327 M 1316 1305 L 1293 1305 L 1304 1327 L E B 1306 1320 M 1317 1298 L 1295 1298 L 1306 1320 L E B 1308 1334 M 1319 1312 L 1297 1312 L 1308 1334 L E B 1310 1320 M 1321 1297 L 1298 1297 L 1310 1320 L E B 1311 1334 M 1323 1312 L 1300 1312 L 1311 1334 L E B 1313 1298 M 1324 1275 L 1302 1275 L 1313 1298 L E B 1315 1306 M 1326 1284 L 1304 1284 L 1315 1306 L E B 1317 1329 M 1328 1306 L 1305 1306 L 1317 1329 L E B 1320 1286 M 1331 1263 L 1309 1263 L 1320 1286 L E B 1322 1348 M 1333 1326 L 1311 1326 L 1322 1348 L E B 1324 1327 M 1335 1305 L 1312 1305 L 1324 1327 L E B 1325 1303 M 1336 1280 L 1314 1280 L 1325 1303 L E B 1327 1300 M 1338 1277 L 1316 1277 L 1327 1300 L E B 1329 1310 M 1340 1287 L 1317 1287 L 1329 1310 L E B 1330 1322 M 1342 1300 L 1319 1300 L 1330 1322 L E B 1332 1334 M 1343 1312 L 1321 1312 L 1332 1334 L E B 1334 1296 M 1345 1274 L 1323 1274 L 1334 1296 L E B 1336 1327 M 1347 1305 L 1324 1305 L 1336 1327 L E B 1337 1303 M 1349 1280 L 1326 1280 L 1337 1303 L E B 1339 1313 M 1350 1290 L 1328 1290 L 1339 1313 L E B 1341 1320 M 1352 1298 L 1330 1298 L 1341 1320 L E B 1344 1293 M 1356 1270 L 1333 1270 L 1344 1293 L E B 1349 1331 M 1361 1308 L 1338 1308 L 1349 1331 L E B 1351 1281 M 1362 1259 L 1340 1259 L 1351 1281 L E B 1355 1268 M 1366 1246 L 1343 1246 L 1355 1268 L E B 1356 1324 M 1368 1301 L 1345 1301 L 1356 1324 L E B 1358 1296 M 1369 1274 L 1347 1274 L 1358 1296 L E B 1362 1310 M 1373 1287 L 1350 1287 L 1362 1310 L E B 1363 1313 M 1375 1291 L 1352 1291 L 1363 1313 L E B 1365 1286 M 1376 1263 L 1354 1263 L 1365 1286 L E B 1369 1310 M 1380 1287 L 1357 1287 L 1369 1310 L E B 1370 1321 M 1381 1299 L 1359 1299 L 1370 1321 L E B 1372 1426 M 1383 1404 L 1361 1404 L 1372 1426 L E B 1377 1300 M 1388 1277 L 1366 1277 L 1377 1300 L E B 1379 1369 M 1390 1346 L 1368 1346 L 1379 1369 L E B 1381 1312 M 1392 1289 L 1369 1289 L 1381 1312 L E B 1382 1343 M 1394 1320 L 1371 1320 L 1382 1343 L E B 1389 1325 M 1401 1303 L 1378 1303 L 1389 1325 L E B 1393 1296 M 1404 1274 L 1381 1274 L 1393 1296 L E B 1394 1338 M 1406 1315 L 1383 1315 L 1394 1338 L E B 1396 1300 M 1407 1277 L 1385 1277 L 1396 1300 L E B 1400 1329 M 1411 1307 L 1388 1307 L 1400 1329 L E B 1403 1338 M 1414 1316 L 1392 1316 L 1403 1338 L E B 1405 1345 M 1416 1322 L 1394 1322 L 1405 1345 L E B 1407 1337 M 1418 1314 L 1395 1314 L 1407 1337 L E B 1413 1334 M 1425 1312 L 1402 1312 L 1413 1334 L E B 1419 1346 M 1430 1324 L 1407 1324 L 1419 1346 L E B 1420 1343 M 1432 1320 L 1409 1320 L 1420 1343 L E B 1427 1350 M 1439 1328 L 1416 1328 L 1427 1350 L E B 1433 1405 M 1444 1383 L 1421 1383 L 1433 1405 L E B 1434 1313 M 1446 1291 L 1423 1291 L 1434 1313 L E B 1436 1345 M 1447 1322 L 1425 1322 L 1436 1345 L E B 1445 1362 M 1456 1339 L 1433 1339 L 1445 1362 L E B 1448 1346 M 1459 1324 L 1437 1324 L 1448 1346 L E B 1452 1358 M 1463 1336 L 1440 1336 L 1452 1358 L E B 1457 1393 M 1468 1371 L 1446 1371 L 1457 1393 L E B 1458 1379 M 1470 1357 L 1447 1357 L 1458 1379 L E B 1460 1379 M 1471 1357 L 1449 1357 L 1460 1379 L E B 1462 1355 M 1473 1332 L 1451 1332 L 1462 1355 L E B 1465 1376 M 1477 1353 L 1454 1353 L 1465 1376 L E B 1467 1355 M 1478 1332 L 1456 1332 L 1467 1355 L E B 1469 1383 M 1480 1360 L 1458 1360 L 1469 1383 L E B 1476 1365 M 1487 1342 L 1465 1342 L 1476 1365 L E B 1478 1386 M 1489 1364 L 1466 1364 L 1478 1386 L E B 1481 1362 M 1492 1339 L 1470 1339 L 1481 1362 L E B 1483 1368 M 1494 1345 L 1471 1345 L 1483 1368 L E B 1484 1379 M 1496 1357 L 1473 1357 L 1484 1379 L E B 1488 1371 M 1499 1348 L 1477 1348 L 1488 1371 L E B 1491 1357 M 1503 1334 L 1480 1334 L 1491 1357 L E B 1495 1372 M 1506 1350 L 1484 1350 L 1495 1372 L E B 1497 1365 M 1508 1343 L 1485 1343 L 1497 1365 L E B 1503 1357 M 1515 1335 L 1492 1335 L 1503 1357 L E B 1505 1393 M 1516 1371 L 1494 1371 L 1505 1393 L E B 1509 1393 M 1520 1371 L 1497 1371 L 1509 1393 L E B 1510 1372 M 1522 1350 L 1499 1350 L 1510 1372 L E B 1512 1376 M 1523 1353 L 1501 1353 L 1512 1376 L E B 1516 1363 M 1527 1340 L 1504 1340 L 1516 1363 L E B 1521 1355 M 1532 1332 L 1510 1332 L 1521 1355 L E B 1523 1379 M 1534 1357 L 1511 1357 L 1523 1379 L E B 1524 1355 M 1535 1332 L 1513 1332 L 1524 1355 L E B 1526 1395 M 1537 1373 L 1515 1373 L 1526 1395 L E B 1528 1390 M 1539 1367 L 1516 1367 L 1528 1390 L E B 1529 1376 M 1541 1353 L 1518 1353 L 1529 1376 L E B 1531 1400 M 1542 1378 L 1520 1378 L 1531 1400 L E B 1533 1378 M 1544 1356 L 1522 1356 L 1533 1378 L E B 1535 1426 M 1546 1403 L 1523 1403 L 1535 1426 L E B 1536 1424 M 1548 1402 L 1525 1402 L 1536 1424 L E B 1538 1398 M 1549 1376 L 1527 1376 L 1538 1398 L E B 1540 1421 M 1551 1398 L 1529 1398 L 1540 1421 L E B 1542 1372 M 1553 1350 L 1530 1350 L 1542 1372 L E B 1545 1396 M 1556 1374 L 1534 1374 L 1545 1396 L E B 1555 1386 M 1567 1364 L 1544 1364 L 1555 1386 L E B 1561 1383 M 1572 1360 L 1549 1360 L 1561 1383 L E B 1562 1400 M 1574 1377 L 1551 1377 L 1562 1400 L E B 1573 1431 M 1584 1409 L 1561 1409 L 1573 1431 L E B 1574 1462 M 1586 1440 L 1563 1440 L 1574 1462 L E B 1576 1379 M 1587 1357 L 1565 1357 L 1576 1379 L E B 1580 1406 M 1591 1383 L 1568 1383 L 1580 1406 L E B 1583 1459 M 1594 1436 L 1572 1436 L 1583 1459 L E B 1593 1538 M 1605 1516 L 1582 1516 L 1593 1538 L E B 1595 1417 M 1606 1395 L 1584 1395 L 1595 1417 L E B 1597 1424 M 1608 1402 L 1586 1402 L 1597 1424 L E B 1599 1399 M 1610 1377 L 1587 1377 L 1599 1399 L E B 1604 1428 M 1615 1405 L 1593 1405 L 1604 1428 L E B 1609 1438 M 1620 1416 L 1598 1416 L 1609 1438 L E B 1611 1446 M 1622 1423 L 1600 1423 L 1611 1446 L E B 1614 1447 M 1625 1424 L 1603 1424 L 1614 1447 L E B 1619 1455 M 1631 1433 L 1608 1433 L 1619 1455 L E B 1621 1441 M 1632 1419 L 1610 1419 L 1621 1441 L E B 1623 1441 M 1634 1419 L 1612 1419 L 1623 1441 L E B 1628 1462 M 1639 1440 L 1617 1440 L 1628 1462 L E B 1630 1407 M 1641 1384 L 1619 1384 L 1630 1407 L E B 1632 1441 M 1643 1419 L 1620 1419 L 1632 1441 L E B 1638 1414 M 1650 1391 L 1627 1391 L 1638 1414 L E B 1645 1435 M 1657 1412 L 1634 1412 L 1645 1435 L E B 1649 1443 M 1660 1421 L 1638 1421 L 1649 1443 L E B 1656 1462 M 1667 1440 L 1645 1440 L 1656 1462 L E B 1659 1469 M 1670 1447 L 1648 1447 L 1659 1469 L E B 1663 1456 M 1674 1434 L 1651 1434 L 1663 1456 L E B 1671 1497 M 1683 1474 L 1660 1474 L 1671 1497 L E B 1673 1459 M 1684 1436 L 1662 1436 L 1673 1459 L E B 1677 1448 M 1688 1426 L 1665 1426 L 1677 1448 L E B 1683 1445 M 1695 1422 L 1672 1422 L 1683 1445 L E B 1692 1424 M 1703 1402 L 1681 1402 L 1692 1424 L E B 1696 1500 M 1707 1478 L 1684 1478 L 1696 1500 L E B 1697 1455 M 1709 1433 L 1686 1433 L 1697 1455 L E B 1701 1480 M 1712 1457 L 1689 1457 L 1701 1480 L E B 1706 1455 M 1717 1433 L 1695 1433 L 1706 1455 L E B 1718 1514 M 1729 1492 L 1707 1492 L 1718 1514 L E B 1720 1490 M 1731 1467 L 1709 1467 L 1720 1490 L E B 1727 1431 M 1738 1409 L 1715 1409 L 1727 1431 L E B 1728 1455 M 1740 1433 L 1717 1433 L 1728 1455 L E B 1730 1466 M 1741 1443 L 1719 1443 L 1730 1466 L E B 1732 1453 M 1743 1431 L 1721 1431 L 1732 1453 L E B 1734 1462 M 1745 1440 L 1722 1440 L 1734 1462 L E B 1735 1470 M 1747 1448 L 1724 1448 L 1735 1470 L E B 1737 1476 M 1748 1454 L 1726 1454 L 1737 1476 L E B 1741 1504 M 1752 1481 L 1729 1481 L 1741 1504 L E B 1747 1466 M 1759 1444 L 1736 1444 L 1747 1466 L E B 1753 1499 M 1764 1477 L 1741 1477 L 1753 1499 L E B 1754 1469 M 1766 1447 L 1743 1447 L 1754 1469 L E B 1756 1457 M 1767 1435 L 1745 1435 L 1756 1457 L E B 1760 1500 M 1771 1478 L 1748 1478 L 1760 1500 L E B 1765 1455 M 1776 1433 L 1754 1433 L 1765 1455 L E B 1766 1494 M 1778 1472 L 1755 1472 L 1766 1494 L E B 1768 1459 M 1779 1436 L 1757 1436 L 1768 1459 L E B 1773 1506 M 1785 1483 L 1762 1483 L 1773 1506 L E B 1775 1490 M 1786 1467 L 1764 1467 L 1775 1490 L E B 1784 1538 M 1795 1516 L 1773 1516 L 1784 1538 L E B 1787 1511 M 1799 1488 L 1776 1488 L 1787 1511 L E B 1792 1525 M 1804 1502 L 1781 1502 L 1792 1525 L E B 1801 1497 M 1812 1474 L 1790 1474 L 1801 1497 L E B 1808 1520 M 1819 1497 L 1797 1497 L 1808 1520 L E B 1817 1486 M 1828 1464 L 1805 1464 L 1817 1486 L E B 1820 1538 M 1831 1516 L 1809 1516 L 1820 1538 L E B 1825 1552 M 1837 1530 L 1814 1530 L 1825 1552 L E B 1829 1514 M 1840 1492 L 1818 1492 L 1829 1514 L E B 1836 1507 M 1847 1485 L 1824 1485 L 1836 1507 L E B 1843 1523 M 1854 1500 L 1831 1500 L 1843 1523 L E B 1848 1480 M 1859 1457 L 1837 1457 L 1848 1480 L E B 1855 1476 M 1866 1454 L 1843 1454 L 1855 1476 L E B 1856 1500 M 1868 1478 L 1845 1478 L 1856 1500 L E B 1858 1542 M 1869 1519 L 1847 1519 L 1858 1542 L E B 1870 1541 M 1882 1519 L 1859 1519 L 1870 1541 L E B 1876 1549 M 1887 1526 L 1864 1526 L 1876 1549 L E B 1882 1563 M 1894 1540 L 1871 1540 L 1882 1563 L E B 1884 1525 M 1895 1502 L 1873 1502 L 1884 1525 L E B 1889 1554 M 1901 1531 L 1878 1531 L 1889 1554 L E B 1905 1563 M 1916 1540 L 1894 1540 L 1905 1563 L E B 1907 1556 M 1918 1533 L 1895 1533 L 1907 1556 L E B 1910 1549 M 1921 1526 L 1899 1526 L 1910 1549 L E B 1912 1528 M 1923 1506 L 1901 1506 L 1912 1528 L E B 1915 1535 M 1927 1512 L 1904 1512 L 1915 1535 L E B 1926 1558 M 1937 1536 L 1914 1536 L 1926 1558 L E B 1927 1542 M 1939 1519 L 1916 1519 L 1927 1542 L E B 1933 1562 M 1944 1540 L 1921 1540 L 1933 1562 L E B 1934 1514 M 1946 1492 L 1923 1492 L 1934 1514 L E B 1941 1587 M 1953 1564 L 1930 1564 L 1941 1587 L E B 1946 1549 M 1958 1526 L 1935 1526 L 1946 1549 L E B 1953 1583 M 1965 1561 L 1942 1561 L 1953 1583 L E B 1959 1608 M 1970 1585 L 1947 1585 L 1959 1608 L E B 1960 1549 M 1972 1526 L 1949 1526 L 1960 1549 L E B 1962 1570 M 1973 1547 L 1951 1547 L 1962 1570 L E B 1967 1570 M 1978 1547 L 1956 1547 L 1967 1570 L E B 1971 1601 M 1982 1578 L 1959 1578 L 1971 1601 L E B 1974 1531 M 1985 1509 L 1963 1509 L 1974 1531 L E B 1976 1531 M 1987 1509 L 1965 1509 L 1976 1531 L E B 1988 1622 M 1999 1599 L 1977 1599 L 1988 1622 L E B 1995 1582 M 2006 1559 L 1984 1559 L 1995 1582 L E B 2007 1571 M 2018 1549 L 1996 1549 L 2007 1571 L E B 2019 1556 M 2030 1533 L 2008 1533 L 2019 1556 L E B 2023 1615 M 2034 1592 L 2011 1592 L 2023 1615 L E B 2030 1597 M 2041 1575 L 2018 1575 L 2030 1597 L E B 2031 1622 M 2042 1599 L 2020 1599 L 2031 1622 L E B 2035 1649 M 2046 1627 L 2023 1627 L 2035 1649 L E B 2042 1628 M 2053 1606 L 2030 1606 L 2042 1628 L E B 2047 1604 M 2058 1582 L 2036 1582 L 2047 1604 L E B 2050 1615 M 2062 1592 L 2039 1592 L 2050 1615 L E B 2057 1616 M 2068 1594 L 2046 1594 L 2057 1616 L E B 2064 1610 M 2075 1587 L 2053 1587 L 2064 1610 L E B 2066 1635 M 2077 1613 L 2055 1613 L 2066 1635 L E B 2069 1604 M 2081 1582 L 2058 1582 L 2069 1604 L E B 2071 1604 M 2082 1582 L 2060 1582 L 2071 1604 L E B 2080 1580 M 2091 1557 L 2068 1557 L 2080 1580 L E B 2081 1601 M 2093 1578 L 2070 1578 L 2081 1601 L E B 2085 1653 M 2096 1630 L 2074 1630 L 2085 1653 L E B 2100 1656 M 2112 1634 L 2089 1634 L 2100 1656 L E B 2102 1632 M 2113 1609 L 2091 1609 L 2102 1632 L E B 2113 1618 M 2124 1596 L 2101 1596 L 2113 1618 L E B 2118 1636 M 2129 1614 L 2107 1614 L 2118 1636 L E B 2120 1677 M 2131 1654 L 2108 1654 L 2120 1677 L E B 2121 1680 M 2132 1658 L 2110 1658 L 2121 1680 L E B 2126 1701 M 2138 1679 L 2115 1679 L 2126 1701 L E B 2128 1656 M 2139 1634 L 2117 1634 L 2128 1656 L E B 2130 1640 M 2141 1618 L 2119 1618 L 2130 1640 L E B 2142 1645 M 2153 1622 L 2131 1622 L 2142 1645 L E B 2147 1685 M 2158 1662 L 2136 1662 L 2147 1685 L E B 2152 1666 M 2164 1643 L 2141 1643 L 2152 1666 L E B 2154 1658 M 2165 1635 L 2143 1635 L 2154 1658 L E B 2164 1673 M 2176 1651 L 2153 1651 L 2164 1673 L E B 2168 1672 M 2179 1649 L 2157 1649 L 2168 1672 L E B 2173 1658 M 2184 1635 L 2162 1635 L 2173 1658 L E B 2180 1665 M 2191 1642 L 2169 1642 L 2180 1665 L E B 2189 1667 M 2200 1645 L 2177 1645 L 2189 1667 L E B 2194 1656 M 2205 1634 L 2183 1634 L 2194 1656 L E B 2196 1678 M 2207 1656 L 2184 1656 L 2196 1678 L E B 2199 1694 M 2210 1672 L 2188 1672 L 2199 1694 L E B 2201 1660 M 2212 1637 L 2190 1637 L 2201 1660 L E B 2209 1757 M 2221 1734 L 2198 1734 L 2209 1757 L E B 2215 1736 M 2226 1713 L 2203 1713 L 2215 1736 L E B 2223 1698 M 2235 1675 L 2212 1675 L 2223 1698 L E B 2225 1795 M 2236 1772 L 2214 1772 L 2225 1795 L E B 2237 1694 M 2248 1672 L 2226 1672 L 2237 1694 L E B 2241 1684 M 2252 1661 L 2229 1661 L 2241 1684 L E B 2242 1712 M 2254 1689 L 2231 1689 L 2242 1712 L E B 2244 1663 M 2255 1641 L 2233 1641 L 2244 1663 L E B 2246 1680 M 2257 1658 L 2235 1658 L 2246 1680 L E B 2253 1698 M 2264 1675 L 2241 1675 L 2253 1698 L E B 2258 1722 M 2269 1699 L 2247 1699 L 2258 1722 L E B 2265 1673 M 2276 1651 L 2254 1651 L 2265 1673 L E B 2267 1687 M 2278 1665 L 2255 1665 L 2267 1687 L E B 2268 1663 M 2280 1641 L 2257 1641 L 2268 1663 L E B 2270 1727 M 2281 1705 L 2259 1705 L 2270 1727 L E B 2280 1687 M 2292 1665 L 2269 1665 L 2280 1687 L E B 2286 1697 M 2297 1674 L 2274 1674 L 2286 1697 L E B 2287 1677 M 2299 1654 L 2276 1654 L 2287 1677 L E B 2289 1698 M 2300 1675 L 2278 1675 L 2289 1698 L E B 2301 1708 M 2312 1686 L 2290 1686 L 2301 1708 L E B 2313 1702 M 2325 1680 L 2302 1680 L 2313 1702 L E B 2317 1708 M 2328 1686 L 2306 1686 L 2317 1708 L E B 2324 1777 M 2335 1755 L 2312 1755 L 2324 1777 L E B 2327 1698 M 2338 1675 L 2316 1675 L 2327 1698 L E B 2344 1737 M 2356 1714 L 2333 1714 L 2344 1737 L E B 2348 1748 M 2359 1725 L 2337 1725 L 2348 1748 L E B 2350 1701 M 2361 1679 L 2338 1679 L 2350 1701 L E B 2355 1791 M 2366 1769 L 2344 1769 L 2355 1791 L E B 2369 1732 M 2380 1710 L 2357 1710 L 2369 1732 L E B 2377 1744 M 2389 1721 L 2366 1721 L 2377 1744 L E B 2379 1757 M 2390 1734 L 2368 1734 L 2379 1757 L E B 2381 1705 M 2392 1682 L 2370 1682 L 2381 1705 L E B 2386 1732 M 2397 1710 L 2375 1710 L 2386 1732 L E B 2389 1757 M 2401 1734 L 2378 1734 L 2389 1757 L E B 2391 1796 M 2402 1774 L 2380 1774 L 2391 1796 L E B 2402 1790 M 2413 1767 L 2390 1767 L 2402 1790 L E B 2403 1757 M 2415 1734 L 2392 1734 L 2403 1757 L E B 2408 1757 M 2420 1734 L 2397 1734 L 2408 1757 L E B 2417 1771 M 2428 1749 L 2406 1749 L 2417 1771 L E B 2426 1770 M 2437 1748 L 2415 1748 L 2426 1770 L E B 2428 1781 M 2439 1758 L 2416 1758 L 2428 1781 L E B 2431 1777 M 2442 1755 L 2420 1755 L 2431 1777 L E B 2436 1753 M 2447 1731 L 2425 1731 L 2436 1753 L E B 2438 1808 M 2449 1786 L 2427 1786 L 2438 1808 L E B 2443 1779 M 2454 1757 L 2432 1757 L 2443 1779 L E B 2452 1843 M 2463 1821 L 2440 1821 L 2452 1843 L E B 2453 1767 M 2465 1744 L 2442 1744 L 2453 1767 L E B 2479 1795 M 2491 1772 L 2468 1772 L 2479 1795 L E B 2486 1807 M 2498 1785 L 2475 1785 L 2486 1807 L E B 2493 1797 M 2505 1775 L 2482 1775 L 2493 1797 L E B 2498 1826 M 2510 1803 L 2487 1803 L 2498 1826 L E B 2500 1819 M 2511 1797 L 2489 1797 L 2500 1819 L E B 2512 1829 M 2524 1807 L 2501 1807 L 2512 1829 L E B 2516 1791 M 2527 1769 L 2505 1769 L 2516 1791 L E B 2519 1805 M 2530 1782 L 2508 1782 L 2519 1805 L E B 2526 1867 M 2537 1845 L 2515 1845 L 2526 1867 L E B 2530 1836 M 2541 1814 L 2518 1814 L 2530 1836 L E B 2531 1833 M 2543 1810 L 2520 1810 L 2531 1833 L E B 2540 1815 M 2551 1793 L 2529 1793 L 2540 1815 L E B 2543 1784 M 2555 1762 L 2532 1762 L 2543 1784 L E B 2545 1795 M 2556 1772 L 2534 1772 L 2545 1795 L E B 2549 1834 M 2560 1812 L 2537 1812 L 2549 1834 L E B 2552 1777 M 2563 1755 L 2541 1755 L 2552 1777 L E B 2556 1798 M 2567 1776 L 2544 1776 L 2556 1798 L E B 2568 1812 M 2579 1789 L 2556 1789 L 2568 1812 L E B 2569 1885 M 2581 1862 L 2558 1862 L 2569 1885 L E B 2571 1812 M 2582 1789 L 2560 1789 L 2571 1812 L E B 2576 1798 M 2588 1776 L 2565 1776 L 2576 1798 L E B 2580 1795 M 2591 1772 L 2569 1772 L 2580 1795 L E B 2590 1815 M 2601 1793 L 2579 1793 L 2590 1815 L E B 2599 1916 M 2610 1893 L 2588 1893 L 2599 1916 L E B 2602 1860 M 2614 1838 L 2591 1838 L 2602 1860 L E B 2609 1791 M 2620 1769 L 2598 1769 L 2609 1791 L E B 2614 1843 M 2626 1821 L 2603 1821 L 2614 1843 L E B 2625 1815 M 2636 1793 L 2614 1793 L 2625 1815 L E B 2633 1802 M 2645 1779 L 2622 1779 L 2633 1802 L E B 2637 1835 M 2648 1813 L 2626 1813 L 2637 1835 L E B 2640 1881 M 2652 1859 L 2629 1859 L 2640 1881 L E B 2649 1842 M 2660 1819 L 2638 1819 L 2649 1842 L E B 2658 1905 M 2669 1883 L 2646 1883 L 2658 1905 L E B 2659 1867 M 2671 1845 L 2648 1845 L 2659 1867 L E B 2661 1899 M 2672 1876 L 2650 1876 L 2661 1899 L E B 2668 1853 M 2679 1831 L 2657 1831 L 2668 1853 L E B 2673 1870 M 2684 1848 L 2662 1848 L 2673 1870 L E B 2685 1836 M 2697 1814 L 2674 1814 L 2685 1836 L E B 2689 1836 M 2700 1814 L 2678 1814 L 2689 1836 L E B 2692 1926 M 2704 1904 L 2681 1904 L 2692 1926 L E B 2694 1833 M 2705 1810 L 2683 1810 L 2694 1833 L E B 2696 1933 M 2707 1911 L 2684 1911 L 2696 1933 L E B 2697 1905 M 2709 1883 L 2686 1883 L 2697 1905 L E B 2701 1888 M 2712 1866 L 2690 1866 L 2701 1888 L E B 2704 1919 M 2716 1897 L 2693 1897 L 2704 1919 L E B 2711 1871 M 2723 1848 L 2700 1848 L 2711 1871 L E B 2715 1912 M 2726 1890 L 2704 1890 L 2715 1912 L E B 2725 1954 M 2736 1931 L 2714 1931 L 2725 1954 L E B 2729 1901 M 2740 1879 L 2717 1879 L 2729 1901 L E B 2732 1890 M 2743 1868 L 2721 1868 L 2732 1890 L E B 2734 1867 M 2745 1845 L 2723 1845 L 2734 1867 L E B 2742 1914 M 2754 1892 L 2731 1892 L 2742 1914 L E B 2753 1879 M 2764 1857 L 2742 1857 L 2753 1879 L E B 2756 1935 M 2768 1913 L 2745 1913 L 2756 1935 L E B 2763 1919 M 2774 1897 L 2752 1897 L 2763 1919 L E B 2767 1905 M 2778 1883 L 2755 1883 L 2767 1905 L E B 2774 1943 M 2785 1921 L 2762 1921 L 2774 1943 L E B 2777 1912 M 2788 1890 L 2766 1890 L 2777 1912 L E B 2784 1975 M 2795 1952 L 2773 1952 L 2784 1975 L E B 2789 1978 M 2800 1956 L 2778 1956 L 2789 1978 L E B 2800 2027 M 2811 2004 L 2788 2004 L 2800 2027 L E B 2801 1885 M 2813 1862 L 2790 1862 L 2801 1885 L E B 2812 1916 M 2823 1893 L 2800 1893 L 2812 1916 L E B 2822 1928 M 2833 1905 L 2811 1905 L 2822 1928 L E B 2824 1954 M 2835 1931 L 2813 1931 L 2824 1954 L E B 2829 1943 M 2840 1921 L 2818 1921 L 2829 1943 L E B 2850 1930 M 2861 1907 L 2838 1907 L 2850 1930 L E B 2853 1943 M 2864 1921 L 2842 1921 L 2853 1943 L E B 2855 1923 M 2866 1900 L 2844 1900 L 2855 1923 L E B 2858 1961 M 2870 1938 L 2847 1938 L 2858 1961 L E B 2869 1934 M 2880 1912 L 2858 1912 L 2869 1934 L E B 2881 1943 M 2892 1920 L 2870 1920 L 2881 1943 L E B 2888 1957 M 2899 1935 L 2877 1935 L 2888 1957 L E B 2890 1964 M 2901 1942 L 2878 1942 L 2890 1964 L E B 2895 2016 M 2906 1994 L 2883 1994 L 2895 2016 L E B 2902 1930 M 2913 1907 L 2890 1907 L 2902 1930 L E B 2909 1964 M 2920 1942 L 2897 1942 L 2909 1964 L E 5 Sp B 393 385 M 404 374 L 393 363 L 381 374 L 393 385 L E B 394 387 M 406 375 L 394 364 L 383 375 L 394 387 L E B 396 386 M 407 374 L 396 363 L 385 374 L 396 386 L E B 398 386 M 409 375 L 398 364 L 386 375 L 398 386 L E B 399 387 M 411 375 L 399 364 L 388 375 L 399 387 L E B 401 387 M 412 375 L 401 364 L 390 375 L 401 387 L E B 403 387 M 414 376 L 403 365 L 392 376 L 403 387 L E B 405 387 M 416 376 L 405 365 L 393 376 L 405 387 L E B 406 386 M 418 375 L 406 364 L 395 375 L 406 386 L E B 408 389 M 419 378 L 408 367 L 397 378 L 408 389 L E B 410 386 M 421 374 L 410 363 L 399 374 L 410 386 L E B 412 387 M 423 376 L 412 365 L 400 376 L 412 387 L E B 413 386 M 425 375 L 413 364 L 402 375 L 413 386 L E B 415 386 M 426 375 L 415 364 L 404 375 L 415 386 L E B 417 386 M 428 375 L 417 364 L 406 375 L 417 386 L E B 419 387 M 430 375 L 419 364 L 407 375 L 419 387 L E B 420 386 M 431 375 L 420 364 L 409 375 L 420 386 L E B 422 386 M 433 375 L 422 364 L 411 375 L 422 386 L E B 424 387 M 435 375 L 424 364 L 412 375 L 424 387 L E B 425 387 M 437 375 L 425 364 L 414 375 L 425 387 L E B 427 386 M 438 375 L 427 364 L 416 375 L 427 386 L E B 429 386 M 440 375 L 429 364 L 418 375 L 429 386 L E B 431 387 M 442 376 L 431 364 L 419 376 L 431 387 L E B 432 386 M 444 375 L 432 364 L 421 375 L 432 386 L E B 434 386 M 445 375 L 434 364 L 423 375 L 434 386 L E B 436 386 M 447 375 L 436 364 L 425 375 L 436 386 L E B 438 386 M 449 375 L 438 364 L 426 375 L 438 386 L E B 439 386 M 451 375 L 439 364 L 428 375 L 439 386 L E B 441 386 M 452 375 L 441 364 L 430 375 L 441 386 L E B 443 386 M 454 375 L 443 364 L 431 375 L 443 386 L E B 444 386 M 456 375 L 444 364 L 433 375 L 444 386 L E B 446 386 M 457 375 L 446 364 L 435 375 L 446 386 L E B 448 386 M 459 375 L 448 364 L 437 375 L 448 386 L E B 450 387 M 461 376 L 450 364 L 438 376 L 450 387 L E B 451 386 M 463 375 L 451 364 L 440 375 L 451 386 L E B 453 387 M 464 376 L 453 364 L 442 376 L 453 387 L E B 455 386 M 466 375 L 455 364 L 444 375 L 455 386 L E B 457 386 M 468 375 L 457 364 L 445 375 L 457 386 L E B 458 386 M 470 375 L 458 364 L 447 375 L 458 386 L E B 460 387 M 471 376 L 460 364 L 449 376 L 460 387 L E B 462 386 M 473 375 L 462 364 L 451 375 L 462 386 L E B 464 387 M 475 376 L 464 365 L 452 376 L 464 387 L E B 465 386 M 476 375 L 465 364 L 454 375 L 465 386 L E B 467 386 M 478 375 L 467 364 L 456 375 L 467 386 L E B 469 387 M 480 376 L 469 364 L 457 376 L 469 387 L E B 470 387 M 482 376 L 470 365 L 459 376 L 470 387 L E B 472 386 M 483 375 L 472 364 L 461 375 L 472 386 L E B 474 388 M 485 377 L 474 365 L 463 377 L 474 388 L E B 476 386 M 487 374 L 476 363 L 464 374 L 476 386 L E B 477 386 M 489 374 L 477 363 L 466 374 L 477 386 L E B 479 386 M 490 375 L 479 364 L 468 375 L 479 386 L E B 481 387 M 492 376 L 481 364 L 470 376 L 481 387 L E B 483 388 M 494 377 L 483 366 L 471 377 L 483 388 L E B 484 387 M 496 375 L 484 364 L 473 375 L 484 387 L E B 486 386 M 497 375 L 486 364 L 475 375 L 486 386 L E B 488 385 M 499 373 L 488 362 L 476 373 L 488 385 L E B 489 386 M 501 374 L 489 363 L 478 374 L 489 386 L E B 491 386 M 502 375 L 491 363 L 480 375 L 491 386 L E B 493 386 M 504 375 L 493 364 L 482 375 L 493 386 L E B 495 385 M 506 374 L 495 363 L 483 374 L 495 385 L E B 496 385 M 508 373 L 496 362 L 485 373 L 496 385 L E B 498 384 M 509 373 L 498 362 L 487 373 L 498 384 L E B 500 387 M 511 376 L 500 365 L 489 376 L 500 387 L E B 502 385 M 513 373 L 502 362 L 490 373 L 502 385 L E B 503 386 M 515 374 L 503 363 L 492 374 L 503 386 L E B 505 388 M 516 377 L 505 366 L 494 377 L 505 388 L E B 507 387 M 518 376 L 507 365 L 496 376 L 507 387 L E B 508 384 M 520 373 L 508 362 L 497 373 L 508 384 L E B 510 383 M 521 372 L 510 361 L 499 372 L 510 383 L E B 512 388 M 523 377 L 512 366 L 501 377 L 512 388 L E B 514 389 M 525 377 L 514 366 L 502 377 L 514 389 L E B 515 386 M 527 374 L 515 363 L 504 374 L 515 386 L E B 517 386 M 528 374 L 517 363 L 506 374 L 517 386 L E B 519 386 M 530 375 L 519 364 L 508 375 L 519 386 L E B 521 387 M 532 376 L 521 364 L 509 376 L 521 387 L E B 522 386 M 534 375 L 522 364 L 511 375 L 522 386 L E B 524 385 M 535 374 L 524 363 L 513 374 L 524 385 L E B 526 387 M 537 376 L 526 365 L 515 376 L 526 387 L E B 528 386 M 539 375 L 528 364 L 516 375 L 528 386 L E B 529 388 M 541 377 L 529 366 L 518 377 L 529 388 L E B 531 386 M 542 375 L 531 363 L 520 375 L 531 386 L E B 533 386 M 544 374 L 533 363 L 521 374 L 533 386 L E B 534 386 M 546 375 L 534 364 L 523 375 L 534 386 L E B 536 394 M 547 382 L 536 371 L 525 382 L 536 394 L E B 538 387 M 549 376 L 538 365 L 527 376 L 538 387 L E B 540 386 M 551 375 L 540 364 L 528 375 L 540 386 L E B 541 387 M 553 376 L 541 364 L 530 376 L 541 387 L E B 543 402 M 554 390 L 543 379 L 532 390 L 543 402 L E B 545 393 M 556 382 L 545 371 L 534 382 L 545 393 L E B 548 386 M 560 375 L 548 364 L 537 375 L 548 386 L E B 552 383 M 563 372 L 552 361 L 541 372 L 552 383 L E B 555 386 M 566 375 L 555 364 L 544 375 L 555 386 L E B 557 386 M 568 374 L 557 363 L 546 374 L 557 386 L E B 559 387 M 570 376 L 559 365 L 547 376 L 559 387 L E B 562 386 M 573 375 L 562 364 L 551 375 L 562 386 L E B 566 386 M 577 374 L 566 363 L 554 374 L 566 386 L E B 567 384 M 579 373 L 567 361 L 556 373 L 567 384 L E B 569 386 M 580 375 L 569 364 L 558 375 L 569 386 L E B 571 382 M 582 371 L 571 360 L 560 371 L 571 382 L E B 573 386 M 584 374 L 573 363 L 561 374 L 573 386 L E B 574 386 M 585 374 L 574 363 L 563 374 L 574 386 L E B 576 387 M 587 375 L 576 364 L 565 375 L 576 387 L E B 578 386 M 589 374 L 578 363 L 566 374 L 578 386 L E B 583 386 M 594 375 L 583 364 L 572 375 L 583 386 L E B 585 384 M 596 373 L 585 362 L 573 373 L 585 384 L E B 586 386 M 598 375 L 586 363 L 575 375 L 586 386 L E B 588 386 M 599 374 L 588 363 L 577 374 L 588 386 L E B 590 387 M 601 376 L 590 364 L 579 376 L 590 387 L E B 592 385 M 603 374 L 592 363 L 580 374 L 592 385 L E B 595 386 M 606 374 L 595 363 L 584 374 L 595 386 L E B 597 386 M 608 375 L 597 364 L 585 375 L 597 386 L E B 598 386 M 610 374 L 598 363 L 587 374 L 598 386 L E B 600 382 M 611 371 L 600 360 L 589 371 L 600 382 L E B 602 389 M 613 377 L 602 366 L 591 377 L 602 389 L E B 604 386 M 615 375 L 604 364 L 592 375 L 604 386 L E B 605 385 M 617 374 L 605 363 L 594 374 L 605 385 L E B 607 387 M 618 375 L 607 364 L 596 375 L 607 387 L E B 611 387 M 622 376 L 611 364 L 599 376 L 611 387 L E B 612 386 M 624 374 L 612 363 L 601 374 L 612 386 L E B 614 385 M 625 374 L 614 362 L 603 374 L 614 385 L E B 618 386 M 629 375 L 618 364 L 606 375 L 618 386 L E B 621 386 M 632 375 L 621 364 L 610 375 L 621 386 L E B 623 385 M 634 374 L 623 363 L 611 374 L 623 385 L E B 624 386 M 636 375 L 624 363 L 613 375 L 624 386 L E B 626 385 M 637 374 L 626 363 L 615 374 L 626 385 L E B 628 388 M 639 377 L 628 365 L 617 377 L 628 388 L E B 630 388 M 641 377 L 630 365 L 618 377 L 630 388 L E B 631 386 M 643 374 L 631 363 L 620 374 L 631 386 L E B 633 385 M 644 374 L 633 363 L 622 374 L 633 385 L E B 635 386 M 646 374 L 635 363 L 624 374 L 635 386 L E B 638 385 M 650 374 L 638 363 L 627 374 L 638 385 L E B 640 385 M 651 374 L 640 363 L 629 374 L 640 385 L E B 642 386 M 653 375 L 642 363 L 630 375 L 642 386 L E B 645 385 M 656 374 L 645 363 L 634 374 L 645 385 L E B 647 385 M 658 374 L 647 363 L 636 374 L 647 385 L E B 649 385 M 660 374 L 649 362 L 637 374 L 649 385 L E B 650 386 M 662 374 L 650 363 L 639 374 L 650 386 L E B 652 388 M 663 376 L 652 365 L 641 376 L 652 388 L E B 656 386 M 667 374 L 656 363 L 644 374 L 656 386 L E B 657 386 M 669 374 L 657 363 L 646 374 L 657 386 L E B 659 386 M 670 375 L 659 363 L 648 375 L 659 386 L E B 661 386 M 672 374 L 661 363 L 650 374 L 661 386 L E B 666 386 M 677 374 L 666 363 L 655 374 L 666 386 L E B 669 382 M 681 371 L 669 360 L 658 371 L 669 382 L E B 671 386 M 682 374 L 671 363 L 660 374 L 671 386 L E B 673 386 M 684 375 L 673 364 L 662 375 L 673 386 L E B 676 386 M 688 374 L 676 363 L 665 374 L 676 386 L E B 680 386 M 691 375 L 680 364 L 669 375 L 680 386 L E B 687 386 M 698 374 L 687 363 L 675 374 L 687 386 L E B 692 384 M 703 373 L 692 361 L 681 373 L 692 384 L E B 694 384 M 705 373 L 694 362 L 682 373 L 694 384 L E B 695 386 M 707 374 L 695 363 L 684 374 L 695 386 L E B 697 382 M 708 371 L 697 360 L 686 371 L 697 382 L E B 701 382 M 712 371 L 701 360 L 689 371 L 701 382 L E B 702 386 M 714 374 L 702 363 L 691 374 L 702 386 L E B 704 382 M 715 371 L 704 360 L 693 371 L 704 382 L E B 706 384 M 717 373 L 706 361 L 695 373 L 706 384 L E B 713 386 M 724 374 L 713 363 L 701 374 L 713 386 L E B 714 384 M 726 373 L 714 362 L 703 373 L 714 384 L E B 716 386 M 727 374 L 716 363 L 705 374 L 716 386 L E B 720 384 M 731 373 L 720 362 L 708 373 L 720 384 L E B 721 385 M 733 374 L 721 362 L 710 374 L 721 385 L E B 723 386 M 734 374 L 723 363 L 712 374 L 723 386 L E B 725 385 M 736 374 L 725 362 L 714 374 L 725 385 L E B 727 385 M 738 374 L 727 362 L 715 374 L 727 385 L E B 728 387 M 740 376 L 728 365 L 717 376 L 728 387 L E B 730 384 M 741 373 L 730 361 L 719 373 L 730 384 L E B 733 386 M 745 374 L 733 363 L 722 374 L 733 386 L E B 735 386 M 746 374 L 735 363 L 724 374 L 735 386 L E B 737 385 M 748 374 L 737 362 L 726 374 L 737 385 L E B 739 387 M 750 375 L 739 364 L 727 375 L 739 387 L E B 740 386 M 752 374 L 740 363 L 729 374 L 740 386 L E B 742 386 M 753 374 L 742 363 L 731 374 L 742 386 L E B 747 385 M 759 374 L 747 362 L 736 374 L 747 385 L E B 749 384 M 760 373 L 749 361 L 738 373 L 749 384 L E B 751 386 M 762 374 L 751 363 L 739 374 L 751 386 L E B 752 397 M 764 386 L 752 374 L 741 386 L 752 397 L E B 754 386 M 765 374 L 754 363 L 743 374 L 754 386 L E B 756 387 M 767 376 L 756 364 L 745 376 L 756 387 L E B 761 387 M 772 375 L 761 364 L 750 375 L 761 387 L E B 763 386 M 774 374 L 763 363 L 752 374 L 763 386 L E B 770 384 M 781 373 L 770 361 L 759 373 L 770 384 L E B 772 385 M 783 374 L 772 362 L 760 374 L 772 385 L E B 773 386 M 784 375 L 773 364 L 762 375 L 773 386 L E B 777 385 M 788 373 L 777 362 L 765 373 L 777 385 L E B 778 386 M 790 374 L 778 363 L 767 374 L 778 386 L E B 780 382 M 791 371 L 780 360 L 769 371 L 780 382 L E B 782 385 M 793 374 L 782 362 L 771 374 L 782 385 L E B 787 386 M 798 374 L 787 363 L 776 374 L 787 386 L E B 789 386 M 800 374 L 789 363 L 778 374 L 789 386 L E B 791 384 M 802 373 L 791 361 L 779 373 L 791 384 L E B 797 386 M 809 374 L 797 363 L 786 374 L 797 386 L E B 799 389 M 810 378 L 799 367 L 788 378 L 799 389 L E B 801 401 M 812 389 L 801 378 L 790 389 L 801 401 L E B 804 385 M 816 373 L 804 362 L 793 373 L 804 385 L E B 806 385 M 817 374 L 806 362 L 795 374 L 806 385 L E B 808 384 M 819 373 L 808 361 L 797 373 L 808 384 L E B 810 386 M 821 374 L 810 363 L 798 374 L 810 386 L E B 811 384 M 823 373 L 811 361 L 800 373 L 811 384 L E B 813 384 M 824 373 L 813 361 L 802 373 L 813 384 L E B 815 386 M 826 374 L 815 363 L 804 374 L 815 386 L E B 817 386 M 828 374 L 817 363 L 805 374 L 817 386 L E B 818 385 M 829 373 L 818 362 L 807 373 L 818 385 L E B 820 385 M 831 374 L 820 362 L 809 374 L 820 385 L E B 825 384 M 836 373 L 825 362 L 814 373 L 825 384 L E B 827 386 M 838 374 L 827 363 L 816 374 L 827 386 L E B 832 386 M 843 374 L 832 363 L 821 374 L 832 386 L E B 834 384 M 845 373 L 834 362 L 823 373 L 834 384 L E B 836 386 M 847 374 L 836 363 L 824 374 L 836 386 L E B 837 386 M 849 374 L 837 363 L 826 374 L 837 386 L E B 839 386 M 850 374 L 839 363 L 828 374 L 839 386 L E B 841 386 M 852 374 L 841 363 L 829 374 L 841 386 L E B 844 386 M 855 374 L 844 363 L 833 374 L 844 386 L E B 848 382 M 859 371 L 848 360 L 836 371 L 848 382 L E B 849 386 M 861 374 L 849 363 L 838 374 L 849 386 L E B 853 386 M 864 374 L 853 363 L 842 374 L 853 386 L E B 856 385 M 868 374 L 856 363 L 845 374 L 856 385 L E B 860 386 M 871 374 L 860 363 L 849 374 L 860 386 L E B 861 386 M 873 374 L 861 363 L 850 374 L 861 386 L E B 865 386 M 876 374 L 865 363 L 854 374 L 865 386 L E B 867 385 M 878 374 L 867 362 L 855 374 L 867 385 L E B 868 386 M 880 374 L 868 363 L 857 374 L 868 386 L E B 872 386 M 883 374 L 872 363 L 861 374 L 872 386 L E B 879 384 M 890 373 L 879 361 L 868 373 L 879 384 L E B 881 384 M 892 373 L 881 361 L 869 373 L 881 384 L E B 891 386 M 902 374 L 891 363 L 880 374 L 891 386 L E B 894 386 M 906 374 L 894 363 L 883 374 L 894 386 L E B 898 386 M 909 374 L 898 363 L 887 374 L 898 386 L E B 901 385 M 913 374 L 901 363 L 890 374 L 901 385 L E B 903 386 M 914 374 L 903 363 L 892 374 L 903 386 L E B 905 386 M 916 374 L 905 363 L 894 374 L 905 386 L E B 906 386 M 918 374 L 906 363 L 895 374 L 906 386 L E B 908 386 M 919 375 L 908 364 L 897 375 L 908 386 L E B 912 386 M 923 374 L 912 363 L 900 374 L 912 386 L E B 915 386 M 926 375 L 915 364 L 904 375 L 915 386 L E B 919 386 M 930 374 L 919 363 L 907 374 L 919 386 L E B 922 386 M 933 374 L 922 363 L 911 374 L 922 386 L E B 926 386 M 937 374 L 926 363 L 914 374 L 926 386 L E B 929 386 M 940 374 L 929 363 L 918 374 L 929 386 L E B 931 386 M 942 374 L 931 363 L 919 374 L 931 386 L E B 932 386 M 944 374 L 932 363 L 921 374 L 932 386 L E B 938 386 M 949 374 L 938 363 L 926 374 L 938 386 L E B 941 384 M 952 373 L 941 361 L 930 373 L 941 384 L E B 943 386 M 954 374 L 943 363 L 932 374 L 943 386 L E B 945 386 M 956 374 L 945 363 L 933 374 L 945 386 L E B 948 386 M 959 374 L 948 363 L 937 374 L 948 386 L E B 950 387 M 961 375 L 950 364 L 938 375 L 950 387 L E B 951 386 M 963 374 L 951 363 L 940 374 L 951 386 L E B 953 382 M 964 371 L 953 360 L 942 371 L 953 382 L E B 957 386 M 968 374 L 957 363 L 945 374 L 957 386 L E B 960 382 M 971 371 L 960 360 L 949 371 L 960 382 L E B 962 384 M 973 373 L 962 361 L 951 373 L 962 384 L E B 964 384 M 975 373 L 964 362 L 952 373 L 964 384 L E B 965 384 M 977 373 L 965 361 L 954 373 L 965 384 L E B 967 386 M 978 374 L 967 363 L 956 374 L 967 386 L E B 969 386 M 980 374 L 969 363 L 958 374 L 969 386 L E B 971 388 M 982 377 L 971 366 L 959 377 L 971 388 L E B 974 386 M 985 375 L 974 363 L 963 375 L 974 386 L E B 976 382 M 987 371 L 976 360 L 964 371 L 976 382 L E B 977 386 M 989 374 L 977 363 L 966 374 L 977 386 L E B 983 385 M 994 374 L 983 363 L 971 374 L 983 385 L E B 984 386 M 996 375 L 984 364 L 973 375 L 984 386 L E B 986 382 M 997 371 L 986 360 L 975 371 L 986 382 L E B 990 386 M 1001 374 L 990 363 L 978 374 L 990 386 L E B 991 392 M 1003 380 L 991 369 L 980 380 L 991 392 L E B 993 386 M 1004 374 L 993 363 L 982 374 L 993 386 L E B 995 384 M 1006 373 L 995 361 L 983 373 L 995 384 L E B 996 386 M 1008 375 L 996 363 L 985 375 L 996 386 L E B 1002 389 M 1013 378 L 1002 367 L 990 378 L 1002 389 L E B 1005 386 M 1016 374 L 1005 363 L 994 374 L 1005 386 L E B 1009 386 M 1020 375 L 1009 363 L 997 375 L 1009 386 L E B 1012 384 M 1023 373 L 1012 361 L 1001 373 L 1012 384 L E B 1014 387 M 1025 376 L 1014 365 L 1003 376 L 1014 387 L E B 1016 386 M 1027 374 L 1016 363 L 1004 374 L 1016 386 L E B 1017 386 M 1028 374 L 1017 363 L 1006 374 L 1017 386 L E B 1021 384 M 1032 373 L 1021 361 L 1009 373 L 1021 384 L E B 1022 386 M 1034 374 L 1022 363 L 1011 374 L 1022 386 L E B 1024 386 M 1035 374 L 1024 363 L 1013 374 L 1024 386 L E B 1026 386 M 1037 374 L 1026 363 L 1015 374 L 1026 386 L E B 1033 386 M 1044 375 L 1033 364 L 1022 375 L 1033 386 L E B 1036 382 M 1048 371 L 1036 360 L 1025 371 L 1036 382 L E B 1040 386 M 1051 374 L 1040 363 L 1028 374 L 1040 386 L E B 1047 386 M 1058 374 L 1047 363 L 1035 374 L 1047 386 L E B 1050 382 M 1061 371 L 1050 360 L 1039 371 L 1050 382 L E B 1052 386 M 1063 374 L 1052 363 L 1041 374 L 1052 386 L E B 1054 386 M 1065 374 L 1054 363 L 1042 374 L 1054 386 L E B 1059 386 M 1070 374 L 1059 363 L 1048 374 L 1059 386 L E B 1062 386 M 1073 374 L 1062 363 L 1051 374 L 1062 386 L E B 1066 391 M 1077 379 L 1066 368 L 1054 379 L 1066 391 L E B 1067 385 M 1079 373 L 1067 362 L 1056 373 L 1067 385 L E B 1073 386 M 1084 374 L 1073 363 L 1061 374 L 1073 386 L E B 1074 386 M 1086 374 L 1074 363 L 1063 374 L 1074 386 L E B 1076 386 M 1087 374 L 1076 363 L 1065 374 L 1076 386 L E B 1080 386 M 1091 374 L 1080 363 L 1068 374 L 1080 386 L E B 1081 386 M 1093 374 L 1081 363 L 1070 374 L 1081 386 L E B 1083 386 M 1094 374 L 1083 363 L 1072 374 L 1083 386 L E B 1086 386 M 1098 374 L 1086 363 L 1075 374 L 1086 386 L E B 1090 386 M 1101 374 L 1090 363 L 1079 374 L 1090 386 L E B 1092 386 M 1103 374 L 1092 363 L 1080 374 L 1092 386 L E B 1093 386 M 1105 374 L 1093 363 L 1082 374 L 1093 386 L E B 1095 385 M 1106 373 L 1095 362 L 1084 373 L 1095 385 L E B 1099 386 M 1110 374 L 1099 363 L 1087 374 L 1099 386 L E B 1100 386 M 1112 374 L 1100 363 L 1089 374 L 1100 386 L E B 1102 386 M 1113 374 L 1102 363 L 1091 374 L 1102 386 L E B 1105 389 M 1117 378 L 1105 367 L 1094 378 L 1105 389 L E B 1107 386 M 1118 374 L 1107 363 L 1096 374 L 1107 386 L E B 1109 386 M 1120 374 L 1109 363 L 1098 374 L 1109 386 L E B 1116 383 M 1127 372 L 1116 361 L 1105 372 L 1116 383 L E B 1121 386 M 1132 374 L 1121 363 L 1110 374 L 1121 386 L E B 1123 384 M 1134 373 L 1123 362 L 1112 373 L 1123 384 L E B 1125 386 M 1136 374 L 1125 363 L 1113 374 L 1125 386 L E B 1126 387 M 1137 376 L 1126 364 L 1115 376 L 1126 387 L E B 1130 386 M 1141 374 L 1130 363 L 1118 374 L 1130 386 L E B 1131 386 M 1143 374 L 1131 363 L 1120 374 L 1131 386 L E B 1133 386 M 1144 374 L 1133 363 L 1122 374 L 1133 386 L E B 1135 386 M 1146 374 L 1135 363 L 1124 374 L 1135 386 L E B 1137 387 M 1148 375 L 1137 364 L 1125 375 L 1137 387 L E B 1140 389 M 1151 378 L 1140 367 L 1129 378 L 1140 389 L E B 1142 386 M 1153 374 L 1142 363 L 1131 374 L 1142 386 L E B 1144 386 M 1155 374 L 1144 363 L 1132 374 L 1144 386 L E B 1145 386 M 1157 374 L 1145 363 L 1134 374 L 1145 386 L E B 1149 431 M 1160 419 L 1149 408 L 1137 419 L 1149 431 L E B 1150 386 M 1162 375 L 1150 364 L 1139 375 L 1150 386 L E B 1156 389 M 1167 378 L 1156 367 L 1144 378 L 1156 389 L E B 1157 384 M 1169 373 L 1157 362 L 1146 373 L 1157 384 L E B 1161 382 M 1172 371 L 1161 360 L 1150 371 L 1161 382 L E B 1163 384 M 1174 373 L 1163 361 L 1151 373 L 1163 384 L E B 1164 395 M 1176 384 L 1164 373 L 1153 384 L 1164 395 L E B 1166 386 M 1177 374 L 1166 363 L 1155 374 L 1166 386 L E B 1168 386 M 1179 374 L 1168 363 L 1157 374 L 1168 386 L E B 1170 384 M 1181 373 L 1170 361 L 1158 373 L 1170 384 L E B 1171 434 M 1182 423 L 1171 412 L 1160 423 L 1171 434 L E B 1173 386 M 1184 374 L 1173 363 L 1162 374 L 1173 386 L E B 1175 386 M 1186 374 L 1175 363 L 1163 374 L 1175 386 L E B 1176 386 M 1188 375 L 1176 364 L 1165 375 L 1176 386 L E B 1178 386 M 1189 374 L 1178 363 L 1167 374 L 1178 386 L E B 1180 386 M 1191 374 L 1180 363 L 1169 374 L 1180 386 L E B 1183 384 M 1195 373 L 1183 361 L 1172 373 L 1183 384 L E B 1185 386 M 1196 375 L 1185 364 L 1174 375 L 1185 386 L E B 1187 384 M 1198 373 L 1187 361 L 1176 373 L 1187 384 L E B 1189 386 M 1200 374 L 1189 363 L 1177 374 L 1189 386 L E B 1190 389 M 1202 378 L 1190 367 L 1179 378 L 1190 389 L E B 1192 386 M 1203 375 L 1192 364 L 1181 375 L 1192 386 L E B 1194 382 M 1205 371 L 1194 360 L 1182 371 L 1194 382 L E B 1195 386 M 1207 374 L 1195 363 L 1184 374 L 1195 386 L E B 1197 383 M 1208 372 L 1197 361 L 1186 372 L 1197 383 L E B 1199 384 M 1210 373 L 1199 362 L 1188 373 L 1199 384 L E B 1201 387 M 1212 376 L 1201 365 L 1189 376 L 1201 387 L E B 1202 383 M 1214 372 L 1202 361 L 1191 372 L 1202 383 L E B 1204 386 M 1215 374 L 1204 363 L 1193 374 L 1204 386 L E B 1206 410 M 1217 399 L 1206 387 L 1195 399 L 1206 410 L E B 1208 386 M 1219 374 L 1208 363 L 1196 374 L 1208 386 L E B 1209 388 M 1221 376 L 1209 365 L 1198 376 L 1209 388 L E B 1211 394 M 1222 382 L 1211 371 L 1200 382 L 1211 394 L E B 1213 386 M 1224 374 L 1213 363 L 1202 374 L 1213 386 L E B 1214 382 M 1226 371 L 1214 360 L 1203 371 L 1214 382 L E B 1216 384 M 1227 373 L 1216 361 L 1205 373 L 1216 384 L E B 1218 382 M 1229 371 L 1218 360 L 1207 371 L 1218 382 L E B 1220 387 M 1231 375 L 1220 364 L 1208 375 L 1220 387 L E B 1221 386 M 1233 374 L 1221 363 L 1210 374 L 1221 386 L E B 1223 402 M 1234 390 L 1223 379 L 1212 390 L 1223 402 L E B 1225 386 M 1236 374 L 1225 363 L 1214 374 L 1225 386 L E B 1227 384 M 1238 373 L 1227 362 L 1215 373 L 1227 384 L E B 1228 395 M 1240 383 L 1228 372 L 1217 383 L 1228 395 L E B 1230 386 M 1241 374 L 1230 363 L 1219 374 L 1230 386 L E B 1232 386 M 1243 374 L 1232 363 L 1221 374 L 1232 386 L E B 1234 386 M 1245 374 L 1234 363 L 1222 374 L 1234 386 L E B 1235 390 M 1247 378 L 1235 367 L 1224 378 L 1235 390 L E B 1237 384 M 1248 373 L 1237 362 L 1226 373 L 1237 384 L E B 1239 387 M 1250 376 L 1239 365 L 1227 376 L 1239 387 L E B 1240 387 M 1252 376 L 1240 364 L 1229 376 L 1240 387 L E B 1242 386 M 1253 374 L 1242 363 L 1231 374 L 1242 386 L E B 1244 387 M 1255 375 L 1244 364 L 1233 375 L 1244 387 L E B 1246 386 M 1257 374 L 1246 363 L 1234 374 L 1246 386 L E B 1247 384 M 1259 373 L 1247 362 L 1236 373 L 1247 384 L E B 1249 384 M 1260 373 L 1249 362 L 1238 373 L 1249 384 L E B 1251 384 M 1262 373 L 1251 362 L 1240 373 L 1251 384 L E B 1254 386 M 1266 375 L 1254 364 L 1243 375 L 1254 386 L E B 1256 386 M 1267 375 L 1256 363 L 1245 375 L 1256 386 L E B 1258 403 M 1269 392 L 1258 380 L 1247 392 L 1258 403 L E B 1259 386 M 1271 374 L 1259 363 L 1248 374 L 1259 386 L E B 1261 386 M 1272 374 L 1261 363 L 1250 374 L 1261 386 L E B 1263 386 M 1274 374 L 1263 363 L 1252 374 L 1263 386 L E B 1265 387 M 1276 375 L 1265 364 L 1253 375 L 1265 387 L E B 1268 387 M 1279 375 L 1268 364 L 1257 375 L 1268 387 L E B 1270 386 M 1281 374 L 1270 363 L 1259 374 L 1270 386 L E B 1273 387 M 1285 376 L 1273 365 L 1262 376 L 1273 387 L E B 1275 387 M 1286 375 L 1275 364 L 1264 375 L 1275 387 L E B 1277 389 M 1288 378 L 1277 367 L 1266 378 L 1277 389 L E B 1280 386 M 1292 374 L 1280 363 L 1269 374 L 1280 386 L E B 1282 384 M 1293 373 L 1282 361 L 1271 373 L 1282 384 L E B 1284 386 M 1295 374 L 1284 363 L 1272 374 L 1284 386 L E B 1285 384 M 1297 373 L 1285 361 L 1274 373 L 1285 384 L E B 1287 386 M 1298 374 L 1287 363 L 1276 374 L 1287 386 L E B 1289 385 M 1300 373 L 1289 362 L 1278 373 L 1289 385 L E B 1291 386 M 1302 374 L 1291 363 L 1279 374 L 1291 386 L E B 1292 384 M 1304 373 L 1292 361 L 1281 373 L 1292 384 L E B 1296 384 M 1307 373 L 1296 361 L 1285 373 L 1296 384 L E B 1299 384 M 1311 373 L 1299 362 L 1288 373 L 1299 384 L E B 1303 384 M 1314 373 L 1303 361 L 1291 373 L 1303 384 L E B 1304 382 M 1316 371 L 1304 360 L 1293 371 L 1304 382 L E B 1306 386 M 1317 374 L 1306 363 L 1295 374 L 1306 386 L E B 1308 386 M 1319 374 L 1308 363 L 1297 374 L 1308 386 L E B 1310 386 M 1321 374 L 1310 363 L 1298 374 L 1310 386 L E B 1311 386 M 1323 374 L 1311 363 L 1300 374 L 1311 386 L E B 1313 387 M 1324 376 L 1313 365 L 1302 376 L 1313 387 L E B 1315 382 M 1326 371 L 1315 360 L 1304 371 L 1315 382 L E B 1317 382 M 1328 371 L 1317 360 L 1305 371 L 1317 382 L E B 1320 386 M 1331 374 L 1320 363 L 1309 374 L 1320 386 L E B 1322 382 M 1333 371 L 1322 360 L 1311 371 L 1322 382 L E B 1324 382 M 1335 371 L 1324 360 L 1312 371 L 1324 382 L E B 1325 382 M 1336 371 L 1325 360 L 1314 371 L 1325 382 L E B 1327 386 M 1338 374 L 1327 363 L 1316 374 L 1327 386 L E B 1329 386 M 1340 374 L 1329 363 L 1317 374 L 1329 386 L E B 1330 384 M 1342 373 L 1330 361 L 1319 373 L 1330 384 L E B 1332 382 M 1343 371 L 1332 360 L 1321 371 L 1332 382 L E B 1334 386 M 1345 374 L 1334 363 L 1323 374 L 1334 386 L E B 1336 386 M 1347 374 L 1336 363 L 1324 374 L 1336 386 L E B 1337 382 M 1349 371 L 1337 360 L 1326 371 L 1337 382 L E B 1339 386 M 1350 374 L 1339 363 L 1328 374 L 1339 386 L E B 1341 386 M 1352 374 L 1341 363 L 1330 374 L 1341 386 L E B 1344 386 M 1356 374 L 1344 363 L 1333 374 L 1344 386 L E B 1349 386 M 1361 374 L 1349 363 L 1338 374 L 1349 386 L E B 1351 384 M 1362 373 L 1351 362 L 1340 373 L 1351 384 L E B 1355 386 M 1366 374 L 1355 363 L 1343 374 L 1355 386 L E B 1356 386 M 1368 374 L 1356 363 L 1345 374 L 1356 386 L E B 1358 384 M 1369 373 L 1358 361 L 1347 373 L 1358 384 L E B 1362 386 M 1373 374 L 1362 363 L 1350 374 L 1362 386 L E B 1363 384 M 1375 373 L 1363 362 L 1352 373 L 1363 384 L E B 1365 386 M 1376 374 L 1365 363 L 1354 374 L 1365 386 L E B 1369 384 M 1380 373 L 1369 361 L 1357 373 L 1369 384 L E B 1370 386 M 1381 374 L 1370 363 L 1359 374 L 1370 386 L E B 1372 401 M 1383 389 L 1372 378 L 1361 389 L 1372 401 L E B 1377 382 M 1388 371 L 1377 360 L 1366 371 L 1377 382 L E B 1379 386 M 1390 374 L 1379 363 L 1368 374 L 1379 386 L E B 1381 384 M 1392 373 L 1381 361 L 1369 373 L 1381 384 L E B 1382 386 M 1394 374 L 1382 363 L 1371 374 L 1382 386 L E B 1389 394 M 1401 383 L 1389 372 L 1378 383 L 1389 394 L E B 1393 386 M 1404 374 L 1393 363 L 1381 374 L 1393 386 L E B 1394 382 M 1406 371 L 1394 360 L 1383 371 L 1394 382 L E B 1396 386 M 1407 374 L 1396 363 L 1385 374 L 1396 386 L E B 1400 387 M 1411 376 L 1400 365 L 1388 376 L 1400 387 L E B 1403 386 M 1414 374 L 1403 363 L 1392 374 L 1403 386 L E B 1405 384 M 1416 373 L 1405 361 L 1394 373 L 1405 384 L E B 1407 383 M 1418 372 L 1407 360 L 1395 372 L 1407 383 L E B 1413 386 M 1425 374 L 1413 363 L 1402 374 L 1413 386 L E B 1419 386 M 1430 374 L 1419 363 L 1407 374 L 1419 386 L E B 1420 386 M 1432 374 L 1420 363 L 1409 374 L 1420 386 L E B 1427 387 M 1439 375 L 1427 364 L 1416 375 L 1427 387 L E B 1433 408 M 1444 397 L 1433 386 L 1421 397 L 1433 408 L E B 1434 386 M 1446 374 L 1434 363 L 1423 374 L 1434 386 L E B 1436 386 M 1447 374 L 1436 363 L 1425 374 L 1436 386 L E B 1445 386 M 1456 374 L 1445 363 L 1433 374 L 1445 386 L E B 1448 384 M 1459 373 L 1448 361 L 1437 373 L 1448 384 L E B 1452 382 M 1463 371 L 1452 360 L 1440 371 L 1452 382 L E B 1457 382 M 1468 371 L 1457 360 L 1446 371 L 1457 382 L E B 1458 382 M 1470 371 L 1458 360 L 1447 371 L 1458 382 L E B 1460 382 M 1471 371 L 1460 360 L 1449 371 L 1460 382 L E B 1462 384 M 1473 373 L 1462 361 L 1451 373 L 1462 384 L E B 1465 392 M 1477 381 L 1465 370 L 1454 381 L 1465 392 L E B 1467 386 M 1478 374 L 1467 363 L 1456 374 L 1467 386 L E B 1469 387 M 1480 376 L 1469 365 L 1458 376 L 1469 387 L E B 1476 384 M 1487 373 L 1476 362 L 1465 373 L 1476 384 L E B 1478 382 M 1489 371 L 1478 360 L 1466 371 L 1478 382 L E B 1481 386 M 1492 374 L 1481 363 L 1470 374 L 1481 386 L E B 1483 387 M 1494 375 L 1483 364 L 1471 375 L 1483 387 L E B 1484 392 M 1496 381 L 1484 370 L 1473 381 L 1484 392 L E B 1488 386 M 1499 374 L 1488 363 L 1477 374 L 1488 386 L E B 1491 382 M 1503 371 L 1491 360 L 1480 371 L 1491 382 L E B 1495 389 M 1506 378 L 1495 367 L 1484 378 L 1495 389 L E B 1497 386 M 1508 374 L 1497 363 L 1485 374 L 1497 386 L E B 1503 386 M 1515 375 L 1503 364 L 1492 375 L 1503 386 L E B 1505 382 M 1516 371 L 1505 360 L 1494 371 L 1505 382 L E B 1509 386 M 1520 374 L 1509 363 L 1497 374 L 1509 386 L E B 1510 386 M 1522 374 L 1510 363 L 1499 374 L 1510 386 L E B 1512 386 M 1523 374 L 1512 363 L 1501 374 L 1512 386 L E B 1516 386 M 1527 375 L 1516 364 L 1504 375 L 1516 386 L E B 1521 386 M 1532 374 L 1521 363 L 1510 374 L 1521 386 L E B 1523 389 M 1534 378 L 1523 367 L 1511 378 L 1523 389 L E B 1524 382 M 1535 371 L 1524 360 L 1513 371 L 1524 382 L E B 1526 386 M 1537 374 L 1526 363 L 1515 374 L 1526 386 L E B 1528 386 M 1539 375 L 1528 364 L 1516 375 L 1528 386 L E B 1529 386 M 1541 374 L 1529 363 L 1518 374 L 1529 386 L E B 1531 385 M 1542 374 L 1531 363 L 1520 374 L 1531 385 L E B 1533 386 M 1544 374 L 1533 363 L 1522 374 L 1533 386 L E B 1535 410 M 1546 399 L 1535 387 L 1523 399 L 1535 410 L E B 1536 386 M 1548 374 L 1536 363 L 1525 374 L 1536 386 L E B 1538 386 M 1549 374 L 1538 363 L 1527 374 L 1538 386 L E B 1540 387 M 1551 376 L 1540 365 L 1529 376 L 1540 387 L E B 1542 386 M 1553 374 L 1542 363 L 1530 374 L 1542 386 L E B 1545 384 M 1556 373 L 1545 361 L 1534 373 L 1545 384 L E B 1555 382 M 1567 371 L 1555 360 L 1544 371 L 1555 382 L E B 1561 386 M 1572 374 L 1561 363 L 1549 374 L 1561 386 L E B 1562 386 M 1574 374 L 1562 363 L 1551 374 L 1562 386 L E B 1573 382 M 1584 371 L 1573 360 L 1561 371 L 1573 382 L E B 1574 386 M 1586 374 L 1574 363 L 1563 374 L 1574 386 L E B 1576 386 M 1587 374 L 1576 363 L 1565 374 L 1576 386 L E B 1580 386 M 1591 374 L 1580 363 L 1568 374 L 1580 386 L E B 1583 389 M 1594 378 L 1583 367 L 1572 378 L 1583 389 L E B 1593 410 M 1605 399 L 1593 387 L 1582 399 L 1593 410 L E B 1595 382 M 1606 371 L 1595 360 L 1584 371 L 1595 382 L E B 1597 386 M 1608 374 L 1597 363 L 1586 374 L 1597 386 L E B 1599 385 M 1610 373 L 1599 362 L 1587 373 L 1599 385 L E B 1604 386 M 1615 374 L 1604 363 L 1593 374 L 1604 386 L E B 1609 386 M 1620 374 L 1609 363 L 1598 374 L 1609 386 L E B 1611 387 M 1622 376 L 1611 365 L 1600 376 L 1611 387 L E B 1614 386 M 1625 374 L 1614 363 L 1603 374 L 1614 386 L E B 1619 386 M 1631 374 L 1619 363 L 1608 374 L 1619 386 L E B 1621 386 M 1632 374 L 1621 363 L 1610 374 L 1621 386 L E B 1623 386 M 1634 374 L 1623 363 L 1612 374 L 1623 386 L E B 1628 386 M 1639 374 L 1628 363 L 1617 374 L 1628 386 L E B 1630 389 M 1641 378 L 1630 367 L 1619 378 L 1630 389 L E B 1632 386 M 1643 374 L 1632 363 L 1620 374 L 1632 386 L E B 1638 386 M 1650 374 L 1638 363 L 1627 374 L 1638 386 L E B 1645 386 M 1657 374 L 1645 363 L 1634 374 L 1645 386 L E B 1649 384 M 1660 373 L 1649 361 L 1638 373 L 1649 384 L E B 1656 382 M 1667 371 L 1656 360 L 1645 371 L 1656 382 L E B 1659 386 M 1670 374 L 1659 363 L 1648 374 L 1659 386 L E B 1663 389 M 1674 378 L 1663 367 L 1651 378 L 1663 389 L E B 1671 386 M 1683 374 L 1671 363 L 1660 374 L 1671 386 L E B 1673 382 M 1684 371 L 1673 360 L 1662 371 L 1673 382 L E B 1677 386 M 1688 374 L 1677 363 L 1665 374 L 1677 386 L E B 1683 386 M 1695 374 L 1683 363 L 1672 374 L 1683 386 L E B 1692 386 M 1703 374 L 1692 363 L 1681 374 L 1692 386 L E B 1696 386 M 1707 374 L 1696 363 L 1684 374 L 1696 386 L E B 1697 386 M 1709 374 L 1697 363 L 1686 374 L 1697 386 L E B 1701 386 M 1712 374 L 1701 363 L 1689 374 L 1701 386 L E B 1706 387 M 1717 376 L 1706 365 L 1695 376 L 1706 387 L E B 1718 386 M 1729 374 L 1718 363 L 1707 374 L 1718 386 L E B 1720 392 M 1731 381 L 1720 370 L 1709 381 L 1720 392 L E B 1727 386 M 1738 374 L 1727 363 L 1715 374 L 1727 386 L E B 1728 384 M 1740 373 L 1728 361 L 1717 373 L 1728 384 L E B 1730 386 M 1741 374 L 1730 363 L 1719 374 L 1730 386 L E B 1732 386 M 1743 374 L 1732 363 L 1721 374 L 1732 386 L E B 1734 386 M 1745 374 L 1734 363 L 1722 374 L 1734 386 L E B 1735 386 M 1747 375 L 1735 363 L 1724 375 L 1735 386 L E B 1737 386 M 1748 374 L 1737 363 L 1726 374 L 1737 386 L E B 1741 386 M 1752 374 L 1741 363 L 1729 374 L 1741 386 L E B 1747 385 M 1759 374 L 1747 363 L 1736 374 L 1747 385 L E B 1753 389 M 1764 378 L 1753 367 L 1741 378 L 1753 389 L E B 1754 386 M 1766 374 L 1754 363 L 1743 374 L 1754 386 L E B 1756 386 M 1767 374 L 1756 363 L 1745 374 L 1756 386 L E B 1760 382 M 1771 371 L 1760 360 L 1748 371 L 1760 382 L E B 1765 389 M 1776 378 L 1765 367 L 1754 378 L 1765 389 L E B 1766 386 M 1778 374 L 1766 363 L 1755 374 L 1766 386 L E B 1768 386 M 1779 374 L 1768 363 L 1757 374 L 1768 386 L E B 1773 382 M 1785 371 L 1773 360 L 1762 371 L 1773 382 L E B 1775 382 M 1786 371 L 1775 360 L 1764 371 L 1775 382 L E B 1784 386 M 1795 374 L 1784 363 L 1773 374 L 1784 386 L E B 1787 386 M 1799 374 L 1787 363 L 1776 374 L 1787 386 L E B 1792 382 M 1804 371 L 1792 360 L 1781 371 L 1792 382 L E B 1801 382 M 1812 371 L 1801 360 L 1790 371 L 1801 382 L E B 1808 387 M 1819 376 L 1808 365 L 1797 376 L 1808 387 L E B 1817 392 M 1828 381 L 1817 370 L 1805 381 L 1817 392 L E B 1820 382 M 1831 371 L 1820 360 L 1809 371 L 1820 382 L E B 1825 386 M 1837 374 L 1825 363 L 1814 374 L 1825 386 L E B 1829 386 M 1840 374 L 1829 363 L 1818 374 L 1829 386 L E B 1836 385 M 1847 374 L 1836 362 L 1824 374 L 1836 385 L E B 1843 386 M 1854 374 L 1843 363 L 1831 374 L 1843 386 L E B 1848 386 M 1859 374 L 1848 363 L 1837 374 L 1848 386 L E B 1855 386 M 1866 374 L 1855 363 L 1843 374 L 1855 386 L E B 1856 386 M 1868 374 L 1856 363 L 1845 374 L 1856 386 L E B 1858 384 M 1869 373 L 1858 361 L 1847 373 L 1858 384 L E B 1870 385 M 1882 374 L 1870 363 L 1859 374 L 1870 385 L E B 1876 382 M 1887 371 L 1876 360 L 1864 371 L 1876 382 L E B 1882 386 M 1894 374 L 1882 363 L 1871 374 L 1882 386 L E B 1884 386 M 1895 374 L 1884 363 L 1873 374 L 1884 386 L E B 1889 386 M 1901 374 L 1889 363 L 1878 374 L 1889 386 L E B 1905 386 M 1916 375 L 1905 363 L 1894 375 L 1905 386 L E B 1907 382 M 1918 371 L 1907 360 L 1895 371 L 1907 382 L E B 1910 386 M 1921 374 L 1910 363 L 1899 374 L 1910 386 L E B 1912 386 M 1923 374 L 1912 363 L 1901 374 L 1912 386 L E B 1915 386 M 1927 374 L 1915 363 L 1904 374 L 1915 386 L E B 1926 386 M 1937 374 L 1926 363 L 1914 374 L 1926 386 L E B 1927 386 M 1939 374 L 1927 363 L 1916 374 L 1927 386 L E B 1933 386 M 1944 375 L 1933 364 L 1921 375 L 1933 386 L E B 1934 382 M 1946 371 L 1934 360 L 1923 371 L 1934 382 L E B 1941 382 M 1953 371 L 1941 360 L 1930 371 L 1941 382 L E B 1946 386 M 1958 374 L 1946 363 L 1935 374 L 1946 386 L E B 1953 387 M 1965 375 L 1953 364 L 1942 375 L 1953 387 L E B 1959 386 M 1970 374 L 1959 363 L 1947 374 L 1959 386 L E B 1960 386 M 1972 374 L 1960 363 L 1949 374 L 1960 386 L E B 1962 386 M 1973 374 L 1962 363 L 1951 374 L 1962 386 L E B 1967 386 M 1978 374 L 1967 363 L 1956 374 L 1967 386 L E B 1971 386 M 1982 374 L 1971 363 L 1959 374 L 1971 386 L E B 1974 386 M 1985 374 L 1974 363 L 1963 374 L 1974 386 L E B 1976 386 M 1987 374 L 1976 363 L 1965 374 L 1976 386 L E B 1988 386 M 1999 374 L 1988 363 L 1977 374 L 1988 386 L E B 1995 386 M 2006 374 L 1995 363 L 1984 374 L 1995 386 L E B 2007 389 M 2018 378 L 2007 367 L 1996 378 L 2007 389 L E B 2019 382 M 2030 371 L 2019 360 L 2008 371 L 2019 382 L E B 2023 386 M 2034 374 L 2023 363 L 2011 374 L 2023 386 L E B 2030 386 M 2041 374 L 2030 363 L 2018 374 L 2030 386 L E B 2031 386 M 2042 374 L 2031 363 L 2020 374 L 2031 386 L E B 2035 386 M 2046 374 L 2035 363 L 2023 374 L 2035 386 L E B 2042 386 M 2053 374 L 2042 363 L 2030 374 L 2042 386 L E B 2047 386 M 2058 374 L 2047 363 L 2036 374 L 2047 386 L E B 2050 386 M 2062 374 L 2050 363 L 2039 374 L 2050 386 L E B 2057 384 M 2068 373 L 2057 361 L 2046 373 L 2057 384 L E B 2064 386 M 2075 374 L 2064 363 L 2053 374 L 2064 386 L E B 2066 386 M 2077 374 L 2066 363 L 2055 374 L 2066 386 L E B 2069 386 M 2081 374 L 2069 363 L 2058 374 L 2069 386 L E B 2071 386 M 2082 374 L 2071 363 L 2060 374 L 2071 386 L E B 2080 386 M 2091 374 L 2080 363 L 2068 374 L 2080 386 L E B 2081 387 M 2093 376 L 2081 365 L 2070 376 L 2081 387 L E B 2085 386 M 2096 374 L 2085 363 L 2074 374 L 2085 386 L E B 2100 386 M 2112 374 L 2100 363 L 2089 374 L 2100 386 L E B 2102 386 M 2113 374 L 2102 363 L 2091 374 L 2102 386 L E B 2113 386 M 2124 374 L 2113 363 L 2101 374 L 2113 386 L E B 2118 387 M 2129 376 L 2118 364 L 2107 376 L 2118 387 L E B 2120 386 M 2131 374 L 2120 363 L 2108 374 L 2120 386 L E B 2121 382 M 2132 371 L 2121 360 L 2110 371 L 2121 382 L E B 2126 386 M 2138 374 L 2126 363 L 2115 374 L 2126 386 L E B 2128 382 M 2139 371 L 2128 360 L 2117 371 L 2128 382 L E B 2130 386 M 2141 375 L 2130 364 L 2119 375 L 2130 386 L E B 2142 387 M 2153 375 L 2142 364 L 2131 375 L 2142 387 L E B 2147 391 M 2158 380 L 2147 369 L 2136 380 L 2147 391 L E B 2152 385 M 2164 373 L 2152 362 L 2141 373 L 2152 385 L E B 2154 386 M 2165 375 L 2154 364 L 2143 375 L 2154 386 L E B 2164 386 M 2176 374 L 2164 363 L 2153 374 L 2164 386 L E B 2168 386 M 2179 375 L 2168 364 L 2157 375 L 2168 386 L E B 2173 384 M 2184 373 L 2173 361 L 2162 373 L 2173 384 L E B 2180 386 M 2191 374 L 2180 363 L 2169 374 L 2180 386 L E B 2189 385 M 2200 373 L 2189 362 L 2177 373 L 2189 385 L E B 2194 382 M 2205 371 L 2194 360 L 2183 371 L 2194 382 L E B 2196 386 M 2207 374 L 2196 363 L 2184 374 L 2196 386 L E B 2199 386 M 2210 374 L 2199 363 L 2188 374 L 2199 386 L E B 2201 386 M 2212 374 L 2201 363 L 2190 374 L 2201 386 L E B 2209 386 M 2221 374 L 2209 363 L 2198 374 L 2209 386 L E B 2215 382 M 2226 371 L 2215 360 L 2203 371 L 2215 382 L E B 2223 384 M 2235 373 L 2223 361 L 2212 373 L 2223 384 L E B 2225 413 M 2236 402 L 2225 391 L 2214 402 L 2225 413 L E B 2237 388 M 2248 376 L 2237 365 L 2226 376 L 2237 388 L E B 2241 386 M 2252 374 L 2241 363 L 2229 374 L 2241 386 L E B 2242 386 M 2254 374 L 2242 363 L 2231 374 L 2242 386 L E B 2244 384 M 2255 373 L 2244 362 L 2233 373 L 2244 384 L E B 2246 386 M 2257 374 L 2246 363 L 2235 374 L 2246 386 L E B 2253 386 M 2264 374 L 2253 363 L 2241 374 L 2253 386 L E B 2258 392 M 2269 381 L 2258 370 L 2247 381 L 2258 392 L E B 2265 386 M 2276 374 L 2265 363 L 2254 374 L 2265 386 L E B 2267 389 M 2278 378 L 2267 367 L 2255 378 L 2267 389 L E B 2268 386 M 2280 374 L 2268 363 L 2257 374 L 2268 386 L E B 2270 384 M 2281 373 L 2270 361 L 2259 373 L 2270 384 L E B 2280 386 M 2292 374 L 2280 363 L 2269 374 L 2280 386 L E B 2286 386 M 2297 374 L 2286 363 L 2274 374 L 2286 386 L E B 2287 386 M 2299 374 L 2287 363 L 2276 374 L 2287 386 L E B 2289 386 M 2300 374 L 2289 363 L 2278 374 L 2289 386 L E B 2301 386 M 2312 374 L 2301 363 L 2290 374 L 2301 386 L E B 2313 384 M 2325 373 L 2313 362 L 2302 373 L 2313 384 L E B 2317 382 M 2328 371 L 2317 360 L 2306 371 L 2317 382 L E B 2324 386 M 2335 374 L 2324 363 L 2312 374 L 2324 386 L E B 2327 386 M 2338 374 L 2327 363 L 2316 374 L 2327 386 L E B 2344 387 M 2356 375 L 2344 364 L 2333 375 L 2344 387 L E B 2348 386 M 2359 374 L 2348 363 L 2337 374 L 2348 386 L E B 2350 386 M 2361 374 L 2350 363 L 2338 374 L 2350 386 L E B 2355 389 M 2366 378 L 2355 367 L 2344 378 L 2355 389 L E B 2369 386 M 2380 374 L 2369 363 L 2357 374 L 2369 386 L E B 2377 387 M 2389 376 L 2377 364 L 2366 376 L 2377 387 L E B 2379 386 M 2390 374 L 2379 363 L 2368 374 L 2379 386 L E B 2381 382 M 2392 371 L 2381 360 L 2370 371 L 2381 382 L E B 2386 386 M 2397 374 L 2386 363 L 2375 374 L 2386 386 L E B 2389 386 M 2401 375 L 2389 364 L 2378 375 L 2389 386 L E B 2391 386 M 2402 374 L 2391 363 L 2380 374 L 2391 386 L E B 2402 390 M 2413 379 L 2402 368 L 2390 379 L 2402 390 L E B 2403 386 M 2415 374 L 2403 363 L 2392 374 L 2403 386 L E B 2408 386 M 2420 374 L 2408 363 L 2397 374 L 2408 386 L E B 2417 386 M 2428 375 L 2417 364 L 2406 375 L 2417 386 L E B 2426 386 M 2437 374 L 2426 363 L 2415 374 L 2426 386 L E B 2428 386 M 2439 374 L 2428 363 L 2416 374 L 2428 386 L E B 2431 387 M 2442 376 L 2431 365 L 2420 376 L 2431 387 L E B 2436 386 M 2447 374 L 2436 363 L 2425 374 L 2436 386 L E B 2438 386 M 2449 374 L 2438 363 L 2427 374 L 2438 386 L E B 2443 386 M 2454 374 L 2443 363 L 2432 374 L 2443 386 L E B 2452 382 M 2463 371 L 2452 360 L 2440 371 L 2452 382 L E B 2453 386 M 2465 374 L 2453 363 L 2442 374 L 2453 386 L E B 2479 386 M 2491 374 L 2479 363 L 2468 374 L 2479 386 L E B 2486 384 M 2498 373 L 2486 362 L 2475 373 L 2486 384 L E B 2493 385 M 2505 374 L 2493 363 L 2482 374 L 2493 385 L E B 2498 386 M 2510 374 L 2498 363 L 2487 374 L 2498 386 L E B 2500 389 M 2511 378 L 2500 367 L 2489 378 L 2500 389 L E B 2512 382 M 2524 371 L 2512 360 L 2501 371 L 2512 382 L E B 2516 386 M 2527 374 L 2516 363 L 2505 374 L 2516 386 L E B 2519 386 M 2530 374 L 2519 363 L 2508 374 L 2519 386 L E B 2526 386 M 2537 374 L 2526 363 L 2515 374 L 2526 386 L E B 2530 386 M 2541 374 L 2530 363 L 2518 374 L 2530 386 L E B 2531 386 M 2543 374 L 2531 363 L 2520 374 L 2531 386 L E B 2540 382 M 2551 371 L 2540 360 L 2529 371 L 2540 382 L E B 2543 389 M 2555 378 L 2543 367 L 2532 378 L 2543 389 L E B 2545 386 M 2556 374 L 2545 363 L 2534 374 L 2545 386 L E B 2549 386 M 2560 375 L 2549 364 L 2537 375 L 2549 386 L E B 2552 382 M 2563 371 L 2552 360 L 2541 371 L 2552 382 L E B 2556 386 M 2567 374 L 2556 363 L 2544 374 L 2556 386 L E B 2568 382 M 2579 371 L 2568 360 L 2556 371 L 2568 382 L E B 2569 382 M 2581 371 L 2569 360 L 2558 371 L 2569 382 L E B 2571 382 M 2582 371 L 2571 360 L 2560 371 L 2571 382 L E B 2576 386 M 2588 374 L 2576 363 L 2565 374 L 2576 386 L E B 2580 386 M 2591 374 L 2580 363 L 2569 374 L 2580 386 L E B 2590 386 M 2601 374 L 2590 363 L 2579 374 L 2590 386 L E B 2599 392 M 2610 381 L 2599 370 L 2588 381 L 2599 392 L E B 2602 386 M 2614 374 L 2602 363 L 2591 374 L 2602 386 L E B 2609 386 M 2620 374 L 2609 363 L 2598 374 L 2609 386 L E B 2614 386 M 2626 374 L 2614 363 L 2603 374 L 2614 386 L E B 2625 382 M 2636 371 L 2625 360 L 2614 371 L 2625 382 L E B 2633 386 M 2645 374 L 2633 363 L 2622 374 L 2633 386 L E B 2637 387 M 2648 375 L 2637 364 L 2626 375 L 2637 387 L E B 2640 386 M 2652 374 L 2640 363 L 2629 374 L 2640 386 L E B 2649 387 M 2660 375 L 2649 364 L 2638 375 L 2649 387 L E B 2658 386 M 2669 374 L 2658 363 L 2646 374 L 2658 386 L E B 2659 384 M 2671 373 L 2659 361 L 2648 373 L 2659 384 L E B 2661 387 M 2672 375 L 2661 364 L 2650 375 L 2661 387 L E B 2668 382 M 2679 371 L 2668 360 L 2657 371 L 2668 382 L E B 2673 385 M 2684 374 L 2673 362 L 2662 374 L 2673 385 L E B 2685 386 M 2697 374 L 2685 363 L 2674 374 L 2685 386 L E B 2689 386 M 2700 374 L 2689 363 L 2678 374 L 2689 386 L E B 2692 386 M 2704 374 L 2692 363 L 2681 374 L 2692 386 L E B 2694 382 M 2705 371 L 2694 360 L 2683 371 L 2694 382 L E B 2696 386 M 2707 374 L 2696 363 L 2684 374 L 2696 386 L E B 2697 386 M 2709 374 L 2697 363 L 2686 374 L 2697 386 L E B 2701 386 M 2712 374 L 2701 363 L 2690 374 L 2701 386 L E B 2704 386 M 2716 374 L 2704 363 L 2693 374 L 2704 386 L E B 2711 382 M 2723 371 L 2711 360 L 2700 371 L 2711 382 L E B 2715 386 M 2726 374 L 2715 363 L 2704 374 L 2715 386 L E B 2725 386 M 2736 374 L 2725 363 L 2714 374 L 2725 386 L E B 2729 385 M 2740 373 L 2729 362 L 2717 373 L 2729 385 L E B 2732 399 M 2743 388 L 2732 377 L 2721 388 L 2732 399 L E B 2734 382 M 2745 371 L 2734 360 L 2723 371 L 2734 382 L E B 2742 385 M 2754 373 L 2742 362 L 2731 373 L 2742 385 L E B 2753 386 M 2764 374 L 2753 363 L 2742 374 L 2753 386 L E B 2756 386 M 2768 374 L 2756 363 L 2745 374 L 2756 386 L E B 2763 384 M 2774 373 L 2763 362 L 2752 373 L 2763 384 L E B 2767 382 M 2778 371 L 2767 360 L 2755 371 L 2767 382 L E B 2774 386 M 2785 374 L 2774 363 L 2762 374 L 2774 386 L E B 2777 384 M 2788 373 L 2777 361 L 2766 373 L 2777 384 L E B 2784 389 M 2795 378 L 2784 367 L 2773 378 L 2784 389 L E B 2789 431 M 2800 419 L 2789 408 L 2778 419 L 2789 431 L E B 2800 434 M 2811 423 L 2800 412 L 2788 423 L 2800 434 L E B 2801 382 M 2813 371 L 2801 360 L 2790 371 L 2801 382 L E B 2812 386 M 2823 374 L 2812 363 L 2800 374 L 2812 386 L E B 2822 384 M 2833 373 L 2822 361 L 2811 373 L 2822 384 L E B 2824 382 M 2835 371 L 2824 360 L 2813 371 L 2824 382 L E B 2829 389 M 2840 378 L 2829 367 L 2818 378 L 2829 389 L E B 2850 386 M 2861 374 L 2850 363 L 2838 374 L 2850 386 L E B 2853 386 M 2864 374 L 2853 363 L 2842 374 L 2853 386 L E B 2855 386 M 2866 374 L 2855 363 L 2844 374 L 2855 386 L E B 2858 386 M 2870 374 L 2858 363 L 2847 374 L 2858 386 L E B 2869 385 M 2880 374 L 2869 363 L 2858 374 L 2869 385 L E B 2881 385 M 2892 373 L 2881 362 L 2870 373 L 2881 385 L E B 2888 386 M 2899 374 L 2888 363 L 2877 374 L 2888 386 L E B 2890 386 M 2901 374 L 2890 363 L 2878 374 L 2890 386 L E B 2895 386 M 2906 374 L 2895 363 L 2883 374 L 2895 386 L E B 2902 382 M 2913 371 L 2902 360 L 2890 371 L 2902 382 L E B 2909 387 M 2920 375 L 2909 364 L 2897 375 L 2909 387 L E 0 Sc 42 Sp 1 Sd B 374 1742 M 374 1915 L 720 1915 L 720 1742 L F 1 Sc B 487 1884 M 499 1862 L 476 1862 L 487 1884 L E 3 St 3 Sw B 563 1873 M 715 1873 L E 1 St 1 Sw (NIT) 791 1873 0 T B 487 1807 M 499 1796 L 487 1785 L 476 1796 L 487 1807 L E 3 Sw B 563 1796 M 715 1796 L E 1 Sw (BPF) 791 1796 0 T 0 Sd B 287 863 M 313 966 L E 8 Sp 1 Sd B 298 863 M 276 863 L E B 287 874 M 287 851 L E B 276 874 M 298 851 L E B 276 851 M 298 874 L E 42 Sp 0.8 Sx (136) 313 1001 0 T B 287 380 M 313 456 L E 42 Sp 0.8 Sx (4.6) 313 490 0 T 3 St 3 Sw 1 Sx 0 Sd B 287 863 M 3056 2023 L E 1 St B 287 375 M 3056 375 L E 1 Sw 0.8 Sx 1 Sd (NIT Incremental Overhead: 210 ns/byte) 1844 894 0 T (BPF Incremental Overhead: 0 ns/byte) 1844 807 0 T Z W endTexFig t-rom.300 @sf 653 1055 p (Figure)s 11(3:)m h-med.300 @sf 15(NIT)m 12(versus)m 12(BPF:)m 11(\\reject)m 12(all")m t-rom.300 @sf -20 1189 p 65 c 13(packet)m 14(\014lter)m 15(is)m 14(simply)m 15 r 97 c 14(boolean)m 14(valued)m 15(function)m 14(on)m 15 r 97 c -62 1238 p (packet.)s 13(If)m 7(the)m 6(value)m 7(of)m 6(the)m 6(function)m 7(is)m t-ita.300 @sf 6(true)m t-rom.300 @sf 7(the)m 6(kernel)m 7(copies)m 6(the)m -62 1288 p (packet)s 9(for)m 11(the)m 10(application;)m 11(if)m 10(it)m 10(is)m t-ita.300 @sf 11(false)m t-rom.300 @sf 10(the)m 11(packet)m 10(is)m 11(ignored.)m -20 1344 p (Historically)s 17(there)m 18(have)m 18(been)m 18(two)m 18(approaches)m 18(to)m 18(the)m 18(\014l-)m -62 1394 p (ter)s 14(abstraction:)m 26 r 97 c 15(boolean)m 15(expression)m 16(tree)m 15(\(used)m 15(by)m 15(CSPF\))m -62 1444 p (and)s 11 r 97 c 11(directed)m 12(acyclic)m 12(control)m 11(\015ow)m 12(graph)m 11(or)m 12(CFG)m 12(\(\014rst)m 11(used)m -62 1494 p (by)s 13(NNStat[)m 49 c 93 c 13(and)m 14(used)m 13(by)m 14(BPF\).)m 14(For)m 13(example,)m 15(Figure)m 13 r 52 c 14(il-)m -62 1544 p (lustrates)s 13(the)m 14(two)m 14(models)m 14(with)m 14 r 97 c 14(\014lter)m 14(that)m 14(recognizes)m 13(either)m -62 1593 p (IP)s 13(or)m 14(ARP)m 14(packets)m 14(on)m 14(an)m 14(Ethernet.)m 26(In)m 14(the)m 14(tree)m 14(model)m 14(each)m -62 1643 p (node)s 12(represents)m 12 r 97 c 13(boolean)m 12(operation)m 13(while)m 12(the)m 13(leaves)m 12(repre-)m -62 1693 p (sent)s 15(test)m 17(predicates)m 16(on)m 16(packet)m 17(\014elds.)m 33(The)m 16(edges)m 17(represent)m -62 1743 p (operator)s -1(-operand)m 8(relationships.)m 15(In)m 9(the)m 8(CFG)m 9(model)m 9(each)m 9(node)m -62 1793 p (represents)s 10 r 97 c 12(packet)m 11(\014eld)m 11(predicate)m 12(while)m 11(the)m 12(edges)m 11(represent)m -62 1842 p (control)s 14(transfers.)m 31(The)m 15(righthand)m 16(branch)m 15(is)m 16(traversed)m 15(if)m 15(the)m -62 1892 p (predicate)s 11(is)m 11(true,)m 12(the)m 12(lefthand)m 11(branch)m 12(if)m 11(false.)m 19(There)m 12(are)m 11(two)m -62 1942 p (terminating)s 10(leaves)m 10(which)m 11(represent)m t-ita.300 @sf 10(true)m t-rom.300 @sf 11(and)m t-ita.300 @sf 11(false)m t-rom.300 @sf 10(for)m 11(the)m 10(en-)m -62 1992 p (tire)s 9(\014lter)m -1 r 46 c -20 2048 p (These)s 11(two)m 12(models)m 12(of)m 13(\014ltering)m 12(are)m 12(computationally)m 13(equiv-)m -62 2098 p (alent.)s 32(I.e.,)m 18(any)m 16(\014lter)m 16(that)m 17(can)m 16(be)m 16(expressed)m 17(in)m 16(one)m 16(can)m 16(be)m -62 2148 p (expressed)s 9(in)m 10(the)m 10(other)m -1 r 46 c 14(However)m 44 c 9(in)m 10(implementation)m 10(they)m 10(are)m -62 2198 p (very)s 8(dif)m (ferent:)s 15(The)m 9(tree)m 9(model)m 9(maps)m 10(naturally)m 9(into)m 9(code)m 10(for)m 9 r 97 c -62 2247 p (stack)s 7(machine)m 8(while)m 7(the)m 8(CFG)m 8(model)m 8(maps)m 7(naturally)m 8(into)m 8(code)m -62 2297 p (for)s 8 r 97 c 9(register)m 8(machine.)m 15(Since)m 9(most)m 9(modern)m 9(machines)m 8(are)m 9(reg-)m -62 2347 p (ister)s 9(based,)m 11(we)m 10(will)m 11(ar)m (gue)s 9(that)m 11(the)m 10(CFG)m 11(approach)m 10(lends)m 11(itself)m -62 2397 p (to)s 9 r 97 c 11(more)m 10(ef)m (\014cient)s 10(implementation.)m t-bol.360 @sf -62 2520 p (3.1)s 49(The)m 12(CSPF)m 13(\(T)m -3 r 114 c -1(ee\))m 12(Model)m t-rom.300 @sf -62 2604 p (The)s 15(CSPF)m 15(\014lter)m 16(engine)m 15(is)m 16(based)m 15(on)m 16(an)m 15(operand)m 16(stack.)m 31(In-)m -62 2654 p (structions)s 12(either)m 12(push)m 13(constants)m 12(or)m 13(packet)m 12(data)m 13(on)m 12(the)m 13(stack,)m -62 2704 p (or)s 11(perform)m 12 r 97 c 12(binary)m 12(boolean)m 12(or)m 13(bitwise)m 12(operation)m 12(on)m 12(the)m 12(top)m 1032 1189 p (two)s 9(elements.)m 15 r 65 c 9(\014lter)m 9(program)m 9(is)m 9 r 97 c 9(sequentially)m 9(executed)m 9(list)m 1032 1238 p (of)s 8(instructions.)m 14(After)m 8(evaluating)m 8 r 97 c 7(program,)m 8(if)m 8(the)m 8(top)m 7(of)m 8(stack)m 1032 1288 p (has)s 11 r 97 c 11(non-zero)m 11(value)m 10(or)m 11(the)m 11(stack)m 11(is)m 11(empty)m 11(then)m 10(the)m 11(packet)m 11(is)m 1032 1338 p (accepted,)s 10(otherwise)m 11(it)m 10(is)m 11(rejected.)m 1073 1397 p (There)s 9(are)m 8(two)m 9(implementation)m 8(shortcomings)m 8(of)m 9(the)m 8(expres-)m 1032 1447 p (sion)s 10(tree)m 11(approach:)m t-rom.210 @sf 1349 1432 p 54 c cmsy10.300 @sf 1073 1539 p 15 c t-rom.300 @sf 21(The)m 10(operand)m 10(stack)m 10(must)m 10(be)m 10(simulated.)m 16(On)m 10(most)m 10(modern)m 1115 1588 p (machines)s 9(this)m 9(means)m 9(generating)m 9(add)m 9(and)m 9(subtract)m 9(opera-)m 1115 1638 p (tions)s 11(to)m 11(maintain)m 10 r 97 c 11(simulated)m 11(stack)m 11(pointer)m 11(and)m 10(actually)m 1115 1688 p (doing)s 10(loads)m 10(and)m 10(stores)m 10(to)m 10(memory)m 10(to)m 10(simulate)m 10(the)m 10(stack.)m 1115 1738 p (Since)s 10(memory)m 10(tends)m 10(to)m 9(be)m 10(the)m 10(major)m 10(bottleneck)m 10(in)m 10(mod-)m 1115 1788 p (ern)s 14(architectures,)m 15 r 97 c 15(\014lter)m 14(model)m 14(that)m 15(can)m 14(use)m 14(values)m 14(in)m 1115 1837 p (machine)s 11(registers)m 10(and)m 11(avoid)m 10(this)m 11(memory)m 11(traf)m (\014c)s 10(will)m 10(be)m 1115 1887 p (more)s 10(ef)m (\014cient.)s cmsy10.300 @sf 1073 1970 p 15 c t-rom.300 @sf 21(The)m 18(tree)m 18(model)m 17(often)m 18(does)m 18(unnecessary)m 17(or)m 18(redundant)m 1115 2020 p (computations.)s 18(For)m 11(example,)m 11(the)m 11(tree)m 11(in)m 11(\014g.)m 11 r 52 c 11(will)m 11(com-)m 1115 2070 p (pute)s 14(the)m 14(value)m 15(of)m 14(`ether)m -1(.type)m 13(==)m 14(ARP')m 14(even)m 15(if)m 14(the)m 14(test)m 1115 2120 p (for)s 17(IP)m 16(is)m 17(true.)m 34(While)m 16(this)m 17(problem)m 16(can)m 17(be)m 16(somewhat)m 1115 2169 p (mitigated)s 9(by)m 10(adding)m 9(`short)m 9(circuit')m 10(operators)m 9(to)m 9(the)m 10(\014lter)m 1115 2219 p (machine,)s 12(some)m 11(inef)m (\014ciency)s 11(is)m 11(intrinsic:)m 18(Because)m 11(of)m 11(the)m 1032 2255 p 402 2 ru t-rom.180 @sf 1077 2283 p 54 c t-rom.240 @sf 1092 2295 p (Note)s 14(that)m 14(it)m 13(is)m 14(not)m 14(our)m 14(intention)m 13(to)m 14(denigrate)m 14(CSPF)m 14(or)m 14(its)m 13(enormous)m 1032 2334 p (contribution)s 9(to)m 9(the)m 9(community)m 9 r 124 c 9(we)m 9(simply)m 9(wish)m 9(to)m 9(investigate)m 9(the)m 9(imple-)m 1032 2373 p (mentation)s 5(implications)m 6(of)m 5(its)m 5(\014lter)m 6(model)m 5(when)m 6(run)m 5(on)m 5(modern)m 6(hardware.)m 11(The)m 1032 2413 p (CSPF)s 7(\014ltering)m 7(mechanism)m 7(was)m 7(intended)m 7(to)m 7(support)m 7(ef)m (\014cient)s 6(protocol)m 7(demul-)m 1032 2452 p (tiplexing)s 9(for)m 9(user)m (-level)s 9(network)m 9(code.)m 15(The)m 9(initial)m 9(implementation)m 9(achieved)m 1032 2492 p (huge)s 12(gains)m 12(by)m 12(performing)m 12(user)m (-speci\014ed)s 12(demultiplexing)m 12(inside)m 12(the)m 12(kernel)m 1032 2531 p (rather)s 10(than)m 9(in)m 10 r 97 c 10(user)m (-process.)s 16(After)m 10(this,)m 10(the)m 10(incremental)m 9(gain)m 10(from)m 10 r 97 c 10(more)m 1032 2571 p (ef)s (\014cient)s 8(\014lter)m 9(design)m 9(was)m 9(negligible)m 9(and,)m 9(as)m 9 r 97 c 9(result,)m 9(the)m 9(designers)m 9(of)m 9(CSPF)m 1032 2610 p (invested)s 8(less)m 7(ef)m (fort)s 7(in)m 8(the)m 7(\014lter)m 8(machinery)m 7(and,)m 8(indeed,)m 8(have)m 7(pointed)m 8(out)m 7(that)m 1032 2649 p (the)s 11(\\\014lter)m 12(language)m 11(is)m 12(not)m 11 r 97 c 11(result)m 12(of)m 11(careful)m 11(analysis)m 12(but)m 11(rather)m 12(embodies)m 1032 2689 p (several)s 8(accidents)m 9(of)m 8(history"[)m 56 c (].)s @eop restore %%Page: 5 5 save /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Roman /t-rom.210 ReEncodeForTeX /t-rom.210 /t-rom.210 29.166582 TeXPSmakefont def /Times-Roman /t-rom.180 ReEncodeForTeX /t-rom.180 /t-rom.180 24.999965 TeXPSmakefont def /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-Bold /t-bol.300 ReEncodeForTeX /t-bol.300 /t-bol.300 41.666629 TeXPSmakefont def 5 @bop1 t-obl.300 @sf -62 -99 p 87 c -2(inter)m 13(USENIX)m 14 r 123 c 14(Jan.,)m 14(1993)m 14 r 123 c 13(San)m 14(Diego,)m 14(CA)m t-rom.300 @sf 1270 r 53 c 124 4 p 9946303 19096899 9604136 13353697 22826270 38745456 startTexFig /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 53 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /Helvetica reencodeISO def /Times-Roman reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def Begin [ 0.799705 0 0 0.799705 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 6 230 ] concat 234 122 218 74 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 167 130 223 66 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 231 186 239 74 Line End Begin %I Line 0 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 145 230 ] concat 175 194 135 162 Line End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 169 374 ] concat 71 210 56 24 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 201.5 588 ] concat [ (ether.type=IP) ] Text End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 306 373 ] concat 71 210 56 24 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 335.5 587 ] concat [ (ether.type=ARP) ] Text End Begin %I Pict Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 161 430 ] concat 143 250 24 24 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 298.5 684 ] concat [ (OR) ] Text End End %I eop Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 281 230 ] concat 71 210 56 24 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 313.5 444 ] concat [ (ether.type=IP) ] Text End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 202 157 ] concat 71 210 56 24 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 231.5 371 ] concat [ (ether.type=ARP) ] Text End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 73 30 ] concat 143 250 24 24 Elli End Begin %I Elli 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 -0 -0 1 241 30 ] concat 143 250 24 24 Elli End Begin %I Line 0 1 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 -0 -0 1 144.853 230 ] concat 135 426 103 386 Line End Begin %I Line 0 1 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ -1 -0 0 1 463.147 230 ] concat 135 426 103 386 Line End Begin %I Text 0 0 0 SetCFg Helvetica 14 SetF [ 1 0 0 1 239 733.18 ] concat [ (Tree Representation) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 201.5 284 ] concat [ (FALSE) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 372.5 284 ] concat [ (TRUE) ] Text End Begin %I Text 0 0 0 SetCFg Times-Roman 12 SetF [ 1 0 0 1 384 387 ] concat [ (yes) ] Text End Begin %I Text 0 0 0 SetCFg Times-Roman 12 SetF [ 1 0 0 1 336 347 ] concat [ (yes) ] Text End Begin %I Text 0 0 0 SetCFg Times-Roman 12 SetF [ 1 0 0 1 216 331 ] concat [ (no) ] Text End Begin %I Text 0 0 0 SetCFg Times-Roman 12 SetF [ 1 0 0 1 288 419 ] concat [ (no) ] Text End Begin %I Text 0 0 0 SetCFg Helvetica 14 SetF [ 1 0 0 1 237.996 500 ] concat [ (CFG Representation) ] Text End End %I eop showpage end endTexFig 61 1304 p (Figure)s 10(4:)m h-med.300 @sf 16(Filter)m 11(Function)m 12(Representations.)m t-rom.300 @sf 20 1438 p (hierarchical)s 7(design)m 7(of)m 8(network)m 7(protocols,)m 8(packet)m 7(headers)m 20 1488 p (must)s 13(be)m t-ita.300 @sf 14(parsed)m t-rom.300 @sf 13(to)m 14(reach)m 13(successive)m 14(layers)m 13(of)m 13(encapsu-)m 20 1538 p (lation.)s 16(Since)m 11(each)m 10(leaf)m 11(of)m 10(the)m 11(expression)m 11(tree)m 10(represents)m 20 1588 p 97 c 15(packet)m 14(\014eld,)m 16(independent)m 15(of)m 15(other)m 14(leaves,)m 16(redundant)m 20 1637 p (parses)s 11(may)m 10(be)m 11(carried)m 11(out)m 11(to)m 10(evaluate)m 11(the)m 11(entire)m 11(tree.)m 16(In)m 20 1687 p (the)s 11(CFG)m 11(representation,)m 11(it)m 11(is)m 11(always)m 11(possible)m 11(to)m 11(reorder)m 20 1737 p (the)s 12(graph)m 13(in)m 12(such)m 13 r 97 c 12(way)m 13(that)m t-ita.300 @sf 12(at)m 12(most)m t-rom.300 @sf 13(one)m 12(parse)m 13(is)m 12(done)m 20 1787 p (for)s 10(any)m 11(layer)m -1 r 46 c t-rom.210 @sf 241 1772 p 55 c t-rom.300 @sf -20 1879 p (Another)s 8(problem)m 9(with)m 10(CSPF)m -2 r 44 c 8(recognized)m 10(by)m 9(the)m 10(designers,)m -62 1929 p (is)s 13(its)m 13(inability)m 14(to)m 13(parse)m 14(variable)m 14(length)m 13(packet)m 14(headers,)m 14(e.g.,)m -62 1978 p (TCP)s 7(headers)m 8(encapsulated)m 9(in)m 8 r 97 c 8(variable)m 8(length)m 8(IP)m 9(header)m -2 r 46 c 14(Be-)m -62 2028 p (cause)s 11(the)m 13(CSPF)m 12(instruction)m 12(set)m 12(didn')m 116 c 12(include)m 12(an)m 13(indirection)m -62 2078 p (operator)s -2 r 44 c 8(only)m 9(packet)m 9(data)m 9(at)m 8(\014xed)m 9(of)m (fsets)s 8(is)m 9(accessible.)m 15(Also,)m -62 2128 p (the)s 10(CSPF)m 10(model)m 11(is)m 10(restricted)m 11(to)m 10 r 97 c 11(single)m 10(sixteen)m 11(bit)m 11(data)m 10(type)m -62 2178 p (which)s 13(results)m 14(in)m 14 r 97 c 15(doubling)m 14(of)m 14(the)m 14(number)m 14(of)m 14(operations)m 15(to)m -62 2227 p (manipulate)s 9(32)m 11(bit)m 10(data)m 11(such)m 10(as)m 11(Internet)m 10(addresses)m 11(or)m 10(TCP)m 11(se-)m -62 2277 p (quence)s 11(numbers.)m 20(Finally)m -2 r 44 c 11(the)m 12(design)m 12(does)m 11(not)m 12(permit)m 12(access)m -62 2327 p (to)s 9(the)m 11(last)m 10(byte)m 11(of)m 10(an)m 10(odd-length)m 11(packet.)m -20 2386 p (While)s 8(the)m 10(CSPF)m 10(model)m 10(has)m 9(shortcomings,)m 10(it)m 10(of)m (fers)s 9 r 97 c 10(novel)m -62 2436 p (generalization)s 19(of)m 20(packet)m 21(\014ltering:)m 35(The)m 20(idea)m 20(of)m 20(putting)m 20 r 97 c -62 2485 p (pseudo-machine)s 7(language)m 9(interpreter)m 8(in)m 8(the)m 9(kernel)m 8(provides)m 9 r 97 c -62 2521 p 402 2 ru t-rom.180 @sf -17 2549 p 55 c t-rom.240 @sf -2 2560 p (This)s 12(graph)m 13(reordering)m 13(is,)m 14(however)m 44 c 13 r 97 c 13(non-trivial)m 13(problem.)m 26(Our)m 13(BPF)m -62 2600 p (compiler)s 10(\(part)m 12(of)m 11(tcpdump[)m 52 c (]\))s 12(contains)m 11 r 97 c 12(fairly)m 11(sophisticated)m 12(optimizer)m 11(to)m -62 2639 p (reorder)s 8(and)m 10(minimize)m 9(CFG)m 10(\014lters.)m 15(This)m 10(optimizer)m 9(is)m 9(the)m 10(subject)m 9(of)m 10 r 97 c 9(future)m -62 2679 p (paper)s -2 r 46 c t-rom.300 @sf 1032 45 p (nice)s 8(abstraction)m 8(for)m 8(describing)m 8(and)m 8(implementing)m 8(the)m 8(\014ltering)m 1032 95 p (mechanism.)s 14(And,)m 7(since)m 7(CSPF)m 6(treats)m 6 r 97 c 7(packet)m 6(as)m 7 r 97 c 6(simple)m 6(array)m 1032 145 p (of)s 11(bytes,)m 11(the)m 11(\014ltering)m 11(model)m 11(is)m 10(completely)m 11(protocol)m 11(indepen-)m 1032 195 p (dent.)s 21(\(The)m 12(application)m 12(that)m 12(speci\014es)m 12(the)m 12(\014lter)m 13(is)m 12(responsible)m 1032 244 p (for)s 13(encoding)m 14(the)m 13(\014lter)m 13(appropriately)m 14(for)m 13(the)m 14(underlying)m 13(net-)m 1032 294 p (work)s 10(media)m 11(and)m 10(protocols.\))m 1073 351 p (The)s 8(BPF)m 7(model,)m 8(described)m 7(in)m 8(the)m 7(next)m 7(section,)m 8(is)m 8(an)m 7(attempt)m 1032 401 p (to)s 11(maintain)m 12(the)m 11(strengths)m 11(of)m 12(CSPF)m 11(while)m 11(addressing)m 12(its)m 11(limi-)m 1032 450 p (tations)s 10(and)m 9(the)m 10(performance)m 10(shortcomings)m 9(of)m 10(the)m 10(stack-based)m 1032 500 p (\014lter)s 10(machine.)m t-bol.360 @sf 1032 624 p (3.2)s 50(The)m 12(BPF)m 13(Model)m t-bol.300 @sf 1032 708 p (3.2.1)s 42(CFGs)m 10(vs.)m 10 r 84 c -2 r 114 c (ees)s t-rom.300 @sf 1032 793 p (BPF)s 11(uses)m 11(the)m 11(CFG)m 11(\014lter)m 11(model)m 11(since)m 11(it)m 11(has)m 11 r 97 c 11(signi\014cant)m 11(per-)m 1032 843 p (formance)s 12(advantage)m 13(over)m 12(the)m 13(expression)m 12(tree)m 13(model.)m 22(While)m 1032 893 p (the)s 10(tree)m 10(model)m 9(may)m 10(need)m 10(to)m 10(redundantly)m 9(parse)m 10 r 97 c 10(packet)m 10(many)m 1032 942 p (times,)s 13(the)m 12(CFG)m 13(model)m 12(allows)m 13(parse)m 12(information)m 13(to)m 12(be)m 13(`built)m 1032 992 p (into')s 10(the)m 10(\015ow)m 10(graph.)m 15(I.e.,)m 11(packet)m 10(parse)m 10(state)m 10(is)m 10(`remembered')m 1032 1042 p (in)s 12(the)m 13(graph)m 12(since)m 13(you)m 12(know)m 13(what)m 12(paths)m 13(you)m 12(must)m 13(have)m 12(tra-)m 1032 1092 p (versed)s 9(to)m 9(reach)m 9(to)m 8 r 97 c 9(particular)m 9(node)m 9(and)m 9(once)m 9 r 97 c 9(subexpression)m 1032 1142 p (is)s 10(evaluated)m 10(it)m 9(need)m 10(not)m 10(be)m 10(recomputed)m 9(since)m 10(the)m 10(control)m 10(\015ow)m 1032 1191 p (graph)s 10(can)m 11(always)m 10(be)m 10(\(re-\)or)m (ganized)s 10(so)m 10(the)m 10(value)m 11(is)m 10(only)m 10(used)m 1032 1241 p (at)s 10(nodes)m 11(that)m 10(follow)m 11(the)m 10(original)m 10(computation.)m 1062 1296 p 14919201 12979704 8683192 25457541 25852231 40521564 startTexFig 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 261 544 283 527 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 299 500 290 472 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 116 488 106 471 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 168 496 198 464 201 435 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 145 445 168 428 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 172 401 153 384 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 83 439 61 359 128 315 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 125 351 125 333 137 322 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 274 436 271 384 212 323 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 184 357 253 321 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 231 400 258 368 274 329 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 335 500 379 417 333 324 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 310 437 323 377 304 330 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 192 542 165 532 155 520 3 BSpl End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -254.803 307.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -223.803 252.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -103.803 253.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -109.803 395.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -256.803 445.543 ] concat 357 223 35 17 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 392 512 ] concat [ (TRUE) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 270 511 ] concat [ (FALSE) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 209 704 ] concat [ (ether.type=ARP) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 368 654 ] concat [ (ip.dst=foo) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 220 566 ] concat [ (arp.dst=foo) ] Text End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -288.803 392.543 ] concat 357 223 35 17 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 173 651 ] concat [ (ether.type=RARP) ] Text End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -197.803 356.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -84.803 455.543 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -171.803 492.543 ] concat 357 223 35 17 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 298 752 ] concat [ (ether.type=IP) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 397 715 ] concat [ (ip.src=foo) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 285 614 ] concat [ (arp.src=foo) ] Text End End %I eop showpage end endTexFig 1139 2209 p (Figure)s 11(5:)m h-med.300 @sf 15(CFG)m 12(Filter)m 12(Function)m 11(for)m 12(\\host)m 11(foo".)m t-rom.300 @sf 1073 2305 p (For)s 9(example,)m 10(Figure)m 9 r 53 c 9(shows)m 9 r 97 c 8(CFG)m 9(\014lter)m 9(function)m 9(that)m 9(ac-)m 1032 2355 p (cepts)s 10(all)m 10(packets)m 10(with)m 11(an)m 10(Internet)m 10(address)m t-ita.300 @sf 10(foo)m t-rom.300 @sf 46 c 16 r 87 c -3 r 101 c 9(consider)m 11 r 97 c 1032 2405 p (scenario)s 11(where)m 11(the)m 11(network)m 10(layer)m 11(protocols)m 11(are)m 11(IP)m -4 r 44 c 10(ARP)m -3 r 44 c 10(and)m 1032 2454 p (Reverse)s 16(ARP)m -3 r 44 c 15(all)m 17(of)m 16(which)m 16(contain)m 17(source)m 16(and)m 17(destination)m 1032 2504 p (Internet)s 9(addresses.)m 16(The)m 9(\014lter)m 9(should)m 9(catch)m 10(all)m 9(cases.)m 15(Accord-)m 1032 2554 p (ingly)s -2 r 44 c 14(the)m 13(link)m 14(layer)m 13(type)m 14(\014eld)m 13(is)m 14(tested)m 13(\014rst.)m 25(In)m 14(the)m 13(case)m 14(of)m 1032 2604 p (IP)s 15(packets,)m 15(the)m 15(IP)m 15(host)m 14(address)m 15(\014elds)m 15(are)m 14(queried,)m 16(while)m 15(in)m 1032 2654 p (the)s 15(case)m 14(of)m 15(ARP)m 14(packets,)m 16(the)m 14(ARP)m 15(address)m 14(\014elds)m 15(are)m 14(used.)m 1032 2704 p (Note)s 10(that)m 11(once)m 10(we)m 11(learn)m 10(that)m 11(the)m 10(packet)m 11(is)m 10(IP)m -3 r 44 c 9(we)m 10(do)m 11(not)m 10(need)m @eop restore %%Page: 6 6 save /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.300 ReEncodeForTeX /t-bol.300 /t-bol.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-SmallCaps /Times-Roman SmallCapsFont /Times-SmallCaps /t-romsc.300 ReEncodeForTeX /t-romsc.300 /t-romsc.300 41.666629 TeXPSmakefont def 6 @bop1 t-rom.300 @sf -62 -99 p 54 c t-obl.300 @sf 1568(BPF)m 14 r 123 c 14(The)m 14(BSD)m 14(Packet)m 14(Filter)m 199 4 p 24865505 7459650 855162 29404446 38942801 40850472 startTexFig /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath arrowHeight neg arrowWidth 2 div moveto 0 0 lineto arrowHeight neg arrowWidth 2 div neg lineto } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /arrowHeight 10 def /arrowWidth 5 def /IdrawDict 51 dict def IdrawDict begin /reencodeISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding ISOLatin1Encoding def currentdict end definefont } def /ISOLatin1Encoding [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/minus/period/slash /zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N /O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright /asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m /n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve /dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut /ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot /hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior /acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine /guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute /Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis /yacute/thorn/ydieresis ] def /Courier reencodeISO def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { dup -1 eq { /patternGrayLevel idef /patternString idef } { /patternGrayLevel idef } ifelse false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l w add b translate w neg h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 1 printSize sub descender sub def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def /SSten { fgred fggreen fgblue setrgbcolor dup true exch 1 0 0 -1 0 6 -1 roll matrix astore } def /FSten { dup 3 -1 roll dup 4 1 roll exch newpath 0 0 moveto dup 0 exch lineto exch dup 3 1 roll exch lineto 0 lineto closepath bgred bggreen bgblue setrgbcolor eofill SSten } def /Rast { exch dup 3 1 roll 1 0 0 -1 0 6 -1 roll matrix astore } def Begin [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 -0 -0 0.999631 46.8859 427.699 ] concat 329 332 16 16 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 370.264 763.577 ] concat [ (OR) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 -0 -0 0.999631 -105.122 363.6 ] concat 329 332 16 16 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 215.257 699.477 ] concat [ (AND) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 -0 -0 0.999631 -0.904144 307.382 ] concat 329 332 16 16 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 -0 -0 0.999631 222.862 363.554 ] concat 329 332 16 16 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 543.24 699.431 ] concat [ (AND) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 322.363 643.259 ] concat [ (OR) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 0 0 0.999631 -208.72 307.617 ] concat 329 332 16 16 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 114.659 643.495 ] concat [ (OR) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 0.999631 0 0 0.999631 310.226 307.617 ] concat 329 332 16 16 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 633.605 643.495 ] concat [ (OR) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -440.107 325.324 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -336.501 325.357 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -232.928 325.357 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -129.376 325.39 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 -25.7818 325.357 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 77.8242 325.39 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.42254 0 0 1.14286 181.397 325.39 ] concat 357 223 35 17 Elli End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 556.171 584.247 ] concat [ (ip.src=foo) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 659.744 584.247 ] concat [ (ip.dst=foo) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 443.565 584.215 ] concat [ (ether.type=IP) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 26.2393 584.182 ] concat [ (ether.type=ARP) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 126.845 584.215 ] concat [ (ether.type=RARP) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 242.419 584.215 ] concat [ (arp.src=foo) ] Text End Begin %I Text 0 0 0 SetCFg Courier 10 SetF [ 1 0 0 1 345.97 584.247 ] concat [ (arp.dst=foo) ] Text End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ -0.995896 -0 0 0.995896 363.535 105.598 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 90.6594 105.598 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ -0.995896 -0 0 0.995896 570.714 105.631 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 401.412 105.631 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ -0.995896 -0 0 0.995896 881.467 105.664 ] concat 189 502 221 526 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 253 558 317 582 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 365 582 429 558 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 653 574 605 502 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 693 574 733 550 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 365 614 469 646 Line End Begin %I Line 0 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg none SetP %I p n [ 0.995896 -0 -0 0.995896 -116.52 105.565 ] concat 517 646 653 606 Line End End %I eop showpage end endTexFig t-rom.300 @sf 594 567 p (Figure)s 10(6:)m h-med.300 @sf 16 r 84 c -1(ree)m 11(Filter)m 12(Function)m 11(for)m 12(\\host)m 11(foo".)m t-rom.300 @sf -62 701 p (to)s 13(check)m 15(that)m 14(it)m 15(might)m 14(be)m 15(ARP)m 14(or)m 15(RARP)m -4 r 46 c 13(In)m 15(the)m 14(expression)m -62 751 p (tree)s 11(model,)m 13(shown)m 13(in)m 12(\014gure)m 12(6,)m 13(seven)m 13(comparison)m 12(predicates)m -62 801 p (and)s 9(six)m 10(boolean)m 10(operations)m 10(are)m 11(required)m 10(to)m 10(traverse)m 10(the)m 10(entire)m -62 850 p (tree.)s 15(The)m 11(longest)m 10(path)m 11(through)m 11(the)m 10(CFG)m 11(has)m 11(\014ve)m 10(comparison)m -62 900 p (operations,)s 9(and)m 11(the)m 10(average)m 11(number)m 10(of)m 10(comparisons)m 11(is)m 10(three.)m t-bol.300 @sf -62 1020 p (3.2.2)s 41(Design)m 10(of)m 10(\014lter)m 11(pseudo-machine)m t-rom.300 @sf -62 1106 p (The)s 8(use)m 8(of)m 9 r 97 c 9(control)m 8(\015ow)m 9(graph)m 9(rather)m 8(than)m 9(an)m 9(expression)m 9(tree)m -62 1156 p (as)s 9(the)m 9(theoretical)m 10(underpinnings)m 10(of)m 9(the)m 10(\014lter)m 10(pseudo-machine)m -62 1206 p (is)s 8 r 97 c 10(necessary)m 9(step)m 10(towards)m 9(an)m 9(ef)m (\014cient)s 9(implementation)m 9(but)m 10(it)m -62 1256 p (is)s 7(not)m 9(suf)m (\014cient.)s 14(Even)m 8(after)m 9(leveraging)m 8(of)m 102 c 8(the)m 8(experience)m 8(and)m -62 1306 p (pseudo-machine)s 15(models)m 15(of)m 16(CSPF)m 15(and)m 16(NNStat[)m 49 c (],)s 17(the)m 15(BPF)m -62 1355 p (model)s 11(underwent)m 13(several)m 12(generations)m 12(\(and)m 13(several)m 12(years\))m 12(of)m -62 1405 p (design)s 6(and)m 7(test.)m 14 r 87 c -2 r 101 c 6(believe)m 6(the)m 7(current)m 7(model)m 7(of)m (fers)s 6(suf)m (\014cient)s -62 1455 p (generality)s 6(with)m 8(no)m 7(sacri\014ce)m 8(in)m 7(performance.)m 15(Its)m 7(evolution)m 8(was)m -62 1505 p (guided)s 9(by)m 11(the)m 10(following)m 11(design)m 10(constraints:)m -31 1605 p (1.)s 20(It)m 10(must)m 11(be)m 10(protocol)m 11(independent.)m 16(The)m 11(kernel)m 10(should)m 11(not)m 20 1655 p (have)s 10(to)m 11(be)m 10(modi\014ed)m 11(to)m 10(add)m 11(new)m 10(protocol)m 10(support.)m -31 1738 p (2.)s 20(It)m 14(must)m 14(be)m 14(general.)m 26(The)m 14(instruction)m 14(set)m 14(should)m 14(be)m 14(rich)m 20 1788 p (enough)s 10(to)m 11(handle)m 10(unforeseen)m 11(uses.)m -31 1871 p (3.)s 20(Packet)m 10(data)m 11(references)m 10(should)m 10(be)m 11(minimized.)m -31 1954 p (4.)s 20(Decoding)m 17(an)m 17(instruction)m 16(should)m 17(consist)m 17(of)m 17 r 97 c 17(single)m 17 r 67 c 20 2004 p (switch)s 10(statement.)m -31 2087 p (5.)s 20(The)m 9(abstract)m 9(machine)m 9(registers)m 9(should)m 9(reside)m 9(in)m 9(physical)m 20 2136 p (registers.)s -20 2237 p (Like)s 10(CSPF)m -3 r 44 c 10(constraint)m 12 r 49 c 11(is)m 11(adhered)m 11(to)m 11(simply)m 11(by)m 12(not)m 11(men-)m -62 2287 p (tioning)s 18(any)m 19(protocols)m 19(in)m 19(the)m 19(model.)m 42(Packets)m 19(are)m 19(viewed)m -62 2336 p (simply)s 9(as)m 11(byte)m 10(arrays.)m -20 2395 p (Constraint)s 11 r 50 c 12(means)m 13(that)m 12(we)m 13(must)m 12(provide)m 12 r 97 c 13(fairly)m 12(general)m -62 2445 p (computational)s 11(model,)m 12(with)m 11(control)m 12(\015ow)m -2 r 44 c 11(suf)m (\014cient)s 11(ALU)m 12(op-)m -62 2495 p (erations,)s 9(and)m 11(conventional)m 10(addressing)m 11(modes.)m -20 2553 p (Constraint)s 5 r 51 c 7(requires)m 6(that)m 7(we)m 6(only)m 7(ever)m 6(touch)m 7 r 97 c 6(given)m 7(packet)m -62 2603 p (word)s 6(once.)m 14(It)m 7(is)m 7(common)m 7(for)m 7 r 97 c 6(\014lter)m 7(to)m 7(compare)m 7 r 97 c 7(given)m 7(packet)m -62 2653 p (\014eld)s 5(against)m 7 r 97 c 6(set)m 6(of)m 7(values,)m 7(then)m 6(compare)m 7(another)m 6(\014eld)m 6(against)m -62 2703 p (another)s 10(set)m 11(of)m 11(values,)m 12(and)m 11(so)m 11(on.)m 17(For)m 11(example,)m 12 r 97 c 11(\014lter)m 11(might)m 1032 701 p (match)s 9(packets)m 8(addressed)m 9(to)m 8 r 97 c 9(set)m 9(of)m 8(machines,)m 9(or)m 9 r 97 c 8(set)m 9(of)m 9(TCP)m 1032 751 p (ports.)s 25(Ideally)m -2 r 44 c 13(we)m 14(would)m 13(like)m 14(to)m 13(cache)m 14(the)m 13(packet)m 14(\014eld)m 13(in)m 14 r 97 c 1032 801 p (register)s 9(and)m 10(compare)m 9(it)m 10(across)m 9(the)m 10(set)m 9(of)m 10(values.)m 15(If)m 10(the)m 9(\014eld)m 10(is)m 1032 850 p (encapsulated)s 12(in)m 13 r 97 c 12(variable)m 13(length)m 12(header)m -1 r 44 c 12(we)m 13(must)m 12(parse)m 13(the)m 1032 900 p (outer)s 13(headers)m 12(to)m 13(reach)m 13(the)m 12(data.)m 23(Furthermore,)m 13(on)m 13(alignment)m 1032 950 p (restricted)s 8(machines,)m 9(accessing)m 8(multi-byte)m 8(data)m 8(can)m 8(involve)m 8(an)m 1032 1000 p (expensive)s 13(byte-by-byte)m 14(load.)m 24(Also,)m 14(for)m 14(packets)m 13(in)m t-ita.300 @sf 14(mbufs)m t-rom.300 @sf 44 c 14 r 97 c 1032 1050 p (\014eld)s 11(access)m 10(may)m 11(involve)m 10(traversing)m 11(an)m t-ita.300 @sf 11(mbuf)m t-rom.300 @sf 10(chain.)m 17(After)m 10(we)m 1032 1099 p (have)s 10(done)m 11(this)m 10(work)m 11(once,)m 10(we)m 10(should)m 11(not)m 10(do)m 11(it)m 10(again.)m 1073 1158 p (Constraint)s 12 r 52 c 12(means)m 12(that)m 11(we)m 12(will)m 12(have)m 12(an)m 11(ef)m (\014cient)s 11(instruc-)m 1032 1208 p (tion)s 11(decoding)m 11(step)m 10(but)m 11(it)m 11(precludes)m 11(an)m 10(orthogonal)m 11(addressing)m 1032 1258 p (mode)s 9(design)m 9(unless)m 9(we)m 9(are)m 9(willing)m 9(to)m 9(accommodate)m 9 r 97 c 10(combi-)m 1032 1308 p (natorial)s 10(explosion)m 11(of)m 10(switch)m 11(cases.)m 15(For)m 11(example,)m 10(while)m 10(three)m 1032 1357 p (address)s 12(instructions)m 13(make)m 13(sense)m 12(for)m 13 r 97 c 12(real)m 13(processor)m 12(\(where)m 1032 1407 p (much)s 7(work)m 6(is)m 7(done)m 7(in)m 7(parallel\))m 6(the)m 7(sequential)m 7(execution)m 7(model)m 1032 1457 p (of)s 15(an)m 14(interpreter)m 15(means)m 14(that)m 15(each)m 14(address)m 15(descriptor)m 14(would)m 1032 1507 p (have)s 17(to)m 17(be)m 16(decoded)m 17(serially)m -1 r 46 c 33 r 65 c 17(single)m 17(address)m 17(instruction)m 1032 1557 p (format)s 16(minimizes)m 15(the)m 16(decode,)m 17(while)m 15(maintaining)m 16(suf)m (\014cient)s 1032 1607 p (generality)s -2 r 46 c 1073 1665 p (Finally)s -1 r 44 c 7(Constraint)m 8 r 53 c 8(is)m 8 r 97 c 8(straightforward)m 7(performance)m 8(con-)m 1032 1715 p (sideration.)s 15(Along)m 7(with)m 7(constraint)m 7(4,)m 8(it)m 7(enforces)m 7(the)m 7(notion)m 7(that)m 1032 1765 p (the)s 10(pseudo-machine)m 11(register)m 10(set)m 11(should)m 10(be)m 10(small.)m 1073 1824 p (These)s 16(constraints)m 16(prompted)m 15(the)m 16(adoption)m 16(of)m 15(an)m 16(accumu-)m 1032 1873 p (lator)s 15(machine)m 15(model.)m 31(Under)m 15(this)m 15(model,)m 17(each)m 15(node)m 15(in)m 15(the)m 1032 1923 p (\015owgraph)s 11(computes)m 11(its)m 11(corresponding)m 11(predicate)m 10(by)m 11(comput-)m 1032 1973 p (ing)s 10 r 97 c 9(value)m 10(into)m 9(the)m 10(accumulator)m 9(and)m 10(branching)m 9(based)m 10(on)m 9(that)m 1032 2023 p (value.)s 25(Figure)m 14 r 55 c 13(shows)m 14(the)m 13(\014lter)m 14(function)m 14(of)m 13(Figure)m 14 r 53 c 13(using)m 1032 2073 p (the)s 10(BPF)m 11(instruction)m 10(set.)m t-bol.360 @sf 1032 2200 p (3.3)s 50(The)m 12(BPF)m 13(Pseudo-Machine)m t-rom.300 @sf 1032 2287 p (The)s 10(BPF)m 10(machine)m 11(abstraction)m 10(consists)m 10(of)m 10(an)m 11(accumulator)m -1 r 44 c 9(an)m 1032 2337 p (index)s 15(register)m 14 r 40 c t-ita.300 @sf 120 c t-rom.300 @sf (\),)s 16 r 97 c 15(scratch)m 15(memory)m 15(store,)m 15(and)m 15(an)m 15(implicit)m 1032 2387 p (program)s 14(counter)m -2 r 46 c 24(The)m 14(operations)m 13(on)m 14(these)m 13(elements)m 14(can)m 13(be)m 1032 2437 p (categorized)s 10(into)m 11(the)m 10(following)m 11(groups:)m 1063 2537 p (1.)s t-romsc.300 @sf 21(Load)m 10(Instructions)m t-rom.300 @sf 10(copy)m 9 r 97 c 10(value)m 10(into)m 10(the)m 10(accumulator)m 1115 2587 p (or)s 8(index)m 7(register)m -1 r 46 c 13(The)m 8(source)m 8(can)m 7(be)m 8(an)m 7(immediate)m 8(value,)m 1115 2636 p (packet)s 15(data)m 14(at)m 15 r 97 c 14(\014xed)m 15(of)m (fset,)s 14(packet)m 15(data)m 15(at)m 14 r 97 c 15(variable)m 1115 2686 p (of)s (fset,)s 10(the)m 10(packet)m 10(length,)m 11(or)m 10(the)m 11(scratch)m 10(memory)m 11(store.)m @eop restore %%Page: 7 7 save /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-SmallCaps /Times-Roman SmallCapsFont /Times-SmallCaps /t-romsc.300 ReEncodeForTeX /t-romsc.300 /t-romsc.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.270 ReEncodeForTeX /t-ita.270 /t-ita.270 37.499947 TeXPSmakefont def /Courier /c-med.270 ReEncodeForTeX /c-med.270 /c-med.270 37.499947 TeXPSmakefont def /Courier /c-med.300 ReEncodeForTeX /c-med.300 /c-med.300 41.666629 TeXPSmakefont def 7 @bop1 t-obl.300 @sf -62 -99 p 87 c -2(inter)m 13(USENIX)m 14 r 123 c 14(Jan.,)m 14(1993)m 14 r 123 c 13(San)m 14(Diego,)m 14(CA)m t-rom.300 @sf 1270 r 55 c 20 4 p 13261400 11404804 9406791 25983795 24799723 39337492 startTexFig 50 dict begin /arrowHeight 8 def /arrowWidth 4 def /none null def /numGraphicParameters 17 def /stringLimit 65535 def /Begin { save numGraphicParameters dict begin } def /End { end restore } def /SetB { dup type /nulltype eq { pop false /brushRightArrow idef false /brushLeftArrow idef true /brushNone idef } { /brushDashOffset idef /brushDashArray idef 0 ne /brushRightArrow idef 0 ne /brushLeftArrow idef /brushWidth idef false /brushNone idef } ifelse } def /SetCFg { /fgblue idef /fggreen idef /fgred idef } def /SetCBg { /bgblue idef /bggreen idef /bgred idef } def /SetF { /printSize idef /printFont idef } def /SetP { dup type /nulltype eq { pop true /patternNone idef } { /patternGrayLevel idef patternGrayLevel -1 eq { /patternString idef } if false /patternNone idef } ifelse } def /BSpl { 0 begin storexyn newpath n 1 gt { 0 0 0 0 0 0 1 1 true subspline n 2 gt { 0 0 0 0 1 1 2 2 false subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline } if n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Circ { newpath 0 360 arc patternNone not { ifill } if brushNone not { istroke } if } def /CBSpl { 0 begin dup 2 gt { storexyn newpath n 1 sub dup 0 0 1 1 2 2 true subspline 1 1 n 3 sub { /i exch def i 1 sub dup i dup i 1 add dup i 2 add dup false subspline } for n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline n 2 sub dup n 1 sub dup 0 0 1 1 false subspline patternNone not { ifill } if brushNone not { istroke } if } { Poly } ifelse end } dup 0 4 dict put def /Elli { 0 begin newpath 4 2 roll translate scale 0 0 1 0 360 arc patternNone not { ifill } if brushNone not { istroke } if end } dup 0 1 dict put def /Line { 0 begin 2 storexyn newpath x 0 get y 0 get moveto x 1 get y 1 get lineto brushNone not { istroke } if 0 0 1 1 leftarrow 0 0 1 1 rightarrow end } dup 0 4 dict put def /MLine { 0 begin storexyn newpath n 1 gt { x 0 get y 0 get moveto 1 1 n 1 sub { /i exch def x i get y i get lineto } for patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if brushNone not { istroke } if 0 0 1 1 leftarrow n 2 sub dup n 1 sub dup rightarrow } if end } dup 0 4 dict put def /Poly { 3 1 roll newpath moveto -1 add { lineto } repeat closepath patternNone not { ifill } if brushNone not { istroke } if } def /Rect { 0 begin /t exch def /r exch def /b exch def /l exch def newpath l b moveto l t lineto r t lineto r b lineto closepath patternNone not { ifill } if brushNone not { istroke } if end } dup 0 4 dict put def /Text { ishow } def /idef { dup where { pop pop pop } { exch def } ifelse } def /ifill { 0 begin gsave patternGrayLevel -1 ne { fgred bgred fgred sub patternGrayLevel mul add fggreen bggreen fggreen sub patternGrayLevel mul add fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor eofill } { eoclip originalCTM setmatrix pathbbox /t exch def /r exch def /b exch def /l exch def /w r l sub ceiling cvi def /h t b sub ceiling cvi def /imageByteWidth w 8 div ceiling cvi def /imageHeight h def bgred bggreen bgblue setrgbcolor eofill fgred fggreen fgblue setrgbcolor w 0 gt h 0 gt and { l b translate w h scale w h true [w 0 0 h neg 0 h] { patternproc } imagemask } if } ifelse grestore end } dup 0 8 dict put def /istroke { gsave brushDashOffset -1 eq { [] 0 setdash 1 setgray } { brushDashArray brushDashOffset setdash fgred fggreen fgblue setrgbcolor } ifelse brushWidth setlinewidth originalCTM setmatrix stroke grestore } def /ishow { 0 begin gsave fgred fggreen fgblue setrgbcolor /fontDict printFont findfont printSize scalefont dup setfont def /descender fontDict begin 0 [FontBBox] 1 get FontMatrix end transform exch pop def /vertoffset 0 descender sub printSize sub printFont /Courier ne printFont /Courier-Bold ne and { 1 add } if def { 0 vertoffset moveto show /vertoffset vertoffset printSize sub def } forall grestore end } dup 0 3 dict put def /patternproc { 0 begin /patternByteLength patternString length def /patternHeight patternByteLength 8 mul sqrt cvi def /patternWidth patternHeight def /patternByteWidth patternWidth 8 idiv def /imageByteMaxLength imageByteWidth imageHeight mul stringLimit patternByteWidth sub min def /imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv patternHeight mul patternHeight max def /imageHeight imageHeight imageMaxHeight sub store /imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def 0 1 imageMaxHeight 1 sub { /y exch def /patternRow y patternByteWidth mul patternByteLength mod def /patternRowString patternString patternRow patternByteWidth getinterval def /imageRow y imageByteWidth mul def 0 patternByteWidth imageByteWidth 1 sub { /x exch def imageString imageRow x add patternRowString putinterval } for } for imageString end } dup 0 12 dict put def /min { dup 3 2 roll dup 4 3 roll lt { exch } if pop } def /max { dup 3 2 roll dup 4 3 roll gt { exch } if pop } def /arrowhead { 0 begin transform originalCTM itransform /taily exch def /tailx exch def transform originalCTM itransform /tipy exch def /tipx exch def /dy tipy taily sub def /dx tipx tailx sub def /angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def gsave originalCTM setmatrix tipx tipy translate angle rotate newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath patternNone not { originalCTM setmatrix /padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul arrowWidth div def /padtail brushWidth 2 div def tipx tipy translate angle rotate padtip 0 translate arrowHeight padtip add padtail add arrowHeight div dup scale arrowheadpath ifill } if brushNone not { originalCTM setmatrix tipx tipy translate angle rotate arrowheadpath istroke } if grestore end } dup 0 9 dict put def /arrowheadpath { newpath 0 0 moveto arrowHeight neg arrowWidth 2 div lineto arrowHeight neg arrowWidth 2 div neg lineto closepath } def /leftarrow { 0 begin y exch get /taily exch def x exch get /tailx exch def y exch get /tipy exch def x exch get /tipx exch def brushLeftArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /rightarrow { 0 begin y exch get /tipy exch def x exch get /tipx exch def y exch get /taily exch def x exch get /tailx exch def brushRightArrow { tipx tipy tailx taily arrowhead } if end } dup 0 4 dict put def /midpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 x1 add 2 div y0 y1 add 2 div end } dup 0 4 dict put def /thirdpoint { 0 begin /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 2 mul x1 add 3 div y0 2 mul y1 add 3 div end } dup 0 4 dict put def /subspline { 0 begin /movetoNeeded exch def y exch get /y3 exch def x exch get /x3 exch def y exch get /y2 exch def x exch get /x2 exch def y exch get /y1 exch def x exch get /x1 exch def y exch get /y0 exch def x exch get /x0 exch def x1 y1 x2 y2 thirdpoint /p1y exch def /p1x exch def x2 y2 x1 y1 thirdpoint /p2y exch def /p2x exch def x1 y1 x0 y0 thirdpoint p1x p1y midpoint /p0y exch def /p0x exch def x2 y2 x3 y3 thirdpoint p2x p2y midpoint /p3y exch def /p3x exch def movetoNeeded { p0x p0y moveto } if p1x p1y p2x p2y p3x p3y curveto end } dup 0 17 dict put def /storexyn { /n exch def /y n array def /x n array def n 1 sub -1 0 { /i exch def y i 3 2 roll put x i 3 2 roll put } for } def Begin [ 0.8 0 0 0.8 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 94 446 77 368 95 339 145 316 4 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 118 355 115 343 151 320 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 207 402 225 371 275 325 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 167 491 195 459 195 428 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 274 424 245 363 199 324 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 301 475 292 456 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 312 431 314 373 297 325 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 343 478 359 392 309 322 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 261 522 298 501 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 162 403 147 385 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 160 359 261 321 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 127 452 160 444 175 428 3 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 131 492 112 469 2 BSpl End Begin %I BSpl 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0 SetP [ 1 0 0 1 109 197 ] concat 206 527 175 520 163 508 3 BSpl End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 72 461 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 -15 504 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.13846 0 0 1 18.0615 357 ] concat 177 295 32 12 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 108 216 ] concat 177 295 32 12 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 216 215 ] concat 177 295 32 12 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 382 515 ] concat [ (TRUE) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 271 516 ] concat [ (FALSE) ] Text End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 -61 385 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 -115 343 ] concat 357 223 35 17 Elli End Begin %I Elli 1 0 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 43 412 ] concat 357 223 35 17 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 315 737 ] concat [ (ldh [12]) (jeq #0x800) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 221 576 ] concat [ (ld [38]) (jeq #foo) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 276 618 ] concat [ (ld [28]) (jeq #foo) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 407 694 ] concat [ (ld [26]) (jeq #foo) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 379 645 ] concat [ (ld [30]) (jeq #foo) ] Text End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1.13846 0 0 1 54.0615 397 ] concat 177 295 32 12 Elli End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 226 697 ] concat [ (jeq #0x805) ] Text End Begin %I Text 0 0 0 SetCFg /Courier 10 SetF [ 1 0 0 1 186 656 ] concat [ (jeq #0x8035) ] Text End End %I eop showpage end endTexFig 100 817 p (Figure)s 10(7:)m h-med.300 @sf 16(BPF)m 12(Program)m 11(for)m 12(\\host)m 11(foo".)m t-rom.300 @sf -31 951 p (2.)s t-romsc.300 @sf 20(Store)m 17(Instructions)m t-rom.300 @sf 16(copy)m 17(either)m 17(the)m 17(accumulator)m 17(or)m 20 1001 p (index)s 10(register)m 11(into)m 10(the)m 11(scratch)m 10(memory)m 11(store.)m -31 1084 p (3.)s t-romsc.300 @sf 20(ALU)m 11(Instructions)m t-rom.300 @sf 11(perform)m 12(arithmetic)m 11(or)m 11(logic)m 12(on)m 11(the)m 20 1134 p (accumulator)s 10(using)m 10(the)m 10(index)m 11(register)m 10(or)m 10 r 97 c 10(constant)m 10(as)m 10(an)m 20 1183 p (operand.)s -31 1266 p (4.)s t-romsc.300 @sf 20(Branch)m 11(Instructions)m t-rom.300 @sf 11(alter)m 11(the)m 11(\015ow)m 11(of)m 11(control,)m 11(based)m 20 1316 p (on)s 10(comparison)m 11(test)m 10(between)m 11 r 97 c 10(constant)m 10(or)m t-ita.300 @sf 11 r 120 c t-rom.300 @sf 10(register)m 10(and)m 20 1366 p (the)s 10(accumulator)m -1 r 46 c -31 1449 p (5.)s t-romsc.300 @sf 20(Return)m 6(Instructions)m t-rom.300 @sf 7(terminate)m 7(the)m 6(\014lter)m 7(and)m 6(indicated)m 20 1499 p (what)s 13(portion)m 14(of)m 13(the)m 14(packet)m 13(to)m 14(save.)m 24(The)m 14(packet)m 13(is)m 14(dis-)m 20 1549 p (carded)s 10(entirely)m 11(if)m 10(the)m 11(\014lter)m 10(returns)m 11(0.)m -31 1632 p (6.)s t-romsc.300 @sf 20(Miscellaneous)m 21(Instructions)m t-rom.300 @sf 20(comprise)m 21(everything)m 20 1682 p (else)s 10 r 124 c 11(currently)m -2 r 44 c 10(register)m 10(transfer)m 10(instructions.)m -20 1782 p (The)s 14(\014xed-length)m 15(instruction)m 15(format)m 15(is)m 15(de\014ned)m 15(by)m 15(as)m 15(fol-)m -62 1832 p (lows:)s 221 1888 p 437 2 ru 220 1938 p 2 50 ru 246 1923 p (opcode:16)s 444 1938 p 2 50 ru 470 1923 p (jt:8)s 549 1938 p 2 50 ru 575 1923 p (jf:8)s 657 1938 p 2 50 ru 221 1940 p 437 2 ru 220 1990 p 2 50 ru 402 1975 p (k:32)s 657 1990 p 2 50 ru 221 1991 p 437 2 ru -20 2075 p (The)s t-ita.300 @sf 6(opcode)m t-rom.300 @sf 7(\014eld)m 7(indicates)m 7(the)m 7(instruction)m 7(type)m 7(and)m 7(address-)m -62 2124 p (ing)s 13(modes.)m 26(The)m t-ita.300 @sf 13(jt)m t-rom.300 @sf 14(and)m t-ita.300 @sf 14(jf)m t-rom.300 @sf 14(\014elds)m 13(are)m 14(used)m 14(by)m 14(the)m 14(conditional)m -62 2174 p (jump)s 7(instructions)m 8(and)m 8(are)m 7(the)m 8(of)m (fsets)s 7(from)m 8(the)m 8(next)m 8(instruction)m -62 2224 p (to)s 8(the)m 9(true)m 8(and)m 9(false)m 9(tar)m (gets.)s 14(The)m t-ita.300 @sf 9 r 107 c t-rom.300 @sf 9(\014eld)m 9(is)m 8 r 97 c 9(generic)m 9(\014eld)m 9(used)m -62 2274 p (for)s 9(various)m 11(purposes.)m -20 2333 p 84 c -3(able)m 14 r 49 c 16(shows)m 16(the)m 16(entire)m 16(BPF)m 16(instruction)m 15(set.)m 32 r 87 c -2 r 101 c 15(have)m -62 2382 p (adopted)s 15(this)m 15(\\assembler)m 16(syntax")m 16(as)m 15 r 97 c 16(means)m 16(of)m 15(illustrating)m -62 2432 p (BPF)s 11(\014lters)m 11(and)m 12(for)m 12(debugging)m 11(output.)m 20(The)m 11(actual)m 12(encodings)m -62 2482 p (are)s 9(de\014ned)m 9(with)m 10 r 67 c 9(macros,)m 10(the)m 10(details)m 9(of)m 10(which)m 10(we)m 9(omit)m 10(here)m -62 2532 p (\(see)s 6 r 91 c 54 c 93 c 7(for)m 6(full)m 7(details\).)m 15(The)m 6(column)m 7(labelled)m t-ita.300 @sf 7(addr)m 7(modes)m t-rom.300 @sf 7(lists)m -62 2582 p (the)s 13(addressing)m 13(modes)m 14(allowed)m 14(for)m 13(each)m 14(instruction)m 14(listed)m 13(in)m -62 2631 p (the)s t-ita.300 @sf 10(opcode)m t-rom.300 @sf 11(column.)m 18(The)m 12(semantics)m 11(of)m 11(the)m 11(addressing)m 12(modes)m -62 2681 p (are)s 9(listed)m 11(in)m 10 r 84 c -2(able)m 10(2.)m t-ita.270 @sf 1126 77 p (opcodes)s 273(addr)m 9(modes)m 1101 92 p 845 2 ru 1100 138 p 2 46 ru c-med.270 @sf 1126 124 p (ldb)s 1273 138 p 2 46 ru 1380 124 p ([k])s 1586 138 p 2 46 ru 1704 124 p ([x+k])s 1945 138 p 2 46 ru 1100 184 p 2 46 ru 1126 170 p (ldh)s 1273 184 p 2 46 ru 1380 170 p ([k])s 1586 184 p 2 46 ru 1704 170 p ([x+k])s 1945 184 p 2 46 ru 1101 185 p 845 2 ru 1100 231 p 2 46 ru 1126 217 p (ld)s 1273 231 p 2 46 ru 1299 217 p (#k)s 1368 231 p 2 46 ru 1393 217 p (#len)s 1507 231 p 2 46 ru 1533 217 p (M[k])s 1647 231 p 2 46 ru 1673 217 p ([k])s 1765 231 p 2 46 ru 1799 217 p ([x+k])s 1945 231 p 2 46 ru 1101 233 p 845 2 ru 1100 278 p 2 46 ru 1126 265 p (ldx)s 1273 278 p 2 46 ru 1299 265 p (#k)s 1368 278 p 2 46 ru 1393 265 p (#len)s 1507 278 p 2 46 ru 1533 265 p (M[k])s 1647 278 p 2 46 ru 1673 265 p (4*\([k]&0xf\))s 1945 278 p 2 46 ru 1101 280 p 845 2 ru 1100 326 p 2 46 ru 1126 312 p (st)s 1273 326 p 2 46 ru 1565 312 p (M[k])s 1945 326 p 2 46 ru 1100 371 p 2 46 ru 1126 358 p (stx)s 1273 371 p 2 46 ru 1565 358 p (M[k])s 1945 371 p 2 46 ru 1101 373 p 845 2 ru 1100 419 p 2 46 ru 1126 405 p (jmp)s 1273 419 p 2 46 ru 1598 405 p 76 c 1945 419 p 2 46 ru 1101 420 p 845 2 ru 1100 466 p 2 46 ru 1126 452 p (jeq)s 1273 466 p 2 46 ru 1497 452 p (#k,)s 23(Lt,)m 22(Lf)m 1945 466 p 2 46 ru 1100 512 p 2 46 ru 1126 498 p (jgt)s 1273 512 p 2 46 ru 1497 498 p (#k,)s 23(Lt,)m 22(Lf)m 1945 512 p 2 46 ru 1100 557 p 2 46 ru 1126 544 p (jge)s 1273 557 p 2 46 ru 1497 544 p (#k,)s 23(Lt,)m 22(Lf)m 1945 557 p 2 46 ru 1100 603 p 2 46 ru 1126 589 p (jset)s 1273 603 p 2 46 ru 1497 589 p (#k,)s 23(Lt,)m 22(Lf)m 1945 603 p 2 46 ru 1101 605 p 845 2 ru 1100 650 p 2 46 ru 1126 637 p (add)s 1273 650 p 2 46 ru 1408 637 p (#k)s 1620 650 p 2 46 ru 1766 637 p 120 c 1945 650 p 2 46 ru 1100 696 p 2 46 ru 1126 682 p (sub)s 1273 696 p 2 46 ru 1408 682 p (#k)s 1620 696 p 2 46 ru 1766 682 p 120 c 1945 696 p 2 46 ru 1100 742 p 2 46 ru 1126 728 p (mul)s 1273 742 p 2 46 ru 1408 728 p (#k)s 1620 742 p 2 46 ru 1766 728 p 120 c 1945 742 p 2 46 ru 1100 787 p 2 46 ru 1126 774 p (div)s 1273 787 p 2 46 ru 1408 774 p (#k)s 1620 787 p 2 46 ru 1766 774 p 120 c 1945 787 p 2 46 ru 1100 833 p 2 46 ru 1126 819 p (and)s 1273 833 p 2 46 ru 1408 819 p (#k)s 1620 833 p 2 46 ru 1766 819 p 120 c 1945 833 p 2 46 ru 1100 879 p 2 46 ru 1126 865 p (or)s 1273 879 p 2 46 ru 1408 865 p (#k)s 1620 879 p 2 46 ru 1766 865 p 120 c 1945 879 p 2 46 ru 1100 924 p 2 46 ru 1126 911 p (lsh)s 1273 924 p 2 46 ru 1408 911 p (#k)s 1620 924 p 2 46 ru 1766 911 p 120 c 1945 924 p 2 46 ru 1100 970 p 2 46 ru 1126 956 p (rsh)s 1273 970 p 2 46 ru 1408 956 p (#k)s 1620 970 p 2 46 ru 1766 956 p 120 c 1945 970 p 2 46 ru 1101 972 p 845 2 ru 1100 1017 p 2 46 ru 1126 1004 p (ret)s 1273 1017 p 2 46 ru 1408 1004 p (#k)s 1620 1017 p 2 46 ru 1766 1004 p 97 c 1945 1017 p 2 46 ru 1101 1019 p 845 2 ru 1100 1065 p 2 46 ru 1126 1051 p (tax)s 1273 1065 p 2 46 ru 672 r 2 46 ru 1100 1110 p 2 46 ru 1126 1097 p (txa)s 1273 1110 p 2 46 ru 672 r 2 46 ru 1101 1112 p 845 2 ru t-rom.300 @sf 1280 1230 p 84 c -2(able)m 9(1:)m h-med.300 @sf 16(BPF)m 11(Instruction)m 12(Set)m t-rom.300 @sf 1073 1355 p (The)s 10(load)m 10(instructions)m 10(simply)m 10(copy)m 10(the)m 10(indicated)m 10(value)m 10(into)m 1032 1405 p (the)s 16(accumulator)m 17 r 40 c c-med.300 @sf (ld)s t-rom.300 @sf 44 c c-med.300 @sf 18(ldh)m t-rom.300 @sf 44 c c-med.300 @sf 18(ldb)m t-rom.300 @sf 41 c 16(or)m 16(index)m 17(register)m 16 r 40 c c-med.300 @sf (ldx)s t-rom.300 @sf (\).)s 1032 1455 p (The)s 12(index)m 13(register)m 12(cannot)m 12(use)m 13(the)m 12(packet)m 13(addressing)m 12(modes.)m 1032 1505 p (Instead,)s 12 r 97 c 11(packet)m 12(value)m 11(must)m 12(be)m 11(loaded)m 12(into)m 11(the)m 12(accumulator)m 1032 1555 p (and)s 12(transferred)m 13(to)m 12(the)m 12(index)m 12(register)m 44 c 12(via)m c-med.300 @sf 12(tax)m t-rom.300 @sf 46 c 21(This)m 12(is)m 13(not)m 12 r 97 c 1032 1604 p (common)s 13(occurrence,)m 13(as)m 13(the)m 13(index)m 13(register)m 13(is)m 13(used)m 13(primarily)m 1032 1654 p (to)s 13(parse)m 13(the)m 12(variable)m 13(length)m 13(IP)m 13(header)m -1 r 44 c 12(which)m 13(can)m 13(be)m 13(loaded)m 1032 1704 p (directly)s 8(via)m 7(the)m c-med.300 @sf 8(4*\([k]&0xf\))m t-rom.300 @sf 7(addressing)m 8(mode.)m 14(All)m 8(values)m 1032 1754 p (are)s 13(32)m 13(bit)m 13(words,)m 14(except)m 13(packet)m 14(data)m 13(can)m 13(be)m 13(loaded)m 13(into)m 13(the)m 1032 1804 p (accumulator)s 10(as)m 10(unsigned)m 11(bytes)m 10 r 40 c c-med.300 @sf (ldb)s t-rom.300 @sf 41 c 10(or)m 10(unsigned)m 10(halfwords)m 1032 1854 p 40 c c-med.300 @sf (ldh)s t-rom.300 @sf (\).)s 23(Similarly)m -2 r 44 c 13(the)m 12(scratch)m 13(memory)m 13(store)m 13(is)m 13(addressed)m 13(as)m 1032 1903 p (an)s 9(array)m 10(of)m 9(32)m 10(bit)m 9(words.)m 16(The)m 9(instruction)m 10(\014elds)m 9(are)m 10(all)m 9(in)m 10(host)m 1032 1953 p (byte)s 8(order)m 44 c 7(and)m 9(the)m 8(load)m 8(instructions)m 9(convert)m 8(packet)m 8(data)m 8(from)m 1032 2003 p (network)s 13(order)m 14(to)m 13(host)m 13(order)m -1 r 46 c 24(Any)m 13(reference)m 13(to)m 14(data)m 13(beyond)m 1032 2053 p (the)s 10(end)m 11(of)m 10(the)m 10(packet)m 11(terminates)m 10(the)m 11(\014lter)m 10(with)m 10 r 97 c 11(return)m 10(value)m 1032 2103 p (of)s 10(zero)m 11(\(i.e.,)m 10(the)m 11(packet)m 10(is)m 10(discarded\).)m 1073 2161 p (The)s 14(ALU)m 13(operations)m 13 r 40 c c-med.300 @sf (add)s t-rom.300 @sf 44 c c-med.300 @sf 14(sub)m t-rom.300 @sf 44 c 14(etc.\))m 24(perform)m 13(the)m 14(indi-)m 1032 2211 p (cated)s 8(operation)m 9(using)m 8(the)m 8(accumulator)m 8(and)m 9(operand,)m 8(and)m 9(store)m 1032 2261 p (the)s 10(result)m 10(back)m 10(into)m 9(the)m 10(accumulator)m -1 r 46 c 14(Division)m 10(by)m 10(zero)m 10(termi-)m 1032 2311 p (nates)s 10(the)m 11(\014lter)m -1 r 46 c 1073 2370 p (The)s 10(jump)m 10(instructions)m 9(compare)m 10(the)m 10(value)m 9(in)m 10(the)m 10(accumula-)m 1032 2419 p (tor)s 8(with)m 9 r 97 c 8(constant)m 8 r 40 c c-med.300 @sf (jset)s t-rom.300 @sf 9(performs)m 8 r 97 c 8(\\bitwise)m 9(and")m 8 r 124 c 8(useful)m 1032 2469 p (for)s 13(conditional)m 13(bit)m 13(tests\).)m 24(If)m 13(the)m 13(result)m 13(is)m 13(true)m 14(\(or)m 13(non-zero\),)m 1032 2519 p (the)s 11(true)m 12(branch)m 11(is)m 11(taken,)m 12(otherwise)m 11(the)m 12(false)m 11(branch)m 12(is)m 11(taken.)m 1032 2569 p (Arbitrary)s 10(comparisons,)m 10(which)m 10(are)m 10(less)m 10(common,)m 9(can)m 10(be)m 10(done)m 1032 2619 p (by)s 14(subtracting)m 15(and)m 14(comparing)m 14(to)m 15(0.)m 27(Note)m 15(that)m 14(there)m 14(are)m 15(no)m c-med.300 @sf 1032 2668 p (jlt)s t-rom.300 @sf 44 c c-med.300 @sf 11(jle)m t-rom.300 @sf 11(or)m c-med.300 @sf 11(jne)m t-rom.300 @sf 11(opcodes)m 11(since)m 11(these)m 11(can)m 11(be)m 11(built)m 12(from)m 11(the)m @eop restore %%Page: 8 8 save /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Courier /c-med.270 ReEncodeForTeX /c-med.270 /c-med.270 37.499947 TeXPSmakefont def /Times-Roman /t-rom.270 ReEncodeForTeX /t-rom.270 /t-rom.270 37.499947 TeXPSmakefont def /Times-Italic /t-ita.270 ReEncodeForTeX /t-ita.270 /t-ita.270 37.499947 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Courier /c-med.300 ReEncodeForTeX /c-med.300 /c-med.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def 1 /cmsy10.300 @newfont cmsy10.300 @sf [<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF807E0> 16 16 -2 -2 20.755] 15 @dc 8 @bop1 t-rom.300 @sf -62 -99 p 56 c t-obl.300 @sf 1568(BPF)m 14 r 123 c 14(The)m 14(BSD)m 14(Packet)m 14(Filter)m -33 47 p 948 2 ru -34 92 p 2 46 ru c-med.270 @sf -8 79 p (#k)s 262 92 p 2 46 ru t-rom.270 @sf 288 79 p (the)s 10(literal)m 9(value)m 9(stored)m 10(in)m t-ita.270 @sf 9 r 107 c 912 92 p 2 46 ru -33 94 p 948 2 ru -34 140 p 2 46 ru c-med.270 @sf -8 126 p (#len)s 262 140 p 2 46 ru t-rom.270 @sf 288 126 p (the)s 10(length)m 9(of)m 9(the)m 10(packet)m 912 140 p 2 46 ru -33 141 p 948 2 ru -34 233 p 2 92 ru c-med.270 @sf -8 173 p (M[k])s 262 233 p 2 92 ru t-rom.270 @sf 288 173 p (the)s 10(word)m 10(at)m 10(of)m (fset)s t-ita.270 @sf 9 r 107 c t-rom.270 @sf 10(in)m 10(the)m 10(scratch)m 10(mem-)m 288 219 p (ory)s 10(store)m 912 233 p 2 92 ru -33 234 p 948 2 ru -34 326 p 2 92 ru c-med.270 @sf -8 266 p ([k])s 262 326 p 2 92 ru t-rom.270 @sf 288 266 p (the)s 7(byte,)m 8(halfword,)m 7(or)m 8(word)m 7(at)m 7(byte)m 7(of)m (fset)s t-ita.270 @sf 288 312 p 107 c t-rom.270 @sf 10(in)m 9(the)m 9(packet)m 912 326 p 2 92 ru -33 327 p 948 2 ru -34 419 p 2 92 ru c-med.270 @sf -8 359 p ([x+k])s 262 419 p 2 92 ru t-rom.270 @sf 288 359 p (the)s 8(byte,)m 8(halfword,)m 9(or)m 8(word)m 8(at)m 8(of)m (fset)s t-ita.270 @sf 7(x+k)m t-rom.270 @sf 288 405 p (in)s 10(the)m 9(packet)m 912 419 p 2 92 ru -33 420 p 948 2 ru -34 512 p 2 92 ru c-med.270 @sf -8 452 p 76 c 262 512 p 2 92 ru t-rom.270 @sf 288 452 p (an)s 11(of)m (fset)s 10(from)m 11(the)m 11(current)m 11(instruction)m 11(to)m 288 498 p 76 c 912 512 p 2 92 ru -33 513 p 948 2 ru -34 605 p 2 92 ru c-med.270 @sf -8 545 p (#k,)s 21(Lt,)m 23(Lf)m 262 605 p 2 92 ru t-rom.270 @sf 288 545 p (the)s 12(of)m (fset)s 12(to)m c-med.270 @sf 12(Lt)m t-rom.270 @sf 12(if)m 12(the)m 12(predicate)m 12(is)m 12(true,)m 288 591 p (otherwise)s 10(the)m 9(of)m (fset)s 9(to)m c-med.270 @sf 9(Lf)m 912 605 p 2 92 ru -33 606 p 948 2 ru -34 652 p 2 46 ru -8 638 p 120 c 262 652 p 2 46 ru t-rom.270 @sf 288 638 p (the)s 10(index)m 9(register)m 912 652 p 2 46 ru -33 654 p 948 2 ru -34 745 p 2 92 ru c-med.270 @sf -8 686 p (4*\([k]&0xf\))s 262 745 p 2 92 ru t-rom.270 @sf 288 686 p (four)s 10(times)m 10(the)m 10(value)m 10(of)m 10(the)m 10(low)m 9(four)m 10(bits)m 288 731 p (of)s 10(the)m 9(byte)m 9(at)m 10(of)m (fset)s t-ita.270 @sf 8 r 107 c t-rom.270 @sf 10(in)m 9(the)m 9(packet)m 912 745 p 2 92 ru -33 747 p 948 2 ru t-rom.300 @sf 145 864 p 84 c -1(able)m 9(2:)m h-med.300 @sf 16(BPF)m 11(Addressing)m 12(Modes)m t-rom.300 @sf -62 998 p (codes)s 12(above)m 13(by)m 13(reversing)m 14(the)m 13(branches.)m 24(Since)m 13(jump)m 13(of)m (fsets)s -62 1048 p (are)s 7(encoded)m 7(in)m 8(eight)m 7(bits,)m 9(the)m 7(longest)m 8(jump)m 8(is)m 7(256)m 8(instructions.)m -62 1098 p (Jumps)s 8(longer)m 9(than)m 9(this)m 9(are)m 9(conceivable,)m 9(so)m 9 r 97 c t-ita.300 @sf 9(jump)m 9(always)m t-rom.300 @sf 9(op-)m -62 1147 p (code)s 10(is)m 11(provided)m 11 r 40 c c-med.300 @sf (jmp)s t-rom.300 @sf 41 c 11(that)m 11(uses)m 10(the)m 11(32)m 11(bit)m 11(operand)m 11(\014eld)m 11(for)m -62 1197 p (the)s 9(of)m (fset.)s -20 1256 p (The)s 8(return)m 9(instructions)m 9(terminate)m 9(the)m 9(program)m 9(and)m 9(indicate)m -62 1306 p (how)s 13(many)m 14(bytes)m 14(of)m 14(the)m 14(packet)m 14(to)m 14(accept.)m 26(If)m 14(that)m 14(amount)m 14(is)m -62 1356 p (0,)s 16(the)m 15(packet)m 15(will)m 15(be)m 16(rejected)m 15(entirely)m -2 r 46 c 29(The)m 16(actual)m 15(amount)m -62 1405 p (accepted)s 8(will)m 9(be)m 9(the)m 9(minimum)m 8(of)m 9(the)m 9(length)m 9(of)m 9(the)m 9(packet)m 9(and)m -62 1455 p (the)s 9(amount)m 11(indicated)m 10(by)m 11(the)m 10(\014lter)m -1 r 46 c t-bol.360 @sf -62 1583 p (3.4)s 49(Examples)m t-rom.300 @sf -62 1670 p 87 c -3 r 101 c 5(now)m 7(present)m 6(some)m 7(examples)m 7(to)m 6(illustrate)m 7(how)m 6(packet)m 7(\014lters)m -62 1719 p (can)s 13(be)m 14(expressed)m 14(using)m 14(the)m 14(BPF)m 14(instruction)m 14(set.)m 26(\(In)m 14(all)m 14(the)m -62 1769 p (examples)s 8(that)m 9(follow)m -2 r 44 c 8(we)m 9(assume)m 9(Ethernet)m 9(format)m 9(for)m 9(the)m 9(link)m -62 1819 p (level)s 9(headers.\))m -20 1878 p (This)s 9(\014lter)m 10(accepts)m 11(all)m 10(IP)m 11(packets:)m t-rom.240 @sf 266 1969 p (ldh)s 50([12])m 266 2009 p (jeq)s 52(#ETHER)m -1(TYPE)m 1 r 10 2 ru 10(IP)m -3 r 44 c 7(L1,)m 9(L2)m 170 2048 p (L1:)s 50(ret)m 57(#TRUE)m 170 2087 p (L2:)s 50(ret)m 57(#0)m t-rom.300 @sf -20 2182 p (The)s 7(\014rst)m 8(instruction)m 8(loads)m 8(the)m 8(Ethernet)m 8(type)m 8(\014eld.)m 15 r 87 c -3 r 101 c 7(com-)m -62 2232 p (pare)s 11(this)m 12(to)m 12(type)m 12(IP)m -4 r 46 c 11(If)m 12(the)m 12(comparison)m 12(fails,)m 13(zero)m 12(is)m 12(returned)m -62 2282 p (and)s 13(the)m 15(packet)m 14(is)m 14(rejected.)m 28(If)m 14(it)m 15(is)m 14(successful,)m 15(TRUE)m 15(is)m 14(re-)m -62 2332 p (turned)s 10(and)m 12(the)m 11(packet)m 11(is)m 11(accepted.)m 18(\(TRUE)m 12(is)m 11(some)m 11(non-zero)m -62 2382 p (value)s 9(that)m 11(represents)m 10(the)m 11(number)m 10(of)m 10(bytes)m 11(to)m 10(save.\))m -20 2440 p (This)s 10(next)m 11(\014lter)m 11(accepts)m 11(all)m 11(IP)m 12(packets)m 11(which)m 11(did)m 11(not)m 11(origi-)m -62 2490 p (nate)s 6(from)m 7(two)m 6(particular)m 7(IP)m 7(networks,)m 8(128.3.1)m -1(12)m 6(or)m 7(128.3.254.)m -62 2540 p (If)s 9(the)m 10(Ethernet)m 11(type)m 10(is)m 10(IP)m -4 r 44 c 9(the)m 11(IP)m 10(source)m 10(address)m 10(is)m 10(loaded)m 10(and)m -62 2590 p (the)s 9(high)m 9(24)m 10(bits)m 9(are)m 10(masked)m 10(of)m (f.)s 14(This)m 10(value)m 9(is)m 10(compared)m 9(with)m -62 2640 p (the)s 9(two)m 11(network)m 10(addresses:)m t-rom.240 @sf 1358 31 p (ldh)s 56([12])m 1358 71 p (jeq)s 57(#ETHER)m -1(TYPE)m 1 r 10 2 ru 10(IP)m -2 r 44 c 7(L1,)m 8(L4)m 1262 110 p (L1:)s 50(ld)m 72([26])m 1358 149 p (and)s 50(#0xf)m 102 c 102 c -1 r 102 c 102 c -1(f00)m 1358 189 p (jeq)s 57(#0x80037000,)m 9(L4,)m 8(L2)m 1262 228 p (L2:)s 50(jeq)m 57(#0x8003fe00,)m 8(L4,)m 9(L3)m 1262 268 p (L3:)s 50(ret)m 63(#TRUE)m 1262 307 p (L4:)s 50(ret)m 63(#0)m t-bol.360 @sf 1032 427 p (3.5)s 50(Parsing)m 12(Packet)m 13(Headers)m t-rom.300 @sf 1032 514 p (The)s 10(previous)m 11(examples)m 10(assume)m 11(that)m 10(the)m 11(data)m 10(of)m 11(interest)m 10(lie)m 11(at)m 1032 564 p (\014xed)s 10(of)m (fsets)s 10(in)m 11(the)m 10(packet.)m 16(This)m 10(is)m 11(not)m 10(the)m 11(case,)m 10(for)m 11(example,)m 1032 614 p (with)s 7(TCP)m 7(packets,)m 7(which)m 7(are)m 7(encapsulated)m 6(in)m 7 r 97 c 7(variable)m 7(length)m 1032 664 p (IP)s 12(header)m -2 r 46 c 19(The)m 11(start)m 12(of)m 12(TCP)m 11(header)m 12(must)m 12(be)m 11(computed)m 12(from)m 1032 713 p (the)s 10(length)m 11(given)m 10(in)m 11(the)m 10(IP)m 10(header)m -1 r 46 c 1073 772 p (The)s 13(IP)m 13(header)m 13(length)m 13(is)m 13(given)m 13(by)m 13(the)m 13(low)m 13(four)m 13(bits)m 13(of)m 13(the)m 1032 822 p (\014rst)s 15(byte)m 15(in)m 16(the)m 15(IP)m 15(section)m 15(\(byte)m 15(14)m 16(on)m 15(an)m 15(Ethernet\).)m 30(This)m 1032 872 p (value)s 11(is)m 12 r 97 c 11(word)m 12(of)m (fset,)s 10(and)m 12(must)m 11(be)m 12(scaled)m 11(by)m 11(four)m 12(to)m 11(get)m 12(the)m 1032 922 p (corresponding)s 12(byte)m 12(of)m (fset.)s 20(The)m 12(instructions)m 12(below)m 12(will)m 12(load)m 1032 971 p (this)s 10(of)m (fset)s 10(into)m 10(the)m 11(accumulator:)m t-rom.240 @sf 1455 1054 p (ldb)s 55([14])m 1455 1094 p (and)s 50(#0xf)m 1455 1133 p (lsh)s 59(#2)m t-rom.300 @sf 1073 1228 p (Once)s 14(the)m 14(IP)m 14(header)m 14(length)m 14(is)m 14(computed,)m 15(data)m 14(in)m 14(the)m 14(TCP)m 1032 1278 p (section)s 14(can)m 13(be)m 14(accessed)m 13(using)m 14(indirect)m 13(loads.)m 25(Note)m 14(that)m 14(the)m 1032 1328 p (ef)s (fective)s 10(of)m (fset)s 9(has)m 11(three)m 10(components:)m cmsy10.300 @sf 1073 1420 p 15 c t-rom.300 @sf 21(the)m 11(IP)m 10(header)m 10(length,)m cmsy10.300 @sf 1073 1503 p 15 c t-rom.300 @sf 21(the)m 11(link)m 10(level)m 10(header)m 11(length,)m 10(and)m cmsy10.300 @sf 1073 1586 p 15 c t-rom.300 @sf 21(the)m 11(data)m 10(of)m (fset)s 10(relative)m 10(to)m 11(the)m 10(TCP)m 10(header)m -1 r 46 c 1073 1678 p (For)s 11(example,)m 10(an)m 10(Ethernet)m 10(header)m 10(is)m 10(14)m 10(bytes)m 11(and)m 10(the)m 10(desti-)m 1032 1727 p (nation)s 12(port)m 11(in)m 12 r 97 c 11(TCP)m 12(packet)m 11(is)m 12(at)m 11(byte)m 12(two.)m 19(Thus,)m 12(adding)m 11(16)m 1032 1777 p (to)s 9(the)m 8(IP)m 9(header)m 8(length)m 9(gives)m 8(the)m 9(of)m (fset)s 7(to)m 9(the)m 8(TCP)m 9(destination)m 1032 1827 p (port.)s 15(The)m 8(previous)m 8(code)m 8(segment)m 9(is)m 8(shown)m 8(below)m -2 r 44 c 8(augmented)m 1032 1877 p (to)s 10(test)m 11(the)m 10(TCP)m 11(destination)m 10(port)m 10(against)m 11(some)m 10(value)m t-ita.300 @sf 11 r 78 c t-rom.300 @sf 58 c t-rom.240 @sf 1447 1968 p (ldb)s 55([14])m 1447 2008 p (and)s 50(#0xf)m 1447 2047 p (lsh)s 59(#2)m 1447 2086 p (tax)s 1447 2126 p (ldh)s 55([x+16])m 1447 2165 p (jeq)s 57(#N,)m 9(L1,)m 8(L2)m 1351 2205 p (L1:)s 50(ret)m 63(#TRUE)m 1351 2244 p (L2:)s 50(ret)m 63(#0)m t-rom.300 @sf 1073 2339 p (Because)s 7(the)m 7(IP)m 6(header)m 7(length)m 6(calculation)m 7(is)m 6 r 97 c 7(common)m 6(oper-)m 1032 2389 p (ation,)s 10(the)m c-med.300 @sf 10(4*\([k]&0xf\))m t-rom.300 @sf 11(addressing)m 10(mode)m 10(was)m 10(introduced.)m 1032 2439 p (Substituting)s 10(in)m 11(the)m c-med.300 @sf 10(ldx)m t-rom.300 @sf 11(instruction)m 10(simpli\014es)m 10(the)m 11(\014lter)m 10(into:)m t-rom.240 @sf 1446 2530 p (ldx)s 49(4*\([14]&0xf\))m 1446 2569 p (ldh)s 49([x+16])m 1446 2609 p (jeq)s 51(#N,)m 9(L1,)m 8(L2)m 1349 2648 p (L1:)s 50(ret)m 58(#TRUE)m 1349 2688 p (L2:)s 50(ret)m 58(#0)m @eop restore %%Page: 9 9 save /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Roman /t-rom.240 ReEncodeForTeX /t-rom.240 /t-rom.240 33.333265 TeXPSmakefont def /Times-Bold /t-bol.360 ReEncodeForTeX /t-bol.360 /t-bol.360 49.999929 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.420 ReEncodeForTeX /t-bol.420 /t-bol.420 58.333229 TeXPSmakefont def /Times-Roman /t-rom.210 ReEncodeForTeX /t-rom.210 /t-rom.210 29.166582 TeXPSmakefont def /Times-Roman /t-rom.180 ReEncodeForTeX /t-rom.180 /t-rom.180 24.999965 TeXPSmakefont def 9 @bop1 t-obl.300 @sf -62 -99 p 87 c -2(inter)m 13(USENIX)m 14 r 123 c 14(Jan.,)m 14(1993)m 14 r 123 c 13(San)m 14(Diego,)m 14(CA)m t-rom.300 @sf 1270 r 57 c -20 45 p (However)s -2 r 44 c 12(the)m 13(above)m 13(\014lter)m 13(is)m 13(valid)m 13(only)m 13(if)m 13(the)m 13(data)m 12(we)m 13(are)m -62 95 p (looking)s 11(at)m 13(is)m 12(really)m 13 r 97 c 12(TCP/IP)m 13(header)m -1 r 46 c 20(Hence,)m 13(the)m 13(\014lter)m 12(must)m -62 145 p (also)s 11(check)m 11(that)m 12(link)m 11(layer)m 12(type)m 11(is)m 12(IP)m -4 r 44 c 11(and)m 11(that)m 12(the)m 11(IP)m 12(protocol)m -62 195 p (type)s 8(is)m 9(TCP)m -3 r 46 c 8(Also,)m 9(the)m 9(IP)m 10(layer)m 9(might)m 9(fragment)m 9 r 97 c 9(TCP)m 9(packet,)m -62 244 p (in)s 8(which)m 9(case)m 9(the)m 9(TCP)m 10(header)m 9(is)m 9(present)m 9(only)m 9(in)m 9(the)m 9(\014rst)m 9(frag-)m -62 294 p (ment.)s 25(Hence,)m 15(any)m 14(packets)m 14(with)m 13 r 97 c 14(non-zero)m 14(fragment)m 14(of)m (fset)s -62 344 p (should)s 9(be)m 11(rejected.)m 15(The)m 11(\014nal)m 10(\014lter)m 11(is)m 10(shown)m 11(below:)m t-rom.240 @sf 250 430 p (ldh)s 54([12])m 250 469 p (jeq)s 56(#ETHERPROT)m 79 c 1 r 10 2 ru 10(IP)m -2 r 44 c 7(L1,)m 8(L5)m 154 509 p (L1:)s 50(ldb)m 54([23])m 250 548 p (jeq)s 56(#IPPROT)m 79 c 1 r 10 2 ru 10(TCP)m -2 r 44 c 7(L2,)m 8(L5)m 154 588 p (L2:)s 50(ldh)m 54([20])m 250 627 p (jset)s 50(#0x1f)m 102 c (f,)s 7(L5,)m 9(L3)m 154 667 p (L3:)s 50(ldx)m 54(4*\([14]&0xf\))m 250 706 p (ldh)s 54([x+16])m 250 745 p (jeq)s 56(#N,)m 8(L4,)m 9(L5)m 154 785 p (L4:)s 50(ret)m 61(#TRUE)m 154 824 p (L5:)s 50(ret)m 61(#0)m t-bol.360 @sf -62 943 p (3.6)s 49(Filter)m 12(Performance)m 13(Measur)m (ements)s t-rom.300 @sf -20 1029 p 87 c -4 r 101 c 7(pro\014led)m 8(the)m 9(BPF)m 8(and)m 8(CSPF)m 8(\014ltering)m 8(models)m 8(outside)m 8(the)m -62 1078 p (kernel)s 10(using)m t-ita.300 @sf 12(ipr)m -1(of)m t-rom.300 @sf 10 r 91 c 57 c (],)s 12(an)m 11(instruction)m 12(count)m 11(pro\014ler)m -1 r 46 c 17 r 84 c -2 r 111 c 10(fully)m -62 1128 p (compare)s 11(the)m 11(two)m 12(models,)m 12(an)m 12(indirection)m 12(operator)m 12(was)m 11(added)m -62 1178 p (to)s 9(CSPF)m 9(so)m 10(it)m 10(could)m 10(parse)m 9(IP)m 10(headers.)m 16(The)m 9(change)m 10(was)m 10(minor)m -62 1228 p (and)s 5(did)m 7(not)m 6(adversely)m 7(af)m (fect)s 5(the)m 7(original)m 6(\014ltering)m 6(performance.)m -62 1278 p 84 c -3(ests)m 6(were)m 7(run)m 7(on)m 8(lar)m (ge)s 6(packet)m 7(trace)m 7(\014les)m 7(gathered)m 7(from)m 8 r 97 c 7(busy)m -62 1328 p (UC)s 7(Berkeley)m 8(campus)m 9(network.)m 14(Figure)m 9 r 56 c 8(shows)m 8(the)m 8(results)m 8(for)m -62 1377 p (four)s 9(fairly)m 11(typical)m 10(\014lters.)m -20 1435 p (Filter)s 11 r 49 c 13(is)m 13(trivial.)m 24(It)m 13(tests)m 13(whether)m 13(one)m 13(16)m 13(bit)m 13(word)m 13(in)m 13(the)m -62 1485 p (packet)s 10(is)m 10 r 97 c 11(given)m 10(value.)m 16(The)m 11(two)m 10(models)m 11(are)m 10(fairly)m 11(compara-)m -62 1535 p (ble,)s 9(with)m 11(BPF)m 10(faster)m 11(by)m 10(about)m 10(50%.)m -20 1593 p (Filter)s 12 r 50 c 14(looks)m 14(for)m 14 r 97 c 14(particular)m 14(IP)m 14(host)m 14(\(source)m 14(or)m 14(destina-)m -62 1642 p (tion\))s 11(and)m 13(shows)m 12(more)m 13(of)m 12 r 97 c 12(disparity|a)m 13(performance)m 12(gap)m 13(of)m -62 1692 p (240%.)s 14(The)m 7(lar)m (ger)s 6(dif)m (ference)s 7(here)m 7(is)m 7(due)m 7(mostly)m 8(to)m 7(the)m 7(fact)m 7(that)m -62 1742 p (CSPF)s 10(operates)m 11(only)m 11(on)m 11(16)m 11(bit)m 11(words)m 10(and)m 11(needs)m 11(two)m 11(compar-)m -62 1792 p (ison)s 10(operations)m 11(to)m 11(determine)m 11(the)m 11(equality)m 11(of)m 11 r 97 c 10(32)m 11(bit)m 11(Internet)m -62 1842 p (address.)s -20 1900 p (Filter)s 8 r 51 c 9(is)m 10(an)m 9(example)m 9(of)m 10(packet)m 9(parsing)m 9(\(required)m 9(to)m 10(locate)m -62 1949 p (the)s 14(TCP)m 14(destination)m 15(port)m 15(\014eld\))m 15(and)m 14(illustrates)m 15 r 97 c 15(yet)m 14(greater)m -62 1999 p (performance)s 16(gap.)m 35(The)m 17(BPF)m 17(\014lter)m 17(parses)m 17(the)m 16(packet)m 17(once,)m -62 2049 p (loading)s 8(the)m 8(port)m 9(\014eld)m 8(into)m 9(the)m 9(accumulator)m 8(then)m 9(simply)m 8(does)m 9 r 97 c -62 2099 p (comparison)s 9(cascade)m 10(of)m 10(the)m 10(interesting)m 10(ports.)m 15(The)m 10(CSPF)m 10(\014lter)m -62 2149 p (must)s 13(re-do)m 14(the)m 15(parse)m 14(and)m 14(relocate)m 14(the)m 14(TCP)m 14(header)m 15(for)m 14(each)m -62 2198 p (port)s 9(to)m 11(be)m 10(tested.)m -20 2256 p (Finally)s -3 r 44 c 9(\014lter)m 11 r 53 c 10(demonstrates)m 11(the)m 10(ef)m (fect)s 10(of)m 11(the)m 10(unnecessary)m -62 2306 p (computations)s 15(done)m 15(by)m 16(CSPF)m 15(for)m 16 r 97 c 15(\014lter)m 16(similar)m 15(to)m 16(the)m 15(one)m -62 2356 p (described)s 9(in)m 11(\014gures)m 10 r 54 c 11(and)m 10(5.)m t-bol.420 @sf -62 2503 p 52 c 57(Applications)m t-rom.300 @sf -62 2604 p (BPF)s 10(is)m 10(now)m 11(about)m 10(two)m 11(years)m 10(old)m 11(and)m 10(has)m 11(been)m 10(put)m 11(to)m 10(work)m 11(in)m -62 2654 p (several)s 11(applications.)m 22(The)m 13(most)m 12(widely)m 13(used)m 12(is)m t-ita.300 @sf 13(tcpdump)m t-rom.300 @sf 12 r 91 c 52 c (],)s -62 2704 p 97 c 14(network)m 15(monitoring)m 15(and)m 15(data)m 15(acquisition)m 16(tool.)m 29 r 84 c -2(cpdump)m 1032 45 p (performs)s 15(three)m 16(primary)m 15(tasks:)m 26(\014lter)m 16(translation,)m 16(packet)m 16(ac-)m 1032 95 p (quisition,)s 17(and)m 15(packet)m 16(display)m -2 r 46 c 30(Of)m 15(interest)m 16(here)m 15(is)m 16(the)m 15(\014lter)m 1032 145 p (translation)s 18(mechanism.)m 40 r 65 c 19(\014lter)m 18(is)m 19(speci\014ed)m 18(with)m 19 r 97 c 18(user)m 45 c 1032 195 p (friendly)s -2 r 44 c 17(high)m 17(level)m 16(description)m 16(language.)m 34 r 84 c -2(cpdump)m 15(has)m 17 r 97 c 1032 244 p (built)s 14(in)m 15(compiler)m 15(\(and)m 14(optimizer\))m 15(which)m 14(translates)m 15(the)m 14(high)m 1032 294 p (level)s 14(\014lters)m 14(into)m 13(BPF)m 14(programs.)m 26(Of)m 14(course,)m 14(this)m 14(translation)m 1032 344 p (process)s 10(is)m 11(transparent)m 10(to)m 11(the)m 10(user)m -1 r 46 c t-ita.300 @sf 1073 399 p (Arpwatch)s t-rom.300 @sf 12 r 91 c 53 c 93 c 12(is)m 12 r 97 c 12(passive)m 12(monitoring)m 12(program)m 12(that)m 12(tracks)m 1032 449 p (Ethernet)s 13(to)m 13(IP)m 13(address)m 14(mappings.)m 23(It)m 13(noti\014es)m 14(the)m 13(system)m 13(ad-)m 1032 499 p (ministrator)s -1 r 44 c 15(via)m 14(email,)m 15(when)m 14(new)m 15(mappings)m 14(are)m 14(established)m 1032 549 p (or)s 15(abnormal)m 16(behavior)m 15(is)m 15(noted.)m 30 r 65 c 16(common)m 15(administrative)m 1032 599 p (nuisance)s 13(is)m 12(the)m 13(use)m 12(of)m 13 r 97 c 12(single)m 13(IP)m 13(address)m 12(by)m 13(more)m 12(than)m 13(one)m 1032 648 p (physical)s 10(host,)m 11(which)m 10(arpwatch)m 11(dutifully)m 10(detects)m 10(and)m 11(reports.)m 1073 704 p 65 c 17(very)m 17(dif)m (ferent)s 16(application)m 16(of)m 17(BPF)m 16(has)m 17(been)m 17(its)m 16(incor-)m 1032 753 p (poration)s 14(into)m 14 r 97 c 15(variant)m 14(of)m 14(the)m 14(Icon)m 15(Programming)m 14(Language)m 1032 803 p 91 c 51 c (].)s 27 r 84 c -2(wo)m 13(new)m 15(data)m 14(types,)m 15 r 97 c t-ita.300 @sf 14(packet)m t-rom.300 @sf 15(and)m 14 r 97 c t-ita.300 @sf 14(packet)m 14(generator)m t-rom.300 @sf 1032 853 p (have)s 13(been)m 13(built)m 13(into)m 13(the)m 13(Icon)m 13(interpreter)m -2 r 46 c 23(Packets)m 12(appear)m 13(as)m 1032 903 p (\014rst)s 9(class)m 9(record)m 10(objects,)m 9(allowing)m 9(convenient)m 10(\\dot)m 9(operator)m 2 r 34 c 1032 953 p (access)s 9(to)m 10(packet)m 9(headers.)m 15 r 65 c 10(packet)m 9(generator)m 9(can)m 9(be)m 10(instanti-)m 1032 1003 p (ated)s 11(directly)m 12(of)m 102 c 10(the)m 11(network,)m 12(or)m 11(from)m 12 r 97 c 11(previously)m 11(collected)m 1032 1052 p (\014le)s 13(of)m 13(trace)m 12(data.)m 23(Icon)m 13(is)m 13(an)m 12(interpreted,)m 14(dynamically)m 13(typed)m 1032 1102 p (language)s 11(with)m 11(high)m 11(level)m 11(string)m 11(scanning)m 11(primitives)m 11(and)m 11(rich)m 1032 1152 p (data)s 9(structures.)m 16 r 87 c -1(ith)m 8(the)m 10(BPF)m 9(extensions,)m 9(it)m 10(is)m 9(well)m 9(suited)m 10(for)m 1032 1202 p (the)s 10(rapid)m 11(prototyping)m 10(of)m 11(networking)m 10(analysis)m 10(tools.)m t-ita.300 @sf 1073 1257 p (Netload)s t-rom.300 @sf 21(and)m t-ita.300 @sf 21(histo)m t-rom.300 @sf 21(are)m 21(two)m 21(network)m 21(visualization)m 21(tools)m 1032 1307 p (which)s 20(produce)m 20(real)m 20(time)m 19(network)m 20(statistics)m 20(on)m 20(an)m 20 r 88 c 20(dis-)m 1032 1357 p (play)s -2 r 46 c 40(Netload)m 19(graphs)m 19(utilization)m 18(data)m 19(in)m 19(real)m 19(time,)m 21(using)m 1032 1407 p (tcpdump)s 8(style)m 8(\014lter)m 7(speci\014cations.)m 15(Histo)m 8(produces)m 8 r 97 c 8(dynamic)m 1032 1456 p (interarrival-time)s 13(histogram)m 12(of)m 13(timestamped)m 12(multimedia)m 13(net-)m 1032 1506 p (work)s 10(packets.)m 1073 1561 p (The)s 12(Reverse)m 12(ARP)m 11(daemon)m 12(uses)m 12(the)m 11(BPF)m 12(interface)m 12(to)m 11(read)m 1032 1611 p (and)s 14(write)m 14(Reverse)m 14(ARP)m 14(requests)m 14(and)m 14(replies)m 14(directly)m 14(to)m 14(the)m 1032 1661 p (local)s 14(network.)m 28(\(W)m -3 r 101 c 13(developed)m 15(this)m 14(program)m 14(to)m 15(allow)m 14(us)m 14(to)m 1032 1711 p (entirely)s 7(replace)m 7(NIT)m 7(by)m 7(BPF)m 7(in)m 7(our)m 7(SunOS)m 7 r 52 c 7(systems.)m 15(Each)m 7(of)m 1032 1761 p (the)s 10(Sun)m 10(NIT)m -3(-based)m 9(applications)m 10(\(ether\014nd,)m 10(traf)m (\014c,)s 9(and)m 10(rarpd\))m 1032 1810 p (now)s 10(has)m 11 r 97 c 10(BPF)m 11(analog.\))m 1073 1866 p (Finally)s -1 r 44 c 9(recent)m 10(versions)m 10(of)m 10(NNStat[)m 49 c 93 c 10(and)m 11(nfswatch)m 10(can)m 10(be)m 1032 1916 p (con\014gured)s 8(to)m 8(run)m 7(over)m 8(BPF)m 8(\(in)m 8(addition)m 8(to)m 7(running)m 8(over)m 8(NIT\).)m t-bol.420 @sf 1032 2058 p 53 c 58(Conclusion)m t-rom.300 @sf 1032 2157 p (BPF)s 14(has)m 14(proven)m 13(to)m 14(be)m 14(an)m 14(ef)m (\014cient,)s 14(extensible,)m 15(and)m 13(portable)m 1032 2206 p (interface)s 15(for)m 15(network)m 15(monitoring.)m 29(Our)m 15(comparison)m 15(studies)m 1032 2256 p (have)s 16(shown)m 16(that)m 15(it)m 16(outperforms)m 16(NIT)m 16(in)m 16(its)m 16(buf)m (fer)s 15(manage-)m 1032 2306 p (ment)s 9(and)m 8(CSPF)m 9(in)m 9(its)m 8(\014ltering)m 9(mechanism.)m 15(Its)m 9(programmable)m 1032 2356 p (pseudo-machine)s 12(model)m 12(has)m 12(demonstrated)m 13(excellent)m 12(general-)m 1032 2406 p (ity)s 10(and)m 10(extensibility)m 10(\(all)m 10(knowledge)m 9(of)m 10(particular)m 10(protocols)m 10(is)m 1032 2455 p (factored)s 14(out)m 15(of)m 14(the)m 15(kernel\).)m 28(Finally)m -2 r 44 c 14(the)m 15(system)m 14(is)m 15(portable)m 1032 2505 p (and)s 9(runs)m 9(on)m 9(most)m 9(BSD)m 9(and)m 9(BSD-derivative)m 9(systems)m t-rom.210 @sf 1884 2490 p 56 c t-rom.300 @sf 1910 2505 p (and)s 9(can)m 1032 2555 p (interact)s 10(with)m 11(various)m 10(data)m 11(link)m 10(layers)m t-rom.210 @sf 1639 2540 p 57 c t-rom.300 @sf 1656 2555 p 46 c 1032 2584 p 402 2 ru t-rom.180 @sf 1077 2612 p 56 c t-rom.240 @sf 1092 2624 p (SunOS)s 6(3.5,)m 6(HP-300)m 5(and)m 6(HP-700)m 6(BSD,)m 5(SunOS)m 6(4.x,)m 6(4.3BSD)m 6 r 84 c -1(ahoe/Reno,)m 1032 2663 p (and)s 8(4.4BSD.)m t-rom.180 @sf 1077 2692 p 57 c t-rom.240 @sf 1092 2704 p (Ethernet,)s 8(FDDI,)m 9(SLIP)m -3 r 44 c 7(and)m 9(PPP)m 8(are)m 8(currently)m 9(supported.)m @eop restore %%Page: 10 10 save /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Helvetica /h-med.300 ReEncodeForTeX /h-med.300 /h-med.300 41.666629 TeXPSmakefont def 10 @bop1 t-rom.300 @sf -62 -99 p (10)s t-obl.300 @sf 1548(BPF)m 13 r 123 c 14(The)m 14(BSD)m 14(Packet)m 14(Filter)m 272 677 p 22582592 15156103 2154109 -33552710 46607824 -3727898 startTexFig -90 rotate 100 dict begin /bd {bind def} def /I {Coord SetPage 1 setlinecap 1 setlinejoin LineTypes {RastersPerPoint ScaleArray} forall /Helvetica findfont PointSize RastersPerPoint mul Cex mul scalefont setfont} bd /A {PageBegin} bd /B {newpath} bd /C {currentpoint stroke moveto} bd /E {stroke} bd /M {moveto} bd /L {lineto} bd /S {moveto lineto stroke} bd /F {closepath fill} bd /P {gsave moveto Pch-x Pch-y rmoveto Pch Show grestore} bd /T {/Adjust exch def gsave translate StringRot rotate 0 0 moveto dup stringwidth pop neg Adjust mul Text-y rmoveto Show grestore} bd /X {erasepage InPage {PageEnd} if} bd /Z {gsave showpage grestore PageEnd} bd /W {end} bd /St {1 sub LineTypes dup 3 1 roll length Rem floor get 0 setdash} bd /Sw {abs 2 div RastersPerPoint mul setlinewidth SetClip} bd /Sc {dup dup 1 lt exch 0 ge and {1 exch sub setgray} {1 sub Colors dup 3 1 roll length Rem floor get dup type /arraytype eq {aload pop sethsbcolor} {setgray} ifelse} ifelse} bd /Sp {Pch exch 0 exch put gsave newpath 0 0 moveto Pch false charpath flattenpath pathbbox exch 3 1 roll add 2 div neg /Pch-y exch def add 2 div neg /Pch-x exch def grestore} bd /Sx {dup Cex div /Ratio exch def /Cex exch def currentfont Ratio scalefont setfont /Pch-x Pch-x Ratio mul def /Pch-y Pch-y Ratio mul def /Text-y Text-y Ratio mul def} bd /So {4 1 roll exch 4 -1 roll Plot astore pop SetClip} bd /Sg {4 1 roll exch 4 -1 roll Figure astore pop SetClip} bd /Sr {/StringRot exch def} bd /Sd {0 eq /ClipToPlot exch def SetClip} bd /Sf {dup 0 lt /Outline exch def abs 1 sub Fonts dup 3 1 roll length Rem floor get findfont PointSize Cex mul RastersPerPoint mul scalefont dup setfont dup /FontMatrix get /Matrix exch def /FontBBox get aload pop Matrix transform 4 2 roll Matrix transform exch pop add 2 div neg /Text-y exch def pop} bd /InPage false def /Clip 4 array def /Page 4 array def /Figure [0 0 1 1] def /Plot [0 0 1 1] def /ClipToPlot true def /Cex 1 def /Outline false def /Pch 1 string def /Pch-x 0 def /Pch-y 0 def /Text-y 0 def /LineTypes [ % in default units [] [1 2] [4 4] [8 4] [13 3] [16 2 2 2] [8 2 2 2] [1 13] [6 5] [12 4] ] def /Rem {2 copy div floor mul sub floor cvi} bd /RastersPerPoint {RastersPerInch 72 div} bd /ScaleArray {/Factor exch def /Array exch bd 0 1 Array length 1 sub {dup Array exch get Factor mul Array 3 1 roll put} for} bd /Coord {Region aload pop /uy exch def /ux exch def /ly exch def /lx exch def uy ly sub ux lx sub Landscape {exch} if /Width exch def /Height exch def lx ly translate Landscape {90 rotate 0 Height neg translate} if 1 RastersPerPoint div dup scale} bd /Show {Outline {false charpath stroke} {show} ifelse} bd /BoxClip {/CLW currentlinewidth def 2 {CLW add 4 1 roll} repeat 2 {CLW sub 4 1 roll} repeat initclip newpath 2 index exch 2 index exch dup 6 index exch moveto 3 {lineto} repeat closepath clip newpath} bd /Subregion {/A exch def /Uy exch def /Ux exch def /Ly exch def /Lx exch def Ux Lx sub A 0 get mul Lx add Uy Ly sub A 1 get mul Ly add Ux Lx sub A 2 get mul Lx add Uy Ly sub A 3 get mul Ly add} bd /SetFigure {Page aload pop Figure Subregion} bd /SetPlot {SetFigure Plot Subregion} bd /SetClip {ClipToPlot {SetPlot} {SetFigure} ifelse BoxClip} bd /SetPage {0 0 Width Height Page astore RastersPerPoint ScaleArray} bd /PageBegin {save /PageContext exch def /InPage true def} bd /PageEnd {PageContext restore /InPage false def} bd /Landscape true def /Region [20.8788 11.802 590.881 780.438] def /RastersPerInch 300 def /PointSize 14 def /Fonts [ /Helvetica /Courier /Times-Roman /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Italic /Times-Bold /Times-BoldItalic /Symbol /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold /NewCenturySchlbk-Italic /NewCenturySchlbk-BoldItalic /Palatino-Roman /Palatino-Bold /Palatino-Italic /Palatino-BoldItalic /ZapfChancery-MediumItalic /ZapfDingbats ] def /Colors [ 0 0.6 0.3 0.9 0.4 0.7 0.1 0.5 0.8 0.2 ] def I A 1 St 1 Sw 0.25 Sc 42 Sp 1 Sx 0.0896133 0.9541 0.150315 0.879158 So 0 1 0 1 Sg 0 Sr 0 Sd 1 Sf B 515 421 M 767 421 L 767 461 L 515 461 L F 0.75 Sc B 767 421 M 1018 421 L 1018 483 L 767 483 L F 0.25 Sc B 1144 421 M 1395 421 L 1395 524 L 1144 524 L F 0.75 Sc B 1395 421 M 1646 421 L 1646 773 L 1395 773 L F 0.25 Sc B 1772 421 M 2023 421 L 2023 563 L 1772 563 L F 0.75 Sc B 2023 421 M 2275 421 L 2275 1044 L 2023 1044 L F 0.25 Sc B 2400 421 M 2652 421 L 2652 504 L 2400 504 L F 0.75 Sc B 2652 421 M 2903 421 L 2903 1915 L 2652 1915 L F 1 Sc 1 Sd 287 421 252 421 S 287 742 252 742 S 287 1062 252 1062 S 287 1383 252 1383 S 287 1703 252 1703 S 287 2024 252 2024 S 287 421 287 2024 S (0) 217 421 1 T (500) 217 742 1 T (1000) 217 1062 1 T (1500) 217 1383 1 T (2000) 217 1703 1 T (2500) 217 2024 1 T 1.5 Sx (Mean Number of CPU Instructions Per Packet) 1671 2176 0.5 T 0 Sc 1 Sx B 440 1735 M 440 1896 L 892 1896 L 892 1735 L F 1 Sc 440 1735 440 1896 S 892 1735 892 1896 S 440 1735 892 1735 S 440 1896 892 1896 S 478 1889 478 1819 S 629 1889 629 1819 S 478 1889 629 1889 S 478 1819 629 1819 S 0.25 Sc B 478 1889 M 629 1889 L 629 1819 L 478 1819 L F 1 Sc (BPF) 705 1854 0 T 478 1812 478 1742 S 629 1812 629 1742 S 478 1812 629 1812 S 478 1742 629 1742 S 0.75 Sc B 478 1812 M 629 1812 L 629 1742 L 478 1742 L F 1 Sc (CSPF) 705 1777 0 T (62) 641 525 0.5 T (96) 892 547 0.5 T (160) 1269 588 0.5 T (549) 1521 837 0.5 T (222) 1898 628 0.5 T (971) 2149 1108 0.5 T (129) 2526 568 0.5 T (2330) 2777 1979 0.5 T (Filter 1) 767 370 0.5 T (Filter 2) 1395 370 0.5 T (Filter 3) 2023 370 0.5 T (Filter 4) 2652 370 0.5 T Z W endTexFig 334 1702 p 1307 2 ru 333 1752 p 2 50 ru t-rom.300 @sf 359 1737 p (Filter)s 10 r 49 c 504 1752 p 2 50 ru 530 1737 p (IP)s 11(packets)m 1639 1752 p 2 50 ru 333 1802 p 2 50 ru 359 1787 p (Filter)s 10 r 50 c 504 1802 p 2 50 ru 530 1787 p (IP)s 11(packets)m 10(with)m 10(src)m 11(or)m 10(dst)m 11(\\horse")m 1639 1802 p 2 50 ru 333 1852 p 2 50 ru 359 1837 p (Filter)s 10 r 51 c 504 1852 p 2 50 ru 530 1837 p (TCP)s 11(packets)m 10(with)m 10(src)m 11(or)m 10(dst)m 11(port)m 10(of)m 10(\014nger)m 44 c 9(domain,)m 11(login,)m 10(or)m 10(shell)m 1639 1852 p 2 50 ru 333 1902 p 2 50 ru 359 1887 p (Filter)s 10 r 52 c 504 1902 p 2 50 ru 530 1887 p (IP)s -4 r 44 c 10(ARP)m 10(or)m 11(RARP)m 10(packets)m 11(between)m 10(hosts)m 10(\\horse")m 11(and)m 10(\\gauguin")m 1639 1902 p 2 50 ru 334 1903 p 1307 2 ru 624 2021 p (Figure)s 11(8:)m h-med.300 @sf 15(BPF/CSPF)m 12(Filter)m 12(Performance)m @eop restore %%Page: 11 11 save /Times-Oblique /Times-Roman 15.5 ObliqueFont /Times-Oblique /t-obl.300 ReEncodeForTeX /t-obl.300 /t-obl.300 41.511001 TeXPSmakefont def /Times-Roman /t-rom.300 ReEncodeForTeX /t-rom.300 /t-rom.300 41.666629 TeXPSmakefont def /Times-Bold /t-bol.420 ReEncodeForTeX /t-bol.420 /t-bol.420 58.333229 TeXPSmakefont def /Courier /c-med.300 ReEncodeForTeX /c-med.300 /c-med.300 41.666629 TeXPSmakefont def /Times-Italic /t-ita.300 ReEncodeForTeX /t-ita.300 /t-ita.300 41.666629 TeXPSmakefont def /Times-Roman /t-rom.270 ReEncodeForTeX /t-rom.270 /t-rom.270 37.499947 TeXPSmakefont def /Times-SmallCaps /Times-Roman SmallCapsFont /Times-SmallCaps /t-romsc.270 ReEncodeForTeX /t-romsc.270 /t-romsc.270 37.499947 TeXPSmakefont def /Times-Italic /t-ita.270 ReEncodeForTeX /t-ita.270 /t-ita.270 37.499947 TeXPSmakefont def 11 @bop1 t-obl.300 @sf -62 -99 p 87 c -2(inter)m 13(USENIX)m 14 r 123 c 14(Jan.,)m 14(1993)m 14 r 123 c 13(San)m 14(Diego,)m 14(CA)m t-rom.300 @sf 1251 r 49 c -1 r 49 c t-bol.420 @sf -62 45 p 54 c 57 r 65 c -3(vailability)m t-rom.300 @sf -62 147 p (BPF)s 63(is)m 63(available)m 64(via)m 64(anonymous)m 64(ftp)m 63(from)m -62 197 p (host)s c-med.300 @sf 6(ftp.ee.lbl.gov)m t-rom.300 @sf 8(as)m 7(part)m 8(of)m 7(the)m 8(tcpdump)m 7(distribution,)m -62 246 p (currently)s 9(in)m 11(the)m 10(\014le)m c-med.300 @sf 11(tcpdump-2.2.1.tar.Z)m t-rom.300 @sf 46 c 10(Eventually)m -62 296 p (we)s 12(plan)m 14(to)m 13(factor)m 14(BPF)m 13(out)m 14(into)m 13(its)m 14(own)m 13(distribution)m 14(so)m 13(look)m -62 346 p (for)s c-med.300 @sf 10(bpf-*.tar.Z)m t-rom.300 @sf 10(in)m 11(the)m 10(future.)m 16(Arpwatch)m 11(and)m 11(netload)m 10(are)m -62 396 p (also)s 9(available)m 11(from)m 10(this)m 11(site.)m t-bol.420 @sf -62 545 p 55 c 57(Acknowledgements)m t-rom.300 @sf -62 647 p (This)s 9(paper)m 10(would)m 10(never)m 10(have)m 10(been)m 11(published)m 10(without)m 10(the)m 10(en-)m -62 696 p (couragement)s 8(of)m 8(Jef)m (frey)s 8(Mogul.)m 15(Jef)m 102 c 8(ported)m t-ita.300 @sf 8(tcpdump)m t-rom.300 @sf 9(to)m 8(Ultrix)m -62 746 p (and)s 15(added)m 16(little-endian)m 17(support,)m 17(uncovering)m 17(dozens)m 16(of)m 16(our)m -62 796 p (byte-ordering)s 13(bugs.)m 26(He)m 14(also)m 14(inspired)m 14(the)m c-med.300 @sf 14(jset)m t-rom.300 @sf 14(instruction)m -62 846 p (by)s 12(forcing)m 13(us)m 12(to)m 13(consider)m 13(the)m 13(arduous)m 12(task)m 13(of)m 13(parsing)m 13(DEC-)m -62 896 p (NET)s 13(packet)m 14(headers.)m 26(Mike)m 14(Karels)m 14(suggested)m 14(that)m 14(the)m 14(\014lter)m -62 945 p (should)s 12(decide)m 12(not)m 13(only)m 12(whether)m 13(to)m 13(accept)m 12 r 97 c 13(packet,)m 13(but)m 13(also)m -62 995 p (how)s 6(much)m 6(of)m 7(it)m 7(to)m 6(keep.)m 15(Craig)m 6(Leres)m 7(was)m 7(the)m 6(\014rst)m 7(major)m 7(user)m 6(of)m -62 1045 p (BPF/tcpdump)s 9(and)m 10(is)m 10(responsible)m 10(for)m 9(\014nding)m 10(and)m 10(\014xing)m 10(many)m -62 1095 p (bugs)s 9(in)m 11(both.)m 16(Chris)m 10 r 84 c -2(orek)m 10(helped)m 10(with)m 11(the)m 10(packet)m 11(processing)m -62 1145 p (performance)s 11(measurements)m 11(and)m 12(provided)m 12(insight)m 11(on)m 12(various)m -62 1194 p (BSD)s 9(peculiarities.)m 15(Finally)m -2 r 44 c 9(we)m 10(are)m 10(grateful)m 10(to)m 9(the)m 10(many)m 10(users)m -62 1244 p (and)s 13(extenders)m 13(of)m 14(BPF/tcpdump)m 14(across)m 13(the)m 14(Internet)m 14(for)m 13(their)m -62 1294 p (suggestions,)s 10(bug)m 11(\014xes,)m 12(source)m 11(code,)m 11(and)m 11(the)m 11(many)m 12(questions)m -62 1344 p (that)s 11(have,)m 12(over)m 12(the)m 12(years,)m 12(greatly)m 12(broadened)m 11(our)m 12(view)m 12(of)m 12(the)m -62 1394 p (networking)s 9(world)m 11(and)m 10(BPF')m -1 r 115 c 9(place)m 11(in)m 10(it.)m -20 1452 p (Finally)s -3 r 44 c 9(we)m 10(would)m 11(like)m 10(to)m 10(thank)m 10 r 86 c -3(ern)m 9(Paxson,)m 10(Craig)m 11(Leres,)m -62 1502 p (Jef)s -1 r 102 c 13(Mogul,)m 15(Sugih)m 14(Jamin,)m 15(and)m 15(the)m 14(referees)m 14(for)m 14(their)m 14(helpful)m -62 1552 p (comments)s 9(on)m 11(drafts)m 10(of)m 11(this)m 10(paper)m -1 r 46 c t-bol.420 @sf -62 1695 p (Refer)s -1(ences)m t-rom.270 @sf -43 1787 p ([1])s t-romsc.270 @sf 20(Braden,)m 10(R.)m 10 r 84 c -2 r 46 c t-rom.270 @sf 14 r 65 c 10(pseudo-machine)m 10(for)m 10(packet)m 10(monitoring)m 10(and)m 20 1833 p (statistics.)s 24(In)m t-ita.270 @sf 13(Pr)m -1(oceedings)m 12(of)m 13(SIGCOMM)m 13('88)m t-rom.270 @sf 13(\(Stanford,)m 13(CA,)m 20 1878 p (Aug.)s 10(1988\),)m 9(ACM.)m -43 1941 p ([2])s t-romsc.270 @sf 20(Digital)m 15(Equipment)m 15(Corporation)m t-rom.270 @sf 46 c t-ita.270 @sf 31(packet\014lter\(4\),)m 16(Ultrix)m 20 1986 p (V4.1)s 10(Manual)m t-rom.270 @sf 46 c -43 2049 p ([3])s t-romsc.270 @sf 20(Griswold,)m 9(R.)m 10(E.,)m 10(and)m 10(Griswold,)m 10(M.)m 9 r 84 c -1 r 46 c t-ita.270 @sf 13(The)m 10(Icon)m 10(Pr)m -1(ogram-)m 20 2094 p (ming)s 14(Language)m t-rom.270 @sf 46 c 25(Prentice)m 13(Hall,)m 14(Inc.,)m 15(Englewood)m 13(Clif)m (fs,)s 13(NJ,)m 20 2140 p (1983.)s -43 2202 p ([4])s t-romsc.270 @sf 20(Jacobson,)m 12 r 86 c -4(.,)m 11(Leres,)m 13(C.,)m 12(and)m 12(McCanne,)m 12(S.)m t-ita.270 @sf 20(The)m 12 r 84 c -2(cpdump)m 20 2248 p (Manual)s 9(Page)m t-rom.270 @sf 46 c 13(Lawrence)m 9(Berkeley)m 9(Laboratory)m -1 r 44 c 8(Berkeley)m -2 r 44 c 8(CA,)m 20 2294 p (June)s 10(1989.)m -43 2356 p ([5])s t-romsc.270 @sf 20(Leres,)m 11(C.)m t-ita.270 @sf 19(The)m 11(Arpwatch)m 11(Manual)m 11(Page)m t-rom.270 @sf 46 c 19(Lawrence)m 11(Berkeley)m 20 2401 p (Laboratory)s -1 r 44 c 8(Berkeley)m -1 r 44 c 8(CA,)m 9(Sept.)m 10(1992.)m -43 2464 p ([6])s t-romsc.270 @sf 20(McCanne,)m 13(S.)m t-ita.270 @sf 23(The)m 12(BPF)m 13(Manual)m 12(Page)m t-rom.270 @sf 46 c 23(Lawrence)m 13(Berkeley)m 20 2509 p (Laboratory)s -1 r 44 c 8(Berkeley)m -1 r 44 c 8(CA,)m 9(May)m 10(1991.)m -43 2572 p ([7])s t-romsc.270 @sf 20(Mogul,)m 10(J.)m 11(C.)m t-rom.270 @sf 17(Ef)m (\014cient)s 10(use)m 11(of)m 11(workstations)m 10(for)m 11(passive)m 11(mon-)m 20 2617 p (itoring)s 11(of)m 10(local)m 10(area)m 11(networks.)m 16(In)m t-ita.270 @sf 10(Pr)m (oceedings)s 9(of)m 11(SIGCOMM)m 20 2663 p ('90)s t-rom.270 @sf 10(\(Philadelphia,)m 9 r 80 c -2(A,)m 8(Sept.)m 9(1990\),)m 10(ACM.)m 1051 45 p ([8])s t-romsc.270 @sf 20(Mogul,)m 9(J.)m 7(C.,)m 8(Rashid,)m 9(R.)m 7 r 70 c -2(.,)m 7(and)m 8(Accetta,)m 8(M.)m 8(J.)m t-rom.270 @sf 11(The)m 8(packet)m 1115 91 p (\014lter:)s 14(An)m 8(ef)m (\014cient)s 8(mechanism)m 9(for)m 8(user)m (-level)s 8(network)m 8(code.)m 12(In)m t-ita.270 @sf 1115 136 p (Pr)s (oceedings)s 11(of)m 11 r 49 c -1(1th)m 10(Symposium)m 12(on)m 12(Operating)m 12(Systems)m 11(Prin-)m 1115 182 p (ciples)s t-rom.270 @sf 10(\(Austin,)m 9(TX,)m 9(Nov)m -1 r 46 c 8(1987\),)m 10(ACM,)m 9(pp.)m 9(39{51.)m 1051 244 p ([9])s t-romsc.270 @sf 20(Rice,)m 10(S.)m 9 r 80 c -3 r 46 c t-ita.270 @sf 13(ipr)m -1(of)m t-rom.270 @sf 9(source)m 9(code,)m 9(May)m 10(1991.)m 13(Brown)m 10(University)m -2 r 46 c 1032 307 p ([10])s t-romsc.270 @sf 21(Sun)m 13(Microsystems)m 13(Inc.)m t-ita.270 @sf 25(NIT\(4P\);)m 13(SunOS)m 13(4.1.1)m 14(Refer)m -1(ence)m 1115 352 p (Manual)s t-rom.270 @sf 46 c 15(Mountain)m 9 r 86 c -1(iew)m -2 r 44 c 8(CA,)m 10(Oct.)m 10(1990.)m 14(Part)m 10(Number:)m 15(800-)m 1115 398 p (5480-10.)s @eop restore %%Trailer @end %%Pages: 11 %%DocumentFonts: Times-Roman %%+ Times-Bold %%+ Times-Italic %%+ Helvetica %%+ Courier %%EOF