%!PS (but not EPSF because of memory limits) %%Creator: dvips by Radical Eye Software %%Title: paper.dvi %%Pages: 12 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument %%BeginDocument: special.pro TeXDict begin /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 612 def /vs 792 def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@scaleunit 1 def /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{@scaleunit div /vsc exch def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def} bdf /@voffset{/vo exch def}bdf /@angle{/ang exch def}bdf /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def}bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate} if}{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate} if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def /startTexFig {/psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /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 /showpage{}def /erasepage{ }def /copypage{}def @MacSetUp}def /doclip{psf$llx psf$lly psf$urx psf$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}def /endTexFig{end psf$SavedState restore}def /@beginspecial{SDict begin /SpecialSave save def Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults}bdf /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo translate hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}if /showpage{}def newpath}bdf /@endspecial{clear SpecialSave restore end}bdf /@defspecial{SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto} bdf /rc{rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end %%EndDocument TeXDict begin bos 300 @start /fa df[<0C003C00CC000C000C000C000C000C000C000C00 0C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F00618040C08060C0600060006000C001 80030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc[<1F00218060C060C000C0008001 800F00008000400060C060C060804060801F00>11 16 1 0 15]51 dc dfe /fb df[<0C001C00 EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C00FFC0>10 19 3 0 17]49 dc[<1F0060C06060F070F030603000700070006000C001C0018002000400081010102020 7FE0FFE0>12 19 2 0 17]50 dc[<0FC030707038703870380038003000E00FC0007000380018 001C601CF01CF018E03860701FC0>14 19 1 0 17]51 dc dfe /fc df[<1FE0003FF0007FF800 783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE0 3FE7E00F83E0>19 18 2 0 22]97 dc[<7E0000FE00007E00000E00000E00000E00000E00000E 3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F 01E00F83C00FFF800EFF00063C00>20 25 0 0 22]98 dc[<03F80FFC1FFE3C1E780C7000E000 E000E000E000E000F000700778073E0E1FFC0FF803F0>16 18 3 0 22]99 dc[<003F00007F00 003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700 E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E0>20 25 1 0 22]100 dc[<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F0> 16 18 3 0 22]101 dc[<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FF FF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003F FE007FFF003FFE00>17 25 1 0 22]102 dc[<03E3C007F7E00FFFE01C1CC0380E00380E00380E 00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000 E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800>19 28 1 10 22]103 dc[<0180 03C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001 C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[<7E0000FE00007E00000E00000E00000E00 000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E 000E0E000E07000E07807F87F0FFCFF07F87F0>20 25 0 0 22]107 dc[17 25 2 0 22]108 dc[21 18 0 0 22]109 dc[<7E3C00FEFE007FFF000F87800F03 800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7 F0>21 18 0 0 22]110 dc[<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380 E00380E00380F00780700700780F003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E 3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F 01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FFE0007F C000>20 27 0 9 22]112 dc[19 18 1 0 22]114 dc[< 0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E0>15 18 3 0 22]115 dc[<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007 000007000007000007000007000007010007038007038007038007870003FE0001FC0000F800> 17 23 1 0 22]116 dc[<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E 03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F0>21 18 0 0 22]117 dc[<7F1F C0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B8 0003B80001F00001F00000E000>19 18 1 0 22]118 dc[19 18 1 0 22]119 dc[<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001 E00001F00003B800073C00071C000E0E007F1FC0FF3FE07F1FC0>19 18 1 0 22]120 dc[<7F1F C0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C00071C00039C00039C0003980001B8 0001B80000F00000F00000F00000E00000E00000E00001C00079C0007BC0007F80003F00003C00 00>19 27 1 9 22]121 dc dfe /fd df[<183C7C340404080810106080>6 12 7 -17 12]39 dc[<387878380808101020204080>5 12 3 8 12]44 dc[<7FF0FFE0>12 2 1 -8 14]45 dc[< 7070F060>4 4 4 0 12]46 dc[<0FFF8000F80000F00000F00000F00000F00000F00001E00001 E00001E00001E00001E00001E00003C00003C00003C00003C00003C00003C00007800007800007 80000780000780000780000F00000F8000FFF800>17 28 1 0 15]73 dc[<1FFFFFF03C07C0F0 3007803020078020600780204007802040078020400F0020800F0020000F0000000F0000000F00 00000F0000001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C 0000003C0000003C0000003C000000780000007C00001FFFE000>28 28 4 0 30]84 dc[<07F0 001C18001E0C001C0E00180E00000E00000E0001FE000F0E001C1C00301C00701C00E01C40E01C 40E03C40E05C80709D803F0E00>18 18 3 0 21]97 dc[<3F00000F00000E00000E00000E0000 0E00000E00000E00001C00001C00001C00001C78001D86001E03003C03803801803801803801C0 3801C03801C0700380700380700380700300700700700E00F00C00CC300083C000>18 29 4 0 23]98 dc[<01F8071C0C1E181C38183000700070007000E000E000E00060006004700830101820 0FC0>15 18 3 0 18]99 dc[<0003F00000F00000E00000E00000E00000E00000E00000E00001 C00001C00001C000F1C0030DC00C03C01C0380380380300380700380700380700380E00700E007 00E00700600700600700700F00301E00186F00078FC0>20 29 3 0 23]100 dc[<01F8070C0C06 1C073803300370037FFF7000E000E000E00060006002300430081C3007C0>16 18 2 0 18]101 dc[<000F800039C00061C000E3C001C18001C00001C00001C0000380000380000380003FF80003 80000380000700000700000700000700000700000700000E00000E00000E00000E00000E00000E 00001C00001E0000FFC000>18 29 1 0 13]102 dc[<000038003CCC00C69C0183080383800703 80070380070380070380070700030600038C0004F0000400000C00000C00000FFE0007FF800FFF C01801C02000C06000E0C000C0C000C0600180200300180E0007F000>22 28 0 9 21]103 dc[< 07E00001E00001C00001C00001C00001C00001C00001C000038000038000038000038F8003B0C0 03C0E00780E00780E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C0 1C03801E03C0FF9FF0>20 29 1 0 23]104 dc[<00C001C001C001800000000000000000000000 0000001F80078003800700070007000700070007000E000E000E000E000E000E001C001E00FF80 >10 29 1 0 12]105 dc[<07E00001E00001C00001C00001C00001C00001C00001C00003800003 80000380000387F80381E003818007020007040007080007100007700007F8000F38000E3C000E 1C000E1E000E0E000E0F001C07001C0F80FF9FE0>21 29 1 0 22]107 dc[<07E001E001C001C0 01C001C001C001C00380038003800380038003800700070007000700070007000E000E000E000E 000E000E001C001E00FF80>11 29 1 0 12]108 dc[<1F8FC0FC00079061060003E07607000780 780700078078070007007007000700700700070070070007007007000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FF8FF8FF80>33 18 1 0 36]109 dc[<1F8F8007B0C003C0E00780E00780E00700E00700E00700E00700E00E01C00E01C0 0E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 18 1 0 23]110 dc[<00FC000307000E 01801C01C03800C03000C07000E07000E07000E0E001C0E001C0E001C060018060038070070038 0E001C180007E000>19 18 2 0 21]111 dc[<0FC78003D86001E03003C0380380380380180380 1C03801C03801C0700380700380700380700700700700700E00F01C00EC3000E3C000E00000E00 000E00001C00001C00001C00001C0000FF8000>22 26 0 8 23]112 dc[<1F9C07EE03CF078E07 8C07000700070007000E000E000E000E000E000E001C001E00FFC0>16 18 1 0 16]114 dc[<03 F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608FC0>15 18 1 0 16]115 dc[<020002000200060006000C001C003C00FFE01C001C0038003800380038003800 3800700070407040704070407080708031001E00>11 26 4 0 16]116 dc[17 18 4 0 23]117 dc[19 18 4 0 22]118 dc[27 18 4 0 30]119 dc[<1FE3FC07C1E003818001C10001C20000E40000EC0000780000700000 3800007800009C00011E00020E000407000C07003C0780FE1FF0>22 18 1 0 22]120 dc[<0FF0 FE03C03801C03001C02001C06001C04001E08000E08000E10000E10000E200007200007400007C 00007800007000003000002000002000004000004000708000F10000F10000E60000780000>23 26 0 8 22]121 dc dfe /fe df[<0001FC000703000C03001C07001C03001800003800003800 00380000380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C070 01C07001C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000C60000 E40000CC0000700000>24 37 -1 8 23]12 dc[<00030006000800180030006000C000C0018003 000300060006000C000C001C0018001800380030003000700070006000600060006000E000E000 E000E000E0006000600060006000600020003000100008000800>16 42 5 11 17]40 dc[<0010 00100008000C000400060006000600060006000700070007000700070006000600060006000E00 0E000C000C001C001800180038003000300060006000C000C001800300030006000C0018001000 6000C000>16 42 0 11 17]41 dc[10 3 3 -7 15]45 dc[<3078F060>5 4 4 0 13]46 dc[<0000180000001800000038000000380000007800000078000000B8000001B80000 0138000002380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C00 007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C001E 00FF00FFC0>26 29 2 0 31]65 dc[<0003F020001E0C60003002E000E003C001C001C0038001 C0070000C00E0000801E0000801C0000803C0000803C000000780000007800000078000000F000 0000F0000000F0000000F0000000F0000400F0000400F0000400F0000800700008007000100038 002000180040000C0180000706000001F80000>27 30 6 1 30]67 dc[<01FFCFFE003C01E000 3801C0003801C0003801C0003801C00070038000700380007003800070038000E0070000E00700 00E0070000FFFF0001C00E0001C00E0001C00E0001C00E0003801C0003801C0003801C0003801C 00070038000700380007003800070038000F007800FFE7FF00>31 28 3 0 31]72 dc[<01FFC0 003C0000380000380000380000380000700000700000700000700000E00000E00000E00000E000 01C00001C00001C00001C0000380000380000380000380000700000700000700000700000F0000 FFE000>18 28 2 0 16]73 dc[<01FFE0003C0000380000380000380000380000700000700000 700000700000E00000E00000E00000E00001C00001C00001C00001C00003800803800803800803 80100700100700300700600700E00E03C0FFFFC0>21 28 3 0 26]76 dc[<01FE0007F8003E00 0780002E000F00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E 008E00008E011C00008E011C00008E021C00008E021C0001070438000107043800010708380001 071038000207107000020720700002072070000207407000040740E000040780E000040700E000 0C0700E0001C0601E000FF861FFC00>37 28 3 0 37]77 dc[<01FFFC00003C07000038038000 3801C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E00E00 00E0380001FFE00001C0000001C0000001C0000003800000038000000380000003800000070000 000700000007000000070000000F000000FFE00000>26 28 3 0 28]80 dc[<01FFF800003C0E 000038070000380380003803800038038000700780007007800070078000700F0000E00E0000E0 1C0000E0700000FFC00001C0C00001C0600001C0700001C0700003807000038070000380700003 8070000700F0000700F0400700F0400700F0800F007880FFE0790000001E00>26 29 3 1 30] 82 dc[<000F8400304C00403C0080180100180300180300180600100600100600000700000700 0003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001806001 80600300600200F00400CC180083E000>22 30 3 1 23]83 dc[<03CC063C0C3C181C38383038 70387038E070E070E070E070E0E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<3F000700 07000E000E000E000E001C001C001C001C0039C03E60383038307038703870387038E070E070E0 70E060E0E0C0C0C1C0618063003C00>13 29 5 0 19]98 dc[<01F007080C08181C3838300070 007000E000E000E000E000E000E008E010602030C01F00>14 18 5 0 19]99 dc[<001F800003 80000380000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C 00383800303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264 003C3800>17 29 5 0 21]100 dc[<01E007100C1018083810701070607F80E000E000E000E000 E000E0086010602030C01F00>13 18 5 0 19]101 dc[<0003C0000670000C70001C60001C0000 1C0000380000380000380000380000380003FF8000700000700000700000700000700000E00000 E00000E00000E00000E00001C00001C00001C00001C00001C00003800003800003800003000003 0000070000C60000E60000CC0000780000>20 37 -1 8 13]102 dc[<00F3018F030F06070E0E 0C0E1C0E1C0E381C381C381C381C383830383038187818F00F700070007000E000E0C0C0E1C0C3 007E00>16 26 3 8 19]103 dc[<0FC00001C00001C00003800003800003800003800007000007 00000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C0038 1C00383800703880703880707080707100E03200601C00>17 29 3 0 21]104 dc[<0180038001 0000000000000000000000000000001C002600470047008E008E000E001C001C001C0038003800 710071007100720072003C00>9 28 4 0 13]105 dc[<0FC00001C00001C00003800003800003 80000380000700000700000700000700000E0F000E11000E23800E43801C83001C80001D00001E 00003F800039C00038E00038E00070E20070E20070E20070E400E06400603800>17 29 3 0 19] 107 dc[<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038 0038007000700070007000E400E400E400E40068003800>9 29 4 0 11]108 dc[<3C1E078026 6318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C0 1C070380380E0388380E0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[< 3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40 381C40383840383880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E70 0E700EE01CE01CE01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07870004D9 8008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707 000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000>19 26 1 8 21]112 dc[<3C3C26C2468747078E068E000E000E001C001C001C001C00380038003800380070 003000>16 18 4 0 18]114 dc[<01F006080C080C1C18181C001F001FC00FF007F00078003860 30E030C030806060C01F00>14 18 3 0 17]115 dc[<00C001C001C001C00380038003800380FF E00700070007000E000E000E000E001C001C001C001C00384038403840388019000E00>11 26 3 0 14]116 dc[<1E0300270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C 001C1C003838803838801838801839001C5900078E00>17 18 4 0 22]117 dc[<1E06270E470E 4706870287020E020E021C041C041C041C0818083808181018200C400780>15 18 4 0 19]118 dc[<1E01832703874703874703838707018707010E07010E07011C0E021C0E021C0E021C0E0418 0C04181C04181C081C1C100C263007C3C0>24 18 4 0 28]119 dc[<070E0019910010E38020E3 8041C30041C00001C00001C000038000038000038000038000070200670200E70400CB04008B08 0070F000>17 18 3 0 19]120 dc[<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C 38383838183818381C7007F00070007000E0E0C0E1C0818047003C00>16 26 4 8 20]121 dc dfe /ff df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C0> 16 16 2 -2 21]15 dc dfe /fg df[<003FC1FE0001F03F818003C03E01C007C07E03E00F807C 03E00F807C03E00F807C01C00F807C00000F807C00000F807C00000F807C0000FFFFFFFFE0FFFF FFFFE00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F 807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E07FE1FF0FFC 7FE1FF0FFC>38 29 0 0 40]14 dc[<00038000000380000007C0000007C0000007C000000FE0 00000FE000001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C0 7E0000C07E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C 0007E0FFC07FFEFFC07FFE>31 28 2 0 36]65 dc[<001FE02000FFF8E003F80FE007C003E00F 8001E01F0000E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000 FC000000FC000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F8001 8007C0030003F80E0000FFFC00001FE000>27 28 3 0 34]67 dc[27 28 2 0 31]69 dc[27 28 2 0 33]80 dc[ <07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF 003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03 C0EFFF0083FC00>20 28 3 0 27]83 dc[<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E0 1F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000001F8000 001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F800007FFFE0007FFFE00>28 28 2 0 33]84 dc[<0FF8001C1E003E0F803E07803E07C0 1C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8 >21 18 1 0 23]97 dc[23 29 1 0 27]98 dc[<03FC000E0E001C1F 003C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C03 000E0E0003F800>17 18 2 0 21]99 dc[<000FF0000FF00001F00001F00001F00001F00001F0 0001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0 F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE>23 29 2 0 27]100 dc[<01 FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C 00603C00601E00C00F038001FC00>19 18 1 0 22]101 dc[<007F0001E38003C7C00787C00F87 C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F80000F80000F80000F80000F80 000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800>18 29 0 0 15]102 dc[<03F8F00E0F381E0F381C07303C07803C07803C07803C07801C07001E0F000E0E00 1BF8001000001800001800001FFF001FFFC00FFFE01FFFF07801F8F00078F00078F00078700070 7800F01E03C007FF00>21 27 1 9 24]103 dc[24 29 1 0 27]104 dc [<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F00 1F001F001F001F001F001F001F001F001F00FFE0FFE0>11 30 1 0 14]105 dc[22 29 1 0 25]107 dc[11 29 1 0 14]108 dc[37 18 1 0 40]109 dc[24 18 1 0 27]110 dc[<01FC000F07801C01C03C01E07800F07800F0F800F8F800 F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC00>21 18 1 0 24] 111 dc[23 26 1 8 27]112 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC0> 14 18 2 0 19]115 dc[<0300030003000300070007000F000F003FFCFFFC1F001F001F001F00 1F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F0>14 26 1 0 19]116 dc[24 18 1 0 27]117 dc[22 18 1 0 25]118 dc[31 18 1 0 34]119 dc[22 18 1 0 25]120 dc [22 26 1 8 25]121 dc dfe /fh df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<0018000078 0001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8 0001F80001F8007FFFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0 FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00 003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0 FFFFF0>21 32 3 0 28]50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F 03F81F03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C 00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28] 51 dc[<0000E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7 E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007 E00007E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<0003FE008000 1FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007801F800007803F00000380 3F000003807F000001807E000001807E00000180FE00000000FE00000000FE00000000FE000000 00FE00000000FE00000000FE00000000FE000000007E000000007E000001807F000001803F0000 01803F000003801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001F FFC0000003FE0000>33 34 3 0 40]67 dc[ 32 34 2 0 37]69 dc[<0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E 001F80003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE0000 0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00 000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007 E000FC0003F001F80000FC07E000003FFF80000007FC0000>35 34 3 0 42]79 dc[<01FC0407 FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007F FFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0 001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFFFF FF807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003 F800C0C003F800C0C003F800C00003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F8000003FFFFF8 0003FFFFF800>34 34 2 0 39]84 dc[<07FC001FFF803F07C03F03E03F01E03F01F01E01F000 01F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81F F87F07E03F>24 22 2 0 27]97 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C00 00FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF 8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000003E0000003E0000003E0000003E00 00003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE 001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC00 3E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC0> 26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FF FFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000FF00> 21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F 80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800> 19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C 03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC38 00FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF00>24 33 2 11 28 ]103 dc[26 35 2 0 31]104 dc[< 1C003F007F007F007F003F001C000000000000000000000000000000FF00FF001F001F001F001F 001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[<0038007C00FE00FE00FE007C0038000000000000000000000000000003FE03FE00 3E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E 003E003E003E783EFC3EFC3CFC7C78F87FE01F80>15 46 -3 10 17]106 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31] 110 dc[<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC00 7EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28] 111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E0 0300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E0 0380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<0180000180000180000180000380 000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80 000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE 0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc[27 22 1 0 30]120 dc[27 32 1 10 30]121 dc dfe /fi df[<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700 001C070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C07 03801C0703801C0703801C0703801C070380FF1FCFF0>28 23 0 0 29]14 dc[<60C0F1E0F1E0 70E0102010202040204040804080>11 10 1 -13 18]34 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C04 0201>8 34 3 9 14]40 dc[<8040203018180C0C0E060606070707070707070707070606060E0C 0C181830204080>8 34 2 9 14]41 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<00080018003000300030006000 60006000C000C000C0018001800180030003000600060006000C000C000C001800180018003000 30003000600060006000C000C000>13 33 2 8 18]47 dc[<07C018303018701C600C600CE00E E00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[< 0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810183FF07F F0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E00030001800 0C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000F001F001 700270047008701870107020704070C070FFFE0070007000700070007003FE>15 21 1 0 18] 52 dc[<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E03880 30406020C01F00>13 21 2 0 18]53 dc[<01F00608080C181C301C70006000E000E3E0EC30F0 18F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<40007FFE7FFC7F F8C008801080200040008000800100010003000200060006000E000E000E000E000E000400>15 22 2 0 18]55 dc[<07E018302018600C600C700C78183E101F600FC00FF018F8607C601EC00E C006C006C004600C38300FE0>15 21 1 0 18]56 dc[<07C0183030186018E00CE00CE00EE00E E00E601E301E186E0F8E000E000C001C70187018603020C01F80>15 21 1 0 18]57 dc[<0010 00003800003800003800005C00005C00005C00008E00008E00008E000107000107000307800203 8002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[< FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C01C01FFF801FFFC01C00E0 1C00701C00301C00381C00381C00381C00381C00701C00E01C01C0FFFF00>21 23 1 0 25]66 dc[<00FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E0 0000E00000E000106000107000103000203800201C00400E008003830000FC00>20 23 2 0 25] 67 dc[23 23 1 0 27]68 dc[21 23 1 0 24]69 dc[20 23 1 0 23]70 dc[<007E080381980600580C0038180018300018700008700008E00008E00000E000 00E00000E00000E003FEE000387000387000383000381800380C00380600380380D8007F08>23 23 2 0 28]71 dc[11 23 1 0 13]73 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303000E01C01C00E0380070300030700038600018 E0001CE0001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E01C0 03030000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[<0FC4302C601C400CC004C004C004E0007000 7F003FE00FF801FC001C000E0006800680068006C004E008D81087E0>15 23 2 0 20]83 dc[< 7FFFF8603818403808403808803804803804803804003800003800003800003800003800003800 00380000380000380000380000380000380000380000380000380007FFC0>22 23 1 0 25]84 dc[23 23 1 0 26] 85 dc[23 23 1 0 26]88 dc[25 23 0 0 26]89 dc[<204020404080408081 008100E1C0F1E0F1E060C0>11 10 5 -13 18]92 dc[<1FC0386038301038003803F81E383038 7038E039E039E07970FF1F1E>16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000 E000E000600070083008183007C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E 00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E 00600E00700E00301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8 E000E000E000600070083010183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C00 1C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C0 06C006600C38380FE0>16 21 1 7 18]103 dc[19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C 1C1C1C1C1CFF>8 23 0 0 10]105 dc[<0300078007800300000000000000000000001F800380 038003800380038003800380038003800380038003800380038003804380E300E7007C00>9 29 -2 6 11]106 dc[ 18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[<07C01830301860 0C600CE00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[<07C2001C2600381E00700E00600E 00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E 00000E00007FC0>18 20 1 6 19]113 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E0806080 60C060E0C09F00>11 14 1 0 14]115 dc[<080008000800180018003800FF8038003800380038 0038003800380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[16 14 1 0 19]118 dc[22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc dfe /fj df[<00 7E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C000 0E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000 0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[<007FC001C1C00303C007 03C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8> 21 29 0 0 23]13 dc[<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018 000E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E0 1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80> 33 29 0 0 35]14 dc[<003F07FC0001C0DC1C000381F03C000701F03C000E01E01C000E00E01C 000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00FFFFFFFC000E00E01C000E00E0 1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80> 33 29 0 0 35]15 dc[<6060F0F0F8F8686808080808080810101010202040408080>13 12 1 -17 21]34 dc[<0F0000C0188000C030600380703807006027FB00E0100600E0100C00E0100C00 E0101800E0101800E0103000E0106000602060007020C00030418000188180000F0303C0000606 2000060C10000C1C08001818080018380400303804006038040060380400C0380400C038040180 38040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[<00E000000190 000003080000030800000708000007080000070800000708000007100000071000000720000007 40000003C03FE003800F00038006000380040005C0040009C0080010E0100030E0100060702000 60702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C0401830E18007C03E 00>27 31 2 1 32]38 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<00400080 0100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E0 00E000E000E000E000E000600060006000700030003000180018000C000C000600020001000080 0040>10 42 3 11 16]40 dc[<800040002000100018000C000C00060006000300030003800180 0180018001C001C001C001C001C001C001C001C001C001C001C001C00180018001800380030003 00060006000C000C0018001000200040008000>10 42 2 11 16]41 dc[<60F0F0701010101020 204080>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[<60F0F060>4 4 4 0 12]46 dc[<00010003000600060006000C000C000C0018001800180030003000300060006000C000C000 C0018001800180030003000300060006000C000C000C0018001800180030003000300060006000 6000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C700E60066006E007E007E007 E007E007E007E007E007E007E007E007E007E00760066006700E300C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C700070007000700070007000700070007000700070007000700 07000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830 201C400C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006 010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E01830201C201C781E780E781E38 1E001C001C00180030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C 183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C00003C00005C0000DC00009C00 011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00 001C00001C00001C00001C00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03F C020002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F 800E401E401C2038187007C0>16 29 2 1 21]53 dc[<00F0030C06040C0E181E301E300C7000 70006000E3E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C 3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF007FFF0040020080040080040080080000 100000100000200000600000400000C00000C00001C00001800001800003800003800003800003 8000078000078000078000078000078000078000030000>17 29 2 1 21]55 dc[<03E00C3010 08200C20066006600660067006780C3E083FB01FE007F007F818FC307E601E600FC007C003C003 C003C00360026004300C1C1007E0>16 29 2 1 21]56 dc[<03C00C301818300C700C600EE006 E006E007E007E007E007E0076007700F300F18170C2707C700060006000E300C780C7818701020 3030C00F80>16 29 2 1 21]57 dc[<60F0F0600000000000000000000060F0F060>4 18 4 0 12]58 dc[<60F0F0600000000000000000000060F0F0701010101020204080>4 26 4 8 12]59 dc[<000600000006000000060000000F0000000F0000000F000000178000001780000017800000 23C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F80001007800 01FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FF F0>28 29 1 0 31]65 dc[24 28 2 0 29]66 dc[<001F808000E061800180 1980070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F0 000000F0000000F0000000F0000000F0000000F0000000F0000000700000807800008078000080 380000801C0001001C0001000E000200070004000180080000E03000001FC000>25 30 2 1 30] 67 dc[ 27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F808000E0618001801980070007800E0003801C0003801C000180380001807800 00807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0 000F80700007807800078078000780380007801C0007801C0007800E00078007000B8001801180 00E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[<1FFF00F8007800780078007800780078007800780078007800 78007800780078007800780078007800787078F878F878F878F0F040E021C01F00>16 29 1 1 21]74 dc[28 28 2 0 32]75 dc[21 28 2 0 26]76 dc[33 28 2 0 38]77 dc[26 28 2 0 31]78 dc[<003F800000E0E0000380 380007001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F0 0001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0 380003803C0007801C0007000E000E0007001C000380380000E0E000003F8000>27 30 2 1 32] 79 dc[23 28 2 0 28]80 dc[28 29 2 1 31]82 dc[<07E0801C19803005 80700380600180E00180E00080E00080E00080F00000F800007C00007FC0003FF8001FFE0007FF 0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C 0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020 800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000001F800003FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[28 29 1 1 31]86 dc[40 29 1 1 43]87 dc[<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F040000078800000 7D8000003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E000 0041F00000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF0>28 28 1 0 31]88 dc[30 28 0 0 31]89 dc[7 41 4 10 12]91 dc[<08081010202040404040808080 808080B0B0F8F878783030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000 307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40 E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23] 98 dc[<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007 C0>14 18 2 0 18]99 dc[<003F00000700000700000700000700000700000700000700000700 00070000070003E7000C1700180F00300700700700600700E00700E00700E00700E00700E00700 E00700600700700700300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C30181830 0C700E6006E006FFFEE000E000E000E00060007002300218040C1803E0>15 18 1 0 18]101 dc [<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4C00C38 C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000003000001800 001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018000000 000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C00FF80>9 29 1 0 12]105 dc[<00C001E001E000C00000000000000000000000 0000000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 00E000E000E060E0F0C0F1C061803E00>11 37 -3 8 13]106 dc[19 29 1 0 22]107 dc[9 29 1 0 12]108 dc[< FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C 001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0 1C001C01C01C00FF8FF8FF80>33 18 1 0 36]109 dc[ 20 18 1 0 23]110 dc[<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E0 01C0E001C0E001C06001807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700 E00700E00700600700700700300F00180F000C370007C700000700000700000700000700000700 000700000700003FE0>19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[<1F9030704030C010C010E0 10F8007F803FE00FF000F880388018C018C018E010D0608FC0>13 18 1 0 16]115 dc[<040004 00040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C10 1C101C100C100E2003C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[< 7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C00010E00 020E000607000403801E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC 70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FFF8>14 18 1 0 18]122 dc dfe /fk df[<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000 FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00FF800003FFF0000FFFFC001F03FE0038 00FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE0 00003FC000003FC000007F8000007F000000FE000000FC000001F8000003F0000003E000000780 00000F0000001E0000003C00E0007000E000E000E001C001C0038001C0070001C00FFFFFC01FFF FFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F800003FF F00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F807F801F807F800F007F8000 00FF000000FF000000FE000001FC000001F8000007F00000FFC00000FFF0000001FC0000007E00 00007F0000007F8000003FC000003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF003F E0FF003FC0FF007FC07E007F807C007F003F01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE000007 7E00000E7E00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007 007E000E007E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF8 0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFF F8007FFFF8>29 39 2 0 34]52 dc[<000003800000000007C00000000007C0000000000FE000 0000000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF800000000 3FF80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00 000001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E 003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF8 0000780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C0 0000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE>47 41 2 0 52]65 dc[< FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC0003FC0001FE0003FC00 00FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00001FE003FC00000FF0 03FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00000FF803FC00000FF803FC00 000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF8 03FC00000FF003FC00000FF003FC00000FF003FC00001FE003FC00001FE003FC00001FC003FC00 003FC003FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC001FF800FFFFFFFFE000 FFFFFFFF8000FFFFFFFC0000>45 41 3 0 53]68 dc[22 41 2 0 26]73 dc[ 58 41 3 0 65]77 dc[ 39 41 3 0 47]80 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007 003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F80 7F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03 FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<00 1FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000 FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F8000 003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[ <00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800001F E3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F 0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800 FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF8 0003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E00 07C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFF E0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC0 01C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01 F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FF FFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80> 24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F00 7F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE0 0018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FF FFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F 0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[<07000FC01FE03FE03FE03FE0 1FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC0 3F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007 F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F0 7F0001FFFC00003FE000>29 27 2 0 34]111 dc[24 27 2 0 28]114 dc[<03FE300F FFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007 FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00> 22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F00003 F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001 F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 27 1 0 36]118 dc[47 27 1 0 50]119 dc dfe /fl df[<3078FCFC7830>6 6 10 0 26]46 dc[<00 3E0001FF8003FFC007C1E00F00E01E0F703C3FF0387FF07070F870E07870E078E1C038E1C038E1 C038E1C038E1C038E1C038E1C038E1C03870E07070E0707070E0387FE03C3FC01E0F000F003807 C0F803FFF001FFE0003F00>21 30 2 0 26]64 dc[<1FF0003FFC007FFE00780F003007000003 80000380007F8007FF801FFF803F8380780380700380E00380E00380E00380700780780F803FFF FC1FFDFC07F0FC>22 21 3 0 26]97 dc[22 30 1 0 26]98 dc[<00FF8003FFC00FFFE01F01E03C00C0780000700000700000E00000E00000E00000E00000E0 00007000007000007800703C00701F01F00FFFE003FFC000FE00>20 21 3 0 26]99 dc[<001F C0001FC0001FC00001C00001C00001C00001C00001C00001C001F1C007FDC00FFFC01E0FC03C07 C07803C07001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C07003C07003C03807C03E0F C01FFFFC07FDFC01F1FC>22 30 2 0 26]100 dc[<01F80007FF000FFF801E07C03C01C07800E0 7000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F00FFFE0 03FFC000FE00>20 21 3 0 26]101 dc[<01F87C07FFFE0FFFFE1E078C1C03803801C03801C038 01C03801C03801C01C03801E07801FFF001FFE0039F8003800003800001C00001FFF801FFFE03F FFF878007C70001CE0000EE0000EE0000EE0000E70001C78003C3E00F81FFFF007FFC001FF00> 23 33 1 12 26]103 dc[23 30 1 0 26]104 dc[<00C00001E0 0001E00000C0000000000000000000000000000000000000007FE0007FE0007FE00000E00000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 007FFF80FFFFC07FFF80>18 31 4 0 26]105 dc[<7CE0E000FFFBF8007FFFF8001F1F1C001E1E 1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C 1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00>25 21 0 0 26]109 dc[23 21 1 0 26]110 dc[<01F00007FC 001FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001 C07803C03C07803E0F801FFF0007FC0001F000>19 21 3 0 26]111 dc[<7F83F0FF8FF87FBFFC 03FC3C03F01803E00003C00003C000038000038000038000038000038000038000038000038000 0380000380007FFF00FFFF007FFF00>22 21 2 0 26]114 dc[<07FB801FFF807FFF80780780E0 0380E00380E003807800007FC0003FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC 0780FFFF00EFFE00E3F800>18 21 4 0 26]115 dc[<00C00001C00001C00001C00001C00001C0 0001C0007FFFE0FFFFE0FFFFE001C00001C00001C00001C00001C00001C00001C00001C00001C0 0001C00001C07001C07001C07001C07000E0E000FFE0007FC0001F00>20 28 1 0 26]116 dc[< FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 0E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE>23 21 1 0 26]117 dc[23 21 1 0 26]119 dc dfe /fm df[<70F8 FCFC7404040404080810102040>6 15 4 10 14]44 dc[<70F8F8F870>5 5 4 0 14]46 dc[<01 F000071C000C06001803003803803803807001C07001C07001C07001C0F001E0F001E0F001E0F0 01E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C070 01C07803C03803803803801C07000C0600071C0001F000>19 34 2 1 24]48 dc[<008003800F 80F380038003800380038003800380038003800380038003800380038003800380038003800380 03800380038003800380038003800380038007C0FFFE>15 33 4 0 24]49 dc[<03F0000C1C00 1007002007804003C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0 000780000700000E00001C0000180000300000600000C000018000010000020020040020080020 1800603000403FFFC07FFFC0FFFFC0>19 33 2 0 24]50 dc[<03F8000C1E0010070020078040 07C07807C07803C07807C03807C0000780000780000700000F00000E0000380003F000001C0000 0F000007800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C040078020 0780100F000C1C0003F000>19 34 2 1 24]51 dc[<1000801E07001FFF001FFE001FF80013E0 0010000010000010000010000010000010000010F800130E001407001803801003800001C00001 C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C04003802007001006 000C1C0003F000>19 34 2 1 24]53 dc[<01F800060E000803001001802001802000C06000C0 6000C06000C07000C07801803E01003F02001FC4000FF80003F80003FC00067F00083F80100F80 3007C06001C06000E0C000E0C00060C00060C00060C000606000406000C03000801803000E0E00 03F000>19 34 2 1 24]56 dc[<01F000060C000C0600180700380380700380700380F001C0F0 01C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E03803E01805E00C05E00619E003 E1E00001C00001C00001C0000380000380300300780700780600700C002018001030000FC000> 19 34 2 1 24]57 dc[<0001800000018000000180000003C0000003C0000003C0000005E00000 05E000000DF0000008F0000008F0000010F800001078000010780000203C0000203C0000203C00 00401E0000401E0000401E0000800F0000800F0000FFFF000100078001000780030007C0020003 C0020003C0040003E0040001E0040001E00C0000F00C0000F03E0001F8FF800FFF>32 35 2 0 37]65 dc[29 34 2 0 35]66 dc[<0007E010 0038183000E0063001C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000 307C0000107800001078000010F8000000F8000000F8000000F8000000F8000000F8000000F800 0000F800000078000000780000107C0000103C0000103C0000101C0000201E0000200E00004007 0000400380008001C0010000E0020000381C000007E000>28 36 3 1 35]67 dc[31 34 2 0 37]68 dc[29 34 2 0 33]69 dc[27 34 2 0 32]70 dc[40 34 2 0 45]77 dc[32 34 2 0 37]78 dc[27 34 2 0 33]80 dc[<03F0200C0C601802603001E07000E0600060E00060E00060E000 20E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001 E00000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C80180C607 0081FC00>20 36 3 1 27]83 dc[ 32 35 2 1 37]85 dc[47 35 1 1 50]87 dc[<0FE000 1838003C0C003C0E0018070000070000070000070000FF0007C7001E07003C0700780700700700 F00708F00708F00708F00F087817083C23900FC1E0>21 21 2 0 24]97 dc[<0E0000FE00001E 00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F000E 61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E 001C0E003C0E00380F00700C80600C41C0083F00>23 35 1 0 27]98 dc[<01FE000703000C07 801C0780380300780000700000F00000F00000F00000F00000F00000F00000F000007000007800 403800401C00800C010007060001F800>18 21 2 0 22]99 dc[<0000E0000FE00001E00000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E0 1C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E0 3800E01801E00C02E0070CF001F0FE>23 35 2 0 27]100 dc[<01FC000707000C03801C01C038 01C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C 00400E008007030000FC00>19 21 1 0 22]101 dc[<003C00C6018F038F030F07000700070007 0007000700070007000700FFF80700070007000700070007000700070007000700070007000700 0700070007000700070007807FF8>16 35 0 0 15]102 dc[<00007001F198071E180E0E181C07 001C07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F0001000001000001800 001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C000186000306000303800 E00E038003FE00>21 33 1 11 24]103 dc[<0E0000FE00001E00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00 700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 700E0070FFE7FF>24 35 1 0 27]104 dc[<1C001E003E001E001C000000000000000000000000 00000000000E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E00FFC0>10 34 1 0 14]105 dc[<0E00FE001E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E00FFE0>11 35 1 0 14]108 dc[<0E1FC07F00FE60E183801E807201C00F00 3C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E 003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0 0E003800E0FFE3FF8FFE>39 21 1 0 42]109 dc[<0E1F80FE60C01E80E00F00700F00700E0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E0070FFE7FF>24 21 1 0 27]110 dc[<01FC000707000C01801800C03800E0700070700070F0 0078F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E038007070001 FC00>21 21 1 0 24]111 dc[<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E00 1E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F000E00 000E00000E00000E00000E00000E00000E00000E00000E0000FFE000>23 31 1 10 27]112 dc[ <0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E00 0F00FFF0>16 21 1 0 19]114 dc[<0F8830786018C018C008C008E008F0007F803FE00FF001F8 003C801C800C800CC00CC008E018D0308FC0>14 21 2 0 19]115 dc[<02000200020002000600 060006000E001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E 040E040E040E040708030801F0>14 31 1 0 19]116 dc[<0E0070FE07F01E00F00E00700E0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F0 06017003827800FC7F>24 21 1 0 27]117 dc[23 21 1 0 26]118 dc[23 31 1 10 26] 121 dc dfe /fn df[17 3 1 -14 22]45 dc[43 49 4 0 51]68 dc[42 49 4 0 50]72 dc[42 49 4 0 50]78 dc[37 49 4 0 45]80 dc[<007F802001FFE020 07C078600F001C601E0006E03C0003E0380001E0780000E0700000E070000060F0000060F00000 60F0000020F0000020F0000020F8000020F80000007C0000007E0000003F0000003FC000001FF8 00000FFF800007FFF80003FFFC0000FFFF00000FFF800000FFC000001FE0000007E0000003F000 0001F0000000F0000000F8000000F88000007880000078800000788000007880000078C0000078 C0000070E00000F0E00000E0F00000E0F80001C0EC000380C7000700C1F01E00807FFC00800FF0 00>29 51 4 1 37]83 dc[<00FE00000303C0000C00E00010007000100038003C003C003E001C 003E001E003E001E0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F80 1E001F001E003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478 003E047C005E043E008F080F0307F003FC03E0>30 31 3 0 33]97 dc[<003F8000E060038018 0700040F00041E001E1C003E3C003E7C003E7C0008780000F80000F80000F80000F80000F80000 F80000F80000F80000F800007800007C00007C00003C00011E00011E00020F0002070004038018 00E060003F80>24 31 3 0 29]99 dc[<003F800000E0E0000380380007003C000E001E001E00 1E001C000F003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F8 000000F8000000F8000000F8000000F8000000780000007C0000003C0000003C0000801E000080 0E0001000F0002000780020001C00C0000F03000001FC000>25 31 2 0 29]101 dc[<0007E000 1C1000383800707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00007E0007FFF007FFF00>22 50 1 0 20]102 dc [<000000F0007F030801C1C41C0380E81C070070080F0078001E003C001E003C003E003E003E00 3E003E003E003E003E003E003E003E003E001E003C001E003C000F007800070070000780E00009 C1C000087F000018000000180000001800000018000000180000001C0000000E0000000FFFF800 07FFFF0003FFFF800E000FC0180001E0300000F070000070E0000038E0000038E0000038E00000 38E00000387000007070000070380000E01C0001C00700070001C01C00003FE000>30 47 2 15 33]103 dc[<0780000000FF80000000FF800000000F8000000007800000000780000000078000 000007800000000780000000078000000007800000000780000000078000000007800000000780 00000007800000000780000000078000000007800000000780FE00000783078000078C03C00007 9001E00007A001E00007A000F00007C000F00007C000F000078000F000078000F000078000F000 078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 00078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80>33 50 2 0 37]104 dc[<07000F801F80 1F800F800700000000000000000000000000000000000000000000000780FF80FF800F80078007 800780078007800780078007800780078007800780078007800780078007800780078007800780 0780078007800FC0FFF8FFF8>13 48 2 0 18]105 dc[<07800000FF800000FF8000000F800000 078000000780000007800000078000000780000007800000078000000780000007800000078000 00078000000780000007800000078000000780000007801FFC07801FFC078007E0078007800780 06000780040007800800078010000780600007808000078100000783800007878000078FC00007 93C00007A1E00007C1F0000780F0000780780007807C0007803C0007803E0007801F0007800F00 07800F80078007C0078003C0078003E00FC007F8FFFC0FFFFFFC0FFF>32 50 2 0 35]107 dc[< 0780FF80FF800F8007800780078007800780078007800780078007800780078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007800780 078007800780078007800780078007800FC0FFFCFFFC>14 50 2 0 18]108 dc[<0780FE001FC0 00FF83078060F000FF8C03C18078000F9001E2003C0007A001E4003C0007A000F4001E0007C000 F8001E0007C000F8001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00 078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0 001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E0007 8000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E000FC001F800 3F00FFFC1FFF83FFF0FFFC1FFF83FFF0>52 31 2 0 56]109 dc[<0780FE0000FF83078000FF8C 03C0000F9001E00007A001E00007A000F00007C000F00007C000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F000 078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 00078000F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80>33 31 2 0 37]110 dc[<001F C00000F0780001C01C00070007000F0007801E0003C01C0001C03C0001E03C0001E0780000F078 0000F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8 780000F07C0001F03C0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F078 00001FC000>29 31 2 0 33]111 dc[<0781FC00FF860700FF8803C00F9001E007A000F007C000 78078000780780003C0780003C0780003E0780001E0780001F0780001F0780001F0780001F0780 001F0780001F0780001F0780001F0780001F0780003E0780003E0780003C0780007C0780007807 C000F007A000F007A001E00798038007860F000781F80007800000078000000780000007800000 078000000780000007800000078000000780000007800000078000000FC00000FFFC0000FFFC00 00>32 45 2 14 37]112 dc[<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C0 000780000780000780000780000780000780000780000780000780000780000780000780000780 000780000780000780000780000780000780000FC000FFFE00FFFE00>22 31 2 0 25]114 dc[< 01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800007E00003FF000 1FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC0001CE0001CE00018 F00038F00030CC0060C301C080FE00>22 31 2 0 26]115 dc[<00400000400000400000400000 400000C00000C00000C00001C00001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C01003C01003C01003C01003C01003C01003C01003C01001C02001E02000E0400078C000 1F00>20 44 1 0 25]116 dc[33 31 1 0 35]118 dc[46 31 1 0 48]119 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 468 178 a fn(Proto)s(col)21 b(Service)h(Decomp)q(osition)f(for)541 269 y (High-P)m(erformance)g(Net)o(w)n(orking)414 390 y fm(Chris)16 b(Maeda)253 448 y(Sc)n(ho)r(ol)g(of)h(Computer)e(Science)259 506 y(Carnegie)h(Mellon)f(Univ)n (ersit)n(y)367 564 y(5000)j(F)l(orb)q(es)f(Av)m(e.)326 622 y(Pittsburgh)g(P)l (A)f(15213)332 680 y fl(cmaeda@cs.c)o(mu.)o(edu)1154 390 y fm(Brian)g(N.)f (Bershad)985 448 y(Departmen)m(t)i(of)f(Computer)g(Science)1167 506 y(and)h (Engineering)1070 564 y(Univ)m(ersit)n(y)f(of)h(W)l(ashington)1143 622 y(Seat\ tle,)e(W)-5 b(A)16 b(98195)1021 680 y fl(bershad@c)o(s.w)o(ash)o(in)o(gto)o (n.e)o(du)0 801 y @beginspecial @setspecial @endspecial 42 x fk(Abstract)0 934 y fj(In)f(this)g(pap)q(er)h(w)o(e)f(describ)r(e)h(a)f(new)g(approac)o(h)g(to) g(imple-)0 984 y(men)n(ting)9 b(netw)o(ork)g(proto)r(cols)h(that)g(enables)g (them)f(to)h(ha)o(v)n(e)0 1033 y(high)17 b(p)q(erformance)g(and)g(high)f(\015\ exibilit)n(y)l(,)i(while)f(retain-)0 1083 y(ing)c(complete)g(conformit)m(y)g (to)h(existing)f(application)f(pro-)0 1133 y(grammi)o(ng)18 b(in)n(terfaces.) 40 b(The)21 b(k)o(ey)g(insigh)n(t)g(b)q(ehind)g(our)0 1183 y(w)o(ork)f(is)f (that)h(an)g(application's)f(in)n(terface)i(to)f(the)g(net-)0 1233 y(w)o(ork) d(is)g(distinct)g(and)g(separable)h(from)d(its)i(in)o(terface)h(to)0 1283 y (the)10 b(op)q(erating)g(system.)16 b(W)m(e)10 b(ha)o(v)n(e)g(separated)i(the\ se)f(in)n(ter-)0 1332 y(faces)g(for)g(t)o(w)o(o)f(proto)q(col)g(implemen)m (tations,)g(TCP/IP)h(and)0 1382 y(UDP/IP)m(,)h(running)h(on)g(the)g(Mac)o(h)g (3.0)f(op)q(erating)h(system)0 1432 y(and)18 b(UNIX)h(server.)33 b(Sp)q(eci\ \014cally)l(,)19 b(library)f(co)q(de)h(in)f(the)0 1482 y(application's)c(addr\ ess)i(space)g(implemen)l(ts)g(the)g(net)o(w)o(ork)0 1532 y(proto)q(cols)k(and) f(transfers)j(data)d(to)h(and)f(from)f(the)i(net-)0 1581 y(w)o(ork,)12 b(whil\ e)h(an)g(op)q(erating)g(system)g(server)g(manages)f(the)0 1631 y(hea)o(vyw)o (eigh)n(t)g(abstractions)g(that)f(applications)f(use)i(when)0 1681 y(manipula\ ting)g(the)k(net)o(w)o(ork)f(through)h(op)q(erations)f(other)0 1731 y(than)21 b(send)g(and)g(receive.)39 b(On)21 b(DECstation)g(5000/200)0 1764 y 378 2 v 64 1837 a fi(This)d(researc)o(h)e(w)o(as)i(sp)q(onsored)e(in)i(part)f(b)o(y)h (the)f(Adv)n(anced)0 1876 y(Researc)o(h)11 b(Pro)q(jects)h(Agency)m(,)f(Infor\ mation)e(Science)i(and)h(T)m(ec)o(hnol-)0 1916 y(ogy)d(O\016ce,)i(under)d(the) i(title)f(\\Researc)o(h)f(on)h(P)o(arallel)g(Computing",)0 1955 y(ARP)m(A)15 b (Order)f(No.)23 b(7330,)13 b(issued)g(b)o(y)h(ARP)m(A/CMO)i(under)c(Con-)0 1994 y(tract)h(MD)o(A972-90-C-0035,)e(the)i(Xero)o(x)g(Corp)q(oration,)f(and) h(Digi-)0 2034 y(tal)d(Equipmen)o(t)e(Corp)q(oration.)13 b(Bershad)c(w)o(as)i (partially)e(supp)q(orted)0 2073 y(b)o(y)h(a)h(National)e(Science)f(F)m(ounda\ tion)g(Presiden)o(tial)g(Y)m(oung)i(In)o(v)o(esti-)0 2113 y(gator)i(Aw)o(ard.) 23 b(Maeda)13 b(w)o(as)h(partially)d(supp)q(orted)h(b)o(y)h(a)h(National)0 2152 y(Science)8 b(F)m(oundation)f(Graduate)g(F)m(ello)o(wship.)14 b(The)c (views)f(and)g(con-)0 2192 y(clusions)i(con)o(tained)f(in)j(this)f(do)q(cumen) o(t)e(are)i(those)f(of)i(the)f(authors)0 2231 y(and)d(should)g(not)g(b)q(e)g (in)o(terpreted)e(as)j(represen)o(ting)d(the)i(o\016cial)g(p)q(oli-)0 2271 y (cies,)15 b(either)f(expressed)e(or)j(implied,)f(of)g(the)h(Adv)n(anced)e(Res\ earc)o(h)0 2310 y(Pro)q(jects)d(Agency)m(,)f(Xero)o(x)h(Corp)q(oration,)e(Dig\ ital)h(Equipmen)o(t)f(Cor-)0 2349 y(p)q(oration,)j(the)h(National)f(Science)g (F)m(oundation,)f(or)i(the)g(U.S.)h(Go)o(v-)0 2389 y(ernmen)o(t.)f(Bershad)7 b (p)q(erformed)f(this)i(w)o(ork)g(while)h(at)f(Carnegie)f(Mel-)0 2428 y(lon)k (Univ)o(ersit)o(y)m(.)1006 801 y @beginspecial @setspecial @endspecial 42 x fj (systems)18 b(connected)i(b)o(y)d(10Mb/sec)i(Ethernet,)h(this)d(ap-)1006 893 y (proac)o(h)f(to)g(proto)q(col)f(decomp)q(osition)f(ac)o(hiev)o(es)j(TCP/IP) 1006 943 y(throughput)12 b(of)e(1088)g(KB/second,)j(whic)o(h)e(is)g(comparabl\ e)1006 992 y(to)20 b(that)f(of)g(a)g(high-qualit)m(y)h(in-k)n(ernel)g(TCP/IP) g(imple-)1006 1042 y(men)n(tation,)g(and)f(substantially)e(b)q(etter)k(than)f (a)f(serv)o(er-)1006 1092 y(based)27 b(one.)55 b(Our)27 b(approac)o(h)f(ac)o (hiev)o(es)h(small-pac)m(k)n(et)1006 1142 y(UDP/IP)14 b(round)f(trip)g(latenc\ ies)h(of)f(1.23)f(ms,)g(again)g(com-)1006 1192 y(parable)j(to)g(a)f(k)o(ernel\ -based)i(implemen)l(tation)e(and)h(more)1006 1241 y(than)f(t)o(wice)g(as)g (fast)g(as)g(a)g(serv)o(er-based)h(one.)1006 1404 y fk(1)69 b(In)n(tro)s(duct\ ion)1006 1503 y fj(In)20 b(this)f(pap)q(er)h(w)o(e)g(describ)r(e)g(a)g(new)f (approac)o(h)h(for)f(im-)1006 1553 y(plemen)n(ting)d(net)o(w)o(ork)h(proto)q (cols)f(that)h(enables)g(them)e(to)1006 1603 y(ha)o(v)o(e)f(high)g(p)q(erform\ ance)g(and)g(high)f(\015exibilit)n(y)l(.)19 b(The)c(k)o(ey)1006 1653 y(insigh) n(t)h(b)q(ehind)g(our)g(w)o(ork)g(is)g(that)g(an)f(application's)g(in-)1006 1703 y(terface)f(to)e(the)h(netw)o(ork)f(is)g(distinct)h(and)g(separable)g (from)1006 1752 y(its)h(in)o(terface)h(to)f(the)h(op)q(erating)f(system.)19 b (By)c(separating)1006 1802 y(the)k(in)n(terfaces,)h(w)o(e)e(can)g(pro)o(vide) g(a)g(fast)g(path)g(b)q(et)o(w)o(een)1006 1852 y(the)h(application)d(and)i (the)g(netw)n(ork)g(while)f(main)m(taining)1006 1902 y(the)11 b(seman)n(tics) f(of)g(op)q(erating)g(system)f(abstractions)i(sp)r(eci-)1006 1952 y(\014ed)g (b)o(y)f(standard)g(application)f(programming)d(in)o(terfaces.)1006 2002 y (Sp)q(eci\014cally)m(,)j(co)r(de)h(in)f(the)h(application)e(address)j(space)f (im-)1006 2051 y(plemen)n(ts)19 b(the)h(net)o(w)o(ork)f(proto)q(cols)g(and)f (transfers)i(data)1006 2101 y(to)g(and)g(from)f(the)i(net)o(w)o(ork,)g(while) f(an)g(op)q(erating)h(sys-)1006 2151 y(tem)12 b(serv)o(er)h(implemen)l(ts)g (the)g(mac)n(hinery)f(required)h(when)1006 2201 y(applications)18 b(manipulat\ e)e(a)j(net)o(w)o(ork)f(session)i(through)1006 2251 y(op)q(erations)c(other)g (than)f(send)i(and)e(receive.)23 b(By)16 b(placing)1006 2300 y(the)d(critical) g(paths)g(of)f(the)h(proto)q(col)g(in)f(the)h(application's)1006 2350 y(addre\ ss)18 b(space,)f(w)o(e)g(a)n(v)o(oid)f(protection)h(b)q(oundary)f(cross-)1006 2400 y(ings,)f(data)h(cop)o(ying,)f(and)g(unnecessary)j(soft)o(w)o(are)e(la)n (y)o(ers)1006 2450 y(in)g(the)g(importan)o(t)g(common)d(case)k(of)e(send)i (and)f(receive.)1006 2500 y(W)l(e)11 b(pro)n(vide)f(\015exibilit)n(y)f(b)r (ecause)i(the)f(user-level)g(net)o(w)o(ork-)1006 2549 y(ing)j(soft)n(w)o(are) h(ma)m(y)f(b)q(e)h(dev)o(elop)q(ed,)f(con\014gured,)h(and)f(sp)r(e-)1006 2599 y(cialized)f(indep)q(endently)f(from)g(the)h(rest)h(of)f(the)g(op)q(erating) 1006 2649 y(system.)1048 2704 y(W)l(e)g(ha)o(v)o(e)g(implemen)l(ted)h(our)f (proto)q(col)g(arc)o(hitecture)h(in)p eop %%Page: 2 2 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fj(the)18 b(con)o(text) g(of)f(the)h(Mac)o(h)f(3.0)g(op)q(erating)g(system)g([Ac-)0 95 y(cetta)12 b (et)f(al.)16 b(86])10 b(and)g(CMU's)h(UNIX)g(serv)o(er)h([Golub)d(et)i(al.)0 145 y(90])16 b(on)h(MIPS)g(R3000)e([Kane)i(88])f(and)h(In)o(tel)g(i486)e([In) o(tel)0 195 y(90])e(pro)q(cessors)j(running)e(on)g(10Mb/sec)h(Ethernet-based) 0 244 y(netw)n(orks.)22 b(Our)15 b(system)g(includes)h(a)e(complete)h(TCP/IP) 0 294 y(and)k(UDP/IP)h(stack)f(implemen)l(ted)h(as)g(a)f(co)r(de)h(library)0 344 y(link)n(ed)e(with)f(eac)o(h)g(application)f(program,)g(and)h(a)g(set)h (of)0 394 y(op)q(erating)f(system)g(facilities)g(that)g(em)n(ulate)g(complete\ ly)0 444 y(the)d(BSD)g(so)q(ck)n(et)h(programmi)o(ng)c(in)n(terface)k([Stev)o (ens)f(90].)42 496 y(Our)21 b(approac)o(h)g(of)f(separating)h(the)h(proto)q (col)f(imple-)0 546 y(men)n(tation)9 b(in)o(to)h(t)o(w)n(o)g(pieces,)i(one)e (fast)g(that)g(resides)i(in)d(the)0 596 y(application's)17 b(address)j(space) g(pro)o(viding)d(net)o(w)o(ork)i(con-)0 646 y(nectivit)o(y)m(,)h(and)f(one)g (complete)g(that)g(resides)h(in)f(an)g(op-)0 695 y(erating)g(system)g(server) h(pro)o(viding)e(full)f(in)o(terface)j(com-)0 745 y(patibilit)m(y)m(,)j(has)f (resulted)g(in)g(substan)o(tial)f(p)q(erformance)0 795 y(impro)m(v)o(emen)n (ts)e(relativ)n(e)f(to)g(a)g(server-based)h(implemen-)0 845 y(tation.)g(More) c(imp)o(ortan)o(tly)l(,)f(our)h(user-lev)o(el)g(proto)q(col)f(li-)0 895 y(bra\ ries)20 b(ac)o(hiev)n(e)g(p)q(erformance)f(\(b)q(oth)g(throughput)g(and)0 945 y(latency\))h(that)f(is)g(comparable)f(to,)i(and)f(in)g(some)f(cases)0 994 y (b)q(etter)27 b(than,)g(w)o(ell-tuned)e(k)o(ernel-based)h(implemen)l(ta-)0 1044 y(tions.)0 1175 y fh(The)18 b(rest)g(of)h(this)f(pap)s(er)0 1257 y fj (In)k(the)h(next)f(section)h(w)o(e)f(detail)g(the)g(motiv)l(ation)f(and)0 1307 y(goals)12 b(for)g(application-lev)n(el)g(proto)q(cols.)18 b(In)13 b(Section) g(3)g(w)n(e)0 1357 y(presen)q(t)c(an)g(o)o(v)o(erview)h(of)e(our)i(design.)16 b(In)10 b(Section)g(4)f(w)o(e)h(de-)0 1406 y(scrib)r(e)i(the)g(system's)f(p)q (erformance,)g(and)g(an)g(application-)0 1456 y(sp)r(eci\014c)i(proto)q(col)f (optimization)e(that)i(demonstrates)h(the)0 1506 y(\015exibilit)n(y)j(of)g (our)g(approac)o(h.)26 b(In)17 b(Section)g(5)f(w)o(e)h(discuss)0 1556 y(relat\ ed)i(w)o(ork.)31 b(Finally)-6 b(,)19 b(in)f(Section)h(6)f(w)n(e)h(present)g (our)0 1606 y(conclusions.)0 1758 y fk(2)69 b(Motiv)l(ation)23 b(and)g(goals) 0 1854 y fj(Our)12 b(w)o(ork)g(is)g(motiv)l(ated)g(b)o(y)g(the)g(desire)h(to) f(ha)o(v)n(e)h(net)o(w)o(ork)0 1904 y(proto)q(col)e(soft)o(w)n(are)h(execute) h(at)e(user-lev)o(el)g(with)g(the)h(same)0 1954 y(or)k(b)q(etter)h(p)q(erform\ ance)e(than)h(when)g(it)f(executes)j(in)d(the)0 2003 y(k)o(ernel.)29 b(Proto) q(col)17 b(soft)o(w)o(are)h(is)f(generally)g(implemen)l(ted)0 2053 y(as)f(par\ t)h(of)e(an)h(op)q(erating)g(system)g(k)o(ernel)h([Le\017er)f(et)h(al.)0 2103 y(89],)c(or)h(as)g(part)h(of)e(a)h(dedicated)h(server)g(pro)q(cess)h([Rashid) 0 2153 y(&)j(Rob)q(ertson)h(81,)d(Golub)h(et)i(al.)32 b(90].)g(The)19 b(main) e(ad-)0 2203 y(v)n(an)n(tage)j(of)f(a)g(server-based)i(proto)q(col)e(implemen) l(tation)0 2252 y(is)d(\015exibilit)m(y)g(b)q(ecause)i(the)e(proto)q(col)g (co)q(de)g(is)g(decoupled)0 2302 y(from)j(the)j(k)o(ernel)g([Mogul)e(et)h(al.) 40 b(87],)21 b(allo)n(wing)f(it)h(to)0 2352 y(b)q(e)d(more)e(easily)g(modi\ \014ed)h([Jacobson)g(et)h(al.)26 b(92,)16 b(Clark)0 2402 y(et)i(al.)26 b(91,) 16 b(Clark)h(et)g(al.)27 b(92])16 b(and)h(optimized)f([Clark)g(&)0 2452 y(T)m (ennenhouse)j(90,)e(F)m(orin)g(et)i(al.)30 b(91],)17 b(esp)r(ecially)g(on)h (an)0 2502 y(application-speci\014c)d(basis)f([F)l(elten)g(92].)42 2554 y(Pro\ to)q(cols)23 b(implemen)l(ted)g(in)g(user-lev)o(el)g(servers,)j(al-)0 2604 y (though)18 b(\015exible,)g(ha)o(v)o(e)g(tended)i(to)n(w)o(ards)f(w)o(orse)f (p)r(erfor-)0 2654 y(mance)e(than)i(when)f(implemen)l(ted)h(in)f(the)h(k)n (ernel.)29 b(In)17 b(a)0 2704 y(server-based)i(proto)q(col,)f(con)o(trol)f (and)g(data)h(cross)g(t)o(wice)1006 4 y @beginspecial @setspecial @endspecial 41 x(as)g(man)m(y)f(protection)h(b)r(oundaries)f(when)h(tra)o(v)o(elling)e (b)r(e-)1006 95 y(t)o(w)o(een)f(the)f(netw)o(ork)f(and)h(the)h(application.)h (In)e(one)g(case,)1006 145 y(the)f(extra)h(o)n(v)o(erhead)g(resulted)g(in)e (p)q(erformance)g(that)h(w)o(as)1006 195 y(t)o(w)o(o)f(to)g(four)g(times)g (w)o(orse)h(than)f(an)h(in-k)n(ernel)g(implemen-)1006 244 y(tation)g([Maeda)h (&)g(Bershad)h(92].)1048 294 y(Clearly)l(,)f(neither)i(a)f(serv)o(er-based)h (nor)f(a)g(k)o(ernel-based)1006 344 y(strategy)22 b(is)e(ideal)g(b)q(ecause)j (eac)o(h)e(demands)f(a)g(tradeo\013)1006 394 y(b)q(etw)o(een)j(e\016ciency)h (and)f(\015exibilit)m(y)m(.)45 b(The)23 b(remaining)1006 444 y(strategy)m(,)i (and)e(the)h(one)f(describ)r(ed)h(in)e(this)i(pap)q(er,)h(is)1006 493 y(to)17 b(implemen)l(t)g(netw)o(ork)g(proto)q(cols)g(as)g(a)g(library)g(link)m(ed) 1006 543 y(in)o(to)d(the)h(address)h(space)f(of)f(eac)o(h)h(application.)j (This)c(ap-)1006 593 y(proac)o(h)g(can)g(retain)g(the)h(p)q(erformance)f(adv) m(an)o(tages)g(of)f(an)1006 643 y(in-k)n(ernel)19 b(implemen)l(tation)e(and)h (the)h(\015exibilit)m(y)f(adv)m(an-)1006 693 y(tages)g(of)e(a)h(user-lev)o (el)g(implemen)l(tation.)27 b(Go)q(o)q(d)17 b(p)q(erfor-)1006 742 y(mance)e (is)g(ac)o(hiev)n(ed)h(b)q(ecause)h(the)f(n)o(um)m(b)q(er)g(of)f(b)q(oundary) 1006 792 y(crossings)h(on)f(the)h(send)g(and)g(receiv)o(e)g(paths)g(is)f(the) h(same)1006 842 y(as)e(the)g(in-k)n(ernel)h(case.)k(Flexibilit)m(y)14 b(is)f (ac)o(hiev)o(ed)h(b)q(ecause)1006 892 y(the)e(application,)e(not)i(the)g(op)q (erating)f(system,)g(can)h(de\014ne)1006 942 y(the)j(b)q(eha)o(vior)e(of)h (the)g(netw)n(ork)g(proto)q(col.)1006 1046 y fg(The)g(di\016cult)l(y)g(with)g (application)c(lev)n(el)k(protocols)1006 1123 y fj(The)19 b(k)o(ey)g(challeng\ e)f(with)g(application-lev)n(el)g(proto)q(cols,)1006 1173 y(whic)o(h)12 b(con) o(trol)f(the)i(format)d(of)h(data)g(on)h(the)g(wire,)g(is)g(their)1006 1222 y (in)o(tegration)20 b(with)g(the)h(rest)g(of)f(the)h(op)q(erating)g(system,) 1006 1272 y(whic)o(h)11 b(pro)o(vides)f(abstractions)i(to)e(manage)f(pro)q (cess)k(state,)1006 1322 y(I/O)i(c)o(hannels,)g(and)f(other)i(mac)m(hine)f (resources.)23 b(W)l(e)15 b(ad-)1006 1372 y(dress)c(this)f(c)o(hallenge)f(b)o (y)g(iden)o(tifying)f(and)i(pro)o(viding)e(a)h(set)1006 1422 y(of)15 b(k)o (ey)h(in)o(terfaces)h(b)q(etw)n(een)g(the)g(application,)d(the)i(op)q(er-) 1006 1471 y(ating)c(system,)g(and)h(the)g(netw)o(ork.)k(The)c(proto)q(col)g (library)1006 1521 y(pro)o(vides)19 b(for)f(services)i(such)f(as)f(rapid)g (data)h(mo)m(v)n(emen)o(t)1006 1571 y(b)q(etw)o(een)d(hosts.)22 b(This)15 b (in)n(terface)i(m)m(ust)f(b)q(e)f(e\016cient,)g(but)1006 1621 y(it)d(do)q(es) g(not)g(need)h(to)f(b)q(e)h(particularly)e(complex.)16 b(The)c(op-)1006 1671 y (erating)18 b(system)g(pro)o(vides)h(for)f(imp)o(ortan)o(t)g(abstractions) 1006 1721 y(such)10 b(as)h(the)g(net)o(w)o(ork)f(as)h(a)f(\014rst-class)i(I/O) e(c)o(hannel.)17 b(This)1006 1770 y(in)o(terface)12 b(m)m(ust)g(b)q(e)g(compl\ ete)e(in)h(that)g(it)g(supp)r(orts)g(all)f(op-)1006 1820 y(erations)17 b(that) h(ma)m(y)f(b)q(e)g(applied)g(to)g(a)g(net)o(w)o(ork)g(connec-)1006 1870 y(tio\ n)g(la)n(y)o(ered)i(b)q(eneath)g(a)e(\014le)h(abstraction,)g(but)g(it)f(do)q (es)1006 1920 y(not)d(need)h(to)f(b)q(e)g(particularly)f(e\016cien)o(t.)1006 2033 y fh(2.1)56 b(Other)18 b(goals)1006 2109 y fj(In)e(addition)f(to)h(\015e\ xibilit)m(y)g(and)g(go)q(o)q(d)g(p)q(erformance,)g(w)o(e)1006 2159 y(ha)o(v)o (e)e(the)g(follo)m(wing)g(goals)f(in)g(our)h(design:)1048 2230 y ff(\017)20 b fe(R)n(euse)e(of)g(existing)f(pr)n(oto)n(c)n(ol)g(c)n(o)n(de.)27 b fj(Our)17 b (in)n(terfaces)1089 2280 y(allo)n(w)d(the)i(use)g(of)e(existing)g(netw)o(ork) g(proto)r(col)g(co)q(de)1089 2330 y(as)h(proto)q(col)f(libraries.)19 b(This) 14 b(allo)m(ws)h(us)f(to)h(lev)n(erage)1089 2380 y(the)d(proto)q(col)f(constr\ uction)i(w)o(ork)e(of)g(others)h([Jacob-)1089 2429 y(son)g(88,)f(Hutchinson)g (&)h(P)o(eterson)i(91],)d(and)g(to)h(more)1089 2479 y(easily)j(compare)f(the) h(p)q(erformance)g(of)f(a)h(giv)n(en)g(pro-)1089 2529 y(to)q(col)i(implemen)l (tation)f(running)h(in)f(the)i(k)o(ernel,)f(in)1089 2579 y(a)d(proto)q(col)f (server,)h(and)g(in)g(an)f(application.)1048 2654 y ff(\017)20 b fe(Sour)n (c)n(e-level)d(c)n(omp)n(atibility)g(with)f(existing)i(pr)m(oto)n(c)n(ol)1089 2704 y(clients.)34 b fj(W)l(e)20 b(are)g(willing)d(to)i(recompile)f(or)h(reli\ nk)p eop %%Page: 3 3 bop 0 4 a @beginspecial @setspecial @endspecial 83 45 a fj(existing)14 b(pro\ to)q(col)g(clien)n(ts)h(against)e(our)h(new)h(imple-)83 95 y(men)n(tation,)i (but)h(w)o(e)g(\(as)g(w)n(e)g(exp)r(ect)g(most)f(others\))83 145 y(are)j(un)o (willing)e(to)i(modify)f(these)j(clien)n(ts.)37 b(Conse-)83 195 y(quen)o(tly) l(,)17 b(our)f(op)q(erating)g(system)g(and)g(proto)q(col)g(in-)83 244 y(terfa\ ce)22 b(is)f(syntactically)f(and)h(seman)n(tically)f(com-)83 294 y(patible)13 b(with)h(existing)g(in)n(terfaces.)42 377 y ff(\017)20 b fe(Se)n(curity.)25 b fj(A)17 b(proto)q(col)f(implemen)l(tation)g(m)m(ust)h(not)83 426 y(degrade)j (the)f(security)g(of)g(the)g(netw)o(ork.)33 b(Our)20 b(de-)83 476 y(sign)13 b (o\013ers)i(the)f(same)f(lev)o(el)g(of)g(netw)o(ork)g(security)h(as)83 526 y (is)h(found)f(in)g(the)i(proto)q(col)e(implemen)l(tation)g(that)h(it)83 576 y (supplan)o(ts.)42 658 y ff(\017)20 b fe(A)e(p)o(ortable)g(ar)m(chite)n(ctur)n (e.)30 b fj(W)l(e)18 b(in)o(tend)g(to)g(use)h(our)83 708 y(proto)q(col)h(arc) o(hitecture)h(on)f(unipro)q(cessors,)j(shared)83 758 y(memory)7 b(m)m(ultipro) q(cessors,)12 b(and)d(m)m(ulticomputers)g(in)83 808 y(whic)o(h)18 b(pro)q(ces\ sors)i(share)f(a)f(high-sp)q(eed)h(dedicated)83 858 y(mesh.)e(The)d(applicati\ on)d(proto)q(col)i(library)f(is)h(struc-)83 907 y(tured)g(as)f(a)g(componen)o (t)g(of)g(a)g(distributed)g(system)g(in)83 957 y(whic)o(h)j(proto)q(col)f(sta\ te)i(is)f(main)m(tained)g(b)n(y)g(b)q(oth)g(the)83 1007 y(op)q(erating)f(syst\ em)f(server)i(and)f(the)g(application.)42 1097 y(While)9 b(this)i(w)o(ork)g (has)f(b)r(een)h(p)q(erformed)g(in)f(the)h(con)o(text)0 1147 y(of)16 b(a)g (sp)q(eci\014c)i(microk)m(ernel-based)g(op)q(erating)e(system,)g(it)0 1197 y (is)d(neither)g(sp)r(eci\014c)h(to)e(it,)g(nor)h(to)g(microk)m(ernel-based)h (op-)0 1247 y(erating)g(systems)g(in)f(general.)0 1384 y fk(3)69 b(Design)22 b (o)n(v)n(erview)0 1475 y fj(In)14 b(this)f(section)i(w)o(e)f(present)g(the)g (design)g(of)f(our)h(proto)q(col)0 1524 y(arc)o(hitecture)h(in)d(the)i(con)o (text)f(of)f(a)h(reliable,)f(b)o(yte-stream)0 1574 y(proto)q(col)17 b(\(TCP\)) g(and)g(an)g(unreliable)g(datagram)e(proto-)0 1624 y(col)h(\(UDP\))h(accessed) i(through)d(the)h(BSD)g(UNIX)g(so)q(ck)n(et)0 1674 y(in)n(terface.)i(W)l(e)12 b(\014rst)g(describ)s(e)g(the)g(resp)r(onsibilit)n(y)f(and)g(re-)0 1724 y(lat\ ionships)j(of)g(eac)o(h)h(ma)q(jor)f(componen)o(t.)20 b(Next,)15 b(w)o(e)g (dis-)0 1773 y(cuss)g(the)f(system's)f(b)q(eha)o(vior)g(during)g(the)h(establ\ ishmen)o(t)0 1823 y(of)c(connections)i(and)f(the)g(transfer)h(of)e(data.)16 b (Throughout,)0 1873 y(w)o(e)e(highligh)m(t)g(techniques)g(that)g(w)o(e)g(use) g(to)g(handle)g(man)m(y)0 1923 y(of)j(the)h(complex)e(cases)j(that)e(arise)h (during)f(application-)0 1973 y(lev)o(el)d(proto)q(col)f(managemen)m(t.)0 2089 y fh(3.1)56 b(The)18 b(ma)r(jor)h(componen)n(ts)0 2165 y fj(Our)e(application\ -lev)n(el)f(proto)q(col)h(arc)o(hitecture)h(includes)0 2215 y(three)d(soft)o (w)o(are)f(componen)o(ts)h(as)f(sho)o(wn)g(in)f(Figure)h(1.)30 2305 y(1.)20 b (The)g fe(op)n(er)n(ating)g(system)f(server)g fj(is)g(resp)r(onsible)g(for)83 2355 y(netw)n(ork)g(op)q(erations)f(that)h(ha)o(v)n(e)g(non-critical)f(p)q (er-)83 2405 y(formance)f(requiremen)o(ts,)i(such)f(as)g(connection)h(es-)83 2455 y(tablishmen)m(t,)c(teardo)o(wn,)g(and)f(the)h(handling)f(of)g(ex-)83 2504 y(ceptional)g(netw)n(ork)h(pac)o(k)o(ets)g(lik)n(e)g(ARP)f(queries.)21 b (In)83 2554 y(addition,)15 b(the)h(op)q(erating)g(system)f(main)m(tains)h(lon\ g-)83 2604 y(liv)n(ed,)c(and)f(shared,)i(proto)q(col)f(state)g(such)g(as)f (routing)83 2654 y(information)c(and)j(TCP)g(p)q(ort)g(namespaces.)17 b(The) 10 b(op-)83 2704 y(erating)19 b(system)f(also)g(pro)o(vides)h(applications)e (with)1035 45 y 14208860 7530694 10853990 29009756 29207101 38811238 startTexFig %%BeginDocument: picturenarrow.ps 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.923077 0 0 0.923077 0 0 ] concat /originalCTM matrix currentmatrix def Begin %I Rect 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 224 27 ] concat 29 454 164 487 Rect End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 240 12 ] concat 38 571 24 33 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 1 SetP [ 1 0 0 1 320 14 ] concat 38 571 24 33 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 219 232 ] concat 50 344 6 10 Elli End Begin %I Elli 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 237 253 ] concat 50 344 6 10 Elli End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 391 633 ] concat [ (Operating) (System) (Server) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 281 633 ] concat [ (Application) ] Text End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 192 469 210 491 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 305 502 ] concat [ (Kernel) ] Text End Begin %I Line 1 1 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 183 414 183 390 Line End Begin %I Line 1 1 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 176 132 ] concat 183 414 183 390 Line End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 201 407 187 403 Line End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 248 408 260 403 Line End Begin %I Line 1 1 1 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 211 451 234 451 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 308 600 ] concat [ (RPC) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 391 594 ] concat [ (\(routing/ARP,) (connection setup,) (fork/select\)) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 186 587 ] concat [ (Library) ] Text End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 182 561 ] concat [ (\(data trans-) (fer to and from) (the network\)) ] Text End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 132 451 172 446 Line End Begin %I Line 1 0 0 [] 0 SetB 0 0 0 SetCFg 1 1 1 SetCBg 0.75 SetP [ 1 0 0 1 97 131 ] concat 286 487 260 453 Line End Begin %I Text 0 0 0 SetCFg /Times-Roman 12 SetF [ 1 0 0 1 299 550 ] concat [ (Network) (Interface) ] Text End End %I eop showpage end %%EndDocument endTexFig 1006 655 a(Figure)f(1:)k fd(In)c(our)f(proto)q(col)g(architecture\ ,)h(critical-path)1006 705 y(functionalit)n(y)9 b(is)h(implemen)l(ted)h(b)o (y)f(libraries)f(in)h(the)g(appli-)1006 755 y(cation's)k(address)h(space.)k (The)c(op)q(erating)f(system)f(server)1006 804 y(manages)e(shared)j(proto)q (col)e(databases,)h(handles)g(connec-)1006 854 y(tion)h(set)h(up,)f(and)h(imp\ lem)o(en)m(ts)g(high-lev)m(el)g(abstractions.)1006 904 y(The)h(k)o(ernel)g (exp)r(orts)g(a)f(pac)o(k)o(et)h(send)h(and)e(receive)h(in)n(ter-)1006 954 y (face.)1006 1040 y @beginspecial @setspecial @endspecial 1089 1081 a fj(netw) n(ork)e(service)h(in)f(cases)h(where)g(application-lev)m(el)1089 1131 y(netw) n(orking)k(b)r(ecomes)g(di\016cult)g(due)i(to)e(a)h(con\015ict)1089 1181 y (b)q(etw)o(een)14 b(a)g(library-based)g(proto)q(col)f(and)h(op)q(erating)1089 1231 y(system)d(seman)n(tics.)18 b(Finally)-5 b(,)11 b(the)g(op)q(erating)g (system)1089 1281 y(pro)o(vides)h(an)f(in)n(terface)i(that)e(allo)n(ws)g(the) h(application)1089 1330 y(to)j(in)n(tegrate)h(its)e(o)o(wn)h(proto)q(col)f (managemen)m(t)g(with)1089 1380 y(the)h(op)q(erating)e(system's)h(\014le)g (abstraction.)1036 1469 y(2.)20 b(A)13 b(m)m(ultithreaded)g fe(libr)m(ary)f fj (within)g(each)g(application)1089 1519 y(implemen)l(ts)19 b(a)f(proto)q(col)g (stack,)g(in)g(particular)g(the)1089 1569 y(send)d(and)f(receive)g(componen)o (ts.)1036 1658 y(3.)20 b(The)d fe(network)f(interfac)n(e)g fj(pro)o(vides)g (a)g(thin)g(soft)o(w)o(are)1089 1708 y(la)n(y)o(er)f(on)f(top)g(of)f(the)i (ra)o(w)f(net)o(w)o(ork)g(hardw)o(are.)19 b(It)14 b(is)1089 1758 y(used)19 b (to)e(b)q(oth)h(send)g(and)g(receive)g(pac)o(k)o(ets.)30 b(As)18 b(its)1089 1808 y(p)q(erformance)13 b(limits)e(that)j(of)e(applications,)g(it)h(is)g(re-) 1089 1857 y(quired)g(to)f(ha)o(v)n(e)h(lo)n(w)f(latency)h(and)f(high)g(bandwi\ dth.)1048 1955 y(The)f(op)q(erating)g(system)g(server)h(and)f(proto)q(col)g (libraries)1006 2005 y(co)q(op)q(erate)20 b(to)e(manage)e(netw)o(ork)i(sessio\ ns.)32 b(A)19 b(net)o(w)o(ork)1006 2054 y(session)e(is)e(sp)r(eci\014ed)i(b)o (y)e(a)h(3-tuple)g(consisting)f(of)h(a)f(pro-)1006 2104 y(to)q(col,)e(a)g(lo) q(cal)g(endp)r(oin)n(t,)g(and)h(a)f(remote)g(endp)r(oin)n(t.)19 b(The)1006 2154 y(state)10 b(of)f(a)g(netw)o(ork)g(session)h(consists)h(of)e(a)g(set)h (of)f(proto)q(col-)1006 2204 y(sp)r(eci\014c)15 b(state)f(v)n(ariables.)k(F)m (or)c(example,)e(a)i(TCP)g(session)1006 2254 y(has)i(state)g(v)m(ariables)g (for)f(the)h(send)g(and)f(receive)h(windo)n(w)1006 2304 y(sizes,)21 b(the)e (send)h(and)e(receive)h(sequence)i(n)o(um)m(b)r(ers,)f(and)1006 2353 y(an)o (y)11 b(unac)o(kno)o(wledged)g(or)g(undeliv)n(ered)i(data)d(on)h(the)h(send) 1006 2403 y(and)18 b(receive)g(queues)h([P)n(ostel)f(81].)29 b(UDP)l(,)18 b (as)f(a)h(connec-)1006 2453 y(tionless)f(and)f(stateless)j(proto)q(col,)d(has) h(no)g(session)g(state)1006 2503 y(v)n(ariables.)1048 2554 y(Sessions)f(are)g (created)h(and)f(terminated)f(b)o(y)g(the)h(op)q(er-)1006 2604 y(ating)i(syst\ em.)32 b(Once)19 b(established,)h(a)e(netw)o(ork)g(session)1006 2654 y(is)i (migrated)f(in)n(to)h(the)h(address)g(space)h(of)d(the)i(applica-)1006 2704 y (tion)15 b(for)g(whic)n(h)h(it)e(w)o(as)i(created.)23 b(The)16 b(application) d(then)p eop %%Page: 4 4 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fj(manages)13 b(the)h (session)h(un)o(til)e(it)h(executes)i(an)e(exceptional)0 95 y(op)q(eration)g (that)h(mak)m(es)g(application)e(managemen)l(t)i(di\016-)0 145 y(cult,)d(or)g (un)o(til)f(the)i(session)g(is)f(terminated.)17 b(F)m(or)12 b(example,)0 195 y (the)j(BSD)g(UNIX)g fc(fork)f fj(system)g(call)g(mak)n(es)h(a)f(copy)g(\(the) 0 244 y(\\c)o(hild"\))c(of)h(the)h(pro)q(cess)h(doing)d(the)i(fork)f(\(the)h (\\paren)o(t"\),)0 294 y(and)i(the)g(\014le)g(descriptors)h(in)e(b)r(oth)g (the)i(paren)o(t)f(and)f(child)0 344 y(m)m(ust)g(refer)h(to)e(the)h(same)f (I/O)g(stream.)18 b(These)13 b(seman)n(tics)0 394 y(are)f(di\016cult)f(to)g (em)n(ulate)g(if)g(the)h(session)g(is)f(main)m(tained)g(in)0 444 y(either)17 b (the)g(paren)o(t's)g(or)f(c)o(hild's)g(address)h(space,)g(instead)0 493 y(of) c(the)i(op)q(erating)f(system's.)469 478 y fb(1)505 493 y fj(In)g(such)f(case\ s,)i(the)g(activ)n(e)0 543 y(proto)q(col)g(session)h(migrates)e(back)h(from)e (the)j(application)0 593 y(to)c(the)i(op)q(erating)e(system,)g(and)h(all)e (subsequen)q(t)i(net)o(w)o(ork)0 643 y(op)q(erations)h(are)g(routed)h(through) f(the)g(server.)42 693 y(The)e(proto)q(col)g(library)g(relies)h(on)f(the)h (k)o(ernel's)g(net)o(w)o(ork)0 743 y(in)n(terface)18 b(to)f(send)h(and)e(rece\ ive)h(pac)o(k)o(ets.)27 b(Applications)0 792 y(send)11 b(pack)n(ets)h(directl\ y)f(to)f(the)h(netw)n(ork)g(in)n(terface)h(using)e(a)0 842 y(lo)n(w-latency) 15 b(system)g(call.)22 b(F)l(or)16 b(security)f(reasons,)h(pac)o(k-)0 892 y (ets)11 b(are)f(received)h(through)f(the)h fe(p)n(acket)g(\014lter)f fj([Mogu\ l)e(et)j(al.)0 942 y(87,)g(McCanne)j(&)e(Jacobson)h(93,)f(Y)m(uhara)g(et)h (al.)k(94].)f(The)0 992 y(op)q(erating)h(system)g(creates)i(and)e(installs)g (a)g(new)g(pack)n(et)0 1041 y(\014lter)d(for)g(eac)o(h)g(netw)o(ork)f(session\ .)0 1158 y fh(3.2)56 b(Em)m(ulating)18 b(an)h(existing)e(in)n(terface)0 1234 y fj(W)l(e)c(em)n(ulate)f(the)h(BSD)f(UNIX)h(so)q(c)o(k)o(et)g(in)n(terface)h (through)0 1284 y(a)20 b(simple)g(pro)n(xy)h(structure)i(that)d(distributes)i (proto)q(col)0 1334 y(state)d(across)g(the)g(operating)f(system)g(and)g(the)h (applica-)0 1384 y(tion's)h(address)h(space.)39 b(A)20 b(pro)o(xy)g(is)g(a)g (small)e(b)q(o)q(dy)i(of)0 1434 y(co)q(de)15 b(that)g(resides)h(in)e(the)h (application's)e(address)j(space.)0 1483 y(It)i(exp)q(orts)h(a)e(pro)q(cedure) j(call)d(in)n(terface)i(that)f(is)f(iden)o(ti-)0 1533 y(cal)e(to)g(the)h(so)q (ck)n(et)g(system)f(call)g(in)n(terface)h(otherwise)h(ex-)0 1583 y(p)q(orted) j(b)o(y)g(the)g(op)q(erating)g(system.)35 b(An)19 b(application's)0 1633 y (system)c(call)f(in)o(v)o(olving)f(so)r(c)o(k)o(ets)j(is)f(\014rst)h(routed)g (through)0 1683 y(its)c(pro)o(xy)f(where)j(the)e(call)f(is)h(either)h(handled) e(lo)q(cally)l(,)g(for-)0 1732 y(w)o(arded)h(un)o(touc)o(hed)g(to)g(the)g(op) q(erating)f(system)h(server,)g(or)0 1782 y(translated)j(in)n(to)f(an)g(altern\ ate)h(sequence)i(of)c(calls)h(on)g(the)0 1832 y(op)q(erating)c(system)g(serve\ r.)17 b(T)m(able)10 b(1)f(lists)h(the)h(calls)f(imple-)0 1882 y(men)n(ted)15 b (b)o(y)f(the)h(pro)o(xy)f(mo)o(dule)h(in)e(the)i(library)l(,)f(and)g(the)0 1932 y(corresp)s(onding)k(calls)g(exp)q(orted)h(b)o(y)g(the)g(op)q(erating)f (sys-)0 1982 y(tem)12 b(server)h(to)f(assist)h(the)h(pro)o(xy)e(in)g(its)h (implemen)l(tation.)0 2090 y fg(Creating)h(net)n(w)o(ork)i(sessions)0 2166 y fj(The)k fc(socket)f fj(call)f(creates)k(a)d(\014le)h(descriptor)h(to)f(repre\ -)0 2216 y(sent)15 b(a)f(netw)o(ork)g(session.)22 b(In)15 b(the)h(case)f(of)g (a)f(connection-)0 2266 y(orien)o(ted)f(proto)q(col)f(suc)o(h)g(as)h(TCP)l (,)f(all)f(three)i(componen)o(ts)0 2316 y(of)18 b(a)g(session's)i(3-tuple)e (\(proto)q(col,)h(lo)q(cal)f(endp)r(oin)n(t,)h(re-)0 2365 y(mote)14 b(endp)q (oin)n(t\))h(m)n(ust)g(b)q(e)g(sp)r(eci\014ed)g(b)r(efore)g(the)g(session)0 2415 y(is)i(established.)30 b(In)17 b(the)i(case)f(of)f(a)g(connectionless)i (pro-)0 2465 y(to)q(col)14 b(suc)o(h)h(as)f(UDP)l(,)g(only)f(the)i(proto)q (col)e(and)h(lo)q(cal)f(end-)0 2512 y 378 2 v 46 2574 a fa(1)64 2585 y fi(If) 8 b(t)o(w)o(o)h(address)f(spaces)f(w)o(ere)i(to)g(comanage)d(directly)g(a)j (net)o(w)o(ork)0 2625 y(connection,)i(then)i(they)f(could)h(eac)o(h)f(corrupt) g(one)h(another's)e(pro-)0 2664 y(to)q(col)f(state,)g(violating)e(the)j(separ\ ation)d(and)i(protection)e(seman)o(tics)0 2704 y(normally)h(asso)q(ciated)g (with)i(address)f(space)h(b)q(oundarie)o(s.)1006 4 y @beginspecial @setspecial @endspecial 41 x fj(p)q(oin)o(t)k(are)h(needed)h(to)e(establish)h(the)g(sessi\ on,)h(as)e(the)h(re-)1006 95 y(mote)i(endp)r(oin)n(t)h(is)g(supplied)g(with)g (eac)o(h)g(outgoing)f(and)1006 145 y(incoming)d(pac)o(k)o(et.)1315 130 y fb (2)1362 145 y fj(F)l(or)j(the)f fc(socket)f fj(call,)h(the)h(library)1006 195 y(p)q(erforms)e(a)f fc(proxy)r 14 2 v 13 w(socket)f fj(call)i(to)f(the)i(op)q (erating)f(sys-)1006 244 y(tem)h(whic)o(h)h(returns)i(a)d(new)i(\014le)f(desc\ riptor.)31 b(Both)18 b(the)1006 294 y(library)d(and)h(the)h(op)q(erating)f (system)g(asso)q(ciate)h(the)g(new)1006 344 y(descriptor)h(with)e(a)g(data)h (structure)h(that)f(represen)q(ts)g(an)1006 394 y(unconnected)f(session)f(for) e(the)i(sp)q(eci\014c)g(proto)q(col.)1048 447 y(The)10 b fc(bind)e fj(system) i(call)f(sp)q(eci\014es)i(the)f(lo)q(cal)f(endp)r(oin)n(t)h(of)1006 496 y(a)j (netw)o(ork)g(session)h(and)f(is)h(applied)e(to)i(a)f(so)q(c)o(k)o(et)h(descr\ ip-)1006 546 y(tor.)34 b(The)20 b(library)e(maps)g(the)i(call)f(in)n(to)g(a)g fc(proxy)r 14 2 v 13 w(bind)1006 596 y fj(call,)f(causing)g(the)h(op)q(eratin\ g)f(system)g(to)g(asso)q(ciate)g(the)1006 646 y(so)q(ck)n(et)c(with)f(the)h (sp)q(eci\014ed)g(address.)19 b(Once)14 b(the)g(proto)q(col)1006 696 y(and)c (local)g(endp)q(oin)o(t)f(ha)o(v)o(e)h(b)q(een)h(sp)r(eci\014ed)f(for)g(a)f (UDP)h(ses-)1006 745 y(sion)h(with)h(a)f fc(proxy)r 14 2 v 13 w(bind)g fj(cal\ l,)f(the)j(session)f(ma)m(y)g(b)q(e)g(used)1006 795 y(for)g(sending)g(and)f (receiving)h(pack)n(ets.)19 b(Consequently)l(,)11 b(the)1006 845 y(op)q(erati\ ng)16 b(system)f(returns)i(the)f(\(n)o(ull\))f(netw)o(ork)g(session)1006 895 y (state)g(along)e(with)g(a)h(local)g(endp)r(oin)n(t)g(and)g(a)f(pac)o(k)o(et)i (\014lter)1006 945 y(p)q(ort.)25 b(The)16 b(library)g(binds)g(its)g(local)g (so)q(ck)n(et)h(to)f(the)h(end-)1006 995 y(p)q(oin)o(t)f(returned)j(b)o(y)d (the)i(op)q(erating)f(system)f(and)h(a)n(w)o(aits)1006 1044 y(incoming)9 b (pac)o(k)o(ets)k(on)e(the)h(pac)o(k)o(et)g(\014lter)g(p)q(ort.)18 b(F)l(or)12 b(TCP)l(,)1006 1094 y(only)20 b(the)h(lo)q(cal)f(endp)r(oin)n(t)h(is)f(return\ ed)j(when)e(a)f(pro)o(xy)1006 1144 y(so)q(ck)n(et)c(is)f(b)r(ound)g(b)q(ecaus\ e)i(the)f(remote)f(endp)q(oin)o(t)g(is)g(not)1006 1194 y(y)o(et)f(kno)o(wn.) 1006 1318 y fg(Establishin)o(g)f(connections)1006 1400 y fj(Connection)e(esta\ blishmen)n(t)g(is)f(managed)f(entirely)h(b)o(y)g(the)1006 1450 y(op)q(erating) 18 b(system.)32 b(There)19 b(are)g(four)f(reasons)h(for)f(this.)1006 1499 y (First,)e(as)g(with)f(UDP)m(,)g(the)h(creation)g(of)f(a)g(new)h(endp)r(oin)n (t)1006 1549 y(requires)e(that)f(the)g(op)q(erating)f(system)h(construct)h (and)f(in-)1006 1599 y(stall)g(a)g(new)h(pac)o(k)o(et)g(\014lter)g(to)g(recei\ v)o(e)g(data)g(on)f(that)h(end-)1006 1649 y(p)q(oin)o(t,)f(so)h(there)h(is)f (necessarily)g(at)g(least)g(one)g(in)n(teraction)1006 1699 y(b)q(etw)o(een)k (the)h(op)q(erating)f(system)g(and)f(the)i(application.)1006 1748 y(Second,)i (it)e(is)g(necessary)i(to)f(in)n(teract)g(with)f(a)g(lo)q(cal)g(IP)1006 1798 y (p)q(ort)11 b(manager)e(to)i(ensure)h(that)e(the)h(endp)r(oin)n(t)g(is)f(uniq\ uely)1006 1848 y(named;)h(the)g(op)q(erating)g(system)g(is)g(a)g(con)o(v)o (enien)o(t)h(place)f(to)1006 1898 y(implemen)l(t)17 b(this)f(manager.)23 b (Third,)17 b(the)f(op)q(erating)h(sys-)1006 1948 y(tem)g(m)m(ust)h(trac)o(k)f (all)f(connected)j(sessions)g(so)e(that)g(they)1006 1997 y(are)d(cleanly)f (terminated)g(in)g(the)i(ev)o(en)o(t)f(that)f(the)i(address)1006 2047 y(space) 22 b(holding)d(the)i(local)f(endp)r(oin)n(t)h(itself)f(terminates.)1006 2097 y (Finally)-5 b(,)20 b(unlik)n(e)f(send)h(and)f(receive,)h(connection)f(estab-) 1006 2147 y(lishmen)n(t)9 b(is)h(not)f(a)g(p)q(erformance-critical)g(op)q(era\ tion.)17 b(The)1006 2197 y(additional)12 b(IPC)h(o)o(v)o(erhead)h(required)h (to)e(con)o(tact)h(the)g(op-)1006 2247 y(erating)j(system)g(serv)o(er)h(is)f (negligible)e(compared)i(to)f(the)1006 2296 y(latency)e(of)g(a)f(m)n(ulti-pha\ se)g(netw)o(ork)g(handshak)o(e.)1048 2349 y(Sessions)18 b(in)e(connection-ori\ ented)i(proto)q(cols)f(such)g(as)1006 2399 y(TCP)e(ma)m(y)f(b)r(e)g(op)q(ened) i fe(actively)e fj(or)h fe(p)n(assively)p fj(.)k(In)c(a)f(pas-)1006 2449 y (siv)o(e)f(op)q(en,)g(the)g(lo)q(cal)f(proto)r(col)g(w)o(aits)g(for)h(connect\ ion)g(re-)1006 2499 y(quests)g(on)e(a)h(local)g(endp)q(oin)o(t.)17 b(In)12 b (an)f(activ)o(e)h(op)q(en,)g(the)g(lo-)1006 2552 y 378 2 v 1052 2613 a fa(2) 1070 2625 y fi(The)k(BSD)h(UDP)g(\(and)f(our\))g(implemen)o(ta)o(tio)o(n)e (also)i(p)q(ermits)1006 2664 y(\\connection)o(-ori)o(en)o(t)o(ed")11 b(sessio\ ns)h(where)i(the)f(remote)f(endp)q(oin)o(t)f(is)1006 2704 y(implicit)f(to)h (the)f(session.)p eop %%Page: 5 5 bop 0 51 a 2021 2 v -1 101 a 2 50 v 134 86 a fg(Pro)n(xy)16 b(exp)q(orts)565 101 y 2 50 v 590 86 a(Serv)n(er)g(exp)q(orts)920 101 y 2 50 v 945 86 a(Action) 2019 101 y 2 50 v 0 102 a 2021 2 v -1 202 a 2 100 v 217 137 a fc(socket)565 202 y 2 100 v 615 137 a(proxy)r 14 2 v 13 w(socket)920 202 y 2 100 v 945 137 a fj(Create)d(a)e(netw)n(ork)h(session)g(that)g(is)f(managed)f(b)o(y)h(the)h (op)q(erating)945 187 y(system.)2019 202 y 2 100 v 0 204 a 2021 2 v -1 303 a 2 100 v 239 239 a fc(bind)565 303 y 2 100 v 637 239 a(proxy)r 14 2 v 13 w(bind) 920 303 y 2 100 v 945 239 a fj(Set)k(local)f(address)i(of)d(session.)23 b(UDP) 15 b(sessions)h(migrate)e(to)h(the)945 288 y(application.)2019 303 y 2 100 v 0 305 a 2021 2 v -1 405 a 2 100 v 206 340 a fc(connect)565 405 y 2 100 v 604 340 a(proxy)r 14 2 v 13 w(connect)920 405 y 2 100 v 945 340 a fj(Set)21 b(remote) f(address)i(of)e(session.)38 b(UDP)20 b(and)h(TCP)f(sessions)945 390 y(migrat\ e)13 b(to)g(the)i(application.)2019 405 y 2 100 v 0 406 a 2021 2 v -1 506 a 2 100 v 217 441 a fc(listen)565 506 y 2 100 v 615 441 a(proxy)r 14 2 v 13 w(lis\ ten)920 506 y 2 100 v 945 441 a fj(Op)r(en)g(session)g(passiv)o(ely)m(.)20 b (The)15 b(op)q(erating)g(system)f(a)o(w)n(aits)h(new)945 491 y(connections.) 2019 506 y 2 100 v 0 508 a 2021 2 v -1 607 a 2 100 v 217 542 a fc(accept)565 607 y 2 100 v 615 542 a(proxy)r 14 2 v 13 w(accept)920 607 y 2 100 v 945 542 a fj(Migrate)i(passiv)n(ely)g(op)q(ened)g(session)g(from)e(the)i(op)q(erating)f (sys-)945 592 y(tem)d(to)h(the)h(application)d(when)i(connection)h(is)f(estab\ lished.)2019 607 y 2 100 v 0 609 a 2021 2 v -1 708 a 2 100 v 25 644 a fe(al)r (l)g(send)i(and)f(r)n(e)n(c)n(eive)g(variants)565 708 y 2 100 v 701 644 a fj (N/A)920 708 y 2 100 v 945 644 a(T)m(ransfer)c(data)e(to)h(or)g(from)f(the)h (netw)o(ork.The)g(op)q(erating)f(system)945 694 y(is)14 b(not)g(in)n(v)o(olv) n(ed.)2019 708 y 2 100 v 0 710 a 2021 2 v -1 860 a 2 150 v 239 745 a fc(fork) 565 860 y 2 150 v 615 745 a(proxy)r 14 2 v 13 w(return)920 860 y 2 150 v 945 745 a fj(Return)21 b(session)f(to)g(op)q(erating)g(system)g(serv)o(er.)37 b (All)19 b(sessions)945 795 y(should)13 b(b)r(e)g(returned)i(to)e(the)h(op)q (erating)f(system)g(b)q(efore)h fc(fork)e fj(is)945 845 y(called.)2019 860 y 2 150 v 0 861 a 2021 2 v -1 911 a 2 50 v 217 896 a fc(select)565 911 y 2 50 v 615 896 a(proxy)r 14 2 v 13 w(status)920 911 y 2 50 v 945 896 a fj(Notify)h (op)q(erating)h(system)g(of)f(c)o(hange)h(in)g(pro)o(xy)f(session)i(state.) 2019 911 y 2 50 v 0 913 a 2021 2 v 116 x(T)m(able)h(1:)23 b fd(The)17 b(pro)o (xy)f(exp)r(orts)h(the)g(standard)g(so)q(ck)n(et)g(in)o(terface,)h(whic)o(h)e (it)g(implemen)m(ts)h(through)f(a)g(com)n(bination)g(of)0 1078 y(indirect)f (calls)f(on)o(to)g(the)h(op)q(erating)g(system,)f(and)g(direct)i(calls)e(on)o (to)g(the)h(netw)n(ork.)20 b(The)15 b(op)q(erating)g(system)f(manages)0 1128 y (session)h(establishmen)n(t)f(and)g(teardo)o(wn,)f(while)h(the)g(op)q(erating) g(system)g(handles)g(session)h(data)e(transfer.)0 1219 y @beginspecial @setspecial @endspecial 42 x fj(cal)f(proto)q(col)g(contacts)h(a)f(remote)g (proto)q(col)h(and)f(requests)0 1311 y(that)j(a)g(connection)h(b)r(e)f(establ\ ished)h(on)f(a)g(sp)r(eci\014ed)h(pair)0 1361 y(of)11 b(endp)r(oin)n(ts.)18 b (Using)11 b(the)h(so)q(ck)o(et)g(in)n(terface,)h(connections)0 1410 y(are)19 b (passiv)o(ely)g(op)q(ened)h(with)f(the)g fc(listen)f fj(and)h fc(accept)0 1460 y fj(system)c(calls,)f(and)h(activ)n(ely)g(op)q(ened)h(with)f(the)g fc(connec\ t)0 1510 y fj(call.)42 1576 y(On)d(the)i(passiv)o(e)f(side,)f(the)i(proto)q (col)e(library)g(maps)f(the)0 1626 y fc(listen)j fj(system)i(call)e(in)o(to)h (a)g fc(proxy)r 14 2 v 13 w(listen)f fj(call)h(to)g(the)0 1675 y(op)q(erating) i(system.)28 b(The)18 b(op)q(erating)f(system)g(is)g(primed)0 1725 y(for)j (incoming)d(connection)k(requests)h(addressed)f(to)f(the)0 1775 y(passiv)o (ely)c(op)q(ened)g(connection.)25 b(When)16 b(contacted)g(b)o(y)g(a)0 1825 y (remote)h(p)q(eer,)i(it)e(negotiates)h(the)g(establishmen)o(t)f(of)g(the)0 1875 y(connection.)42 1940 y(Once)f(the)g(connection)f(is)g(established,)h (the)g(op)q(erating)0 1990 y(system)11 b(places)h(it)f(on)g(a)g(queue)h(of)e (passiv)o(ely)h(op)q(ened)i(so)q(c)o(k-)0 2040 y(ets)f(un)o(til)e(the)h(lo)q (cal)f(listener)i(p)q(erforms)e(an)h fc(accept)f fj(op)q(era-)0 2090 y(tion.) 17 b(The)12 b(library)f(implem)o(en)m(ts)h(the)g fc(accept)e fj(system)i(call) 0 2140 y(with)17 b(a)h fc(proxy)q 14 2 v 13 w(accept)f fj(call)f(to)i(the)g (op)q(erating)f(system,)0 2189 y(whic)o(h)e(returns)i(a)f(new)g(\014le)f(desc\ riptor)i(to)e(represen)r(t)g(the)0 2239 y(passiv)o(ely)i(op)q(ened)i(connecti\ on.)30 b(The)18 b(call)e(also)h(returns)0 2289 y(a)d(lo)q(cal)g(endp)q(oin)o (t,)g(a)g(remote)g(endp)r(oin)n(t,)g(the)h(connection)0 2339 y(state)h(v)m (ariables,)f(and)f(a)h(pac)o(k)o(et)g(\014lter)g(p)r(ort.)21 b(The)15 b(proto\ -)0 2389 y(col)g(library)g(records)i(the)f(existence)h(of)e(the)h(new)g(conne\ c-)0 2439 y(tion,)10 b(sets)h(the)g(initial)d(connection)i(state)h(to)f(that) g(returned)0 2488 y(b)o(y)i(the)h(op)q(erating)g(system,)f(and)g(b)q(egins)h (reading)f(pac)o(k)o(ets)0 2538 y(from)g(the)j(new)f(pac)o(k)o(et)g(\014lter.) 42 2604 y(On)g(the)g(activ)o(e)g(side,)g(the)g(library)0 2654 y(transforms)k fc(connect)f fj(calls)h(in)o(to)g fc(proxy)r 14 2 v 13 w(connect)f fj(calls)0 2704 y(to)h(the)g(op)q(erating)g(system.)30 b(A)18 b fc(proxy)r 14 2 v 13 w (connect)e fj(causes)1006 1219 y @beginspecial @setspecial @endspecial 42 x (the)21 b(op)q(erating)f(system)h(to)f(initiate)f(connection)i(estab-)1006 1311 y(lishmen)n(t,)e(and)f(to)g(then)h(return)h(the)f(local)f(and)g(remote) 1006 1361 y(endp)r(oin)n(ts)f(of)e(the)i(session,)h(the)e(proto)r(col)f(sessi\ on)j(state,)1006 1410 y(and)13 b(a)f(pac)o(k)o(et)i(\014lter)f(p)q(ort.)18 b (As)13 b(with)g(a)f(passiv)o(e)h(op)q(en,)g(the)1006 1460 y(library)e(then)i (w)o(aits)e(for)h(pac)o(k)o(ets)h(to)e(arriv)o(e)h(on)g(the)h(pac)o(k)n(et) 1006 1510 y(\014lter)f(p)q(ort.)18 b(If)11 b(the)i(so)q(c)o(k)o(et)f(is)g(un) o(b)q(ound)g(\(i.e.)k(has)c(no)g(local)1006 1560 y(endp)r(oin)n(t\))g(at)g (the)h(time)d(of)i(the)g fc(connect)e fj(call,)i(the)g(so)q(ck)n(et)1006 1610 y(is)i(also)f(giv)n(en)i(a)e(lo)q(cal)g(endp)r(oin)n(t.)1006 1725 y fg(Sendin\ g)g(and)i(receiving)f(data)1006 1804 y fj(The)25 b(BSD)f(so)q(c)o(k)o(et)h (in)n(terface)g(has)g(ten)f(di\013erent)g(w)o(a)o(ys)1006 1854 y(to)d(mo)m (v)o(e)f(data)h(through)f(a)h(session)g(\()p fc(recv)p fj(,)g fc(recvfrom)p fj (,)1006 1904 y fc(recvmsg)p fj(,)13 b fc(read)p fj(,)h fc(readv)p fj(,)f(and) h fc(send)p fj(,)g fc(sendto)p fj(,)f fc(sendmsg)p fj(,)1006 1954 y fc(write) p fj(,)f(and)h fc(writev)p fj(\).)k(F)m(or)c(so)q(ck)n(ets,)h(these)h(calls)e (are)h(im-)1006 2003 y(plemen)n(ted)h(en)o(tirely)g(within)e(the)i(applicatio\ n's)e(proto)q(col)1006 2053 y(library)l(.)k(Once)11 b(a)g(net)o(w)o(ork)f(ses\ sion)i(has)e(b)q(een)i(established,)1006 2103 y(data)f(can)h(b)q(e)g(sen)o (t)g(and)f(received)h(o)n(v)o(er)g(the)g(net)o(w)o(ork)f(with-)1006 2153 y (out)j(op)q(erating)g(system)f(in)o(terv)o(ention.)1048 2204 y(Outgoing)j(unr\ eliable)h(data)g(\(UDP\))h(is)f(sent)g(immedi-)1006 2254 y(ately)j(and)g(then) h(discarded.)38 b(Data)19 b(is)h(sent)h(on)e(a)h(reli-)1006 2304 y(able)e(con\ nection)g(\(TCP\))h(b)o(y)e(placing)g(it)h(on)g(the)g(so)q(ck)n(et)1006 2353 y (send)g(queue)h(and)e(calling)f(the)i(proto)q(col's)f(net)o(w)o(ork)g(out-) 1006 2403 y(put)g(routine)g(whic)o(h)g(ma)m(y)f(or)h(ma)m(y)g(not)f(send)i (a)e(segmen)o(t)1006 2453 y(immediately)-7 b(,)17 b(dep)r(ending)f(on)h(the)g (current)g(state)g(of)f(the)1006 2503 y(connection.)21 b(Reliable)13 b(proto) q(cols)i(k)n(eep)h(the)f(data)f(on)g(the)1006 2553 y(send)20 b(queue)g(un)o (til)e(it)h(has)g(b)r(een)h(ac)o(kno)n(wledged)f(b)o(y)g(the)1006 2603 y(remo\ te)14 b(endp)q(oin)o(t.)1048 2654 y(The)d(receive)g(op)q(erations)g(block)f (un)o(til)g(data)h(is)f(a)o(v)m(ailable)1006 2704 y(on)k(the)g(so)q(ck)n(et)h (receive)f(queue,)g(and)g(then)g(cop)o(y)g(the)g(data)p eop %%Page: 6 6 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fj(out)13 b(to)g(a)f (user)i(bu\013er)g(sp)r(eci\014ed)f(in)g(the)g(receive)g(call.)k(The)0 95 y (so)q(ck)n(et)i(in)n(terface,)g(whic)o(h)f(has)g(the)g(receiver)g(sp)r(ecify) f(the)0 145 y(destination)g(address)h(of)e(an)h(incoming)d(message,)j(incurs) 0 195 y(an)c(unnecessary)i(cop)o(y)f(at)f(this)g(p)q(oin)n(t.)18 b(A)13 b(b)r (etter)h(in)o(tegra-)0 244 y(tion)e(b)r(et)o(w)o(een)i(the)f(application)f (and)h(the)g(proto)q(col)g(stac)o(k,)0 294 y(describ)r(ed)i(in)e(Section)h (4.2,)f(a)n(v)o(oids)h(this)g(cop)o(y)l(.)0 401 y fg(T)l(erminating)f(session) h(state)0 478 y fj(Some)26 b(proto)q(cols)h(ha)o(v)n(e)h(sophisticated)f(tear\ -do)o(wn)g(re-)0 528 y(quiremen)n(ts.)34 b(F)l(or)19 b(example,)g(prop)q(erly) g(closing)f(a)h(TCP)0 577 y(connection)j(requires)g(a)f(four-w)n(a)o(y)f(hand\ shak)o(e)i(\(a)e(t)o(w)o(o-)0 627 y(w)o(a)n(y)12 b(handshak)o(e)g(in)f(eac)o (h)h(direction\))g(follo)m(w)o(ed)g(b)o(y)f(a)h(w)o(ait-)0 677 y(ing)18 b(p)q (erio)q(d)h(to)f(ensure)i(that)f(an)n(y)f(segmen)o(ts)h(dela)o(y)n(ed)g(in)0 727 y(the)13 b(netw)n(ork)g(ha)n(v)o(e)g(time)e(to)h(die)h([P)n(ostel)g(81].) j(F)m(or)c(a)h(clean)0 777 y(sh)o(utdo)o(wn,)23 b(whic)o(h)f(o)q(ccurs)h(when) g(the)f(application)f(ex-)0 826 y(plicitly)16 b(requests)k(a)e(close)g(on)g (session,)h(w)o(e)f(migrate)e(the)0 876 y(session)i(state)f(bac)o(k)g(to)g (the)g(op)q(erating)g(system)f(and)h(fol-)0 926 y(lo)n(w)12 b(the)h(sh)o(utdo) o(wn)f(proto)q(col)g(there.)18 b(F)m(or)12 b(an)g(unexp)q(ected)0 976 y(sh)o (utdo)o(wn,)19 b(for)f(example,)f(when)i(a)f(pro)q(cess)i(terminates)0 1026 y (in)f(error,)i(the)e(connection)h(can)g(b)q(e)f(left)g(hanging)f(in)h(an)0 1075 y(unde\014ned)c(state.)20 b(The)15 b(op)q(erating)f(system,)f(though,)h (can)0 1125 y(detect)g(the)e(death)h(of)f(pro)q(cesses)i(that)e(are)h(managin\ g)c(net-)0 1175 y(w)o(ork)k(connections,)i(abort)f(outstanding)f(connections) i(b)o(y)0 1225 y(sending)k(reset)h(messages)f(to)f(remote)h(p)q(eers,)i(and)d (dela)o(y)0 1275 y(the)c(reop)r(ening)g(of)f(an)o(y)h(ab)q(orted)g(connection\ s.)0 1382 y fg(Co)r(operativ)n(e)i(in)m(terfaces)0 1458 y fj(Some)i(op)q(erat\ ions)h(on)g(netw)o(ork)g(sessions)h(in)n(teract)h(only)0 1508 y(with)16 b(the) g(op)q(erating)g(system's)g(scheduling)f(and)h(pro)q(cess)0 1558 y(managemen) l(t)g(in)o(terfaces,)h(but)f(do)g(not)f(mo)n(v)n(e)i(data.)23 b(F)m(or)0 1608 y(example,)14 b(the)j fc(select)d fj(call)h(is)h(used)h(b)o(y)e(applications) g(to)0 1658 y(c)o(heck)f(the)h(status)g(of)f(a)g(set)i(of)d(\014le)i(descript\ ors.)21 b(Because)0 1707 y(these)14 b(descriptors)g(ma)m(y)e(not)h(all)e(b)q (e)i(managed)e(b)o(y)h(the)h(ap-)0 1757 y(plication)i(\(some)g(ma)m(y)h(b)q (e)h(actual)e(\014les,)i(for)e(example\))g(it)0 1807 y(is)g(not)g(p)q(ossible) g(to)g(implem)o(en)m(t)g fc(select)e fj(entirely)i(within)0 1857 y(the)i(appl\ ication.)25 b(Similarly)-7 b(,)17 b(b)q(ecause)h(some)e(of)g(the)i(de-)0 1907 y(scriptors)j(ma)m(y)e(b)q(e)h(managed)e(b)o(y)h(the)h(application,)f(the)0 1956 y(call)d(cannot)h(b)q(e)h(implemen)l(ted)f(entirely)f(within)h(the)g(op-) 0 2006 y(erating)g(system;)h(the)f(op)q(erating)g(system)g(has)g(no)g(direct) 0 2056 y(w)o(a)n(y)d(of)f(kno)o(wing)g(when)i(these)g(sessions)g(c)o(hange)f (status.)42 2106 y(W)l(e)e(bridge)h(this)f(\\information)d(gap")j(through)g (a)g(co)q(op-)0 2156 y(erativ)o(e)17 b(in)n(terface)g(that)g(is)f(join)n(tly) f(implemen)l(ted)i(b)o(y)f(the)0 2205 y(application)g(and)i(the)g(op)q(eratin\ g)g(system.)29 b(The)19 b(library)0 2255 y(implemen)l(ts)d(its)f(side)h(of)e fc(select)g fj(b)o(y)h(examining)e(the)j(ar-)0 2305 y(gumen)n(t)c(\014le)g (descriptor)h(sets)g(to)f(determine)g(whic)o(h)g(of)f(the)0 2355 y(so)q(ck)n (ets)18 b(managed)d(b)o(y)i(the)h(application)d(are)i(ready)m(.)27 b(F)m(or)0 2405 y(each)19 b(of)g(these)i(so)q(c)o(k)o(ets,)h(the)e(library)f(records)i (that)e(the)0 2455 y(so)q(ck)n(et)c(is)e(b)q(eing)h fc(select)p fj('ed)e(up)q (on,)h(and)h(noti\014es)g(the)g(op-)0 2504 y(erating)d(system)h(of)e(the)i (so)r(c)o(k)o(et)g(status.)18 b(The)11 b(library)g(then)0 2554 y(calls)k(thro\ ugh)g(to)f(the)i(op)q(erating)f(system's)g fc(select)e fj(sys-)0 2604 y(tem) 18 b(call.)34 b(When)19 b(the)h(application)e(disco)o(v)o(ers)i(data)f(on)0 2654 y(one)e(of)f(the)h(selected)h(so)r(c)o(k)o(ets,)g(it)e(signals)g(the)h (op)q(erating)0 2704 y(system)h(of)g(a)g(status)h(c)o(hange)g(\()p fc(proxy)q 14 2 v 14 w(status)p fj(\),)e(forcing)1006 4 y @beginspecial @setspecial @endspecial 41 x(an)o(y)11 b(relev)n(an)o(t)g(outstanding)g fc(select)p fj (s)f(to)h(return.)18 b(In)12 b(cases)1006 95 y(where)f(all)d(descriptors)j (are)f(managed)e(b)o(y)i(the)g(application,)1006 145 y(the)15 b(op)q(erating) e(system)h(is)g(not)g(in)n(v)o(olv)n(ed.)1006 272 y fh(3.3)56 b(Cac)o(hing)18 b(proto)r(col)g(metastate)1006 352 y fj(A)13 b(go)q(o)q(d)g(deal)g(of)g(a)f (proto)r(col)g(implemen)m(tation)g(is)h(resp)r(on-)1006 402 y(sible)j(for)f (managing)f(state)i(that)g(is)g(indep)q(endent)g(of)f(an)o(y)1006 452 y(parti\ cular)e(session.)18 b(W)m(e)13 b(main)m(tain)f(this)h(state)h(in)f(the)g(op-) 1006 502 y(erating)j(system)g(server)h(to)f(preserve)h(its)f(long-liv)m(ednes\ s,)1006 551 y(and)f(to)g(protect)h(it)f(from)e(damage)h(b)o(y)h(applications.) 20 b(F)m(or)1006 601 y(example,)10 b(route)i(table)f(en)o(tries)h(and)f(ARP)g (mappings)e(rep-)1006 651 y(resen)q(t)18 b(long-term)g(state)h(that)g(is)f (used)i(b)o(y)f(all)e(sessions,)1006 701 y(but)i(o)o(wned)g(b)o(y)g(none.)33 b (When)19 b(sending)h(data,)f(applica-)1006 751 y(tion)f(proto)q(col)h(co)q (de)g(m)m(ust)h(read)f(this)f(state)i(when)f(con-)1006 800 y(structing)11 b (outgoing)f(pac)o(k)o(ets.)17 b(In)11 b(the)g(same)f(w)o(a)n(y)h(that)f(the) 1006 850 y(op)q(erating)16 b(system)f(caches)h(these)h(entries)f(from)e(net)o (w)o(ork)1006 900 y(queries,)h(applications)f(cache)h(them)e(to)i(a)o(v)n(oid) f(comm)m(uni-)1006 950 y(cation)e(with)h(the)g(op)q(erating)f(system)h(on)f (the)h(pac)o(k)o(et)g(send)1006 1000 y(path.)18 b(The)13 b(op)q(erating)f(sys\ tem)g(main)m(tains)g fe(c)n(al)r(lb)n(acks)h fj(in)n(to)1006 1050 y(applicati\ ons)g(for)h(these)i(cached)f(en)o(tries)g(and)f(in)o(v)m(alidates)1006 1099 y (them)f(as)h(they)h(expire)f(or)g(are)g(up)r(dated.)1006 1226 y fh(3.4)56 b (Securit)m(y)18 b(considerations)1006 1307 y fj(The)12 b(k)o(ernel's)g(pac)o (k)o(et)g(\014lter)g(ensures)i(that)e(an)f(application)1006 1357 y(can)h(only) f(receiv)o(e)h(pack)n(ets)h(that)e(are)h(destined)h(for)e(it.)17 b(W)l(e,) 1006 1406 y(ho)o(w)o(ev)o(er,)i(do)f(not)h(prev)o(ent)f(applications)f(from)g (sending)1006 1456 y(arbitrary)d(data)g(pac)o(k)o(ets)h(o)n(v)o(er)g(the)g (net)o(w)o(ork.)k(W)l(e)14 b(exp)r(ect)1006 1506 y(that)j(a)g(pac)o(k)n(et)h (limiting)13 b(mec)o(hanism,)i(if)h(desired,)i(could)1006 1556 y(b)q(e)j(impl\ em)o(en)m(ted)f(b)o(y)g(c)o(hecking)f(each)h(outgoing)f(pac)o(k)n(et)1006 1606 y(using)13 b(a)g(service)h(similar)c(to)j(the)h(pac)o(k)o(et)f(\014lter)h([Th\ ekk)m(ath)1006 1655 y(et)g(al.)k(93].)f(Because)e(netw)o(ork)e(security)h(is) f(already)h(quite)1006 1705 y(fragile)h(in)g(the)i(presence)h(of)d(ph)o(ysica\ lly)g(vulnerable)h(con-)1006 1755 y(nections)d([Gar\014nk)n(el)f(&)g(Spa\013o\ rd)g(91],)f(though,)g(the)i(basic)1006 1805 y(problem)e(of)h(in)o(termac)n (hine)h(security)g(is)f(b)q(etter)i(addressed)1006 1855 y(through)k(the)h(use) f(of)g(authen)o(tication)f(mec)o(hanisms)f(and)1006 1905 y(encryption)f([V)l (o)n(ydo)q(ck)e(&)i(Ken)o(t)f(83].)1048 1956 y(Application-lev)m(el)33 b(prot\ o)q(cols)g(can)h(b)q(e)f(used)h(with)1006 2006 y(session-level)15 b(encryptio\ n)g(soft)o(w)o(are,)g(pro)o(vided)g(that)g(ses-)1006 2056 y(sion)k(k)n(eys)h (are)f(con\014ned)h(to)f(the)g(application's)f(address)1006 2106 y(space.)24 b (A)16 b(small)d(amoun)m(t)j(of)e(additional)g(op)q(erating)i(sys-)1006 2156 y (tem)f(supp)r(ort)h(is)g(required)i(to)e(ensure)h(that)f(session)i(k)n(eys) 1006 2205 y(are)d(cleared)h(b)q(efore)g(a)e(pro)q(cess')i(image)d(is)i(stored) g(to)g(disk)1006 2255 y(\(for)20 b(example,)g(as)g(a)g(result)h(of)f(a)g(core) h(dump\).)36 b(Host-)1006 2305 y(to-host,)18 b(or)f(metasession,)g(encryption\ ,)h(will)e(require)i(an)1006 2355 y(additional)e(lev)n(el)i(of)e(pac)o(k)o (et)i(addressing)g(indirection)f(on)1006 2405 y(top)d(of,)g(and)g(encryption) h(b)q(elo)o(w,)e(the)i(netw)o(ork)f(send)h(and)1006 2455 y(receive)h(in)o(ter\ face.)25 b(Sp)q(eci\014cally)m(,)16 b(a)f(pro)q(cess)j(w)o(ould)d(send)1006 2504 y(pac)o(k)o(ets)j(to)g(a)f(logical)f(secure)j(host,)g(rather)f(than)f (an)h(IP)1006 2554 y(\(or)c(lo)n(w)o(er-level\))g(address.)20 b(The)14 b(k)o (ernel's)h(net)o(w)o(ork)f(in)n(ter-)1006 2604 y(face)g(w)o(ould)f(b)q(e)h (resp)s(onsible)f(for)g(encrypting)i(the)f(pac)o(k)o(et,)1006 2654 y(and)20 b (routing)f(it)g(to)g(the)i(corresp)r(onding)e(ph)o(ysical)g(host.)1006 2704 y (Presen)q(tly)l(,)10 b(w)o(e)g(ha)o(v)n(e)h(no)e(exp)r(erience)i(with)f(a)f (secure)j(imple-)p eop %%Page: 7 7 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fj(men)n(tation)14 b (of)h(our)g(proto)q(cols,)g(though,)f(so)h(cannot)g(com-)0 95 y(men)n(t)f(on) g(their)g(use.)0 231 y fk(4)69 b(P)n(erformance)0 322 y fj(In)21 b(this)g(sec\ tion)g(w)o(e)g(discuss)h(the)g(p)q(erformance)f(of)f(our)0 372 y(application-\ lev)m(el)29 b(proto)q(col)g(architecture,)34 b(whic)n(h)c(w)n(e)0 421 y(ha)o (v)n(e)22 b(implemen)l(ted)g(on)e(top)h(of)g(the)g(Mac)o(h)g(3.0)f(micro-)0 471 y(k)o(ernel.)30 b(W)l(e)18 b(\014rst)g(describ)r(e)g(a)g(n)n(um)n(b)q(er) g(of)f(microbench-)0 521 y(marks)k(that)i(reveal)f(the)h(throughput)g(and)g (latency)f(of)0 571 y(our)16 b(implemen)l(tation)g(in)f(the)i(con)o(text)g (of)e(several)h(di\013er-)0 621 y(en)o(t)e(user/kernel)g(net)o(w)o(ork)f(in)o (terfaces.)19 b(W)l(e)14 b(then)g(demon-)0 671 y(strate)k(the)g(b)q(ene\014t) g(of)e(a)h(\015exible)g(user-level)g(implemen-)0 720 y(tation)d(b)o(y)h(chang\ ing)f(the)h(so)r(c)o(k)o(et)g(in)o(terface)h(to)f(eliminate)0 770 y(data)c (copies)g(b)q(etw)o(een)h(the)f(application)f(and)g(the)i(proto)q(col)0 820 y (stack.)23 b(Finally)-5 b(,)15 b(w)o(e)h(presen)q(t)g(a)f(detailed)h(latency) g(break-)0 870 y(do)o(wn)e(for)f(TCP)h(and)g(UDP)g(pro)q(cessing.)0 976 y fg (Platforms)0 1053 y fj(W)l(e)j(ha)o(v)o(e)g(run)g(our)g(exp)q(erimen)o(ts)g (across)g(10)g(Mb/s)g(Eth-)0 1103 y(ernet)g(using)f(DECstation)g(5000/200)e (w)o(orkstations)i(and)0 1153 y(Gatew)o(a)n(y)e(p)q(ersonal)h(computers.)j (The)d(DECstation)f(uses)0 1203 y(a)19 b(25Mhz)h(R3000)e(MIPS)i(pro)q(cessor) h([Kane)e(88])g(with)g(a)0 1252 y(Lance)g(Ethernet)i(in)n(terface.)34 b(The) 19 b(Gatew)o(a)n(y)g(uses)h(a)e(33)0 1302 y(Mhz)i(i486)e(pro)q(cessor)j([In)o (tel)e(90])f(with)h(a)g(3Com)f(3C503)0 1352 y(Ethernet)e(in)n(terface.)42 1402 y(On)11 b(the)g(DECstations,)g(w)o(e)g(compare)f(the)i(p)q(erformance)0 1452 y (of)25 b(our)g(proto)q(col)g(library)g(with)g(DEC's)g(Ultrix)g(4.2A,)0 1501 y (the)f(Mac)o(h)f(2.5)f(in)n(tegrated)i(k)o(ernel,)h(and)e(UX,)g(CMU's)0 1551 y (single-serv)o(er)17 b(UNIX)g(op)q(erating)f(system.)24 b(On)17 b(the)f(i486-) 0 1601 y(based)25 b(mac)n(hines,)i(w)o(e)e(compare)f(the)i(p)q(erformance)e (of)0 1651 y(our)18 b(proto)q(col)g(library)f(with)h(the)h(Mac)o(h)f(2.5)f (k)o(ernel,)i(the)0 1701 y(386BSD)10 b(k)o(ernel)h([Jolitz)e(92],)h(the)h(BNR\ 2SS)g(UNIX)f(single-)0 1750 y(server)21 b([Dean)g(92],)g(and)f(CMU's)h(UX.) 650 1735 y fb(3)668 1750 y fj(.)39 b(In)21 b(the)g(com-)0 1800 y(parison)e (systems,)h(proto)q(cols)f(are)h(implemen)l(ted)g(in)e(the)0 1850 y(server)g (for)f(the)h(single-serv)o(er)g(based)g(systems)f(\(UX)h(and)0 1900 y(BNR2SS\ \),)i(and)f(in)h(the)h(k)n(ernel)g(otherwise)g(\(Mac)o(h)f(2.5,)0 1950 y(Ultr\ ix)13 b(4.2A,)e(and)i(386BSD\).)f(Our)i(proto)q(col)f(library)l(,)f(the)0 2000 y(386BSD)20 b(k)o(ernel,)j(and)e(BNR2SS)g(all)e(rely)i(on)g(proto)q(col)0 2049 y(co)q(de)16 b(deriv)o(ed)g(from)d(the)j(Berkeley)f(Netw)o(orking)f(Release)0 2099 y(T)m(ape)20 b(I)q(I)f(\(BNR2\).)35 b(Mac)o(h)19 b(2.5,)g(Ultrix)g(4.2A,) f(and)h(UX)0 2149 y(use)d(the)g(4.3BSD)e(proto)r(col)h(implem)o(en)m(tation.) 21 b(Both)16 b(im-)0 2199 y(plemen)n(tations,)e(though,)f(are)i(comparable)e (and)h(of)g(high-)0 2249 y(qualit)n(y)23 b(as)g(each)g(is)h(capable)f(of)g (nearly)g(saturating)g(a)0 2298 y(10Mb/sec)e(Ethernet)h(b)q(et)o(w)o(een)f (a)f(pair)g(of)f(DECstation)0 2348 y(5000/200s)12 b([Thekk)n(ath)i(et)g(al.)j (93].)42 2398 y(W)l(e)j(ha)o(v)o(e)g(compiled)e(and)i(run)g(a)g(large)g(colle\ ction)f(of)0 2448 y(netw)n(ork-in)o(tensiv)o(e)f(applications)f(against)h(our) g(proto)q(col)0 2498 y(library)l(,)12 b(including)f fc(telnet)p fj(,)g fc(ftp) p fj(,)g(and)h(the)h(X11)f(libraries)0 2547 y(and)18 b(clien)o(ts)g([Gett)o (ys)g(et)g(al.)29 b(90].)g(F)m(or)18 b(this)g(discussion,)0 2591 y 378 2 v 46 2652 a fa(3)64 2664 y fi(BNR2SS)12 b(and)h(386BSD)f(are)h(not)f(a)o(v)n(ailab\ le)f(for)i(the)f(DECsta-)0 2704 y(tion.)i(Ultrix)d(4.2A)g(is)h(not)f(a)o(v)n (ailable)e(for)i(the)f(Gatew)o(a)o(y)m(.)1006 4 y @beginspecial @setspecial @endspecial 41 x fj(though,)i(w)o(e)h(fo)q(cus)g(on)g(t)o(w)o(o)f(microbenc)o (hmark)g(programs:)1006 95 y fc(ttcp)p fj(,)j(a)g(memory-to-m)n(em)o(ory)e (throughput)i(b)r(enc)o(hmark)1006 145 y(for)e(TCP)g(that)f(transfers)i(16)f (MB)g(of)f(data)h(from)e(one)i(host)1006 195 y(to)g(another,)g(and)g fc(proto\ lat)p fj(,)e(a)h(program)g(that)h(measures)1006 244 y(proto)q(col)i(round)f (trip)h(latency)g(for)f(UDP)g(and)h(TCP)l(.)g(The)1006 294 y(programs)h(are)i (measured)f(on)f(a)h(priv)n(ate)g(netw)n(ork)g(while)1006 344 y(the)e(mac)m (hines)g(are)f(in)f(single-user)i(mo)o(de.)1006 473 y fh(4.1)56 b(Throughput) 19 b(and)g(latency)1006 554 y fj(W)l(e)10 b(ha)o(v)o(e)f(implemen)l(ted)h(sev\ eral)f(di\013erent)h(v)n(ersions)h(of)d(the)1006 604 y(user/kernel)18 b(netw) o(ork)f(in)o(terface.)31 b(In)18 b(our)g(baseline)g(v)n(er-)1006 654 y(sion,) 13 b(the)g(pac)o(k)o(et)h(\014lter)f(uses)i(Mac)o(h)e(IPC)g(to)g(deliv)o(er)g (each)1006 704 y(incoming)h(pac)o(k)o(et)j(to)g(the)g(proto)q(col)f(in)g(a)g (separate)i(mes-)1006 754 y(sage.)f(The)10 b(second)h(v)o(ersion)f(uses)h(a)e (modi\014ed)g(pack)n(et)i(\014lter)1006 803 y(that)h(p)r(ermits)f(application\ s)g(to)h(receive)g(m)n(ultiple)f(pac)o(k)o(ets)1006 853 y(with)h(a)f(single)h (w)o(ak)n(eup)h(from)d(the)j(k)n(ernel.)18 b(The)13 b(third)f(v)n(er-)1006 903 y(sion)17 b(uses)i(a)e(modi\014ed)h(pac)o(k)o(et)g(\014lter)g(that)f(eliminat\ es)f(a)1006 953 y(cop)o(y)g(on)h(the)g(critical)f(receiv)o(e)h(path)g(b)n(y)g (in)n(tegrating)f(the)1006 1003 y(pac)o(k)o(et)e(\014lter)h(with)e(the)i(unde\ rlying)e(device)i(driv)o(er.)1048 1055 y(T)l(able)f(2)g(sho)o(ws)h(throughput) g(and)f(round)g(trip)h(latency)1006 1105 y(for)e(TCP)m(,)g(and)h(round)f(trip) h(latency)g(for)f(UDP)g(under)i(dif-)1006 1154 y(ferent)g(proto)r(col)g(con\ \014gurations)g(and)g(soft)o(w)o(are)h(net)o(w)o(ork)1006 1204 y(in)o(terface\ s.)i(Latencies)11 b(for)e(b)q(oth)h(proto)q(cols)g(are)g(sho)o(wn)g(for)1006 1254 y(a)g(range)h(of)f(pac)o(k)o(et)h(sizes.)18 b(W)l(e)11 b(did)f(not)h(mea\ sure)f(through-)1006 1304 y(put)16 b(for)f(UDP)l(,)g(as)g(it)g(dep)r(ends)h (more)e(on)i(the)f(windo)o(wing)1006 1354 y(and)j(ackno)n(wledgemen)n(t)h(str\ ategies)h(than)e(on)g(the)h(data-)1006 1404 y(gram)13 b(transp)q(ort)i(mac)m (hinery)m(.)k(F)l(or)14 b(each)g(system,)g(w)n(e)h(ran)1006 1453 y(the)k(thro\ ughput)f(b)r(enchmarks)f(with)h(the)g(b)r(est)h(p)q(ossible)1006 1503 y(recei\ ve)d(bu\013er)g(size)g(for)g(eac)o(h)f(implemen)m(tation.)22 b(W)l(e)16 b(de-) 1006 1553 y(termined)j(the)h(b)r(est)g(size)h(b)o(y)e(running)g(the)i(through\ put)1006 1603 y(b)q(enchmarks)14 b(with)g(increasing)h(bu\013er)g(size)g(un)o (til)f(further)1006 1653 y(increases)e(did)f(not)f(impro)m(v)o(e)h(throughput\ .)17 b(F)m(or)10 b(the)h(server)1006 1702 y(and)18 b(library-based)f(proto)q (cols,)h(the)h(receiv)o(e)g(bu\013ers)g(are)1006 1752 y(k)o(ept)g(in)g(virtua\ l)f(memory)e(and)j(can)g(b)q(e)g(reallo)q(cated)g(on)1006 1802 y(demand)13 b (for)g(busy)i(sessions.)1048 1854 y(F)l(or)g(the)g(\014rst)h(library-based)f (con\014guration)f fe(\(Libr)m(ary-)1006 1904 y(IPC\))p fj(,)d(the)i(net)o (w)o(ork)e(in)o(terface)i(uses)g(Mac)o(h's)e(pack)n(et)i(\014lter)1006 1954 y (and)i(IPC)h(mec)n(hanisms)e(to)h(dispatc)o(h)h(incoming)d(net)o(w)o(ork)1006 2004 y(pac)o(k)o(ets)22 b(to)e(the)i(appropriate)f(address)h(space.)40 b(P)o (ac)o(k)n(et)1006 2054 y(trains)11 b(are)f(not)h(coalesced)g(in)o(to)f(con)o (tiguous)g(messages,)g(re-)1006 2103 y(quiring)j(that)i(the)f(proto)q(col)g (library)g(collect)g(and)g(pro)q(cess)1006 2153 y(an)f(IPC)h(message)f(for)g (every)h(incoming)d(pac)o(k)o(et.)18 b(Because)1006 2203 y(each)i(IPC)g(cross\ es)i(the)e(user/kernel)g(b)r(oundary)f(and)h(is)1006 2253 y(on)15 b(the)h(cri\ tical)f(path)h(of)f(the)h(receiv)o(er,)g(w)o(e)g(ac)o(hiev)o(e)g(only)1006 2303 y(ab)q(out)e(85%)f(of)g(the)i(in-k)n(ernel)f(throughput.)1048 2355 y(W)l (e)21 b(ha)o(v)n(e)g(implemen)m(ted)g(an)f(alternate)h(pack)n(et)h(\014lter) 1006 2405 y(mec)n(hanism)i(\()p fe(Libr)m(ary-SHM)p fj(\))i(that)f(transfers) i(data)d(in)1006 2455 y(memory)17 b(shared)k(b)q(etw)o(een)f(the)h(k)o(ernel) f(and)g(the)g(appli-)1006 2504 y(cation.)49 b(On)25 b(receiving)f(a)g(pac)o (k)o(et,)j(the)e(pac)o(k)o(et)g(\014lter)1006 2554 y(transfers)f(data)e(in)o (to)g(the)h(shared)h(bu\013er,)h(and)d(uses)i(a)1006 2604 y(ligh)n(t)o(w)o (eigh)n(t)13 b(condition)f(v)n(ariable)f(to)i(signal)e(a)i(proto)q(col)f(li-) 1006 2654 y(brary)j(that)g(new)g(data)f(has)h(arriv)o(ed.)20 b(The)15 b(use)h (of)e(shared)1006 2704 y(memory)f(in)h(this)i(case)g(do)q(es)g(not)f(reduce)h (the)g(n)o(um)n(b)q(er)g(of)p eop eos end TeXDict begin bos 300 @start /fa df[ <000FE000183000307000606000600000600000C00000C00000C00007FFC000C0C000C0C00180 C00181800181800181800181800303000303100303100303100303200601C00600000600006400 00EC0000C80000700000>20 29 -1 6 20]12 dc[<38787838081010204080>5 10 7 -13 11] 39 dc[<00080010006000C0018001000200060004000C00180018003000300020006000600060 004000C000C000C000C000C000C000C000C0004000400060002000200010000800>13 34 4 9 15]40 dc[<00800040002000200030001000100018001800180018001800180018001800100030 0030003000200060006000C000C0018001000300020004000C001800300040008000>13 34 1 9 15]41 dc[8 2 3 -6 13]45 dc[<3078F060>5 4 3 0 11]46 dc[<0000400000C00001 80000180000300000300000600000C00000C0000180000180000300000300000600000600000C0 0000C0000180000180000300000600000600000C00000C00001800001800003000003000006000 00600000C00000C00000800000>18 33 2 8 18]47 dc[<01E006300C10181010103010301060 30603060306030C060C060C060C040C0C080808180C10046003C00>12 21 5 0 18]48 dc[<00 4000C000C003800D8001800180030003000300030006000600060006000C000C000C000C001800 FF80>10 21 4 0 18]49 dc[<00F00308040C0904088610861086210C120C1C18003000600080 03000C0010002004200C7C18C7F081E0>15 21 3 0 18]50 dc[<00F8010C0206050608860886 0904060C0018007003E000300010001000186030E030C020806041803E00>15 21 3 0 18]51 dc[<000C000C000C0018001800180030003000600060004000C001800118021806300430083010 307F6080FE0060006000C000C000C00080>15 27 1 6 18]52 dc[<060C07F807F00480080008 000800080017C0186010600070007000706070F0E0E0E080C0818043003C00>14 21 4 0 18] 53 dc[<00F0030806080C381838180030003000678068C07040E060C060C060C060C0C0C0C0C0 80C10042003C00>13 21 5 0 18]54 dc[<00F8010C020604060C060C060E0C0F1807B003E007 F018F83038601C601CC018C018C010602030C01F00>15 21 3 0 18]56 dc[<00E0031006080C 08180818081818301830183038103818F00730003000600060E0C0E080810086007800>13 21 4 0 18]57 dc[<000180000180000380000380000780000780000B800013800013800023C00021C0 0041C000C1C00081C00101C001FFC00201C00201C00401C00801C00801C01801C0FE0FF8>21 23 2 0 26]65 dc[<03FFF000E03800E01C00E00C00E00C01C00C01C01C01C01C01C03803807003FF C003FFE00380700700300700380700380700380E00700E00700E00E00E01C01C0380FFFE00>22 23 2 0 25]66 dc[<003F0400E0880380580600380C00381C0010380010300010700010600000 E00000E00000E00000C00000C00040C00040C00080E00080E0010060020030040018180007E000 >22 23 6 0 26]67 dc[<03FFF000E01800E00C00E00600E00701C00301C00301C00301C00303 800703800703800703800707000E07000E07000C07001C0E00180E00300E00600E00C01C0380FF FC00>24 23 2 0 27]68 dc[<03FFFE00E00E00E00400E00400E00401C00401C00401C10001C1 0003820003820003FE000386000704000704080704080700100E00100E00300E00200E00601C01 C0FFFFC0>23 23 2 0 24]69 dc[<03FFFE00E00E00E00400E00400E00401C00401C00401C100 01C10003820003820003FE000386000704000704000704000700000E00000E00000E00000E0000 1C0000FFC000>23 23 2 0 23]70 dc[<003F0400E0880380580600380C00381C001038001030 0010700010600000E00000E00000E00000C01FF8C001C0C001C0C001C0E00380E0038060038030 0780181B0007E100>22 23 6 0 28]71 dc[<07FE00E000E000E000E001C001C001C001C00380 03800380038007000700070007000E000E000E000E001C00FF80>15 23 2 0 14]73 dc[<007F C0000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070 0000700000700000700060E000F0E000F0E000E1C0004380003E0000>18 23 3 0 19]74 dc[< 03FE0FC000E0070000E0040000E0080000E0100001C0200001C0800001C1000001C20000038600 00038E000003A7000003C700000783800007038000070380000701C0000E01C0000E00E0000E00 E0000E00E0001C00F000FF83FC00>26 23 2 0 27]75 dc[<03F0003F8000F000780000B80078 0000B800B80000B80138000138017000013802700001380270000138047000023808E000021C08 E000021C10E000021C10E000041C21C000041C41C000041C41C000041C81C000081D038000081D 038000080E038000080E038000180C070000FE083FE000>33 23 2 0 32]77 dc[<03F00FE000 F0030000F0020000B8020000B80200011C0400011C0400011C0400010E0400020E0800020E0800 02070800020708000403900004039000040390000401D0000801E0000800E0000800E0000800E0 0018004000FE004000>27 23 2 0 26]78 dc[<001F8000E0C00180600300300600380C00381C 0018180018380038300038700038700038700038700070E00070E000E06000E07001C070038030 0300380E001C180007E000>21 23 5 0 27]79 dc[<03FFE000E03800E01C00E00C00E00C01C0 1C01C01C01C01C01C0380380700380E003FF800380000700000700000700000700000E00000E00 000E00000E00001C0000FF8000>22 23 2 0 24]80 dc[<03FFE000E03800E01C00E01C00E01C 01C01C01C01C01C01C01C0380380700381C003FF000381800700C00700E00700E00700E00E01C0 0E01C00E01C20E01C21C00C4FF8078>23 23 2 0 26]82 dc[<007C4001828003018006018006 01800C01000C01000C00000E00000FC00007F80003FC00007C00000E00000E0000060020060040 0C00400C00600800601000D8600087C000>18 23 3 0 20]83 dc[<1FFFFC38381C2038086038 0840380840700880700800700000700000E00000E00000E00000E00001C00001C00001C00001C0 000380000380000380000380000780007FF800>22 23 6 0 26]84 dc[<7FC1FC1C00601C0040 1C00401C0040380080380080380080380080700100700100700100700100E00200E00200E00200 E00200E00400E00800E008006030003040001F8000>22 23 7 0 26]85 dc[32 23 7 0 36]87 dc[<03FC3F8000700E0000700800007010000038200000 3840000038C000001C8000001D0000001E0000000E0000000E0000001F00000037000000270000 0047800000838000010380000203C0000401C0000C01C0001C01E000FE07F800>25 23 2 0 26] 88 dc[<072008E018E0306030C060C060C060C0C180C188C1884388659038E0>13 14 4 0 18] 97 dc[<3E000C000C000C000C0018001800180018003700388030C030C060C060C060C060C0C1 80C180C100430066003800>10 23 4 0 16]98 dc[<03C00C6018E030E0300060006000600040 00C0004020604021801E00>11 14 4 0 16]99 dc[<007C001800180018001800300030003000 30076008E018E0306030C060C060C060C0C180C188C1884388659038E0>14 23 4 0 18]100 dc [<07001880304060404080FF00C000C000C0008000C040C08043003C00>10 14 5 0 16]101 dc [<001C0036002E006C00600060006000C000C007FC00C000C001C0018001800180018001800300 0300030003000300060006006600E400C8007000>15 29 -1 6 11]102 dc[<01C8023806380C 180C3018301830183030603060306010E019C00EC000C000C06180E180C3007C00>13 20 2 6 16]103 dc[<1F0006000600060006000C000C000C000C0019C01A601C20183030603060306030 6060C060C461846188C098C0E0>14 23 3 0 18]104 dc[<030706000000000000384C4C4C8C18 1818303262622438>8 23 3 0 11]105 dc[<1F0006000600060006000C000C000C000C001870 189819381A30340038003E0033006300631063106310C320C1C0>13 23 3 0 16]107 dc[<3E0C 0C0C0C181818183030303060606060C0D0D0D0D060>7 23 4 0 9]108 dc[<38787800448C8C00 47050400460604008C0C0C000C0C0C000C0C0C000C0C0C00181818001818188018183080181831 003030130030301C00>25 14 3 0 29]109 dc[<387044984708460C8C180C180C180C18183018 311861186230263038>16 14 3 0 20]110 dc[<078018C0304060606060C060C060C06080C080 C08180C10046003C00>11 14 5 0 18]111 dc[<1C702288230C230C460C060C060C060C0C180C 180C100C301A601B8018001800300030003000FC00>14 20 2 6 18]112 dc[<38F04518463846 308C000C000C000C00180018001800180030003000>13 14 3 0 15]114 dc[<07800C4018E018 E038001E001F8007C000C060C0E0C0C180C3003E00>11 14 3 0 15]115 dc[<03000300060006 0006000600FF800C000C000C001800180018001800300031003100310032001C00>9 20 3 0 12 ]116 dc[<1C0826184618461886300C300C300C30186018621862186208E40738>15 14 3 0 19 ]117 dc[<1C1026184618461886100C100C100C10182018201840184008800700>13 14 3 0 16 ]118 dc[<1C0410260C18460C18460C188618100C18100C18100C181018302018302018304018 30400C5880078F00>21 14 3 0 24]119 dc[<0E3C1346218E218C430003000300030006000608 C608E610CA2071C0>15 14 2 0 16]120 dc[<1C0826184618461886300C300C300C3018601860 1860186008C007C000C000807180730066003C00>13 20 3 6 17]121 dc[15 1 3 -8 18]123 dc dfe /fb df[<70F8FCFC7C0C1830E0C0>6 10 7 5 20]44 dc[<0006000E000E001C 001C003800380070007000E000E001C001C0038003800380070007000E000E001C001C00380038 0070007000E000E000C000>15 29 2 3 20]47 dc[<1FC0007FF000707800201800001C00001C 0007FC001FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F80>17 16 2 0 20] 97 dc[18 23 0 0 20]98 dc[<03F80FFC1C1C380870006000E000E000E000E00060007000380E1C1E0FFC03F0>15 16 2 0 20]99 dc[<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00 301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CFC0 >18 23 1 0 20]100 dc[<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E 0FFC03F0>15 16 2 0 20]101 dc[<007C00FE01CE03840380038003807FFEFFFE038003800380 0380038003800380038003800380038003807FFC7FFC>15 23 1 0 20]102 dc[19 23 0 0 20]104 dc[<03000780 0780030000000000000000007F807F800380038003800380038003800380038003800380038003 80FFFCFFFC>14 24 3 0 20]105 dc[17 23 1 0 20]107 dc[15 23 2 0 20]108 dc[19 16 0 0 20]109 dc[19 16 0 0 20]110 dc[<07C0 1FF03C78701C701CE00EE00EE00EE00EE00EE00E701C783C3C781FF007C0>15 16 2 0 20]111 dc[18 24 0 8 20]112 dc[<03CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E 00700E00301E001C3E000FEE0007CE00000E00000E00000E00000E00000E00000E00007FC0007F C0>18 24 1 8 20]113 dc[17 16 1 0 20]114 dc[<0FD83FF86038C0 38C038F0007F803FF007F8001C6006E006F006F81CFFF8CFE0>15 16 2 0 20]115 dc[<030007 000700070007007FFCFFFC07000700070007000700070007000700070E070E070E070C03FC00F0 >15 21 1 0 20]116 dc[19 16 0 0 20]117 dc[17 16 1 0 20]118 dc[17 16 1 0 20]119 dc[<7E3F007E3F001E 38000E780007700007E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE 3F80>17 16 1 0 20]120 dc[17 24 1 8 20]121 dc dfe /fc df[<000180000380000380000700000700 000E00000E00000E00001C00001C0000380000380000700000700000700000E00000E00001C000 01C00001C0000380000380000700000700000700000E00000E00001C00001C0000380000380000 380000700000700000E00000E00000C00000>17 37 2 9 22]47 dc[<07F0001E3C003C1E0038 0E00780F00780F00780F00F80F80F80F80F80F80F80F80F80F80F80F80F80F80F80F80F80F80F8 0F80F80F80780F00780F00380E003C1E001E3C0007F000>17 24 2 0 22]48 dc[<0FF0003FFC 00787E00FC1F00FC1F80FC0F80FC0F80780F80001F80001F00001E00003C0000780000700000E0 000180000301800601800C01801003803FFF007FFF00FFFF00FFFF00>17 24 2 0 22]50 dc[< 000600000E00001E00003E00007E0000DE00019E00011E00031E00061E000C1E00181E00301E00 601E00C01E00FFFFE0FFFFE0001E00001E00001E00001E00001E0001FFE001FFE0>19 24 1 0 22]52 dc[<3006003FFC003FFC003FF0003FE0003F800030000030000030000037F000381C0030 1E00000F00000F00000F80700F80F80F80F80F80F80F80F80F00601F00383E001FF80007E000> 17 24 2 0 22]53 dc[<00F80007FE000F06001E0F003C1F003C1F00780E00780000F80000F9F0 00FA1C00FC0E00FC0F00F80F80F80F80F80F80F80F80780F80780F80780F003C0F001E1E000FFC 0003F000>17 24 2 0 22]54 dc[<07F0001FFC00381E00300F007007007007007807007E0600 7F8E003FF8001FF8000FFC001FFE0038FF00703F80E00F80E00780E00380E00380E00300700700 3C0E001FFC0007F000>17 24 2 0 22]56 dc[<001FE02000FFFCE003F80FE007C003E01F8001 E01F0000E03E0000E07E0000607C000060FC000000FC000000FC000000FC000000FC000000FC00 0000FC000000FC0000007C0000607E0000603E0000601F0000C01F8000C007C0038003F80F0000 FFFC00001FF000>27 26 2 0 32]67 dc[29 26 2 0 34]68 dc[25 26 2 0 29]69 dc[<001FE02000FFFCE003F80FE007C003E01F8001E01F0000E03E 0000E07E0000607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC00FFFC FC00FFFC7C0003E07E0003E03E0003E01F0003E01F8003E007C003E003F807E000FFFCE0001FF0 60>30 26 2 0 35]71 dc[ 30 26 2 0 35]78 dc[25 26 2 0 30]80 dc[30 26 2 0 33]82 dc[<07F0401FFDC03C0FC07803C07001C0F001C0F000C0F000C0F80000FF00007FF8003F FF001FFF800FFFC001FFE0000FE00003F00001F0C000F0C000F0C000F0E000E0F001E0FC03C0EF FF8083FE00>20 26 2 0 25]83 dc[<7FFFFF807FFFFF80781F0780701F0380601F0180E01F01 C0C01F00C0C01F00C0C01F00C0001F0000001F0000001F0000001F0000001F0000001F0000001F 0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000007FFFC0007 FFFC00>26 26 2 0 31]84 dc[<0FF0001C3C003E1E003E0E003E0F001C0F00000F0000FF000F CF003E0F007C0F00F80F00F80F00F80F00F817007C27E01FC3E0>19 17 1 0 21]97 dc[<03FC 000F0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F800007800007800003C01 801C03000F060003FC00>17 17 1 0 20]99 dc[<000FE0000FE00001E00001E00001E00001E0 0001E00001E00001E003F9E00F07E01C03E03C01E07801E07801E0F801E0F801E0F801E0F801E0 F801E07801E07801E03C01E01C03E00F0DFC03F9FC>22 26 1 0 25]100 dc[<03F0000E1C001C 0E003C0700780700780780F80780F80780FFFF80F80000F800007800007800003C01801C03000E 060003FC00>17 17 1 0 20]101 dc[22 26 1 0 25]104 dc[<1C003E003E003E003E001C00 00000000000000007E007E001E001E001E001E001E001E001E001E001E001E001E001E001E00FF 80FF80>9 27 1 0 13]105 dc[21 26 1 0 23]107 dc[ 10 26 1 0 13]108 dc[34 17 1 0 37]109 dc[22 17 1 0 25]110 dc[<03F8000E0E003C07803803807803C07803C0F803E0F803E0F803 E0F803E0F803E0F803E07803C07C07C03C07800E0E0003F800>19 17 1 0 22]111 dc[15 17 1 0 18] 114 dc[<1FB020704030C030C030F000FF807FE03FF807F8003CC00CC00CE00CE008F830CFE0> 14 17 1 0 17]115 dc[<06000600060006000E000E001E003FF0FFF01E001E001E001E001E00 1E001E001E001E181E181E181E181E180F3003E0>13 24 1 0 17]116 dc[20 17 1 0 23]118 dc[29 17 1 0 32]119 dc[20 24 1 7 23]121 dc dfe /fd df[<00FC7C0183C607078E060704 0E07000E07000E07000E07000E07000E0700FFFFF00E07000E07000E07000E07000E07000E0700 0E07000E07000E07000E07000E07000E07000E07000E07007F0FF0>23 26 0 0 22]11 dc[<00 800100020004000C00080018003000300030006000600060006000E000E000E000E000E000E000 E000E000E000E0006000600060006000300030003000180008000C000400020001000080>9 38 3 10 15]40 dc[<8000400020001000180008000C000600060006000300030003000300038003 800380038003800380038003800380038003000300030003000600060006000C00080018001000 200040008000>9 38 2 10 15]41 dc[<0300030003000300E31C73381FE0078007801FE07338 E31C0300030003000300>14 16 2 -12 19]42 dc[<000C0000000C0000000C0000000C000000 0C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000FFFFFF80FFFFFF80 000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C00 00000C0000000C0000>25 26 2 4 30]43 dc[10 2 0 -7 13]45 dc[<60F0F060> 4 4 3 0 11]46 dc[<0004000C00180018001800300030003000600060006000C000C000C00180 018001800300030003000600060006000C000C000C001800180018003000300030006000600060 00C000C000>14 37 2 9 19]47 dc[<078018603030303060186018E01CE01CE01CE01CE01CE0 1CE01CE01CE01CE01CE01CE01C601860187038303018600780>14 24 2 0 19]48 dc[<030007 00FF00070007000700070007000700070007000700070007000700070007000700070007000700 07000700FFF0>12 24 3 0 19]49 dc[<0F80106020304038803CC01CE01C401C003C00380038 0070006000C001800100020004040804100430083FF87FF8FFF8>14 24 2 0 19]50 dc[<0F80 10E02070607870382038007800700070006000C00F8000E000700038003C003CE03CE03CC03C40 38407030E00F80>14 24 2 0 19]51 dc[<00300030007000F000F001700370027004700C7008 701070307020704070C070FFFF00700070007000700070007007FF>16 24 1 0 19]52 dc[<30 183FF03FE03FC02000200020002000200027C03860203000380018001C001C401CE01CE01C8018 4038403030E00F80>14 24 2 0 19]53 dc[<01E006100C1818383038300070006000E000E7C0 E860F030F018E018E01CE01CE01C601C601C701830183030186007C0>14 24 2 0 19]54 dc[< 40007FFE7FFC7FFC40088010801080200040004000800180018001000300030003000300070007 0007000700070007000200>15 25 2 0 19]55 dc[<078018603030201860186018601870103C 303E600F8007C019F030F86038401CC00CC00CC00CC00C6008201018600FC0>14 24 2 0 19] 56 dc[<07801860303070306018E018E018E01CE01CE01C601C603C303C185C0F9C001C001800 18003870307060604021801F00>14 24 2 0 19]57 dc[<000C0000000C0000000C0000001E00 00001E0000003F000000270000002700000043800000438000004380000081C0000081C0000081 C0000100E0000100E00001FFE000020070000200700006007800040038000400380008001C0008 001C001C001E00FF00FFC0>26 26 1 0 29]65 dc[22 26 2 0 27]66 dc[<003F0201C0C6 03002E0E001E1C000E1C0006380006780002700002700002F00000F00000F00000F00000F00000 F000007000027000027800023800041C00041C00080E000803003001C0C0003F00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[22 26 2 0 26]69 dc[20 26 2 0 25]70 dc[ 24 26 2 0 29]72 dc[11 26 1 0 14]73 dc[25 26 2 0 30]75 dc[19 26 2 0 24] 76 dc[30 26 2 0 35]77 dc[24 26 2 0 29]78 dc[21 26 2 0 26]80 dc[25 26 2 0 28]82 dc[<0FC21836200E6006C006C002C002C002E0 0070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080801C008000 1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28] 84 dc[24 26 2 0 29]85 dc[36 26 1 0 39]87 dc[< 7FC0FF000F003C0007003000078020000380600001C0400001E0800000E1800000710000007A00 00003C0000001C0000001E0000001E00000017000000278000004380000041C0000081E0000100 E0000100700002007800040038000C001C001E003E00FF80FFC0>26 26 1 0 29]88 dc[<3F80 70C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E000E000E000E00070003004 38080C1807E0>14 16 1 0 17]99 dc[<07C01C3030187018600CE00CFFFCE000E000E000E000 6000300438080C1807E0>14 16 1 0 17]101 dc[<0FCE18733030703870387038703830301860 2FC02000600070003FF03FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<18003C003C001800000000000000000000000000FC001C001C00 1C001C001C001C001C001C001C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[< 07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19] 111 dc[18 23 1 7 21]112 dc[ 12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020 F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C001C001C00 1C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc[<7FF86070407040E041C041C00380070007000E081C08 1C08381070107030FFF0>13 16 1 0 17]122 dc dfe /fe df[<0300030007000F000B001300 330023004300C300FFE003000300030003001FE0>11 16 1 0 15]52 dc dfe /ff df[<006000 E000E00160026006600C600860106020606060C060FFFC0060006000600060006003FC>14 19 1 0 17]52 dc dfe /fg df[<000180000380000380000700000700000E00000E00001C00001C00 00380000380000700000700000E00000E00001C00001C0000380000380000700000700000E0000 0E00001C00001C0000380000380000700000700000E00000E00000C00000>17 32 2 3 22]47 dc[<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C001C1C001FFC001F FC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFFE07FFFE0> 19 25 1 0 22]69 dc[<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E 00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E0>19 18 2 0 22]97 dc[<7E0000 FE00007E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E0070 0E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C00>20 25 0 0 22]98 dc[<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF8 03F0>16 18 3 0 22]99 dc[<003F00007F00003F0000070000070000070000070003C7000FF7 001FFF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00700F003C1F 001FFFE00FE7F007C7E0>20 25 1 0 22]100 dc[<03E00FF81FFC3C1E780E7007E007FFFFFFFF FFFFE000E000700778073C0F1FFE0FFC03F0>16 18 3 0 22]101 dc[<001F00007F8000FF8001 E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C0003FFE007FFF003FFE00>17 25 1 0 22]102 dc[<7E00 00FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E03 800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F0>21 25 0 0 22]104 dc[<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001 C001C001C001C001C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[<7E0000FE00007E0000 0E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF000 0FF8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F0>20 25 0 0 22]107 dc[17 25 2 0 22]108 dc[21 18 0 0 22]109 dc[<7E3C00FEFE00 7FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0380 7FC7F0FFE7F87FC7F0>21 18 0 0 22]110 dc[<03E0000FF8001FFC003C1E00780F00700700E0 0380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00 700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00 007FC000FFE0007FC000>20 27 0 9 22]112 dc[<07C7000FE7001FF7003C1F00700F00700F00 E00700E00700E00700E00700E00700E00700700F00700F003C3F003FF7001FE70007C700000700 000700000700000700000700000700003FE0007FF0003FE0>20 27 2 9 22]113 dc[19 18 1 0 22]114 dc[<0FEC3FFC7FFCF03CE01CE01C70007F801F F007F8003C600EE00EF00EF81EFFFCFFF8C7E0>15 18 3 0 22]115 dc[<030000070000070000 0700000700007FFF00FFFF00FFFF00070000070000070000070000070000070000070000070100 07038007038007038007870003FE0001FC0000F800>17 23 1 0 22]116 dc[<7E1F80FE3F807E 1F800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0F800F FFF007FBF803E3F0>21 18 0 0 22]117 dc[<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E 000E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E000>19 18 1 0 22]118 dc[19 18 1 0 22]119 dc[<7F1FC07F3FC07F 1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F 1FC0FF3FE07F1FC0>19 18 1 0 22]120 dc[<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E 00070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0 0000E00001C00079C0007BC0007F80003F00003C0000>19 27 1 9 22]121 dc dfe /fh df[< 0007E1F0001C173800703C3800E07C7801C0783001C0380001C0380001C0380003807000038070 00038070003FFFFF0003807000038070000700E0000700E0000700E0000700E0000700E0000700 E0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0001C0380001C03C000FF8FF800> 29 29 1 0 24]11 dc[<0007E0001C1000703800E07801C07801C03001C00001C0000380000380 000380003FFFF00380F00380700700E00700E00700E00700E00700E00700E00E01C00E01C00E01 C00E01C00E01C00E01C01C03801C03C0FF8FF0>21 29 1 0 23]12 dc[<0007FC001C3C007078 00E07801C03801C03801C03801C0380380700380700380703FFFF00380700380700700E00700E0 0700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0 >22 29 1 0 23]13 dc[<0007F07E00001C09C10000701F038000E03E078001C03C078001C03C 030001C01C000001C01C00000380380000038038000003803800003FFFFFFF000380380F000380 3807000700700E000700700E000700700E000700700E000700700E000700700E000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C001C01C038001E01E03C00FF8FF9FF00 >33 29 1 0 35]14 dc[<183C7C340404080810106080>6 12 7 -17 12]39 dc[<0004000800 30006000C0008001800300060006000C000C001800180038003000300070007000600060006000 E000E000E000E000E000E000E000E0006000600060006000200030003000180008000C00040002 00>14 42 4 11 16]40 dc[<0100008000400060002000300010001800180018001C000C000C00 0C000C000C000C000C000C001C001C001C0018001800380038003000300070006000E000C001C0 01800300030006000C001800300060008000>14 42 0 11 16]41 dc[<38787838080810102020 4080>5 12 3 8 12]44 dc[<7FF0FFE0>12 2 1 -8 14]45 dc[<7070F060>4 4 4 0 12]46 dc [<00000400000C0000180000180000300000300000600000600000C00000C00001800003000003 00000600000600000C00000C0000180000180000300000300000600000600000C00000C0000180 000180000300000300000600000C00000C0000180000180000300000300000600000600000C000 00C00000800000>22 41 1 10 21]47 dc[<00F800038E000606000C03000C0300180380380380 380380300380700380700380700380700380E00700E00700E00700E00700E00700E00600E00E00 C00E00C00E00C00C00C01C00C0180060300060600030C0001F0000>17 29 4 1 21]48 dc[<00 18007003F00C7000700070007000E000E000E000E000E000E001C001C001C001C001C001C00380 0380038003800380038007000780FFF8>13 28 4 0 21]49 dc[<007E000183800201C00400E0 0400E00F00E00F00E01F00E01F00E00E00E00001E00001C0000380000380000700000E00001C00 00380000600000C0000180000300800600800801001001003FFF007FFE00FFFE00>19 28 2 0 21]50 dc[<007C000187000203800403800F03C00F03C00F03C00E038000038000070000060000 0C0000380003F000001C00000E00000E00000F00000F00000F00700F00F80F00F80F00F00E00E0 1E00801C004038003070000FC000>18 29 3 1 21]51 dc[<0000C00001800003800003800007 80000B8000138000270000670000C700008700010700020700040E00080E00180E00100E00200E 00400E00FFFFC0001C00001C00001C00001C00001C00003800003C0003FF80>18 28 2 0 21] 52 dc[<0301C003FF8003FE0007FC0004000004000004000004000004000008000008F8000B0C 000C0E00080700080700000700000780000780000780700F00F00F00F00F00F00E00801E00801C 0040380040300030E0000F8000>18 29 3 1 21]53 dc[<003E0000E100018080030380060780 0C07801C070018000038000030000071F000761800780C00E80E00F00600F00600E00700E00700 E00700E00E00C00E00C00E00C00E00C01C00E0180060380060300030C0000F8000>17 29 4 1 21]54 dc[<1000003FFFC03FFFC03FFF8060010040020040040080080000080000100000200000 400000C0000080000180000180000300000700000700000F00000E00000E00001E00001E00001E 00003C00003C00003C0000180000>18 29 5 1 21]55 dc[<007C000183000201800601800C00 C00C00C00C00C01C01801C01801E03000F86000FCC0007F00003F80003FC000C7E00183F00300F 00600700600300C00300C00300C00300C00200C006006004006018003830000FC000>18 29 3 1 21]56 dc[<000020000000300000007000000070000000F0000000F0000001F000000378000002 78000006780000047800000C780000087C0000183C0000103C0000203C0000203C0000403C0000 403E0000FFFE0000801E0001001E0001001E0002001E0002000F0004000F0004000F001E001F00 FF80FFF0>28 29 1 0 31]65 dc[<0FFFFC0000F8070000F0038000F003C000F001C000F001E0 00F001E001E001C001E003C001E003C001E0078001E00F0001E03C0003FFF80003C01E0003C00F 0003C0078003C0078003C007800780078007800780078007800780078007800F0007801E000F00 3C000F007800FFFFE000>27 28 2 0 29]66 dc[<0007F010001C0C300070026000C001E00380 00E0070000E00E0000600E0000601C0000403C00004038000040780000007800000078000000F0 000000F0000000F0000000F0000000F0000000F0000080F0000100700001007000010038000200 380004001C0004000C001800060020000380C000007F0000>28 30 4 1 30]67 dc[<0FFFFC00 00F8078000F001C000F000E000F0007000F0007000F0007801E0003801E0003801E0003801E000 3801E0003C01E0003803C0003803C0007803C0007803C0007803C0007003C000F0078000E00780 00E0078001C0078003800780078007800E000F001C000F007000FFFFC000>30 28 2 0 32]68 dc[<0FFFFFE000F801E000F000E000F0004000F0004000F0004000F0004001E0004001E0404001 E0400001E0400001E0C00001E1C00003FF800003C1800003C0800003C0800003C0800003C08080 0780008007800080078001000780010007800300078006000F000E000F003E00FFFFFC00>27 28 2 0 28]69 dc[<0FFFFFC000F803C000F001C000F0008000F0008000F0008000F0008001E00080 01E0408001E0400001E0400001E0C00001E1C00003FF800003C1800003C0800003C0800003C080 0003C080000780000007800000078000000780000007800000078000000F0000000F800000FFF8 0000>26 28 2 0 27]70 dc[<0007F010001C0C300070026000C001E0038000E0070000E00E00 00600E0000601C0000403C00004038000040780000007800000078000000F0000000F0000000F0 000000F000FFF0F0000F80F0000780F0000F0070000F0070000F0038000F0038000F001C001F00 0C001E000600660003818200007E0000>28 30 4 1 33]71 dc[<0FFF9FFE00F803E000F003C0 00F003C000F003C000F003C000F003C001E0078001E0078001E0078001E0078001E0078001E007 8003FFFF0003C00F0003C00F0003C00F0003C00F0003C00F0007801E0007801E0007801E000780 1E0007801E0007801E000F003C000F803E00FFF3FFC0>31 28 2 0 31]72 dc[<0FFF8000F800 00F00000F00000F00000F00000F00001E00001E00001E00001E00001E00001E00003C00003C000 03C00003C00003C00003C0000780000780000780000780000780000780000F00000F8000FFF800 >17 28 1 0 15]73 dc[<0FF80007FC00F8000FC000BC000F8000BC00178000BC00178000BC00 278000BC002780011E004F00011E004F00011E008F00011E008F00011E010F00010F010F00020F 021E00020F021E00020F041E00020F041E000207881E000207901E000407903C000407A03C0004 07A03C000407C03C000403C03C000403803C000C038078001E03007C00FF8307FF80>38 28 2 0 38]77 dc[<0FF807FE00F800F000FC006000BC004000BE0040009E0040009E0040010F0080010F 008001078080010780800103C0800103C0800201E1000201E1000200F1000200F1000200F90002 00790004007E0004003E0004003E0004001E0004001E0004000E000C000C001E000400FF800400 >31 28 2 0 31]78 dc[<0FFFFC0000F80F0000F0038000F003C000F001C000F001C000F001C0 01E003C001E003C001E003C001E0038001E0070001E00E0003C03C0003FFE00003C0000003C000 0003C0000003C000000780000007800000078000000780000007800000078000000F0000000F80 0000FFF00000>26 28 2 0 28]80 dc[<0FFFF80000F80E0000F0078000F003C000F001C000F0 01E000F001E001E003C001E003C001E0038001E0070001E00E0001E03C0003FFE00003C0700003 C0380003C03C0003C01C0003C01E0007803C0007803C0007803C0007803C0007803C0007803C08 0F003C100F801C10FFF01C20000007C0>29 29 2 1 31]82 dc[<003F0400C0CC018038030038 0600180E00180E00180E00181E00101E00001F00000F80000FF80007FF0003FF8001FFC0003FE0 0003E00001E00000E00000E04000E04000E04000E04000C06001C0E00180F00300CC0E0083F800 >22 30 2 1 23]83 dc[<1FFFFFF03C07C0F03007803020078020600780204007802040078020 400F0020800F0020000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E00 00001E0000001E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007C 00001FFFE000>28 28 4 0 30]84 dc[27 29 6 1 31]85 dc[41 29 5 1 43]87 dc[<07FF87FE00FE01F0007C01C0003C0180003E0100001E 0200001E0400001F0800000F1800000F90000007A0000007C0000003C0000003E0000003E00000 03F0000004F0000008F0000010F8000030780000207C0000403C0000803E0001001E0003001F00 06000F001F001F80FFC0FFF0>31 28 1 0 31]88 dc[<07F0001C18001E0C001C0E00180E0000 0E00000E0001FE000F0E001C1C00301C00701C00E01C40E01C40E03C40E05C80709D803F0E00> 18 18 3 0 21]97 dc[<3F00000F00000E00000E00000E00000E00000E00000E00001C00001C00 001C00001C78001D86001E03003C03803801803801803801C03801C03801C07003807003807003 80700300700700700E00F00C00CC300083C000>18 29 4 0 23]98 dc[<01F8071C0C1E181C38 183000700070007000E000E000E000600060047008301018200FC0>15 18 3 0 18]99 dc[<00 03F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C000F1C0030DC00C 03C01C0380380380300380700380700380700380E00700E00700E00700600700600700700F0030 1E00186F00078FC0>20 29 3 0 23]100 dc[<01F8070C0C061C073803300370037FFF7000E000 E000E00060006002300430081C3007C0>16 18 2 0 18]101 dc[<000F800039C00061C000E3C0 01C18001C00001C00001C0000380000380000380003FF800038000038000070000070000070000 0700000700000700000E00000E00000E00000E00000E00000E00001C00001E0000FFC000>18 29 1 0 13]102 dc[<000038003CCC00C69C01830803838007038007038007038007038007070003 0600038C0004F0000400000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C0 00C0600180200300180E0007F000>22 28 0 9 21]103 dc[<07E00001E00001C00001C00001C0 0001C00001C00001C000038000038000038000038F8003B0C003C0E00780E00780E00700E00700 E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 29 1 0 23]104 dc[<00C001C001C0018000000000000000000000000000001F80078003800700070007 000700070007000E000E000E000E000E000E001C001E00FF80>10 29 1 0 12]105 dc[<07E000 01E00001C00001C00001C00001C00001C00001C0000380000380000380000387F80381E0038180 07020007040007080007100007700007F8000F38000E3C000E1C000E1E000E0E000E0F001C0700 1C0F80FF9FE0>21 29 1 0 22]107 dc[<07E001E001C001C001C001C001C001C0038003800380 0380038003800700070007000700070007000E000E000E000E000E000E001C001E00FF80>11 29 1 0 12]108 dc[<1F8FC0FC00079061060003E076070007807807000780780700070070070007 00700700070070070007007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00 0E00E00E001C01C01C001E01E01E00FF8FF8FF80>33 18 1 0 36]109 dc[<1F8F8007B0C003C0 E00780E00780E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03 801E03C0FF9FF0>20 18 1 0 23]110 dc[<00FC000307000E01801C01C03800C03000C07000E0 7000E07000E0E001C0E001C0E001C0600180600380700700380E001C180007E000>19 18 2 0 21]111 dc[<0FC78003D86001E03003C03803803803801803801C03801C03801C070038070038 0700380700700700700700E00F01C00EC3000E3C000E00000E00000E00001C00001C00001C0000 1C0000FF8000>22 26 0 8 23]112 dc[<1F9C07EE03CF078E078C07000700070007000E000E00 0E000E000E000E001C001E00FFC0>16 18 1 0 16]114 dc[<03F20C0E18061004300438043E00 1FE00FF007F8003C401C400C400C6018E010D0608FC0>15 18 1 0 16]115 dc[<020002000200 060006000C001C003C00FFE01C001C003800380038003800380038007000704070407040704070 80708031001E00>11 26 4 0 16]116 dc[17 18 4 0 23]117 dc[19 18 4 0 22]118 dc[27 18 4 0 30]119 dc[<1FE3 FC07C1E003818001C10001C20000E40000EC00007800007000003800007800009C00011E00020E 000407000C07003C0780FE1FF0>22 18 1 0 22]120 dc[<0FF0FE03C03801C03001C02001C060 01C04001E08000E08000E10000E10000E200007200007400007C00007800007000003000002000 002000004000004000708000F10000F10000E60000780000>23 26 0 8 22]121 dc[<0FFF800E 0700080E00180E00101C0010380010700000E00001C00001C0000382000702000E02001C040038 0400380C00703800FFF800>17 18 1 0 18]122 dc dfe /fi df[10 3 3 -7 15]45 dc[<00000200000600000600000C00000C0000180000300000300000600000600000C000 00C0000180000180000300000600000600000C00000C0000180000180000300000300000600000 C00000C0000180000180000300000300000600000C00000C000018000018000030000030000060 0000600000C00000800000>23 41 1 10 21]47 dc[<01FFFFC0003C01C0003800C00038008000 380080003800800070008000700080007020800070200000E0400000E0400000E0C00000FFC000 01C0800001C0800001C0800001C080000381000003800000038000000380000007000000070000 0007000000070000000F000000FFF00000>26 28 3 0 27]70 dc[<01FFCFFE003C01E0003801 C0003801C0003801C0003801C00070038000700380007003800070038000E0070000E0070000E0 070000FFFF0001C00E0001C00E0001C00E0001C00E0003801C0003801C0003801C0003801C0007 0038000700380007003800070038000F007800FFE7FF00>31 28 3 0 31]72 dc[<01FFC0003C 0000380000380000380000380000700000700000700000700000E00000E00000E00000E00001C0 0001C00001C00001C0000380000380000380000380000700000700000700000700000F0000FFE0 00>18 28 2 0 16]73 dc[<01FFE0003C00003800003800003800003800007000007000007000 00700000E00000E00000E00000E00001C00001C00001C00001C000038008038008038008038010 0700100700300700600700E00E03C0FFFFC0>21 28 3 0 26]76 dc[<01FE0007F8003E000780 002E000F00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E 00008E011C00008E011C00008E021C00008E021C00010704380001070438000107083800010710 38000207107000020720700002072070000207407000040740E000040780E000040700E0000C07 00E0001C0601E000FF861FFC00>37 28 3 0 37]77 dc[<01FFFC00003C070000380380003801 C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0 380001FFE00001C0000001C0000001C00000038000000380000003800000038000000700000007 00000007000000070000000F000000FFE00000>26 28 3 0 28]80 dc[<000F8400304C00403C 00801801001803001803001806001006001006000007000007000003E00003FC0001FF00007F80 0007C00001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC1800 83E000>22 30 3 1 23]83 dc[<03CC063C0C3C181C3838303870387038E070E070E070E070E0 E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<3F00070007000E000E000E000E001C001C 001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0C1C061806300 3C00>13 29 5 0 19]98 dc[<01F007080C08181C3838300070007000E000E000E000E000E000 E008E010602030C01F00>14 18 5 0 19]99 dc[<01E007100C1018083810701070607F80E000 E000E000E000E000E0086010602030C01F00>13 18 5 0 19]101 dc[<0003C0000670000C7000 1C60001C00001C0000380000380000380000380000380003FF8000700000700000700000700000 700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00003800003800003 8000030000030000070000C60000E60000CC0000780000>20 37 -1 8 13]102 dc[<01800380 010000000000000000000000000000001C002600470047008E008E000E001C001C001C00380038 00710071007100720072003C00>9 28 4 0 13]105 dc[<3C1E0780266318C04683A0E04703C0 E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E0388380E 0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[<3C3C0026460046870047 07008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038388070 1900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C380C300E700E700EE01CE01CE01CE0 18E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07870004D98008E0C008E0C011C0E0 11C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C000E7000 0E00000E00001C00001C00001C00001C00003C0000FF8000>19 26 1 8 21]112 dc[<3C3C26C2 468747078E068E000E000E001C001C001C001C00380038003800380070003000>16 18 4 0 18] 114 dc[<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C001C 001C001C00384038403840388019000E00>11 26 3 0 14]116 dc[<1E03002707004707004707 00870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C59 00078E00>17 18 4 0 22]117 dc[<070E0019910010E38020E38041C30041C00001C00001C000 038000038000038000038000070200670200E70400CB04008B080070F000>17 18 3 0 19]120 dc[<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007F000 70007000E0E0C0E1C0818047003C00>16 26 4 8 20]121 dc dfe /fj df[<001FE02000FFF8 E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC000000FC00 0000FC000000FC000000FC000000FC000000FC000000FC0000007C0000607E0000603E0000603E 0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE000>27 28 3 0 34]67 dc[31 28 2 0 37]68 dc[27 28 2 0 33]80 dc[33 28 2 0 36]82 dc[<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007F FE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F0 01C0FC03C0EFFF0083FC00>20 28 3 0 27]83 dc[<7FFFFFE07FFFFFE0781F81E0701F80E060 1F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000 001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F800007FFFE0007FFFE00>28 28 2 0 33]84 dc[32 28 2 0 37]85 dc[<0FF8001C1E 003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807 C0780BC03E13F80FE1F8>21 18 1 0 23]97 dc[<03FC000E0E001C1F003C1F00781F00780E00 F80000F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F800>17 18 2 0 21]99 dc[<000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001 F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801 F07801F03C01F01C03F00F0FFE03F9FE>23 29 2 0 27]100 dc[<01FC000F07001C03803C01C0 7801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F0380 01FC00>19 18 1 0 22]101 dc[24 29 1 0 27]104 dc[<1E003F003F 003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F00 1F001F001F001F001F001F00FFE0FFE0>11 30 1 0 14]105 dc[24 18 1 0 27]110 dc[23 26 1 8 27]112 dc[<0300030003000300070007000F00 0F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F0> 14 26 1 0 19]116 dc[22 18 1 0 25]118 dc dfe /fk df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0 FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E00 00380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0 >21 32 3 0 28]50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F 03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E 00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[ <0000E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187 E00307E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007 E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<0003FE0080001FFF81 8000FF01E38001F8003F8003E0001F8007C0000F800F800007801F800007803F000003803F0000 03807F000001807E000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00 000000FE00000000FE00000000FE000000007E000000007E000001807F000001803F000001803F 000003801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC000 0003FE0000>33 34 3 0 40]67 dc[37 34 2 0 43]68 dc[29 34 2 0 34]76 dc[32 34 2 0 38]80 dc[<7FFFFFFF807FFFFFFF807E03F80F8078 03F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0 C003F800C00003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF800>34 34 2 0 39]84 dc[38 34 2 0 43]85 dc[<07FC001FFF 803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01 F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FF8007FFE00F83F01F03 F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00 003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000003E00 00003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E 0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC00 3E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F 83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01F07C00 F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00 300FC07003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F87E0 0F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C 03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801F FFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001 FF00>24 33 2 11 28]103 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C000000000000000000000000000000FF00 FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FF E0FFE0>11 36 2 0 16]105 dc[26 35 2 0 30]107 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E0 1E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C 7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F006007 00E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E003 80E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<018000018000018000018000 0380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C300 03FE0000F800>17 32 1 0 22]116 dc[37 22 1 0 40]119 dc[27 32 1 10 30 ]121 dc dfe /fl df[<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700FFFF E01C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1F E0>22 23 0 0 21]11 dc[<00FC000782000E07001C07001C02001C00001C00001C00001C0000 FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 FF1FE0>19 23 0 0 20]12 dc[<00FC7E000703C1000E0783801C0703801C0701001C0700001C 0700001C0700001C070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C070380 1C0703801C0703801C0703801C0703801C0703801C070380FF1FCFF0>28 23 0 0 29]14 dc[< 00FC7F800703C3800E0783801C0703801C0703801C0703801C0703801C0703801C070380FFFFFF 801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C07 03801C0703801C070380FFBFFFF0>28 23 0 0 29]15 dc[<01C0000320000610000E10000E10 000E10000E20000E40000E80000780FE0700380700200B802013804031C04061E08060E100E071 00E03A00E01C02700E0238370C0FC1F8>23 23 1 0 27]38 dc[<60F0F070101020204040>4 10 3 -13 10]39 dc[<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C 040201>8 34 3 9 14]40 dc[<8040203018180C0C0E060606070707070707070707070606060E 0C0C181830204080>8 34 2 9 14]41 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<000800180030003000300060 0060006000C000C000C0018001800180030003000600060006000C000C000C0018001800180030 0030003000600060006000C000C000>13 33 2 8 18]47 dc[<07C018303018701C600C600CE0 0EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[ <03000700FF000700070007000700070007000700070007000700070007000700070007000700 07007FF0>12 21 2 0 18]49 dc[<0F8030E040708030C038E0384038003800700070006000C0 0180030006000C08080810183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C 001C00180038006007E000300018000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18] 51 dc[<00300030007000F001F001700270047008701870107020704070C070FFFE0070007000 700070007003FE>15 21 1 0 18]52 dc[<20303FE03FC0240020002000200020002F8030E020 700030003800384038E038E0388030406020C01F00>13 21 2 0 18]53 dc[<01F00608080C18 1C301C70006000E000E3E0EC30F018F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<40007FFE7FFC7FF8C008801080200040008000800100010003000200060006000E 000E000E000E000E000400>15 22 2 0 18]55 dc[<07E018302018600C600C700C78183E101F 600FC00FF018F8607C601EC00EC006C006C004600C38300FE0>15 21 1 0 18]56 dc[<07C018 3030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C70187018603020C01F80 >15 21 1 0 18]57 dc[<60F0F06000000000000060F0F060>4 14 3 0 10]58 dc[<00100000 3800003800003800005C00005C00005C00008E00008E00008E0001070001070003078002038002 038007FFC00401C00401C00800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[21 23 1 0 25]66 dc[< 00FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E00000 E00000E000106000107000103000203800201C00400E008003830000FC00>20 23 2 0 25]67 dc[23 23 1 0 27] 68 dc[21 23 1 0 24]69 dc[20 23 1 0 23]70 dc[<007E080381980600580C0038180018300018700008700008E00008E00000E00000 E00000E00000E003FEE000387000387000383000381800380C00380600380380D8007F08>23 23 2 0 28]71 dc[23 23 1 0 26]72 dc[11 23 1 0 13]73 dc[<0FFC00E000E000E000E000E0 00E000E000E000E000E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F00>14 23 2 0 18]74 dc[24 23 1 0 27]75 dc[19 23 1 0 22]76 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303 000E01C01C00E0380070300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE000 1C7000387000383000303800701C00E00E01C003030000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[<00 FC000303000E01C01C00E0380070300030700038700038E0001CE0001CE0001CE0001CE0001CE0 001CE0001C6000187000383000303878701C84E00E85C003830000FE0400020400030400038C00 01F80001F80000F0>22 29 2 6 27]81 dc[24 23 1 0 26]82 dc[<0FC4302C601C400CC004C004C004E0007000 7F003FE00FF801FC001C000E0006800680068006C004E008D81087E0>15 23 2 0 20]83 dc[< 7FFFF8603818403808403808803804803804803804003800003800003800003800003800003800 00380000380000380000380000380000380000380000380000380007FFC0>22 23 1 0 25]84 dc[23 23 1 0 26] 85 dc[23 23 1 0 26]86 dc[33 23 1 0 36]87 dc[23 23 1 0 26]88 dc[25 23 0 0 26]89 dc[17 23 2 0 22] 90 dc[6 33 3 8 10]91 dc[6 33 0 8 10]93 dc[<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E >16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000E000E0006000700830081830 07C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E 0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E 0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8E000E000E000600070083010 183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C001C001C001C00FF801C001C00 1C001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F9E18E33060 707070707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE0>16 21 1 7 18]103 dc[ 19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF>8 23 0 0 10]105 dc[18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[<07C018303018600C600C E00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[<07C2001C2600381E00700E00600E00E00E 00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E 00007FC0>18 20 1 6 19]113 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E080608060C060 E0C09F00>11 14 1 0 14]115 dc[<080008000800180018003800FF8038003800380038003800 3800380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[16 14 1 0 19]118 dc[22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc[13 14 1 0 16]122 dc[17 1 0 -8 18] 123 dc dfe /fm df[<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E 01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C000 0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0 000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E0001C1800301800703C00E03C00E01800E 00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[ <007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C07FCFF8>21 29 0 0 23]13 dc[<003F07E00001C09C18000380F018000701F0 3C000E01E03C000E00E018000E00E000000E00E000000E00E000000E00E000000E00E00000FFFF FFFC000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C007FC7FCFF80>33 29 0 0 35]14 dc[<6060F0F0F8F8686808080808080810101010 202040408080>13 12 1 -17 21]34 dc[<0F0000C0188000C030600380703807006027FB00E0 100600E0100C00E0100C00E0101800E0101800E0103000E0106000602060007020C00030418000 188180000F0303C00006062000060C10000C1C0800181808001838040030380400603804006038 0400C0380400C03804018038040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[<00E00000019000000308000003080000070800000708000007080000070800000710 000007100000072000000740000003C03FE003800F00038006000380040005C0040009C0080010 E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E007002070078040 3009C0401830E18007C03E00>27 31 2 1 32]38 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<004000800100020006000C000C0018001800300030007000600060006000E000 E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C 000C0006000200010000800040>10 42 3 11 16]40 dc[<800040002000100018000C000C0006 00060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C001C0 018001800180038003000300060006000C000C0018001000200040008000>10 42 2 11 16]41 dc[<60F0F0701010101020204080>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[< 60F0F060>4 4 4 0 12]46 dc[<00010003000600060006000C000C000C001800180018003000 3000300060006000C000C000C0018001800180030003000300060006000C000C000C0018001800 1800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C 700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30 0C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C7000700070007000700070007 0007000700070007000700070007000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C 00380070006000C00180030006010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E0 1830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F70 0FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C 00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C 00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03FC020002000200020002000200023E024302818301C200E000E000F 000F000F600FF00FF00FF00F800E401E401C2038187007C0>16 29 2 1 21]53 dc[<00F0030C 06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E00760 0760077006300E300C18180C3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF007FFF0040 020080040080040080080000100000100000200000600000400000C00000C00001C00001800001 8000038000038000038000038000078000078000078000078000078000078000030000>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC30 7E601E600FC007C003C003C003C00360026004300C1C1007E0>16 29 2 1 21]56 dc[<03C00C 301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006 000E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F0600000000000000000 000060F0F060>4 18 4 0 12]58 dc[<000600000006000000060000000F0000000F0000000F00 000017800000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080 F0000080F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004 001E000C001F001E001F00FF80FFF0>28 29 1 0 31]65 dc[24 28 2 0 29] 66 dc[<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000 807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000 0000700000807800008078000080380000801C0001001C0001000E000200070004000180080000 E03000001FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F808000E0618001801980070007800E000380 1C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F00000 00F0000000F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C00 07800E00078007000B800180118000E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[< FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F00FFF0>12 28 1 0 15]73 dc[<1FFF00F800780078007800 780078007800780078007800780078007800780078007800780078007800787078F878F878F878 F0F040E021C01F00>16 29 1 1 21]74 dc[28 28 2 0 32]75 dc[21 28 2 0 26] 76 dc[33 28 2 0 38]77 dc[26 28 2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E001C0007003C000780380003807800 03C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0 0001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800 00E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[28 29 2 1 31]82 dc[<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F80000 7C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0 C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01C0600F 00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 000F0000000F0000000F0000000F0000001F800003FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[40 29 1 1 43]87 dc[<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F040000078 8000007D8000003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E00000 21E0000041F00000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF0 >28 28 1 0 31]88 dc[30 28 0 0 31]89 dc[<7FFFF07C01F07001E06003C06003C0400780400F8040 0F00401E00001E00003C00007C0000780000F00000F00001E00003E00003C0100780100780100F 00101F00301E00203C00203C00607800E0F803E0FFFFE0>20 28 2 0 25]90 dc[7 41 4 10 12]91 dc[<08081010202040404040808080808080B0B0F8F878783030>13 12 6 -17 21 ]92 dc[7 41 0 10 12]93 dc[<1FC000307000783800781C00301C00001C00001C0001 FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F8700>18 18 2 0 21] 97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E0 00E000E000E000E00060007004300418080C3007C0>14 18 2 0 18]99 dc[<003F0000070000 070000070000070000070000070000070000070000070000070003E7000C1700180F0030070070 0700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007 C7E0>19 29 2 0 23]100 dc[<03E00C301818300C700E6006E006FFFEE000E000E000E0006000 7002300218040C1803E0>15 18 1 0 18]101 dc[<00F8018C071E061E0E0C0E000E000E000E00 0E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007F E0>15 29 0 0 13]102 dc[<00038003C4C00C38C01C3880181800381C00381C00381C00381C00 1818001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0 C000C0C000C06001803003001C0E0007F800>18 28 1 9 21]103 dc[ 20 29 1 0 23]104 dc[<18003C003C0018000000000000000000000000000000FC001C001C00 1C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80>9 29 1 0 12]105 dc[<00C001E001E000C000000000000000000000000000000FE000E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E00>11 37 -3 8 13]106 dc[19 29 1 0 22]107 dc[9 29 1 0 12]108 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0000E1C0018 0600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060018070038030030018 06000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00 300F00700700700700E00700E00700E00700E00700E00700E00700600700700700300F00180F00 0C370007C700000700000700000700000700000700000700000700003FE0>19 26 2 8 22]113 dc[ 13 18 1 0 16]114 dc[<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018 C018E010D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00FFE01C00 1C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C0>12 26 1 0 16] 116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[<7F8FF00F03800F030007020003840001C8 0001D80000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC70386038407040F040E041C003C0038007 000F040E041C043C0C380870087038FFF8>14 18 1 0 18]122 dc dfe /fn df[<0C0003000F 803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E000000 0E0000000E0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F 8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE00 1FC0FC001FC078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF8000>27 39 3 0 34]53 dc[<0007F000003FFC0000FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F80 3F803F801F003F8000007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FF C03E00FFC03F00FF801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE0 7F001FE07F001FE03F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF0 00003FC000>27 39 3 0 34]54 dc[<000003800000000007C00000000007C0000000000FE000 0000000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF800000000 3FF80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00 000001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E 003FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF8 0000780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C0 0000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE>47 41 2 0 52]65 dc[< 00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC00 003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC000000380 7FC0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF8000 000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F8000000000 7F80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF000 00070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC000 0003FFFF000000003FF80000>41 41 4 0 50]67 dc[48 41 3 0 52]82 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000 003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80 FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E00 7F0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000 007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003 F8007F0003F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00 03F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F 8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE000 01FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007 E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F80 00E01F8000E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007 F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F0 0007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF 807FFF807FFF80>24 42 2 0 21]102 dc[<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F 007E107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC00 0FC1F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF 800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C00 01F03C0001E01F0007C00FC01F8003FFFE00007FF000>30 40 2 13 34]103 dc[<07000FC01F E03FE03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFF FEFFFE>15 43 3 0 20]105 dc[31 42 2 0 36]107 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[ 33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E0 7F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007 F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003F E000>29 27 2 0 34]111 dc[24 27 2 0 28]114 dc[<03FE300FFFF01E03F03800F0 700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC 0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FF FFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F80> 21 38 1 0 27]116 dc[33 27 3 0 38]117 dc [47 27 1 0 50]119 dc dfe end TeXDict begin @letter %%Page: 8 8 bop 21 47 a 1909 2 v 20 92 a 2 46 v 579 w 2 46 v 965 79 a fj(TCP)1429 92 y 2 46 v 1626 79 a(UDP)1928 92 y 2 46 v 20 138 a 2 46 v 579 w 2 46 v 2 46 v 664 124 a fd(Throughput)203 b(Latency)14 b(\(ms\))1429 138 y 2 46 v 1568 124 a (Latency)f(\(ms\))1928 138 y 2 46 v 20 184 a 2 46 v 579 w 2 46 v 791 170 a (Receiv)q(e)1429 184 y 2 46 v 499 w 2 46 v 20 229 a 2 46 v 579 w 2 46 v 803 216 a(Bu\013er)1429 229 y 2 46 v 499 w 2 46 v 20 275 a 2 46 v 579 w 2 46 v 822 261 a(Size)122 b(Message)14 b(size)g(\(b)o(ytes\))1429 275 y 2 46 v 1509 261 a (Message)g(size)f(\(bytes\))1928 275 y 2 46 v 20 321 a 2 46 v 579 w 2 46 v 612 307 a(\(KB/sec\))44 b(\(KB\))68 b(1)54 b(100)36 b(512)f(1024)g(1460)1429 321 y 2 46 v 1466 307 a(1)54 b(100)35 b(512)h(1024)f(1472)1928 321 y 2 46 v 21 322 a 1909 2 v 20 368 a 2 46 v 33 354 a fc(DECstation)15 b(5000/200)599 368 y 2 46 v 330 w 2 46 v 500 w 2 46 v 499 w 2 46 v 20 414 a 2 46 v 148 400 a fd(Mac)o(h)e (2.5)g(In-Kernel)599 414 y 2 46 v 651 400 a(1070)108 b(24)929 414 y 2 46 v 942 400 a(1.40)24 b(1.73)g(3.05)34 b(4.56)44 b(6.04)1429 414 y 2 46 v 1442 400 a (1.45)24 b(1.74)g(3.05)34 b(4.56)43 b(5.88)1928 414 y 2 46 v 20 459 a 2 46 v 129 446 a(Ultrix)14 b(4.2A)f(In-Kernel)599 459 y 2 46 v 661 446 a(996)117 b (16)929 459 y 2 46 v 942 446 a(1.52)24 b(1.89)g(3.50)34 b(4.78)44 b(6.13)1429 459 y 2 46 v 1442 446 a(1.52)24 b(1.81)g(3.29)34 b(4.69)43 b(6.05)1928 459 y 2 46 v 20 505 a 2 46 v 131 491 a(Mach)13 b(3.0+UX)f(Server)599 505 y 2 46 v 661 491 a(740)117 b(24)929 505 y 2 46 v 942 491 a(3.64)24 b(4.20)g(5.90)34 b(7.82) 44 b(9.73)1429 505 y 2 46 v 1442 491 a(3.61)24 b(4.04)g(5.89)34 b(7.99)43 b (9.84)1928 505 y 2 46 v 20 551 a 2 46 v 80 537 a(Mach)13 b(3.0+UX)f(Library-I\ PC)599 551 y 2 46 v 661 537 a(910)117 b(24)929 551 y 2 46 v 942 537 a(1.69)24 b(2.09)g(3.43)34 b(5.09)44 b(6.63)1429 551 y 2 46 v 1442 537 a(1.40)24 b(1.77) g(3.08)34 b(4.71)43 b(6.14)1928 551 y 2 46 v 20 596 a 2 46 v 72 583 a(Mac)o (h)13 b(3.0+UX)g(Library-SHM)599 596 y 2 46 v 651 583 a(1076)99 b(120)929 596 y 2 46 v 942 583 a(1.82)24 b(2.29)g(3.66)34 b(5.32)44 b(6.73)1429 596 y 2 46 v 1442 583 a(1.34)24 b(1.68)g(2.95)34 b(4.59)43 b(5.95)1928 596 y 2 46 v 20 642 a 2 46 v 33 628 a(Mac)o(h)13 b(3.0+UX)g(Library-SHM-IPF)599 642 y 2 46 v 651 628 a(1088)99 b(120)929 642 y 2 46 v 942 628 a(1.72)24 b(2.11)g(3.44)34 b(5.0\ 9)44 b(6.56)1429 642 y 2 46 v 1442 628 a(1.23)24 b(1.57)g(2.83)34 b(4.41)43 b (5.79)1928 642 y 2 46 v 21 644 a 1909 2 v 20 689 a 2 46 v 33 676 a fc(Gatew)o (a)o(y)15 b(486)599 689 y 2 46 v 330 w 2 46 v 500 w 2 46 v 499 w 2 46 v 20 735 a 2 46 v 148 721 a fd(Mac)o(h)e(2.5)g(In-Kernel)599 735 y 2 46 v 661 721 a (457)127 b(8)929 735 y 2 46 v 942 721 a(2.08)24 b(2.69)g(5.45)34 b(8.78)g(12.\ 05)1429 735 y 2 46 v 1442 721 a(1.83)24 b(2.44)g(5.19)34 b(8.51)g(11.41)1928 735 y 2 46 v 20 781 a 2 46 v 157 767 a(386BSD)14 b(In-Kernel)599 781 y 2 46 v 661 767 a(320)127 b(8)929 781 y 2 46 v 942 767 a(2.71)24 b(3.64)g(6.24)40 b (NA)53 b(NA)1429 781 y 2 46 v 1442 767 a(2.63)24 b(3.49)g(6.04)34 b(9.54)g (12.50)1928 781 y 2 46 v 20 826 a 2 46 v 131 813 a(Mach)13 b(3.0+UX)f(Server) 599 826 y 2 46 v 661 813 a(415)117 b(16)929 826 y 2 46 v 942 813 a(4.09)24 b (4.88)g(7.76)h(11.30)f(14.29)1429 826 y 2 46 v 1442 813 a(3.96)g(4.67)g(7.86) g(11.65)h(15.00)1928 826 y 2 46 v 20 872 a 2 46 v 87 858 a(Mac)o(h)13 b(3.0+B\ NR2SS)h(Server)599 872 y 2 46 v 661 858 a(382)117 b(12)929 872 y 2 46 v 942 858 a(3.88)24 b(4.70)g(8.00)40 b(NA)53 b(NA)1429 872 y 2 46 v 1442 858 a(4.64) 24 b(5.37)g(8.95)g(13.23)h(16.84)1928 872 y 2 46 v 20 918 a 2 46 v 80 904 a (Mach)13 b(3.0+UX)f(Library-IPC)599 918 y 2 46 v 661 904 a(469)117 b(24)929 918 y 2 46 v 942 904 a(2.49)24 b(3.10)g(5.84)34 b(9.25)g(14.09)1429 918 y 2 46 v 1442 904 a(2.12)24 b(2.68)g(5.41)34 b(8.74)g(11.66)1928 918 y 2 46 v 20 963 a 2 46 v 72 950 a(Mac)o(h)13 b(3.0+UX)g(Library-SHM)599 963 y 2 46 v 661 950 a (503)117 b(24)929 963 y 2 46 v 942 950 a(2.38)24 b(3.07)g(5.79)34 b(9.15)g (12.58)1429 963 y 2 46 v 1442 950 a(2.02)24 b(2.59)g(5.30)34 b(8.64)g(11.62) 1928 963 y 2 46 v 21 965 a 1909 2 v 0 1039 a fm(T)m(able)12 b(2:)17 b fh(This) c(table)g(sho)o(ws)g(TCP)g(throughput)h(and)e(latency)m(,)h(and)f(UDP)h(laten\ cy)h(for)e(v)n(arious)g(system)h(con\014gurations)0 1089 y(and)k(message)g (sizes.)30 b(Throughput)17 b(for)g(UDP)h(is)f(not)g(giv)n(en)h(as)g(this)f (is)g(tied)h(to)f(windo)n(wing)g(and)g(ac)o(kno)o(wledgemen)n(t)0 1139 y(stra\ tegies)d(as)f(m)n(uc)o(h)g(as)g(to)g(latency)m(.)18 b(The)13 b(entries)g(lab) q(eled)g(NA)h(are)f(b)q(ecause)i(386BSD)d(and)h(BNR2SS)g(ha)o(v)o(e)g(a)g(bug) g(that)0 1189 y(preven)o(ts)j(them)f(from)g(sending)h(large)f(TCP)i(pac)o(k)n (ets.)26 b(The)16 b(p)q(erformance)g(of)f(the)i(library-based)e(implemen)l (tations)h(is)0 1239 y(comparable)e(to)h(the)h(nativ)o(e)g(in-k)n(ernel)g(imp\ lemen)l(tations.)23 b(Although)15 b(the)h(i486)e(pro)q(cessor)j(is)e(comparab\ le)g(in)g(p)q(erfor-)0 1289 y(mance)i(to)g(the)h(R3000,)e(the)i(Gatew)o(a)o (y's)f(lo)n(w-p)q(erformance)g(Ethernet)i(card)f(\(transfers)h(are)f(done)f (8)g(bits)h(at)f(a)g(time\))0 1338 y(severely)c(limits)e(its)j(throughput.)k (Both)13 b(the)h(library)f(and)g(the)g(server-based)i(implemen)l(tations)e (on)g(the)h(Gatew)n(a)o(y)f(ha)o(v)o(e)0 1388 y(lo)n(w)o(er)h(latency)g(than) f(the)i(in-k)n(ernel)f(v)o(ersion)g(b)q(ecause)h(of)e(ine\016ciencies)h(in)f (the)h(w)o(a)o(y)f(that)h(the)g(386BSD)f(k)n(ernel)i(handles)0 1438 y(netw)n (ork)i(in)n(terrupts)i(and)d(scheduling.)26 b(The)17 b(library-based)f(implem\ en)l(tations)h(labeled)g(IPC,)g(SHM,)f(and)h(SHM-IPF)0 1488 y(re\015ect)f(run\ s)e(using)g(successiv)q(ely)f(modi\014ed)h(v)o(ersions)g(of)g(the)g(k)o(ernel\ 's)g(netw)o(ork)f(pack)n(et)i(\014lter)f(in)n(terface.)0 1620 y @beginspecial @setspecial @endspecial 42 x fm(pac)o(k)o(et)j(copies,)g(as)f(an)g(incoming)e (pack)n(et)j(is)f(\014rst)i(copied)0 1712 y(from)11 b(the)i(Ethernet)i(driv)o (er)e(to)g(an)f(in)o(ternal)h(k)n(ernel)h(bu\013er)0 1762 y(b)q(efore)21 b (it)f(is)g(run)g(through)h(the)f(pack)n(et)h(\014lter.)37 b(Conse-)0 1811 y (quen)o(tly)l(,)15 b(the)g(c)o(hange)g(has)g(little)f(e\013ect)i(on)f(single-\ pac)o(k)n(et)0 1861 y(latencies.)22 b(The)16 b(c)o(hange)f(is)g(more)f(e\013e\ ctive)h(for)g(through-)0 1911 y(put,)k(since)f(the)h(sc)o(heduling)f(o)n(v)o (erhead)h(of)e(pac)o(k)o(et)i(deliv-)0 1961 y(ery)e(is)f(amortized)f(o)n(v)o (er)i(m)m(ultiple)f(pac)o(k)o(ets.)25 b(The)17 b(shared)0 2011 y(memory)9 b (in)o(terface)k(deliv)n(ers)g(1076)e(KB/sec)i(on)f(the)g(DEC-)0 2060 y(statio\ n)h(con\014guration,)g(whic)o(h)h(is)f(an)h(18%)f(impro)m(v)n(emen)o(t)0 2110 y(in)j(throughput)g(relativ)o(e)h(to)f(the)h(IPC-based)g(implemen-)0 2160 y (tation,)d(and)h(sligh)n(tly)g(b)q(etter)h(than)f(the)h(in-k)n(ernel)g(imple-) 0 2210 y(men)n(tation.)42 2305 y(W)l(e)i(can)h(eliminate)d(the)j(extra)g(cop) o(y)f(in)n(to)g(the)h(k)o(ernel)0 2355 y(bu\013er)e(b)o(y)f(more)f(closely)h (in)o(tegrating)g(the)h(device)g(driv)n(er)0 2405 y(and)g(the)g(pac)o(k)o(et) h(\014lter)f(\()p fi(Libr)n(ary-SHM-IPF)p fm(\).)f(A)h(pack)n(et)0 2455 y(\ \014lter)i(program)e(for)i(In)o(ternet)h(proto)q(cols)f(t)o(ypically)f(only)0 2504 y(examines)12 b(the)i(pac)o(k)o(et)f(header)h(to)f(determine)g(the)h(rec\ eiv-)0 2554 y(ing)i(endp)q(oin)n(t.)26 b(W)l(e)16 b(can)h(defer)g(cop)o(ying) e(the)i(rest)h(of)d(the)0 2604 y(pac)o(k)o(et)23 b(un)o(til)e(the)i(\014nal)f (destination)g(has)g(b)q(een)i(deter-)0 2654 y(mined.)33 b(By)20 b(deferring,) h(the)f(pac)o(k)o(et)g(\014lter)g(can)g(cop)o(y)f(a)0 2704 y(pac)o(k)o(et's)c (data)f(directly)h(from)e(the)j(device)f(in)o(terface)h(in)n(to)1006 1620 y @beginspecial @setspecial @endspecial 42 x(the)21 b(receiver's)g(address)h (space.)39 b(The)21 b(shared)g(memory)1006 1712 y(in)o(terface)16 b(com)n(bin\ ed)g(with)f(the)h(in)o(tegrated)g(pack)n(et)h(\014lter)1006 1762 y(deliv)n (ers)g(1088)e(KB/sec)j(on)e(the)g(DECstations,)g(whic)o(h)g(is)1006 1811 y (ab)q(out)i(2%)f(b)q(etter)i(than)e(the)i(in-k)n(ernel)f(proto)q(col.)29 b (This)1006 1861 y(modi\014cation)16 b(has)h(a)f(more)g(dramatic)f(e\013ect)j (on)f(latency)1006 1911 y(since)e(the)g(n)o(um)n(b)q(er)g(of)f(data)g(copies) h(on)f(the)h(critical)f(path)1006 1961 y(is)19 b(the)h(same)e(for)h(the)g(k)o (ernel-based)h(and)f(library-based)1006 2011 y(proto)q(col)12 b(implemen)l (tations.)17 b(The)12 b(in)o(tegrated)g(pac)o(k)o(et)h(\014l-)1006 2060 y(ter) 19 b(is)g(device)g(and)f(mac)n(hine-dep)q(endent,)h(and)g(w)n(e)g(ha)o(v)o (e)1006 2110 y(not)14 b(implemen)l(ted)h(it)e(on)h(the)g(Gatew)o(a)o(y)l(.) 1006 2228 y fk(4.2)56 b(Changing)19 b(the)f(so)r(c)n(k)n(et)g(in)o(terface) 1006 2305 y fm(A)12 b(simple,)f(but)i(e\013ective)f(application-speci\014c)h (optimiza-)1006 2355 y(tion)i(can)h(impro)m(v)o(e)g(throughput)g(and)g(latenc\ y)l(.)24 b(As)16 b(men-)1006 2405 y(tioned)g(in)f(Section)h(3.2,)e(when)i(an) f(application)g(program)1006 2455 y(sends)f(and)f(receives)h(data)e(using)h (the)g(so)r(c)o(k)o(et)g(in)o(terface,)g(it)1006 2504 y(sp)r(eci\014es)i(a)f (bu\013er)h(from)e(whic)n(h)i(outgoing)e(or)h(in)n(to)g(whic)o(h)1006 2554 y (incoming)d(data)h(should)h(b)q(e)g(placed)g(\(copied\).)18 b(By)13 b(chang-) 1006 2604 y(ing)j(the)g(send)h(and)f(receive)g(in)o(terface)h(to)f(allo)m(w)g (the)h(pro-)1006 2654 y(to)q(col)d(and)h(the)g(application)e(to)h(share)h(bu\ \013ers,)h(this)e(cop)o(y)1006 2704 y(can)g(b)q(e)h(eliminated.)p eop %%Page: 9 9 bop 0 51 a 1960 2 v -1 97 a 2 46 v 745 w 2 46 v 1078 83 a fj(TCP)1510 97 y 2 46 v 1682 83 a(UDP)1959 97 y 2 46 v -1 142 a 2 46 v 745 w 2 46 v 2 46 v 803 129 a fd(Throughput)171 b(Latency)14 b(\(ms\))1510 142 y 2 46 v 1624 129 a (Latency)f(\(ms\))1959 142 y 2 46 v -1 188 a 2 46 v 745 w 2 46 v 927 174 a (Receiv)q(e)1510 188 y 2 46 v 449 w 2 46 v -1 234 a 2 46 v 745 w 2 46 v 939 220 a(Bu\013er)1510 234 y 2 46 v 449 w 2 46 v -1 279 a 2 46 v 745 w 2 46 v 958 266 a(Size)93 b(Message)14 b(size)g(\(b)o(ytes\))1510 279 y 2 46 v 1565 266 a (Message)g(size)f(\(bytes\))1959 279 y 2 46 v -1 325 a 2 46 v 745 w 2 46 v 754 311 a(\(KB/sec\))38 b(\(KB\))62 b(1)48 b(100)30 b(512)24 b(1024)18 b(1460) 1510 325 y 2 46 v 1545 311 a(1)48 b(100)29 b(512)24 b(1024)19 b(1472)1959 325 y 2 46 v 0 327 a 1960 2 v -1 372 a 2 46 v 9 359 a fc(DECstation)c(5000/200) 744 372 y 2 46 v 318 w 2 46 v 448 w 2 46 v 449 w 2 46 v -1 418 a 2 46 v 210 404 a fd(Mac)o(h)e(2.5)g(In-Kernel)744 418 y 2 46 v 793 404 a(1070)102 b(24) 1062 418 y 2 46 v 1072 404 a(1.40)18 b(1.73)g(3.05)23 b(4.56)k(6.04)1510 418 y 2 46 v 1520 404 a(1.45)18 b(1.74)h(3.05)j(4.56)27 b(5.88)1959 418 y 2 46 v -1 464 a 2 46 v 191 450 a(Ultrix)14 b(4.2A)f(In-Kernel)744 464 y 2 46 v 803 450 a (996)111 b(16)1062 464 y 2 46 v 1072 450 a(1.52)18 b(1.89)g(3.50)23 b(4.78)k (6.13)1510 464 y 2 46 v 1520 450 a(1.52)18 b(1.81)h(3.29)j(4.69)27 b(6.05) 1959 464 y 2 46 v -1 509 a 2 46 v 57 495 a(Mac)o(h)13 b(3.0+UX)g(Library-NEW) m(API-IPC)744 509 y 2 46 v 803 495 a(959)111 b(24)1062 509 y 2 46 v 1072 495 a (1.67)18 b(2.02)g(3.35)23 b(4.96)k(6.45)1510 509 y 2 46 v 1520 495 a(1.42)18 b (1.75)h(3.05)j(4.69)27 b(6.09)1959 509 y 2 46 v -1 555 a 2 46 v 48 541 a(Mac) o(h)13 b(3.0+UX)g(Library-NEW)m(API-SHM)744 555 y 2 46 v 793 541 a(1083)93 b (120)1062 555 y 2 46 v 1072 541 a(1.70)18 b(2.07)g(3.33)23 b(4.94)k(6.38)1510 555 y 2 46 v 1520 541 a(1.34)18 b(1.66)h(2.93)j(4.54)27 b(5.95)1959 555 y 2 46 v -1 601 a 2 46 v 9 587 a(Mac)o(h)14 b(3.0+UX)e(Library-NEW)m(API-SHM-IPF)744 601 y 2 46 v 793 587 a(1099)93 b(120)1062 601 y 2 46 v 1072 587 a(1.63)18 b (1.98)g(3.24)23 b(4.80)k(6.26)1510 601 y 2 46 v 1520 587 a(1.25)18 b(1.57)h (2.83)j(4.38)27 b(5.76)1959 601 y 2 46 v 0 602 a 1960 2 v 75 x fm(T)m(able)15 b(3:)22 b fh(This)15 b(table)h(sho)o(ws)g(the)h(e\013ect)g(that)f(a)g(mo)o (di\014ed)g(so)r(c)o(k)o(et)g(in)n(terface)h(has)f(on)g(throughput)g(and)g (latency)m(.)24 b(The)0 726 y(library)12 b(uses)i(a)f(new)g(application)e(pro\ gramming)e(in)o(terface)14 b(\(NEW)-5 b(API\))14 b(that)f(eliminates)e(a)h (redundant)h(cop)o(y)g(b)q(et)o(w)o(een)0 776 y(the)h(proto)r(col)f(stack)h (and)f(the)i(application.)0 946 y @beginspecial @setspecial @endspecial 42 988 a fm(T)l(able)10 b(3)f(compares)h(the)h(TCP)f(and)g(UDP)g(round)g(trip)g(la-) 0 1038 y(tencies)i(for)f(a)g(k)o(ernel-based)h(implemen)l(tation)f(of)f(the)i (con-)0 1088 y(v)o(en)o(tional)g(so)q(ck)n(et)i(in)n(terface)h(with)d(the)i (library-based)f(im-)0 1137 y(plemen)n(tation)d(using)g(the)g(modi\014ed)g (in)o(terface.)18 b(The)10 b(mod-)0 1187 y(i\014ed)20 b(in)n(terface)h(outp)q (erforms)f(the)g(k)o(ernel-based)h(imple-)0 1237 y(men)n(tation)14 b(for)g (large)g(pac)o(k)o(ets)h(where)h(cop)o(ying)e(costs)h(b)r(e-)0 1287 y(come)10 b(signi\014can)n(t.)17 b(F)m(or)11 b(TCP)f(throughput,)i(the)f(c)o(hange)g (is)0 1337 y(less)k(e\013ective)f(since)h(bandwidth)f(is)f(generally)h(con)o (trolled)0 1387 y(b)o(y)21 b(the)g(sp)r(eed)h(with)e(whic)o(h)h(the)g(receive\ r)h(can)f(pro)q(cess)0 1436 y(and)e(ac)o(kno)n(wledge)g(segmen)o(ts.)33 b(The) 19 b(copies)h(eliminated)0 1486 y(b)o(y)14 b(the)i(in)n(terface)g(c)o(hange)f (o)q(ccur)h(after)f(the)g(segmen)o(t)g(has)0 1536 y(b)q(een)21 b(pro)q(cessed) h(b)o(y)d(TCP)m(,)g(and)g(are)h(not)g(on)f(the)h(criti-)0 1586 y(cal)e(path)f (for)h(throughput.)30 b(User-user)20 b(throughput)e(in-)0 1636 y(creases)e (b)o(y)d(5%)g(from)f(910)g(KB/sec)k(to)d(959)g(KB/sec)i(with)0 1685 y(the)21 b (IPC-based)g(pack)n(et)g(\014lter)g(in)o(terface.)39 b(When)21 b(used)0 1735 y (with)13 b(the)g(more)f(e\016cient)h(in)n(tegrated)h(pac)o(k)o(et)g(\014lter,) f(user-)0 1785 y(user)g(throughput)f(increases)h(from)d(1088)h(KB/sec)i(to)f (1099)0 1835 y(KB/sec.)0 2083 y fk(4.3)56 b(Latency)17 b(breakdo)n(wn)0 2205 y fm(On)e(the)h(DECstation)f(5000/200s,)e(w)o(e)i(ha)o(v)n(e)h(determined)0 2255 y(the)e(time)e(sp)r(en)o(t)i(in)f(the)h(v)m(arious)f(proto)q(col)h(la)n(y)n (ers)h(using)e(a)0 2305 y(high-resolution)f(timer.)17 b(T)l(able)c(4)g(compar\ es)f(the)i(a)n(v)o(erage)0 2355 y(time)c(sp)r(en)o(t)i(in)g(eac)o(h)g(la)n (y)o(er)g(of)f(the)i(TCP)f(and)f(UDP)h(proto-)0 2405 y(col)j(stacks)g(for)g (our)g(library)g(\()p fi(SHM-IPF)p fm(\),)h(the)f(Mach)g(2.5)0 2455 y(k)o(ern\ el,)g(and)g(CMU's)h(UNIX)f(server.)23 b(Eac)o(h)15 b(column)f(cor-)0 2504 y (resp)r(onds)f(to)g(a)f(single)g(trial)g(of)g(50000)g(round)g(trips)h(run)g (in)0 2554 y(single-user)k(mode)g(on)g(a)f(priv)n(ate)h(net)o(w)o(ork.)26 b (Since)18 b(TCP)0 2604 y(sends)h(extra)g(ac)o(kno)n(wledgemen)n(t)g(segmen)n (ts)f(in)g(addition)0 2654 y(to)12 b(the)h(data)f(segmen)n(ts,)h(the)g(n)o (um)m(b)q(ers)h(for)d(TCP)i(only)e(ap-)0 2704 y(pro)o(ximate)h(the)j(critical) e(path)h(latency)m(.)1006 946 y @beginspecial @setspecial @endspecial 42 x fj (Send)g(path)1006 1086 y fm(The)k(\014rst)g(four)e(lines)h(de\014ne)h(the)g (send)g(path.)28 b(The)17 b(\014rst)1006 1136 y(line,)11 b fg(Entry/copyin)p fm(,)e(is)j(the)g(time)e(required)j(to)f(en)o(ter)g(the)1006 1186 y(so)q(ck)n (et)k(la)n(y)n(er)g(co)q(de)f(and)f(con)o(v)o(ert)h(the)h(send)f(bu\013er)g (in)o(to)f(a)1006 1236 y(link)n(ed)g(list)g(of)f fg(mbuf)g fm(data)h(structur\ es)i(\(the)f(in)n(ternal)f(unit)1006 1286 y(of)h(memory)f(allo)o(cation)i(for) f(the)h(proto)r(cols\).)23 b(Entry)16 b(is)f(a)1006 1335 y(pro)q(cedure)i(cal\ l)c(for)h(the)h(library-based)g(proto)q(col,)f(a)g(trap)1006 1385 y(for)20 b (the)h(k)n(ernel-based)h(proto)q(col,)f(and)f(a)f(trap)i(follo)m(w)n(ed)1006 1435 y(b)o(y)d(an)g(RPC)g(for)g(the)h(server-based)g(proto)r(col.)30 b(F)m (or)18 b(the)1006 1485 y(library)c(with)h(TCP)m(,)f(and)h(the)g(k)o(ernel)h (for)e(either)i(TCP)f(or)1006 1535 y(UDP)m(,)g(the)h(send)h(bu\013er)g(m)m (ust)f(b)r(e)g(copied)g(in)n(to)g(an)f fg(mbuf)p fm(.)1006 1584 y(F)m(or)d (the)g(library-based)g(UDP)g(implemen)l(tation,)f(the)i(user)1006 1634 y(data) 19 b(can)g(b)q(e)h(referenced)h(instead)f(of)e(copied.)34 b(F)l(or)19 b(the) 1006 1684 y(server)e(with)f(b)r(oth)g(proto)q(cols,)h(cop)o(yin)f(requires)i (sending)1006 1734 y(an)10 b(IPC)g(message)g(to)f(the)i(op)q(erating)f(system) g(serv)o(er)h(whic)o(h)1006 1784 y(then)17 b(executes)i(the)d(so)r(c)o(k)o (et)h(la)n(y)o(er)f(co)r(de)h(that)f(constructs)1006 1833 y(the)c fg(mbuf)f fm (chain.)16 b(This)c(componen)o(t)g(is)f(large)h(b)q(ecause)h(the)1006 1883 y (data)k(is)h(copied)g(four)f(times)f(as)i(part)g(of)f(an)g(RPC:)g(from)1006 1933 y(the)i(user)h(bu\013er)f(to)g(the)g(IPC)f(message,)h(from)e(the)i(IPC) 1006 1983 y(message)12 b(in)o(to)g(the)h(k)o(ernel,)g(from)e(the)i(k)o(ernel) g(in)n(to)g(an)f(IPC)1006 2033 y(message)f(bu\013er)g(in)f(the)i(proto)q(col) e(server's)h(address)h(space,)1006 2083 y(and)j(again)e(from)g(the)j(IPC)f (message)f(bu\013er)i(to)e(the)i fg(mbuf)1006 2132 y fm(c)o(hain.)1048 2194 y (The)11 b(remaining)f(three)i(componen)o(ts)g(on)f(the)h(send)g(path)1006 2244 y(are)i(for)f(the)g(actual)g(proto)q(col)g(stack.)k(The)d(top)f(la)n(y)o(er)h (con-)1006 2293 y(structs)22 b(the)e(proto)r(col)f(header)i(and)f(c)o(hecksum) f(\(header)1006 2343 y(and)f(data\).)32 b(The)19 b(IP)g(la)n(y)o(er)g(constru\ cts)h(the)f(IP)g(header)1006 2393 y(and)g(determines)h(the)g(route)g(to)f(the) h(destination.)34 b(The)1006 2443 y(Ethernet)20 b(la)o(y)n(er)g(maps)d(the)i (destination)f(IP)h(address)h(to)1006 2493 y(an)10 b(Ethernet)i(address,)f (constructs)h(the)f(Ethernet)g(header,)1006 2543 y(and)j(transmits)f(the)h (pack)n(et)h(o)n(v)o(er)g(the)f(netw)n(ork.)1048 2604 y(The)19 b(UDP)g(and)g (Ethernet)h(la)o(y)n(ers)g(ha)o(v)o(e)f(di\013erent)g(la-)1006 2654 y(tencies) e(in)e(each)h(implem)o(en)m(tation.)22 b(The)17 b fg(ether)q 14 2 v 13 w(outp\ ut)1006 2704 y fm(componen)o(t)d(is)g(larger)g(in)g(the)g(library-based)g(and) g(serv)o(er-)p eop %%Page: 10 10 bop 151 47 a 1648 2 v 48 x 2 48 v 312 81 a fk(La)n(y)n(er)608 95 y 2 48 v 852 81 a(TCP)1212 95 y 2 48 v 1444 81 a(UDP)1798 95 y 2 48 v 151 140 a 2 46 v 457 w 2 46 v 646 127 a fd(Library)76 b(Kernel)94 b(Server)1212 140 y 2 46 v 2 46 v 1251 127 a(Library)75 b(Kernel)86 b(Serv)o(er)1798 140 y 2 46 v 151 142 a 1648 2 v 46 x 2 46 v 457 w 2 46 v 678 174 a(1)24 b(1460)809 188 y 2 46 v 860 174 a (1)h(1460)992 188 y 2 46 v 1062 174 a(1)43 b(1460)1212 188 y 2 46 v 1283 174 a (1)24 b(1472)1414 188 y 2 46 v 1465 174 a(1)g(1472)1596 188 y 2 46 v 1667 174 a(1)g(1472)1798 188 y 2 46 v 151 189 a 1648 2 v 46 x 2 46 v 163 221 a fc(Send) 14 b(P)o(ath)608 235 y 2 46 v 201 w 2 46 v 183 w 2 46 v 220 w 2 46 v 202 w 2 46 v 182 w 2 46 v 202 w 2 46 v 151 281 a 2 46 v 361 267 a fb(entry/copy)o(in) 608 281 y 2 46 v 659 267 a fd(19)43 b(203)809 281 y 2 46 v 822 267 a(*50)25 b (*153)992 281 y 2 46 v 1004 267 a(*254)44 b(*579)1212 281 y 2 46 v 1283 267 a (6)82 b(7)1414 281 y 2 46 v 1427 267 a(*65)24 b(*104)1596 281 y 2 46 v 1609 267 a(*293)h(*628)1798 281 y 2 46 v 151 326 a 2 46 v 327 313 a fb(tcp,udp)p 12 2 v 12 w(output)608 326 y 2 46 v 659 313 a fd(82)43 b(328)809 326 y 2 46 v 841 313 a(65)h(307)992 326 y 2 46 v 1024 313 a(224)63 b(447)1212 326 y 2 46 v 1264 313 a(18)43 b(239)1414 326 y 2 46 v 1446 313 a(70)g(273)1596 326 y 2 46 v 1628 313 a(229)h(398)1798 326 y 2 46 v 151 372 a 2 46 v 425 358 a fb(ip)r 12 2 v 12 w(output)608 372 y 2 46 v 659 358 a fd(26)63 b(26)809 372 y 2 46 v 841 358 a (24)g(20)992 372 y 2 46 v 1043 358 a(31)82 b(25)1212 372 y 2 46 v 1264 358 a (17)62 b(18)1414 372 y 2 46 v 1446 358 a(22)h(25)1596 372 y 2 46 v 1647 358 a (24)g(27)1798 372 y 2 46 v 151 418 a 2 46 v 367 404 a fb(ether)p 12 2 v 12 w (output)608 418 y 2 46 v 640 404 a fd(*98)24 b(*274)809 418 y 2 46 v 841 404 a (75)44 b(105)992 418 y 2 46 v 1004 404 a(*166)g(*331)1212 418 y 2 46 v 1225 404 a(*105)25 b(*280)1414 418 y 2 46 v 1446 404 a(74)43 b(163)1596 418 y 2 46 v 1609 404 a(*188)25 b(*367)1798 418 y 2 46 v 151 419 a 1648 2 v 46 x 2 46 v 281 451 a fc(Send)13 b(P)o(ath)i(T)l(otal)608 465 y 2 46 v 640 451 a fd(225) 43 b(831)809 465 y 2 46 v 822 451 a(214)h(585)992 465 y 2 46 v 1024 451 a(675) f(1382)1212 465 y 2 46 v 1244 451 a(146)h(544)1414 465 y 2 46 v 1427 451 a (231)f(565)1596 465 y 2 46 v 1628 451 a(734)25 b(1420)1798 465 y 2 46 v 151 467 a 1648 2 v 45 x 2 46 v 163 499 a fc(Receiv)o(e)15 b(P)o(ath)608 512 y 2 46 v 201 w 2 46 v 183 w 2 46 v 220 w 2 46 v 202 w 2 46 v 182 w 2 46 v 202 w 2 46 v 151 558 a 2 46 v 283 544 a fb(device)i(intr/read)608 558 y 2 46 v 659 544 a fd(42)63 b(43)809 558 y 2 46 v 841 544 a(77)44 b(469)992 558 y 2 46 v 1024 544 a(101)63 b(496)1212 558 y 2 46 v 1264 544 a(39)f(40)1414 558 y 2 46 v 1446 544 a(74)43 b(481)1596 558 y 2 46 v 1647 544 a(99)h(497)1798 558 y 2 46 v 151 604 a 2 46 v 204 590 a fb(netisr/pac)o(ke)o(t)17 b(filter)608 604 y 2 46 v 659 590 a fd(82)63 b(95)809 604 y 2 46 v 841 590 a(79)g(73)992 604 y 2 46 v 1043 590 a (53)82 b(52)1212 604 y 2 46 v 1264 590 a(58)62 b(70)1414 604 y 2 46 v 1446 590 a(83)h(84)1596 604 y 2 46 v 1647 590 a(76)g(61)1798 604 y 2 46 v 151 649 a 2 46 v 322 636 a fb(kernel)17 b(copyout)608 649 y 2 46 v 620 636 a fd(*123)25 b (*534)809 649 y 2 46 v 860 636 a(0)82 b(0)992 649 y 2 46 v 1004 636 a(*113)44 b(*148)1212 649 y 2 46 v 1225 636 a(*107)25 b(*517)1414 649 y 2 46 v 1465 636 a(0)82 b(0)1596 649 y 2 46 v 1609 636 a(*124)25 b(*207)1798 649 y 2 46 v 151 695 a 2 46 v 400 681 a fb(mbuf/queue)608 695 y 2 46 v 659 681 a fd(22)63 b (21)809 695 y 2 46 v 860 681 a(0)82 b(0)992 695 y 2 46 v 1043 681 a(79)g(58) 1212 695 y 2 46 v 1264 681 a(20)62 b(20)1414 695 y 2 46 v 1465 681 a(0)82 b (0)1596 695 y 2 46 v 1647 681 a(68)63 b(64)1798 695 y 2 46 v 151 741 a 2 46 v 479 727 a fb(ipintr)608 741 y 2 46 v 659 727 a fd(37)g(35)809 741 y 2 46 v 841 727 a(30)g(37)992 741 y 2 46 v 1024 727 a(127)82 b(95)1212 741 y 2 46 v 1264 727 a(35)62 b(33)1414 741 y 2 46 v 1446 727 a(30)h(54)1596 741 y 2 46 v 1628 727 a(121)g(91)1798 741 y 2 46 v 151 786 a 2 46 v 347 773 a fb(tcp,udp)p 12 2 v 11 w(input)608 786 y 2 46 v 640 773 a fd(214)43 b(445)809 786 y 2 46 v 841 773 a(76)h(270)992 786 y 2 46 v 1024 773 a(249)63 b(365)1212 786 y 2 46 v 1244 773 a(103)44 b(318)1414 786 y 2 46 v 1446 773 a(67)f(279)1596 786 y 2 46 v 1647 773 a(61)h(273)1798 786 y 2 46 v 151 832 a 2 46 v 243 818 a fb(wakeup)18 b(user)g(thread)608 832 y 2 46 v 659 818 a fd(92)63 b(95)809 832 y 2 46 v 841 818 a(54)g(54)992 832 y 2 46 v 1024 818 a(194)g(213)1212 832 y 2 46 v 1264 818 a(73)f(80)1414 832 y 2 46 v 1446 818 a(70)h(69)1596 832 y 2 46 v 1628 818 a (262)44 b(274)1798 832 y 2 46 v 151 878 a 2 46 v 361 864 a fb(copyout/ex)o (it)608 878 y 2 46 v 659 864 a fd(46)f(261)809 878 y 2 46 v 822 864 a(*32)25 b (*220)992 878 y 2 46 v 1004 864 a(*222)g(*1028)1212 878 y 2 46 v 1264 864 a (21)62 b(63)1414 878 y 2 46 v 1427 864 a(*27)43 b(*75)1596 878 y 2 46 v 1609 864 a(*208)25 b(*619)1798 878 y 2 46 v 151 879 a 1648 2 v 46 x 2 46 v 227 911 a fc(Receiv)n(e)15 b(P)o(ath)g(T)l(otal)608 925 y 2 46 v 640 911 a fd(658)24 b (1529)809 925 y 2 46 v 822 911 a(348)h(1123)992 925 y 2 46 v 1004 911 a(1138) 44 b(2455)1212 925 y 2 46 v 1244 911 a(456)25 b(1141)1414 925 y 2 46 v 1427 911 a(351)f(1042)1596 925 y 2 46 v 1609 911 a(1019)h(2086)1798 925 y 2 46 v 151 927 a 1648 2 v 45 x 2 46 v 163 958 a fc(Net)o(w)o(ork)15 b(T)l(ransit)g (Time)608 972 y 2 46 v 659 958 a fd(51)24 b(1214)809 972 y 2 46 v 841 958 a (51)h(1214)992 972 y 2 46 v 1043 958 a(51)43 b(1214)1212 972 y 2 46 v 1264 958 a(51)24 b(1214)1414 972 y 2 46 v 1446 958 a(51)g(1214)1596 972 y 2 46 v 1647 958 a(51)h(1214)1798 972 y 2 46 v 151 974 a 1648 2 v 46 x 2 46 v 163 1006 a fc (T)l(otal)608 1020 y 2 46 v 640 1006 a fd(934)f(3574)809 1020 y 2 46 v 822 1006 a(613)h(2922)992 1020 y 2 46 v 1004 1006 a(1864)44 b(5051)1212 1020 y 2 46 v 1244 1006 a(653)25 b(2899)1414 1020 y 2 46 v 1427 1006 a(633)f(2821)1596 1020 y 2 46 v 1609 1006 a(1804)h(4720)1798 1020 y 2 46 v 151 1021 a 1648 2 v 0 1098 a fm(T)m(able)15 b(4:)22 b fh(F)m(or)16 b(a)f(library-based)h(\()p fm (SHM-IPF)p fh(\),)g(k)o(ernel-based)h(\(Mac)o(h)f(2.5\),)f(and)h(server-based) h(\(UX\))f(proto)q(col)g(imple-)0 1148 y(men)n(tation)e(on)g(the)g(DECstation) g(5000/200,)e(this)j(table)f(sho)o(ws)g(the)h(a)o(v)o(erage)f(TCP)h(and)f(UDP) g(latencies)h(on)f(Ethernet)0 1198 y(b)o(y)k(componen)o(t)h(for)f(the)h(sende\ r)h(and)e(receiver.)32 b(The)19 b(minim)-5 b(um)17 b(\(1)h(b)o(yte\))h(and)f (maxim)-5 b(um)17 b(\(1460)h(b)o(ytes)h(for)f(TCP)l(,)0 1247 y(1472)e(b)n(yte\ s)i(for)e(UDP\))h(unfragmen)m(ted)h(message)e(sizes)i(w)n(ere)g(used.)27 b (Times)15 b(are)i(in)g(microseconds.)26 b(En)o(tries)17 b(mark)m(ed)0 1297 y (with)c(asterisks)h(denote)g(protection)f(b)r(oundary)g(crossings.)18 b(Times) 12 b(rep)r(orted)i(in)e(this)h(table)g(are)h(from)d(an)i(instrumen)n(ted)0 1347 y(v)o(ersion)h(of)f(the)i(proto)q(cols,)e(and)h(re\015ect)i(a)d(small)f (p)q(ercen)q(tage)i(error)g(relativ)o(e)g(to)g(an)g(uninstrumen)n(ted)h(v)n (ersion.)0 1480 y @beginspecial @setspecial @endspecial 41 x fm(based)24 b (implem)o(en)m(tations)f(b)q(ecause)h(the)g(proto)q(col)f(co)q(de)0 1571 y (traps)12 b(in)o(to)g(the)g(k)o(ernel)h(and)e(copies)i(the)f(pac)o(k)o(et)h (from)d(user)0 1621 y(space)15 b(in)o(to)f(a)g(wired)h(k)o(ernel)g(bu\013er)g (b)q(efore)g(cop)o(ying)f(it)g(to)0 1671 y(device)21 b(memory)-6 b(.)37 b(In) 20 b(con)o(trast,)i(the)f(in-k)n(ernel)g(v)n(ersion)0 1720 y(copies)f(outgoin\ g)e(data)h(directly)h(from)e(the)i fg(mbuf)e fm(c)o(hain)0 1770 y(\(whic)o (h)c(is)g(already)f(wired\))h(to)g(the)h(device.)42 1907 y(The)f fg(tcp)r 14 2 v 13 w(output)f fm(and)h fg(udp)r 14 2 v 13 w(output)f fm(componen)o(ts)h(are) 0 1956 y(faster)f(in)e(the)i(library)e(than)i(in)e(the)i(server.)18 b(This)12 b(discrep-)0 2006 y(ancy)20 b(is)g(due)g(to)g(the)h(di\013erent)f(sync)o(hron\ ization)g(prim-)0 2056 y(itiv)n(es)j(used)g(in)f(eac)o(h)g(implemen)m(tation.) 42 b(The)22 b(server's)0 2106 y(synchronization)c(mec)o(hanisms)g(are)h(based) h(on)f(schedul-)0 2156 y(ing)i(priorit)n(y)h(lev)o(els)g(and)f(locks.)41 b (The)22 b(priorit)o(y)f(lev)o(els,)0 2205 y(whic)o(h)c(are)h(artifacts)f(of)f (the)i(co)r(de's)f(k)o(ernel)h(origins,)e(are)0 2255 y(retained)21 b(in)f(the) h(server)g(b)q(ecause)h(proto)q(col)f(pro)q(cessing)0 2305 y(m)m(ust)f(b)r (e)g(sync)o(hronized)g(with)f(other)h(services,)j(suc)o(h)d(as)0 2355 y(pro)q (cess)13 b(managemen)m(t)e(and)h(\014ling,)e(that)i(also)f(rely)h(on)f(pri-)0 2405 y(orit)o(y)16 b(lev)n(els.)26 b(The)17 b(priorit)n(y)f(lev)o(el)g(mac)n (hinery)g(sim)n(ulates)0 2455 y(hardw)o(are)21 b(in)o(terrupt)h(priorities)f (using)f(lo)q(c)o(ks)h(and)g(con-)0 2504 y(dition)15 b(v)n(ariables,)h(result\ ing)g(in)g(exp)q(ensive)g(priorit)o(y)g(ma-)0 2554 y(nipulation,)f(and)h(high) f(con)o(tention)g(for)h(sp)r(eci\014c)h(priorit)n(y)0 2604 y(lev)o(els)e(amon\ g)f(indep)q(endent)h(services.)24 b(In)16 b(con)o(trast,)g(our)0 2654 y(proto) q(col)d(library)f(do)q(es)i(not)f(sync)o(hronize)h(with)f(other)g(op-)0 2704 y (erating)i(system)h(services,)h(and)e(in)n(ternally)g(synchronizes)1006 1480 y @beginspecial @setspecial @endspecial 41 x(using)f(less)g(exp)r(ensiv)o(e)g (lo)q(c)o(ks.)1493 1506 y ff(4)1006 1630 y fj(Receiv)n(e)i(path)1006 1707 y fm (The)g(next)g(eigh)n(t)g(lines)f(describ)s(e)g(the)h(receive)g(path.)23 b(The) 1006 1757 y fg(device)e(intr/read)c fm(component)i(is)h(the)g(time)e(to)i(\ \014eld)1006 1807 y(an)c(in)o(terrupt)h(from)e(the)i(net)o(w)o(ork)g(device.) 26 b(F)l(or)17 b(the)g(k)n(er-)1006 1856 y(nel)h(and)f(the)h(server,)h(the)f (en)o(tire)g(pac)o(k)o(et)g(is)g(also)f(copied)1006 1906 y(out)j(of)f(the)h (device)h(in)n(to)f(a)g(wired)g(k)n(ernel)h(bu\013er.)37 b(The)1006 1956 y fg (netisr/packet)19 b(filter)10 b fm(componen)o(t)h(re\015ects)j(the)d(time) 1006 2006 y(to)f(dem)n(ultiplex)e(the)j(pac)o(k)o(et)f(to)f(the)h(appropriate) g(proto)q(col)1006 2056 y(stack.)38 b(The)21 b fg(kernel)g(copyout)e fm(compo\ nen)o(t)i(measures)1006 2106 y(the)15 b(time)f(required)h(to)g(deliv)n(er)g (the)h(pac)o(k)o(et)f(to)f(the)i(desti-)1006 2155 y(nation)d(proto)q(col)g (stack.)18 b(This)13 b(componen)o(t)h(do)q(es)g(not)f(ap-)1006 2205 y(ply)d (to)g(Mac)o(h)h(2.5)e(and)i(is)f(sho)o(wn)g(as)h(zero.)18 b(F)l(or)11 b(the)g (library)-5 b(,)1006 2255 y(the)12 b(pac)o(k)o(et)g(is)f(copied)g(from)f(the) h(netw)o(ork)g(device)h(in)n(to)f(the)1006 2305 y(proto)q(col)18 b(stac)o(k's) g(address)h(space.)31 b(F)l(or)18 b(the)h(serv)o(er,)g(the)1006 2355 y(cop)o (y)f(is)h(from)d(k)o(ernel)j(memory)-6 b(,)19 b(whic)o(h)f(has)h(lo)n(w)o(er) f(read)1006 2404 y(latency)c(than)g(netw)n(ork)g(device)h(memory)c([DEC)j(90]\ .)1048 2454 y(The)i(remaining)e(componen)o(ts)j(execute)g(in)f(user)h(space) 1006 2504 y(for)i(b)q(oth)g(the)g(server-based)h(and)f(library-based)g(imple-) 1006 2552 y 378 2 v 1052 2613 a fe(4)1070 2625 y fl(The)27 b(serv)o(er's)f (sync)o(hronizati)o(on)e(mec)o(hanisms)h(ha)o(v)o(e)h(b)q(een)1006 2664 y(rep\ laced)c(with)i(ligh)o(ter-w)o(eigh)o(t)d(v)o(ersions)h(in)i(later)f(releases) g(of)1006 2704 y(CMU's)13 b(UNIX)g(serv)o(er.)p eop %%Page: 11 11 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fm(men)n(tations.)28 b (The)18 b fg(mbuf/queue)d fm(componen)o(t)j(measures)0 95 y(the)c(time)d(requ\ ired)j(to)f(pac)o(k)n(age)g(the)h(incoming)c(pac)o(k)o(et)k(as)0 145 y(an)g fg (mbuf)g fm(c)o(hain)g(and)g(to)g(queue)h(the)g(c)o(hain)f(on)g(the)h(proto-)0 195 y(col)e(stack's)g(input)g(queue.)19 b(F)m(or)13 b(Mac)o(h)h(2.5,)e(this)h (w)o(ork)h(o)q(c-)0 244 y(curs)h(as)g(part)f(of)f(the)i fg(netisr/packet)k (filter)13 b fm(pro)q(cess-)0 294 y(ing.)29 b(Although)17 b(b)r(oth)g(are)h (implemen)m(ted)g(at)g(user-lev)o(el,)0 344 y(the)c(o)n(v)o(erhead)g(for)e fg (mbuf/queue)f fm(manipulation)f(is)j(higher)0 394 y(than)i(in)f(the)h(library) l(.)21 b(Again,)13 b(as)i(with)f fg(udp)r 14 2 v 14 w(output)f fm(and)0 444 y fg(tcp)r 14 2 v 13 w(output)p fm(,)f(this)h(is)h(b)q(ecause)h(the)f(server)g (uses)h(a)e(hea)o(vy-)0 493 y(w)o(eigh)n(t)h(synchronization)f(mec)o(hanism.) 42 547 y(The)d(IP)h(la)n(y)o(er)f(\()p fg(ipintr)p fm(\))g(dequeues)i(incomin\ g)c(IP)i(pac)o(k-)0 597 y(ets,)k(pro)q(cesses)i(the)f(IP)f(header,)g(and)f (passes)i(each)e(pack)n(et)0 646 y(up)g(to)g(TCP)g(or)g(UDP)m(.)f(These)j(la) n(y)n(ers)g(then)e(c)o(hecksum)f(the)0 696 y(proto)q(col)f(header)h(and)f(dat\ a,)f(queue)i(the)g(data)f(on)g(the)g(des-)0 746 y(tination)k(so)r(c)o(k)o(et,) i(and)f(a)o(w)o(ak)n(en)h(an)o(y)f(thread)h(w)o(aiting)e(for)0 796 y(data)f (to)f(arriv)o(e)h(on)g(the)g(so)r(c)o(k)o(et.)42 849 y(The)h fg(wakeup)20 b (user)h(thread)14 b fm(componen)o(t)h(is)g(the)g(time)0 899 y(required)24 b (to)e(pass)h(control)f(from)f(the)i(netw)n(ork)g(proto-)0 949 y(col)c(thread) g(to)g(an)g(application)e(thread)j(a)n(w)o(aiting)e(data.)0 999 y(Again,)9 b (synchronization)f(o)o(v)o(erheads)i(account)f(for)g(the)h(dif-)0 1048 y(fere\ nce)16 b(in)d(times)g(b)q(etw)n(een)i(the)g(server)f(and)g(library)l(.)42 1102 y(Finally)-6 b(,)13 b(the)h fg(copyout/exit)c fm(componen)o(t)j(re\015ects)i (the)0 1152 y(time)22 b(required)j(to)e(cop)o(y)h(data)f(from)e(the)k fi(mbuf) e fm(c)o(hain)0 1201 y(in)n(to)e(the)h(destination)f(bu\013er)h(sp)q(eci\014e\ d)g(b)o(y)f(the)g(caller,)0 1251 y(and)c(lea)o(v)o(e)h(the)g(proto)q(col.)29 b (TCP's)17 b(receive)h(queue)h(man-)0 1301 y(agemen)n(t,)25 b(and)d(its)h(supp) r(ort)g(for)f(urgent)h(data)f([P)o(ostel)0 1351 y(81])16 b(mak)m(e)h(this)g (componen)o(t)g(larger)g(than)g(for)f(UDP)m(.)g(F)m(or)0 1401 y(the)c(server-\ based)g(implemen)l(tation,)f(this)g(componen)o(t)g(in-)0 1450 y(v)o(olv)n(es) 19 b(sending)g(an)f(IPC)g(reply)h(message)f(to)g(the)h(appli-)0 1500 y(cation) d(and)h(includes)g(the)g(same)f(n)o(um)m(b)r(er)h(of)f(redundant)0 1550 y(cop\ ies)e(as)g(the)h fi(entry/c)n(opyin)f fm(component.)0 1706 y fn(5)69 b(Relate\ d)21 b(w)n(ork)0 1803 y fm(Although)10 b(there)i(has)e(b)r(een)h(substantial) e(w)o(ork)h(in)h(the)g(area)0 1853 y(of)18 b(impro)m(ving)f(proto)q(col)h(p)r (erformance,)g(and)h(in)e(mo)n(ving)0 1903 y(pieces)e(of)f(proto)q(col)g(pro) q(cessing)h(in)o(to)f(user)h(space,)g(w)o(e)f(are)0 1953 y(a)o(w)n(are)i(of)e (no)h(previous)g(w)o(ork)g(that)g(has)g(attempted)g(fully)0 2003 y(to)j(in)n (tegrate)h(application-lev)m(el)f(pro)r(cessing)h(with)e(other)0 2053 y(op)q (erating)g(system)h(services.)31 b(An)17 b(exp)r(erimen)n(tal)g(proto-)0 2102 y(col)11 b(library)g(built)g(on)h(top)f(of)h(Mac)o(h)f(3.0)g(at)h(the)g(Univ) n(ersity)0 2152 y(of)19 b(W)l(ashington)g([Thekk)n(ath)g(et)h(al.)34 b(93])19 b(implemen)l(ts)h(a)0 2202 y(subset)15 b(of)f(the)g(so)q(ck)n(et)h(in)n(terfa\ ce)g(for)f(TCP)m(,)f(and)h(pro)o(vides)0 2252 y(for)d(protected)j(transmissio\ n)c(b)r(et)o(w)o(een)j(hosts)f(that)g(are)g(on)0 2302 y(the)18 b(same)e(ph)o (ysical)g(Ethernet.)29 b(As)18 b(their)f(system)g(is)f(in-)0 2351 y(tended)k (to)f(address)i(the)f(needs)g(of)f(application-speci\014c)0 2401 y(proto)q (cols,)13 b(they)h(are)g(not)f(faithful)e(to)i(the)h(op)q(erating)f(sys-)0 2451 y(tem)g(in)n(terface.)42 2504 y(The)21 b fi(x)p fm(-Kernel)h(is)f(an)f (ob)r(ject-oriented)h(proto)q(col)g(im-)0 2554 y(plemen)n(tation)e(en)o(viron\ men)n(t)h(that)f(facilitates)g(the)i(con-)0 2604 y(struction)d(of)e(new)h(pro\ to)q(cols.)28 b(The)17 b fi(x)p fm(-Kernel)h(currently)0 2654 y(runs)d(as)g (a)g(dedicated)h(proto)q(col)e(server)h(and)g(pro)o(vides)g(an)0 2704 y(RPC) 22 b(stub)h(library)e(that)i(implem)o(en)m(ts)f(the)h(so)r(c)o(k)o(et)f(in-) 1006 4 y @beginspecial @setspecial @endspecial 41 x(terface.)46 b(Our)24 b (system)e(is)h(complemen)m(tary)g(to)f(the)i fi(x-)1006 95 y fm(Kernel's,)15 b (as)f(ours)g(facilitates)f(the)i(in)n(tegration)f(of)f(proto-)1006 145 y(cols) j(in)n(to)f(a)g(complete)g(op)q(erating)g(system)h(en)o(vironmen)m(t.)1006 195 y(Tsch)o(udin)f([Tsc)o(h)o(udin)h(91])e(adv)o(o)q(cates)j(a)e(proto)q(col)g (server)1006 244 y(in)o(to)e(whic)n(h)h(proto)q(col)f(implem)o(en)m(tations)g (can)g(b)q(e)h(dynam-)1006 294 y(ically)f(loaded)h(and)g(unloaded.)19 b(W)m (e)14 b(are)h(not)f(a)o(w)o(are)g(of)g(an)1006 344 y(implemen)l(tation)k(of)f (these)i(ideas.)30 b(Clark)18 b(and)g(T)l(ennen-)1006 394 y(house)12 b([Clark) f(&)h(T)l(ennenhouse)i(90])c(assert)j(that)f(proto)q(col)1006 444 y(la)n(y)o (ering)i(is)g(a)g(desirable)h(design)g(but)f(undesirable)h(imple-)1006 493 y (men)n(tation)g(tec)o(hnique.)22 b(They)16 b(adv)n(o)q(cate)g(t)o(w)o(o)f(new) g(tech-)1006 543 y(niques)26 b(to)f(impro)m(v)o(e)h(p)q(erformance:)41 b(appl\ ication-lev)m(el)1006 593 y(framing,)13 b(where)j(higher-lev)o(el)f(proto)q (cols)g(determine)g(the)1006 643 y(gran)o(ularit)n(y)10 b(of)f(lo)n(w)o(er-le\ v)o(el)h(proto)q(col)g(pro)q(cessing,)h(and)f(in-)1006 693 y(tegrated)19 b (la)n(y)o(er)g(pro)q(cessing,)h(where)f(the)g(pro)q(cessing)g(for)1006 742 y (all)13 b(proto)q(col)i(la)n(y)n(ers)h(is)e(p)q(erformed)g(in)g(one)h(pass)g (o)n(v)o(er)g(the)1006 792 y(data.)40 b(Our)21 b(proto)q(col)g(decomp)q(ositi\ on)f(strategy)i(facili-)1006 842 y(tates)15 b(the)f(application)f(of)g(these) i(techniques.)1006 979 y fn(6)69 b(Conclusions)1006 1070 y fm(It)14 b(is)g (p)r(ossible)g(to)g(ac)o(hiev)o(e)g(b)q(oth)g(go)q(o)q(d)g(p)q(erformance)g (and)1006 1120 y(high)k(\015exibilit)n(y)g(in)h(the)g(net)o(w)o(orking)f(doma\ in.)30 b(Careful)1006 1170 y(proto)q(col)16 b(decomposition)f(places)h(the)g (resp)r(onsibilit)n(y)f(for)1006 1220 y(de\014ning)10 b(net)o(w)o(ork)g(abstr\ actions)g(with)g(the)g(op)q(erating)g(sys-)1006 1270 y(tem,)19 b(and)g(of)g (implemen)l(ting)g(the)h(p)q(erformance-critical)1006 1319 y(componen)o(ts)d (of)g(those)g(abstractions)g(with)g(the)g(applica-)1006 1369 y(tion.)f(Our)11 b(w)o(ork)f(can)h(b)q(e)g(in)n(terpreted)i(as)d(part)h(of)f(a)g(\\RISC)1006 1419 y(mo)m(v)o(emen)n(t")17 b(in)f(op)q(erating)h(systems)g([Wilk)m(es)g(92]) f(where)1006 1469 y(programming)c(in)o(terfaces)17 b(are)g(decoupled)g(from)d (the)i(op-)1006 1519 y(erating)d(system)f(implemen)m(tation.)17 b(This)12 b (mo)m(v)o(emen)o(t)g(will)1006 1568 y(mak)m(e)e(it)g(p)q(ossible)g(to)g(exp)q (erimen)n(t)g(with)g(new)o(er)h(and)e(b)r(etter)1006 1618 y(programming)14 b (implemen)l(tations)j(and)h(in)n(terfaces)h(while)1006 1668 y(at)12 b(the)h (same)e(time)g(retaining)h(supp)r(ort)g(for)g(existing)g(ones.)1006 1805 y fn (Ac)n(kno)n(wledgmen)n(ts)1006 1896 y fm(Da)n(vid)32 b(Eckhardt,)k(Da)n(vid)c (Kepp)r(el,)k(Gregor)d(Kicza-)1006 1946 y(les,)22 b(John)f(Lamping,)f(Ed)h (Lazo)o(wsk)n(a,)g(Sue)h(Lee,)h(Keith)1006 1996 y(Marzullo,)13 b(Dylan)f(McNa\ mee,)i(Gail)e(Murph)o(y)m(,)h(Larry)h(P)o(e-)1006 2046 y(terson,)30 b(and)c (Chandu)f(Thekk)n(ath)h(pro)o(vided)g(v)n(aluable)1006 2096 y(feedback)16 b (on)f(earlier)h(drafts)g(of)g(this)g(pap)q(er.)24 b(Jose)17 b(Brus-)1006 2145 y(toloni)e(help)q(ed)h(us)g(implemen)l(t)g(shared)h(bu\013ers)g(correctly) 1006 2195 y(in)g(the)h(con)o(text)g(of)e(v)o(olatile)g(proto)q(col)h(sessions\ .)29 b(W)l(a)o(yne)1006 2245 y(Sa)o(wdon)14 b(and)g(Matt)g(Zek)o(ausk)m(as)h (w)o(ere)g(early)f(users)i(of)d(the)1006 2295 y(system)18 b(and)f(su\013ered) j(through)d(our)h(mistak)m(es)h(with)e(us.)1006 2345 y(Masanobu)j(Y)l(uhara)g (assisted)h(with)e(the)i(in)n(tegration)f(of)1006 2394 y(the)f(pac)o(k)n(et)g (\014lter.)30 b(Mary)18 b(Thompson)f(and)g(Alessandro)1006 2444 y(F)m(orin)10 b(help)q(ed)h(with)g(the)g(in)n(tegration)g(of)f(our)g(libraries)h(in)n(to) 1006 2494 y(Mac)o(h)j(3.0.)p eop %%Page: 12 12 bop 0 4 a @beginspecial @setspecial @endspecial 41 x fn(References)0 117 y fl ([Accetta)10 b(et)h(al.)g(86])20 b(Accetta,)9 b(M.)h(J.,)f(Baron,)g(R.)h(V.,) g(Bolosky)m(,)e(W.,)190 157 y(Golub,)15 b(D.)g(B.,)g(Rashid,)g(R.)g(F.,)g(T)m (ev)n(anian,)f(Jr.,)i(A.,)190 196 y(and)9 b(Y)m(oung,)g(M.)g(W.)k(Mac)o(h:)g (A)d(New)g(Kernel)f(F)m(ounda-)190 236 y(tion)h(for)g(Unix)g(Dev)o(elopmen)o (t)o(.)h(In)f fa(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)e(the)190 275 y(1986)20 b (Summer)g(USENIX)g(Confer)n(enc)n(e)p fl(,)i(pages)17 b(93{)190 315 y(113,)11 b(July)g(1986.)0 369 y([Clark)g(&)h(T)m(ennenhouse)d(90])20 b(Clark,)i(D.)f (D.)g(and)f(T)m(ennenhouse,)190 408 y(D.)e(L.)35 b(Arc)o(hitectural)15 b(Cons\ iderations)g(for)i(a)h(New)190 448 y(Generation)23 b(of)i(Proto)q(cols.)55 b (In)25 b fa(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)190 487 y(the)17 b(SIGCOMM)e('90) h(Symp)n(osium)p fl(,)h(pages)d(200{208,)190 526 y(Septem)o(b)q(er)9 b(1990.) 0 581 y([Clark)i(et)g(al.)g(91])20 b(Clark,)12 b(D.,)g(Chapin,)f(L.,)h(Cerf,) g(V.,)h(Braden,)d(R.,)190 620 y(and)i(Hobb)o(y)m(,)g(R.)19 b(T)m(o)o(w)o(ards) 13 b(the)f(F)m(uture)f(In)o(ternet)g(Ar-)190 659 y(c)o(hitecture.)k(Request) 10 b(for)i(Commen)o(ts)e(1287,)h(Decem-)190 699 y(b)q(er)g(1991.)0 753 y([Cla\ rk)g(et)g(al.)g(92])20 b(Clark,)f(D.)f(D.,)i(Shenk)o(er,)d(S.,)j(and)d(Zhang,) h(L.)190 792 y(Supp)q(orting)d(Real-Time)g(Applications)g(in)i(an)g(In)o(te-) 190 832 y(grated)j(Services)f(P)o(ac)o(k)o(et)h(Net)o(w)o(ork:)34 b(Arc)o(hit\ ecture)190 871 y(and)14 b(Mec)o(hanism.)22 b(In)14 b fa(SIGCOMM)g('92)i(Confe\ r)n(enc)n(e)190 911 y(Pr)n(o)n(c)n(e)n(e)n(dings)p fl(,)f(pages)10 b(14{26,)g (August)g(1992.)0 965 y([Dean)g(92])43 b(Dean,)20 b(R.)g(W.)38 b(A)20 b(Licen\ se-F)m(ree)d(BSD)i(4.4)g(Single)190 1004 y(Serv)o(er.)10 b(In)f fa(Op)n(en)i (Softwar)n(e)g(F)m(oundation)h(Symp)n(osium)190 1044 y('92)p fl(,)g(Cam)o(bri\ dge,)d(MA,)k(F)m(ebruary)c(1992.)0 1098 y([DEC)j(90])46 b(DEC)12 b(W)m(orksta\ tion)d(System)h(Engineering.)i fa(DECsta-)190 1137 y(tion)j(5000/200)h(KN02)f (System)g(Mo)n(dule)g(F)m(unctional)190 1177 y(Sp)n(e)n(ci\014c)n(ation)g(\(R) n(evision)e(1.3\))p fl(,)f(August)e(1990.)0 1231 y([F)m(elten)g(92])28 b(F)m (elten,)22 b(E.)44 b(The)22 b(Case)f(for)f(Application-Speci\014)o(c)190 1270 y(Comm)o(unication)9 b(Proto)q(cols.)15 b(In)d fa(Pr)n(o)n(c)n(e)n(e)n(dings) k(of)d(In-)190 1310 y(tel)k(Sup)n(er)n(c)n(omputer)j(Systems)c(Division)g(T)m (e)n(chnolo)n(gy)190 1349 y(F)m(o)n(cus)e(Confer)n(enc)n(e)p fl(,)f(pages)e (171{181,)e(1992.)0 1403 y([F)m(orin)h(et)i(al.)f(91])19 b(F)m(orin,)12 b(A.,) g(Golub,)f(D.)h(B.,)h(and)e(Bershad,)f(B.)j(N.)190 1443 y(An)h(I/O)g(System)d (for)i(Mac)o(h)g(3.0.)20 b(In)13 b fa(Pr)n(o)n(c)n(e)n(e)n(ding)q(s)k(of)190 1482 y(the)f(Se)n(c)n(ond)i(Usenix)e(Mach)g(Workshop)p fl(,)g(pages)d(163{) 190 1521 y(176,)e(No)o(v)o(em)o(b)q(er)e(1991.)0 1576 y([Gar\014nk)o(el)g(&)j (Spa\013ord)d(91])20 b(Gar\014nk)o(el,)30 b(S.)e(and)f(Spa\013ord,)j(G.)190 1615 y fa(Pr)n(actic)n(al)13 b(Unix)f(Se)n(curity)p fl(.)i(O'Reilly)9 b(and)g (Asso)q(ciates,)190 1654 y(Inc.,)i(Sebastop)q(ol,)d(CA,)13 b(1991.)0 1709 y ([Gett)o(ys)d(et)h(al.)g(90])20 b(Gett)o(ys,)14 b(J.,)h(Karlton,)g(P)m(.,)g (and)f(McGregor,)f(S.)190 1748 y(The)i(X)g(Windo)o(w)f(System,)f(v)o(ersion)g (11.)24 b fa(Softwar)n(e)16 b({)190 1787 y(Pr)n(actic)n(e)i(and)e(Exp)n(erien\ c)n(e)p fl(,)i(20\(S2\):35{6)o(7,)12 b(Octob)q(er)190 1827 y(1990.)0 1881 y ([Golub)e(et)h(al.)g(90])20 b(Golub,)9 b(D.,)h(Dean,)g(R.,)g(F)m(orin,)g(A.,) h(and)f(Rashid,)190 1920 y(R.)16 b(Unix)11 b(as)h(an)f(Application)e(Program.) k(In)e fa(Pr)n(o)n(c)n(e)n(e)n(d-)190 1960 y(ings)16 b(of)g(the)h(1990)f(Summ\ er)h(USENIX)g(Confer)n(enc)n(e)p fl(,)190 1999 y(pages)11 b(87{95,)e(June)i (1990.)0 2053 y([Hutc)o(hinson)e(&)j(P)o(eterson)e(91])20 b(Hutc)o(hinson,)8 b (N.)j(C.)g(and)e(P)o(eterson,)190 2093 y(L.)15 b(L.)24 b(The)15 b fa(x)p fl (-k)o(ernel:)k(An)c(Arc)o(hitecture)d(for)i(Imple-)190 2132 y(men)o(ting)d (Net)o(w)o(ork)h(Proto)q(cols.)18 b fa(IEEE)c(T)m(r)n(ansactions)190 2172 y (on)19 b(Softwar)n(e)g(Engine)n(ering)p fl(,)i(17\(1\):64{76,)16 b(Jan)o(uary) 190 2211 y(1991.)0 2265 y([In)o(tel)10 b(90])52 b(In)o(tel.)8 b fa(386)i(Pr)n (o)n(gr)n(ammer's)h(R)n(efer)n(enc)n(e)h(Manual)p fl(.)e(In)o(tel,)190 2305 y (Mt.)i(Prosp)q(ect,)d(IL,)j(1990.)0 2359 y([Jacobson)d(88])20 b(Jacobson,)11 b (V.)18 b(Congestion)11 b(Av)o(oidance)f(and)h(Con-)190 2398 y(trol.)e(In)e fa (Pr)n(o)n(c)n(e)n(e)n(dings)12 b(of)d(the)h(SIGCOMM)e('88)i(Symp)n(o-)190 2438 y(sium)h(on)g(Communic)n(ations)g(A)o(r)n(chite)n(ctur)n(es)i(and)f(Pr)n(o-) 190 2477 y(to)n(c)n(ols)p fl(,)h(pages)d(314{329.)f(A)o(CM,)k(August)d(1988.) 0 2531 y([Jacobson)f(et)j(al.)f(92])19 b(Jacobson,)13 b(V.,)i(Braden,)e(R.,)i (and)e(Borman,)190 2571 y(D.)24 b(TCP)16 b(Extensions)c(for)i(High-P)o(erform\ an)o(ce.)20 b(Re-)190 2610 y(quest)11 b(for)g(Commen)o(ts)e(1323,)h(Ma)o(y)i (1992.)0 2664 y([Jolitz)e(92])38 b(Jolitz,)18 b(W.)g(F.)34 b(P)o(orting)16 b (UNIX)j(to)e(the)g(386.)33 b fa(Dr.)190 2704 y(Dobbs')12 b(Journal)p fl(,)e (Jan)o(uary)d(1991)i(through)e(July)h(1992.)1006 4 y @beginspecial @setspecial @endspecial 41 x([Kane)j(88])42 b(Kane,)18 b(G.)30 b fa(MIPS)17 b(RISC)g(A)o (r)n(chite)n(ctur)n(e)p fl(.)33 b(Pren)o(tice-)1196 85 y(Hall,)12 b(Englew)o (o)q(o)q(d)e(Cli\013s,)h(NJ,)h(1988.)1006 141 y([Le\017er)f(et)g(al.)g(89])20 b(Le\017er,)9 b(S.)f(J.,)i(McKusic)o(k,)e(M.,)h(Karels,)g(M.,)g(and)1196 180 y (Quarterman,)g(J.)14 b fa(The)f(Design)f(and)h(Implementation)1196 219 y(of)d (the)g(4.3BSD)g(UNIX)g(Op)n(er)n(ating)i(System)p fl(.)e(Addison-)1196 259 y (W)m(esley)m(,)h(1989.)1006 315 y([Maeda)g(&)h(Bershad)e(92])20 b(Maeda,)14 b (C.)h(and)e(Bershad,)g(B.)i(N.)24 b(Net-)1196 354 y(w)o(orking)15 b(P)o(erfor\ mance)d(for)k(Microk)o(ernels.)24 b(In)16 b fa(Pr)n(o-)1196 394 y(c)n(e)n(e)n (dings)g(of)f(the)f(Thir)n(d)g(Workshop)h(on)f(Workstation)1196 433 y(Op)n (er)n(ating)h(Systems)p fl(,)c(pages)g(154{159,)e(April)i(1992.)1006 489 y ([McCanne)g(&)h(Jacobson)e(93])19 b(McCanne,)k(S.)e(and)g(Jacobson,)h(V.)1196 529 y(The)13 b(BSD)f(P)o(ac)o(k)o(et)g(Filter:)k(A)d(New)h(Arc)o(hitecture)c (for)1196 568 y(User-lev)o(el)h(P)o(ac)o(k)o(et)g(Capture.)k(In)c fa(Pr)n(o)n (c)n(e)n(e)n(dings)16 b(of)e(the)1196 608 y(1993)21 b(Winter)e(USENIX)h(Confe\ r)n(enc)n(e)p fl(,)i(pages)17 b(259{)1196 647 y(269,)11 b(Jan)o(uary)f(1993.) 1006 703 y([Mogul)h(et)g(al.)g(87])20 b(Mogul,)15 b(J.)g(C.,)h(Rashid,)e(R.)h (F.,)h(and)e(Accetta,)1196 742 y(M.)d(J.)i(The)d(P)o(ac)o(k)o(et)e(Filter:)14 b(An)c(E\016cien)o(t)f(Mec)o(hanism)1196 782 y(for)15 b(User-lev)o(el)e(Net)o (w)o(ork)i(Co)q(de.)26 b(In)14 b fa(Pr)n(o)n(c)n(e)n(e)n(dings)19 b(of)1196 821 y(the)13 b(11th)f(Symp)n(osium)g(on)g(Op)n(er)n(ating)i(Systems)d(Prin-) 1196 861 y(ciples)p fl(,)i(pages)d(39{51.)g(A)o(CM,)j(No)o(v)o(em)o(b)q(er)c (1987.)1006 917 y([P)o(ostel)h(81])29 b(P)o(ostel,)17 b(J.)29 b(T)m(ransmissi\ on)14 b(Con)o(trol)h(Proto)q(col.)28 b(Re-)1196 956 y(quest)14 b(for)h(Commen) o(ts)e(793,)i(USC)h(Informatio)o(n)c(Sci-)1196 996 y(ences)f(Institute,)e(Sep\ tem)o(b)q(er)f(1981.)1006 1052 y([Rashid)i(&)i(Rob)q(ertson)e(81])20 b(Rashid\ ,)7 b(R.)i(F.)g(and)f(Rob)q(ertson,)f(G.)i(G.)1196 1091 y(Accen)o(t:)36 b(A) 23 b(Comm)o(unicati)o(on)c(Orien)o(ted)i(Net)o(w)o(ork)1196 1131 y(Op)q(erati\ ng)g(System)f(Kernel.)45 b(In)22 b fa(Pr)n(o)n(c)n(e)n(e)n(dings)j(of)1196 1170 y(the)16 b(8th)f(A)o(CM)f(Symp)n(osium)i(on)f(Op)n(er)n(ating)h(Systems) 1196 1209 y(Principles)p fl(,)d(pages)d(64{75,)g(Decem)o(b)q(er)f(1981.)1006 1266 y([Stev)o(ens)h(90])19 b(Stev)o(ens,)32 b(R.)68 b fa(Unix)30 b(Network)g (Pr)n(o)n(gr)n(amming)p fl(.)1196 1305 y(Pren)o(tice-Hall,)9 b(1990.)1006 1361 y([Thekk)n(ath)h(et)h(al.)g(93])20 b(Thekk)n(ath,)14 b(C.)i(A.,)h(Nguy)o(en,) e(T.)h(D.,)h(Mo)o(y)m(,)1196 1400 y(E.,)d(and)e(Lazo)o(wsk)n(a,)f(E.)i(D.)20 b (Implemen)o(t)o(ing)10 b(Net)o(w)o(ork)1196 1440 y(Proto)q(cols)i(at)h(User)g (Lev)o(el.)20 b(In)12 b fa(Pr)n(o)n(c)n(e)n(e)n(dings)17 b(of)e(SIG-)1196 1479 y(COMM)e('93)p fl(,)f(Septem)o(b)q(er)c(1993.)1006 1535 y([Tsc)o(h)o(udin)i (91])20 b(Tsc)o(h)o(udin,)9 b(C.)k(Flexible)8 b(Proto)q(col)g(Stac)o(ks.)j (In)f fa(Pr)n(o-)1196 1575 y(c)n(e)n(e)n(dings)i(of)f(the)f(SIGCOMM)f('91)h (Symp)n(osium)p fl(,)h(pages)1196 1614 y(197{204,)f(Septem)o(b)q(er)e(1991.) 1006 1670 y([V)m(o)o(ydo)q(c)o(k)i(&)i(Ken)o(t)f(83])20 b(V)m(o)o(ydo)q(c)o (k,)d(V.)g(L.)g(and)f(Ken)o(t,)i(S.)f(T.)32 b(Se-)1196 1710 y(curit)o(y)9 b (Mec)o(hanisms)g(in)h(High-Lev)o(el)e(Net)o(w)o(ork)i(Proto-)1196 1749 y(cols\ .)29 b fa(A)o(CM)17 b(Computing)h(Surveys)p fl(,)h(15\(2\):135{)o(171)o(,) 1196 1789 y(June)11 b(1983.)1006 1845 y([Wilk)o(es)g(92])20 b(Wilk)o(es,)9 b (M.)14 b(The)c(Case)h(for)e(a)i(New)g(Approac)o(h)d(to)i(Op-)1196 1884 y(erat\ ing)16 b(Systems)f(for)i(P)o(ersonal)e(W)m(orkstations.)30 b(In)1196 1923 y fa (Pr)n(o)n(c)n(e)n(e)n(ding)q(s)23 b(of)d(the)i(Thir)n(d)e(Workshop)h(on)g(Wor\ k-)1196 1963 y(station)14 b(Op)n(er)n(ating)h(Systems)p fl(,)e(pages)e(164{16\ 7,)g(April)1196 2002 y(1992.)1006 2058 y([Y)m(uhara)f(et)i(al.)f(94])19 b(Y)m (uhara,)e(M.,)h(Bershad,)e(B.)h(N.,)h(Maeda,)f(C.,)1196 2098 y(and)11 b(Moss,) g(J.)g(E.)g(B.)k(E\016cien)o(t)c(P)o(ac)o(k)o(et)f(Dem)o(ultiplex)o(-)1196 2137 y(ing)j(for)g(Multiple)f(Endp)q(oin)o(ts)f(and)i(Large)f(Messages.)1196 2177 y(In)d fa(Pr)n(o)n(c)n(e)n(e)n(dings)k(of)e(the)f(1994)i(Winter)e(USENIX) h(Con-)1196 2216 y(fer)n(enc)n(e)p fl(,)j(Jan)o(uary)c(1994.)p eop eos %%Trailer end %%EOF