Category : Various Text files
Archive   : OOARTPS1.ZIP
Filename : ARTICLE1.PS

 
Output of file : ARTICLE1.PS contained in archive : OOARTPS1.ZIP
%!
/GlSave save def /TeXDict 200 dict def TeXDict begin /Resolution 300 def /Inch
{Resolution mul}def /Mtrx 6 array def /@letter{letter initmatrix 72 Resolution
div dup neg scale 310 -3005 translate Mtrx currentmatrix pop}def /@copies{
/#copies exch def}def /@restore /restore load def /restore{vmstatus pop dup
@VMused lt{pop @VMused}if exch pop exch @restore /@VMused exch def}def /@pri{
( )print( )cvs print}def /@FontMatrix[1
0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}
def /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 128 array def /BuildChar{CharBuilder}def
/Encoding 128 array def 0 1 127{Encoding exch /.undef put}for end newname
newname load definefont setfont fontname{/foo setfont}2 array copy cvx def
fontname load 0 dmystr 5 string copy cvn cvx put}def /ch-image{ch-data 0 get}
def /ch-width{ch-data 1 get}def /ch-height{ch-data 2 get}def /ch-xoff{ch-data
3 get}def /ch-yoff{ch-data 4 get}def /ch-tfmw{ch-data 5 get}def /CharBuilder{
save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{
ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub
setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}
imagemask}if restore}def /dc{/ch-code exch def dup 0 get length 2 lt{pop[<00>
1 1 0 0 8.00]}if /ch-data exch def currentfont /BitMaps get ch-code ch-data
put currentfont /Encoding get ch-code dup( )cvs cvn put}def /bop{erasepage
initgraphics Mtrx setmatrix /SaveImage save def 0 0 moveto}def /eop{showpage
SaveImage restore}def /@start{@letter vmstatus pop /@VMused exch def pop}def
/@end{(VM used: )print @VMused @pri(. Unused: )print vmstatus @VMused sub @pri
pop pop(\n)print flush end GlSave restore}def /p{show}def /v{/dy exch neg def
/dx exch def /x1 currentpoint /y1 exch def def newpath x1 y1 moveto dx 0
rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x1 y1 moveto}def /li{
lineto}def /rl{rlineto}def /rc{rcurveto}def /np{/SaveX currentpoint /SaveY
exch def def newpath}def /st{stroke SaveX SaveY moveto}def /fi{fill SaveX
SaveY moveto}def /ellipse{/endangle exch def /startangle exch def /yrad exch
def /xrad exch def /y exch def /x exch def /savematrix matrix currentmatrix
def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix
setmatrix}def /a{moveto}def /delta 0 def /b{exch p dup /delta exch def 0
rmoveto}def /c{p delta 4 sub dup /delta exch def 0 rmoveto}def /d{p delta 3
sub dup /delta exch def 0 rmoveto}def /e{p delta 2 sub dup /delta exch def 0
rmoveto}def /f{p delta 1 sub dup /delta exch def 0 rmoveto}def /g{p delta 0
rmoveto}def /h{p delta 1 add dup /delta exch def 0 rmoveto}def /i{p delta 2
add dup /delta exch def 0 rmoveto}def /j{p delta 3 add dup /delta exch def 0
rmoveto}def /k{p delta 4 add dup /delta exch def 0 rmoveto}def /l{p -4 0
rmoveto}def /m{p -3 0 rmoveto}def /n{p -2 0 rmoveto}def /o{p -1 0 rmoveto}def
/q{p 1 0 rmoveto}def /r{p 2 0 rmoveto}def /s{p 3 0 rmoveto}def /t{p 4 0
rmoveto}def /w{0 rmoveto}def /x{0 exch rmoveto}def /y{3 -1 roll p moveto}def
/bos{/section save def}def /eos{section restore}def /@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
/DocumentInitState[matrix currentmatrix currentlinewidth currentlinecap
currentlinejoin currentdash currentgray currentmiterlimit]cvx def /startTexFig
{/psf$SavedState save def userdict maxlength dict begin currentpoint transform
DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
setlinewidth setmatrix itransform moveto /psf$ury exch psf$TeXscale def
/psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch
psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def
currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx
sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale
psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate
/DefFigCTM matrix currentmatrix def /initmatrix{DefFigCTM setmatrix}def
/defaultmatrix{DefFigCTM exch copy}def /initgraphics{DocumentInitState
setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix
DefFigCTM setmatrix}def /showpage{initgraphics}def @MacSetUp}def /doclip{
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 end statusdict /waittimeout 300 put
TeXDict begin @start bos /fa df[ 1F00030000001F00030000003F00010000003E00010000003E00008000007C00008000007C0000
8000007C0000400000F80000400000F80000400001F80000200001F00000200001F00000200003
F000001FFFFFE000001FFFFFE00000180007E00000080007C00000080007C0000004000F800000
04000F80000004000F80000002001F00000002001F00000002003F00000001003E00000001003E
00000001807E00000000807C00000000807C0000000040F80000000040F80000000040F8000000
0021F00000000021F00000000023F00000000013E00000000013E00000000017E0000000000FC0
000000000FC0000000000FC0000000000780000000000780000000000300000000000300000000
0003000000>46 50 -2 0 50]65 dc[<00003FE0000001FFFC000007F00F00001F800380003E00
00C0007800002000F000001001E000000803C000000807800000040F800000060F000000021F00
0000021E000000013E000000013C000000017C000000017C000000017C000000007800000000F8
00000000F800000000F800000000F800000000F800000000F800000000F800000000F800000000
F800000000F800000000F80000000078000000007C000000017C000000017C000000013C000000
013E000000031E000000031F000000030F000000070F80000007078000000F03C000000F01E000
001F00F000002F007800004F003E000087001F8003070007F01E030001FFF80300003FE001>40
51 -4 1 48]67 dc[<000000000F80FFFF80003860FFFF8000701007F00000F01003E00001E008
03E00001E00803E00003E00803E00003E00803E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00007C00003E00007800003E0000F800003E0001E000003E0007C000003E001
F0000003FFFF00000003E001F0000003E0003C000003E0000F000003E00007800003E00003C000
03E00001E00003E00001F00003E00000F00003E00000F80003E00000F80003E00000F80003E000
00F80003E00000F80003E00000F80003E00000F00003E00001F00003E00001E00003E00003E000
03E00007C00003E0000F800003E0003E000007E001FC0000FFFFFFF00000FFFFFF000000>45 50
-4 1 49]82 dc[<800FF000807FFC00C1F01E00C7000700EC000380F80001C0F00000E0E00000
E0E00000F0C0000070C00000788000007880000078800000788000007880000078000000F80000
00F8000000F0000001F0000003F0000007E000001FE00000FFC0000FFF8000FFFF0003FFFC0007
FFF8000FFF80001FF800003FC000003F0000007E0000007C000000F8000000F8000020F0000020
F0000020F0000020F0000060F000006070000060700000E0780000E0380001E03C0003E01E0006
E00F001C6007C0786001FFE020007F8020>29 51 -4 1 37]83 dc[<03FC03E00F0307F03E008F
087C005E0478003E04F8003E04F8003E04F8001E04F8001E04F8001E047C001E003C001E003E00
1E001F001E000F801E0003E01E0000FC1E00000FFE0000001E0000001E0000001E0008001E003E
001E003E001E003E001C003C003C0010003800100070000C00E0000303C00000FE0000>30 31
-3 0 33]97 dc[<0401F80006060F0006180380072001E0072000F007C0007007800078078000
3C0780003C0780003E0780001E0780001F0780001F0780001F0780001F0780001F0780001F0780
001F0780001F0780001F0780001E0780001E0780003C0780003C0780003807C0007807A0007007
9000E0078801C0078607000781FC00078000000780000007800000078000000780000007800000
0780000007800000078000000780000007800000078000000780000007800000078000000F8000
00FF800000FF80000007800000>32 50 -2 0 37]98 dc[<003F8000E0600380180700040F0002
1E00021E00013C00017C00007C0000780000F80000F80000F80000F80000F80000F80000F80000
F80000F800007800007C00087C003E3C003E1C003E1E001E0F000407000403801800E060003F80
>24 31 -3 0 29]99 dc[<001FC00000F0300001C00C00078002000F0002000E0001001E000080
3C0000803C0000007C00000078000000F8000000F8000000F8000000F8000000F8000000F80000
00FFFFFF80F8000780F80007807800078078000F807C000F003C000F001C000F001E001E000E00
1E0007003C000380380000E0E000003F8000>25 31 -2 0 29]101 dc[<7FFF007FFF0007E000
03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000
03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000
FFFFC0FFFFC003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000
03C00001C03801E07C00E07C00707C003838001C100007E0>22 50 -1 0 20]102 dc[<003FE0
0001C01C00070007001C0001C0380000E07000007070000070E0000038E0000038E0000038E000
0038E000003870000070300000F0180001E00E000FC003FFFF8007FFFF000FFFF8000E0000001C
0000001800000018000000180000001800000018000000087F000009C1C0000780E00007007000
0F0078001E003C001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C
001E003C000F007800070070080380E81C01C1C41C007F0308000000F0>30 47 -2 15 33]103
dc[ 80078007800780078007800780078007800F80FF80FF8007800000000000000000000000000000
000000000000000007000F801F801F800F800700>13 48 -2 0 18]105 dc[ 800780078007800780078007800780078007800780078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780078007
800780078007800F80FF80FF800780>14 50 -2 0 18]108 dc[ 01F800078000F000078000F000078000F000078000F000078000F000078000F000078000F00007
8000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F000
078000F000078000F000078000F000078000F000078000F00007C000F00007C000F00007A000F0
0007A001E0000F9001E000FF8C03C000FF830780000780FE0000>33 31 -2 0 37]110 dc[<00
1FC00000F0780001C01C0007800F000F0007801E0003C01E0003C03C0001E03C0001E07C0001F0
780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000
F0780000F0780000F03C0001E03C0001E01C0001C01E0003C00F0007800700070001C01C0000F0
7800001FC000>29 31 -2 0 33]111 dc[ 80000007800000078000000780000007800000078000000780000007800000078000000781F800
07860F000798038007A001E007A000F007C000F0078000780780007C0780003C0780003E078000
3E0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780
001E0780003E0780003C0780003C0780007807C0007807A000F00F9001E0FF8803C0FF86070007
81FC00>32 45 -2 14 37]112 dc[ 078000078000078000078000078000078000078000078000078000078000078000078000078000
07800007C00007C00007C00007C03807A07C0F907CFF907CFF8C180783E0>22 31 -2 0 25]
114 dc[<80FE00C301C0CC0060F00030F00038E00018E0001CC0001CC0001C80001C80003C8000
3C0000F80001F8003FF003FFE00FFFC01FFF003FF0007E0000F80000F00010E00010E00010E000
10E000306000303000701800F00E033001FC10>22 31 -2 0 26]115 dc[<001F000078C000E0
4001E02001C02003C01003C01003C01003C01003C01003C01003C01003C01003C00003C00003C0
0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0
00FFFFE01FFFE00FC00007C00003C00001C00001C00000C00000C00000C0000040000040000040
00004000004000>20 44 -1 0 25]116 dc[<001FC0FF80007030FF8001C008F80003C004F000
038002F000078001F000078001F000078001F000078000F000078000F000078000F000078000F0
00078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000
F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000F80
01F000FF801FF000FF801FF000078000F000>33 31 -2 0 37]117 dc[<1F8000000030400000
007030000000F810000000F808000000F80C000000700400000000040000000002000000000200
0000000100000000010000000001000000000080000000008000000001C000000001C000000001
C000000003E000000003E000000007D0000000079000000007900000000F080000000F08000000
1F040000001E040000001E040000003C020000003C020000007C01000000780100000078010000
00F000800000F000800001F000400001E000400001E000400003C000200003C000200007C00030
0007800038000FC0007C00FFF801FF80FFF801FF80>33 45 -1 14 35]121 dc /fb df[ 80FFFF80FFFF80FFFF80FFFF80FFFF80>17 6 -1 -11 23]45 dc[<7FFFFE7FFFFE7FFFFE00FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE00F8FE00FFFE00FFFE0007FE00007E00001E00000E00>23 39 -5 0 34]49 dc[<
FFFFFF80FFFFFF80FFFFFF807FFFFFC03FFFFFC01FFFFFC00FFFFFC0070001C0038001C001C001
C000E000E0007000E0003C00E0001E0000000F0000000780000003E0000003F0000001F8000000
FC000000FE0000007F0000007F8000003FC000003FC000003FE03C003FE07E001FE0FF001FE0FF
001FE0FF003FE0FF003FC0FE003FC07C007F803800FF001F03FE000FFFFC0003FFF00000FF8000
>27 39 -3 0 34]50 dc[<00FF800007FFF0001FFFFC003F01FE007C007F007E007F80FF007FC0
FF003FC0FF003FE0FF003FE07E003FE03C003FE000003FE000003FE000003FC000003FC000007F
8000007F0000007E000001FC0000FFF00000FFC0000007F0000001F8000001FC000000FE000000
FF000000FF000F007F801F807F803F807F803F807F803F807F803F80FF001F00FF000F81FE0007
FFFC0003FFF000007F8000>27 39 -3 0 34]51 dc[<007FFFF8007FFFF8007FFFF80000FE0000
00FE000000FE000000FE000000FE000000FE000000FE000000FE00FFFFFFF8FFFFFFF8FFFFFFF8
E0007E0070007E0038007E001C007E000E007E000E007E0007007E0003807E0001C07E0000E07E
0000E07E0000707E0000387E00001C7E00000E7E00000E7E0000077E000003FE000001FE000000
FE000000FE0000007E0000003E0000001E0000000E00>29 39 -2 0 34]52 dc[<00FF800003FF
F0000FFFF8001F01FE003C007F0078003F8078003F80FC001FC0FE001FC0FE001FE0FE001FE0FE
001FE07C001FE018001FE000001FE000001FE000001FC000001FC000001F800C003F000E003E00
0F80FC000FFFF8000E7FC0000E0000000E0000000E0000000E0000000E0000000E0000000FFE00
000FFFC0000FFFE0000FFFF0000FFFF8000FFFFC000FFFFE000F803F000C000300>27 39 -3 0
34]53 dc[ FF0000E00001FE0000E00001FE0000700003FC0000700003FC0000780007FC00003FFFFFF80000
3FFFFFF800001FFFFFF000001C000FF000001E001FF000000E001FE000000E003FE0000007003F
C0000007003FC0000007807FC0000003807F80000003C0FF80000001C0FF00000001C0FF000000
00E1FE00000000E1FE00000000F3FE0000000073FC0000000073FC000000003FF8000000003FF8
000000003FF8000000001FF0000000001FF0000000000FE0000000000FE0000000000FE0000000
0007C00000000007C00000000003800000>47 41 -2 0 52]65 dc[<00003FF800000003FFFF00
00000FFFFFC000003FF007E00000FF8000F80001FE00003C0003FC00001E0007F000000E000FF0
000007001FE0000007001FE0000003803FC0000003803FC0000003807FC0000003807F80000000
007F8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
00000000FF8000000000FF8000000000FF80000000007F80000000007F80000003807FC0000003
803FC0000003803FC0000007801FE0000007801FE0000007800FF000000F8007F000001F8003FC
00003F8001FE00007F8000FF8001FF80003FF007DF80000FFFFF87800003FFFE038000003FF001
80>41 41 -4 0 50]67 dc[ 0001F803FC0000F803FC00007803FC00003803FC00003C03FC00001C03FC00001C03FC00001C03
FC01C01C03FC01C00E03FC01C00E03FC01C00E03FC03C00003FC03C00003FC0FC00003FFFFC000
03FFFFC00003FFFFC00003FC0FC00003FC03C00003FC03C00003FC01C03803FC01C03803FC01C0
3803FC01C07803FC00007003FC00007003FC00007003FC0000F003FC0001F003FC0001F003FC00
07F003FC001FE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0>39 41 -3 0 45]69 dc[ FFFC0000FFFFFC000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
03FC00000003FC00000003FC00000003FC03800003FC03800003FC03800003FC03800003FC0780
0003FC07800003FC1F800003FFFF800003FFFF800003FFFF800003FC1F800003FC07800003FC07
800003FC03800003FC03807003FC03807003FC03807003FC0000F003FC0000E003FC0000E003FC
0000E003FC0001E003FC0001E003FC0003E003FC000FE003FC003FC0FFFFFFFFC0FFFFFFFFC0FF
FFFFFFC0>36 41 -3 0 43]70 dc[ 01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC>22 41 -2 0 26]73 dc[ FFF001FFF8FFFFF003FE1C03FC0007F80E03FC000FF80703FC001FF80703FC001FF00703FC001F
F00003FC001FF00003FC001FF00003FC001FE00003FC001FE00003FC001FE00003FC001FE00003
FC001FE00003FC001FC00003FC003F800003FC003F800003FC007F000003FC00FC000003FFFFF0
000003FFFFFE000003FC007FC00003FC001FE00003FC0007F80003FC0007F80003FC0003FC0003
FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003
FC0003FC0007FC0003FC0007F80003FC000FF00003FC007FE000FFFFFFFF8000FFFFFFFE0000FF
FFFFE00000>48 41 -3 0 52]82 dc[ E0F80003F0F00001F0F00001F0E00001F8E00001F8E00001F8600001F8000003F8000007F80000
0FF800007FF00007FFF000FFFFE003FFFFE007FFFFC00FFFFF801FFFFE003FFFFC007FFFE0007F
FE0000FFC00000FF000000FE0000E0FE0000E0FC0000E0FC0001E0FC0001E07C0001E07C0003E0
3E0007E01F001FE00F807FE007FFF9E003FFF0E0007F8060>29 41 -4 0 38]83 dc[<01FC03FC
0FFF0FFC3F839FFC7F00DF807E007F80FE003F80FE003F80FE003F80FE003F807F003F803F003F
803F803F800FE03F8007FC3F8000FFFF80000FFF8000003F8000003F8000003F8007003F800F80
3F801FC03F001FC07E001FC07E000F81F80007FFF00001FF8000>30 27 -2 0 33]97 dc[<0E01
FC00000F07FF80000F9E07E0000FF803F0000FF001F8000FE000FC000FE000FE000FE0007F000F
E0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F80
0FE0007F800FE0007F000FE0007F000FE0007F000FE000FE000FE000FC000FF000F8000FF801F0
000FFE07E0000FE7FF80000FE1FE00000FE00000000FE00000000FE00000000FE00000000FE000
00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000FFE0
000000FFE0000000FFE0000000>33 42 -2 0 38]98 dc[<001FE00000FFFC0003F01E0007E007
000FC003801F8001C03F8001C07F8000007F0000007F000000FF000000FF000000FF000000FF00
0000FF000000FF000000FF0000007F0000007F0000007F800E003F801F001F803F800FC03F8007
E03F8003F01F0000FFFE00001FF800>26 27 -2 0 31]99 dc[<003FC3FF8000FFF3FF8003F03B
FF8007C00FF8000F8007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF00
03F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F
0003F8007F0003F8003F8003F8001F8003F8000FC007F80007E00FF80003F03FF80000FFFBF800
001FE3F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
00000003F800000003F800000003F800000003F800000003F80000003FF80000003FF80000003F
F800>33 42 -2 0 38]100 dc[<001FF00000FFFE0003F81F0007E003800FC001C01F8000E03F
8000E07F0000007F0000007F000000FF000000FF000000FF000000FFFFFFE0FFFFFFE0FF0007E0
FF0007E07F0007E07F0007C07F000FC03F800FC01F800F800F801F8007C01F0003F07E0001FFF8
00003FE000>27 27 -2 0 32]101 dc[<7FFF807FFF807FFF8007F00007F00007F00007F00007
F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007
F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007
F00007F03E07F07F03F07F03F87F01F87F00FE3E003FFC0007F0>24 42 -2 0 21]102 dc[<00
7FF00003FFFE000FC01F801F0007C03C0001E07C0001F0F80000F8F80000F8F80000F8F80000F8
7C0001F83E0007F01FFFFFF007FFFFE00FFFFFC01FFFFF801FFFFF003FFFF8003E0000003C0000
00380000003800000018FF80001FFFE0000FC1F8001F80FC001F007C003F007E007F007F007F00
7F007F007F007F007F007F007F007F007F003F007E101F007C381F80FC7C0FC1FE7C03FFE7F800
FF81F0>30 40 -2 13 34]103 dc[ 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFE0FFE0FFE0000000000000000000
000000000007000FC01FE03FE03FE03FE01FE00FC00700>15 43 -3 0 20]105 dc[ FFFC3FFEFFFC3FFE0FC00FE00FC00FC00FC01FC00FC03F800FC07F000FC07F000FC0FE000FC1FC
000FE3F8000FF3F8000FFFF0000FFFE0000FEFE0000FE7C0000FE3C0000FE0E0000FE078000FE0
3C000FE01E000FE00F000FE007800FE01FFC0FE01FFC0FE01FFC0FE000000FE000000FE000000F
E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000FFE00000
FFE00000FFE00000>31 42 -2 0 36]107 dc[ E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFE0FFE0FFE0>15 42 -3 0 20]108 dc[ FE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF80FE001FC003F800FE001FC003F800FE001FC00
3F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F
800FE001FC003F800FE001FC003F800FF001FE003F800FF001FE003F800FD801FF003F800FCC01
F9803F000FC603F8C07F00FFC383F0707E00FFC1FFE03FFC00FFC07F800FF000>53 27 -3 0 58
]109 dc[ 000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FF003F8000FF003F8000FD803F8000FD8
03F0000FCE03F000FFC787E000FFC1FFC000FFC07F0000>33 27 -3 0 38]110 dc[<003FE000
01FFFC0007F07F000FC01F801F800FC03F800FE03F800FE07F0007F07F0007F0FF0007F8FF0007
F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F07F0007F03F00
07E03F800FE01F800FC00FC01F8003F07E0001FFFC00003FE000>29 27 -2 0 34]111 dc[ FE000000FFFE000000FFFE0000000FE00000000FE00000000FE00000000FE00000000FE0000000
0FE00000000FE00000000FE00000000FE00000000FE1FC00000FE7FF80000FFE0FE0000FF803F0
000FF001F8000FE001FC000FE000FE000FE000FF000FE000FF000FE0007F000FE0007F800FE000
7F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0
00FF000FE000FE000FE000FC000FF001F8000FF803F000FFFE07E000FFE7FF8000FFE1FE0000>
33 39 -2 12 38]112 dc[ 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FF01C0FF03E0FF07F
0FD87F0FD87FFFCE3EFFC7FCFFC1F0>24 27 -2 0 28]114 dc[ F80038F00038F0003CE0003C60007C0000FC0003FC00FFF807FFF81FFFF03FFFE07FFF807FFE00
FFE000FC0000F80070F00070F000707000703800F01E03F00FFFF003FE30>22 27 -2 0 27]
115 dc[<001F8000FFC001F86003F87003F03807F03807F03807F03807F03807F03807F03807F0
0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000FFFF
F0FFFFF01FFFF007F00003F00003F00001F00000F00000F00000F0000070000070000070000070
00>21 38 -1 0 27]116 dc[<003FC3FF8001FFF3FF8003F03BFF8007E00FF80007E007F8000F
E007F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FE003F8000FE003F800FFE03FF800FFE03FF800FFE03FF800>33 27 -3 0 38]
117 dc[<00078003C00000078003C000000FC007E000000FC007E000000FC007E000001FE00FF0
00001FE00FF000003FF01FF800003FF01FB800003FF01FB800007F783F3C00007F383F1C0000FF
383F1E0000FE1C7E0E0000FE1C7E0E0001FE1EFC0F0001FC0EFC070001FC0EFC070003F807F803
8003F807F8038007F807F803C007F003F001C007F003F001C00FE007E000E0FFFE7FFC0FFEFFFE
7FFC0FFEFFFE7FFC0FFE>47 27 -1 0 50]119 dc[ 07F00001C00FE00001E01FE00000F01FC00000783F8000003C7F0000001EFE0000001FFE000000
0FFC00000007F800000007F00000000FF00000000FF00000001FF00000003FF80000007F3C0000
00FF1E000000FE0F000001FC07800003F807800007F003C000FFFC0FFF00FFFC0FFF00FFFC0FFF
00>33 27 -1 0 36]120 dc /fc df[14 4 -1 -9 19]45 dc[<387CFEFE
FE7C38>7 7 -4 0 16]46 dc[<7FFFE07FFFE001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F800FFF800FFF80001F800007800001800>19 32 -4 0 28]
49 dc[ 00003800003E00001F00000F800007C00007E00003F00003F00003F83803F87C01F8FE01F8FE03
F8FE03F8FE03F07C07F07007E03C1FC00FFF0003FC00>21 32 -3 0 28]50 dc[<01FE000FFFC0
1E07F07801F87E01FCFF00FCFF00FEFF00FEFF00FE7E00FE3C00FE0000FC0000FC0001F80001F0
0007C001FF0001FE00001F800007C00003E00003F01F03F01F03F83F81F83F81F83F81F83F03F0
1E03F00F07E007FFC000FE00>23 32 -2 0 28]51 dc[<00FFFE00FFFE0007E00007E00007E000
07E00007E00007E00007E0FFFFFEFFFFFEE007E07007E03807E01807E00C07E00E07E00707E003
07E00187E001C7E000E7E00077E00037E0001FE0001FE0000FE00007E00003E00003E00001E000
00E0>23 32 -2 0 28]52 dc[<03F8000FFF001C1F803007C07007E0FC03F0FC03F0FE03F8FE03
F87C03F83803F80003F80003F80003F00003F01803E01807E01E0FC01FFF0019FC001800001800
001800001800001BC0001FF8001FFE001FFF001FFF801FFFC01E01E0100020>21 32 -3 0 28]
53 dc[ 018001FC00018001FC0000FFFFF80000FFFFF80000E007F800006007F00000600FF00000300FE0
0000300FE00000381FE00000181FC00000183FC000000C3F8000000C3F8000000E7F800000067F
00000006FF00000003FE00000003FE00000003FE00000001FC00000001FC00000000F800000000
F800000000F8000000007000000000700000>37 34 -2 0 42]65 dc[ 07F001FE0007F0007F0007F0003F8007F0003F8007F0001FC007F0001FC007F0001FC007F0001F
C007F0001FC007F0001FC007F0001F8007F0003F8007F0003F0007F0007E0007F001FC0007FFFF
F00007FFFFF00007F003F80007F000FC0007F000FE0007F0007E0007F0007F0007F0007F0007F0
007F0007F0007F0007F0007F0007F0007E0007F0007E0007F000FC0007F001F800FFFFFFE000FF
FFFF8000>34 34 -2 0 40]66 dc[<0003FE0000001FFFC00000FF00F00001F800380003F0000C
0007C00006000F800003001F800003003F000003803F000001807F000001807E000001807E0000
0000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
0000007E000001807E000001807F000001803F000003803F000003801F800007800F8000078007
C0000F8003E0001F8001F8003F8000FF01E380001FFF81800003FE0080>33 34 -3 0 40]67 dc
[ 000607F0000307F0180307F0180307F0180007F0180007F0380007F0780007FFF80007FFF80007
F0780007F0380007F0180007F0180607F0180607F0180607F0000607F0000E07F0000E07F0000C
07F0001C07F0003C07F000FCFFFFFFFCFFFFFFFC>32 34 -2 0 37]69 dc[ 07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0180007F018
0007F0180007F0180007F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0
180007F0180C07F0180C07F0000C07F0000C07F0001C07F0001C07F0001807F0003807F0007807
F001F8FFFFFFF8FFFFFFF8>30 34 -2 0 35]70 dc[ 0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
00FFFFE0FFFFE0>19 34 -1 0 21]73 dc[ 8007E006001F8007E006001F8007E006003FC007E006003FC007E006007E6007E006007E6007E0
0600FC3007E00600FC3007E00601F81807E00601F81807E00601F81807E00603F00C07E00603F0
0C07E00607E00607E00607E00607E0060FC00307E0060FC00307E0060FC00307E0061F800187E0
061F800187E0063F0000C7E0063F0000C7E0067E000067E0067E000067E006FC000037E006FC00
0037E006FC000037E007F800001FE0FFF800001FFFFFF000000FFF>48 34 -2 0 53]77 dc[<80
FF80C7FFE0FF00F8FC003CF0003CE0001EE0001EC0001FC0001FC0001F00003F00003F00007F00
03FF003FFE03FFFE0FFFFC1FFFF83FFFF07FFFC07FFF00FFE000FF0000FC0000FC000CF8000CF8
000C78001C78001C7C003C3C007C1F03FC07FF8C01FC04>24 34 -3 0 31]83 dc[<03FFFFF800
03FFFFF8000003F800000003F800000003F800000003F800000003F800000003F800000003F800
000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8
00000003F800000003F800000003F800000003F800000003F80000C003F800C0C003F800C0C003
F800C0C003F800C0E003F801C0E003F801C06003F801807003F803807803F807807E03F80F807F
FFFFFF807FFFFFFF80>34 34 -2 0 39]84 dc[<0000380000000038000000007C000000007C00
000000FE00000000FE00000000FE00000001FF00000001FF00000003FD80000003F980000007F9
C0000007F0C0000007F0C000000FF06000000FE06000001FE03000001FC03000003FC03800003F
801800003F801800007F800C00007F000C0000FF00060000FE00060001FE00070001FC00030001
FC00030003F800018003F800018007F80000C007F00000C0FFFF800FFEFFFF800FFE>39 34 -1
0 42]86 dc[<07E03F1FF87F7E0CF87E02F0FC01F0FC01F0FC01F0FC01F07E01F03F01F01FC1F0
03FDF0003FF00001F00001F01E01F03F01F03F01E03F03E03F07C01FFF8007FC00>24 22 -2 0
27]97 dc[<180FC0001C3FF8001EE07C001FC03E001F801F001F001F801F000F801F000FC01F00
0FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000F801F000F801F001F001F
801E001FF07C001F3FF8001F0FE0001F0000001F0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F000000FF000000FF000000>26 35 -2 0 31]98 dc[<
00FE0007FF800FC0E01F00603E00307E00007E00007C0000FC0000FC0000FC0000FC0000FC0000
FC00007C00007C01E07E03F03E03F01F03F00F83F007FFE000FF80>20 22 -2 0 25]99 dc[<01
FC3FC007FF3FC00F83BE001E00FE003E007E007C003E007C003E00FC003E00FC003E00FC003E00
FC003E00FC003E00FC003E00FC003E00FC003E007C003E007E003E003E003E001F007E000F81FE
0007FFBE0001FC3E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000000
3E0000003E0000003E0000003E000001FE000001FE00>26 35 -2 0 31]100 dc[<00FF0003FF
C00FC0701F00303E00187E00007C00007C0000FC0000FC0000FC0000FFFFF8FFFFF8FC00F8FC00
F87C00F87C00F03E01F01E01E00F87C007FF8000FE00>21 22 -2 0 26]101 dc[<01FF000FFF
E03F01F87C007C78003CF0001EF0001EF0001EF0001E70003E3800FC1FFFFC0FFFF81FFFF03FFF
8038000030000030000013FC001FFF001F0F803E07C03C03C07C03E07C03E07C03E07C03E07C03
E03C03C03E07CF1F0F8F0FFF7F03FC1E>24 33 -2 11 28]103 dc[ 001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E001F003E001F003E001F803E001F803E001F403C001F307C001F1FF8001F07E0001F
0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000
1F000000FF000000FF000000>26 35 -2 0 31]104 dc[ 001F001F001F001F001F001F001F001F001F001F001F001F00FF00FF0000000000000000000000
000000001C003F007F007F007F003F001C00>11 36 -2 0 16]105 dc[ 003C001F007C001F00F8001F01F0001F01E0001F03E0001F07C0001F0F80001FCF00001FFF0000
1F7E00001F1C00001F0E00001F0700001F0380001F01C0001F0060001F0038001F00FF801F00FF
801F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00
00001F000000FF000000FF000000>26 35 -2 0 30]107 dc[ 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F00FF00FF00>11 35 -2 0 16]108 dc[ E0FFE01F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F801F801F001F801F801F001F403E403E001F303E303E00FF1FFC1FFC00
FF07F007F000>43 22 -2 0 48]109 dc[ 003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E001F803E001F803E001F403C001F307C00FF1FF800FF07E000>26 22 -2 0 31]110 dc[
<00FE0007FFC00F83E01F01F03E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC00
7EFC007E7C007C7C007C7C007C3E00F81E00F00F83E007FFC000FE00>23 22 -2 0 28]111 dc[
00001F0FC0001F3FF8001FE0FC001FC03E001F803F001F001F801F001F801F000FC01F000FC01F
000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F001F001F803E00
1FF07C00FF3FF800FF0FE000>26 32 -2 10 31]112 dc[ 1F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F83C01E87E01E87E0
1EC7E01E67E0FE3FC0FE1F00>19 22 -2 0 23]114 dc[ E00380C00380C00780000F8001FF000FFF003FFE007FF8007FE000FC0000F00300E00300E00300
600700781F003FFF000FF300>17 22 -2 0 22]115 dc[<00F80003FE0007C3000F83000F8180
0F81800F81800F81800F81800F80000F80000F80000F80000F80000F80000F80000F80000F8000
0F80000F8000FFFF00FFFF003F80000F8000078000078000038000038000018000018000018000
018000>17 32 -1 0 22]116 dc[<01FC3FC007FF3FC00F81BE001F00FE001F007E001F003E00
1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E
001F003E001F003E001F003E001F003E00FF01FE00FF01FE00>26 22 -2 0 31]117 dc[<000E
0000000E0000001F0000001F0000003F8000003F8000007FC000007CC000007CC00000F8600000
F8600001F0300001F0300003E0180003E0180007E01C0007C00C000FC00E000F8006000F800600
FFE01FE0FFE01FE0>27 22 -1 0 30]118 dc[ 0001C0F80000C1F0000063E0000037C000003FC000001F8000001F0000003F0000007F800000F9
800001F8C00003F0600003E0700007C038000F801C00FFE07FC0FFE07FC0>27 22 -1 0 30]
120 dc[<1F0000007F80000069C00000FC600000FC300000FC3800007818000000180000000C00
00000C0000000E0000000E0000001F0000001F0000003F8000003F8000007FC000007CC000007C
C00000F8600000F8600001F0300001F0300003E0180003E0180007E01C0007C00C000FC00E000F
8006000F800600FFE01FE0FFE01FE0>27 32 -1 10 30]121 dc /fd df[<03F003F0000E0C0E
0C003C031C04003800B802007800700300F000E00100F001D00100F003880000F007880000F007
040000700E020000701E020000301C010000183C00800008380080000470004000027000400001
F000200001E000300000E000380001C0007C0001E003FF8001D000000001C80000000388000000
038400000003820000000382000000038100000003810000000381000000038100000001810000
00018100000000C20000000062000000003C000000>33 37 -2 1 38]38 dc[<40201010080804
04040474FCFCF870>6 15 -4 10 14]44 dc[11 2 -1 -10 16]45 dc[<70F8F8F8
70>5 5 -4 0 14]46 dc[<01F000071C000C06001C07003803803803807803C07001C07001C070
01C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F0
01E0F001E07001C07001C07001C07001C03803803803801803000C0600071C0001F000>19 34
-2 1 24]48 dc[ 800380038003800380038003800380038003800380038003800380F3800F8003800080>15 33
-4 0 24]49 dc[<03F0000C1C001006002007004003804003C08001C0E001C0F001E0F001E070
01E00001E00001E00001E00001E00001C00001C0100380180380140700130E0010F80010000010
000010000010000010000010000013E0001FF8001FFE001FFF001E0700100080>19 34 -2 1 24
]53 dc[<01F000070C000C06001C03001803803801C03801C07001E07001E07001E0F001E0F001
E0F001E0F001E0F001E0F001C0F801C0F80380F40300F40600F30C00F0F8007000007000007800
003800003800001801801C03C00E03C00601C003008001C100007E00>19 34 -2 1 24]54 dc[<
03F0000E0E001803003000806000C0600040C00060C00060C00060C00060C000E06000E06001C0
3007C0100F80083F80067F0003FC0003F8000FF8001FC4003F02003E01007801807000C06000C0
6000C06000C02000C0200180100180080300060E0001F800>19 34 -2 1 24]56 dc[<000FFC00
007007C0008000780300000E0400000008000000080000001007C0F02018318820300B84406007
8440C0078241C0038281C003828380038283800382838003828380038283800382838003828380
038281C0038241C0038440C007844060040420300808201830081007C010080000200800002004
000040030001800080020000701C00000FE000>31 35 -3 0 38]64 dc[ 0000F00C0000F0040001E0040001E0040003E0020003C0020003C0030007C00100078001000780
00FFFF0000800F0000800F0000401E0000401E0000401E0000203C0000203C0000203C00001078
00001078000010F8000008F0000008F000000DF0000005E0000005E0000003C0000003C0000003
C000000180000001800000018000>32 35 -2 0 37]65 dc[ 03E0078001F0078001F0078000F8078000F8078000F8078000F8078000F8078000F8078000F007
8001F0078001E0078003C00780078007FFFE0007803E0007800F80078007C0078003E0078001E0
078001F0078001F0078001F0078001F0078001F0078001E0078003E0078003C0078007800F800E
00FFFFF800>29 34 -2 0 35]66 dc[<0007E00000381C0000E0020001C0010003800080070000
400E0000401E0000201C0000203C0000103C0000107C0000107800001078000000F8000000F800
0000F8000000F8000000F8000000F8000000F8000000F800000078000010780000107C0000103C
0000303C0000301C0000301E0000700E000070070000F0038000F001C0017000E0063000381830
0007E010>28 36 -3 1 35]67 dc[ 078000F007800078078000780780007C0780003C0780003C0780003E0780003E0780003E078000
3E0780003E0780003E0780003E0780003E0780003E0780003C0780003C0780003C0780007C0780
007807800078078000F0078000E0078001C0078003C0078007000F801E00FFFFF000>31 34 -2
0 37]68 dc[ 800010078000080780000807802008078020000780200007802000078060000780E00007FFE000
0780E0000780600007802000078020000780200007802020078000200780002007800020078000
600780004007800040078000C0078001C00F8007C0FFFFFFC0>29 34 -2 0 33]69 dc[ 000FC0000007800000078000000780000007800000078000000780000007800000078000000780
000007802000078020000780200007802000078060000780E00007FFE0000780E0000780600007
802000078020000780200007802020078000200780002007800020078000600780004007800040
078000C0078001C00F8007C0FFFFFFC0>27 34 -2 0 32]70 dc[ 078007800780078007800780078007800780078007800780078007800780078007800780078007
800780078007800780078007800FC0FFFC>14 34 -2 0 18]73 dc[<07C000187000203800401C
00F01E00F80E00F80F00F80F00700F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00000F00001F0003FFF0>20 35 -2 1 25]74 dc[ 078003000780030007800100078001800780018007800080078000800780008007800080078000
000780000007800000078000000780000007800000078000000780000007800000078000000780
00000780000007800000078000000780000007800000078000000780000007800000078000000F
C00000FFFE0000>25 34 -2 0 30]76 dc[ 0001E0040003E0040003E0040007A004000F2004000F2004001E2004003E2004003C2004007820
0400F8200400F0200401E0200401E0200403C0200407802004078020040F0020041F0020041E00
20043C0020047C00200478002004F0002004F0002005E0002007C0007007C000F8FF8007FF>32
34 -2 0 37]78 dc[<000FE00000783C0000E00E0003C00780078003C00F0001E00F0001E01E00
00F03E0000F83C0000787C00007C7C00007C7800003CF800003EF800003EF800003EF800003EF8
00003EF800003EF800003EF800003EF800003E7800003C7800003C7C00007C7C00007C3C000078
3C0000781E0000F00E0000E00F0001E0078003C003C0078000E00E0000783C00000FE000>31 36
-3 1 38]79 dc[<0000007C00FFFC01E2000FC003C100078007C08007800FC08007800F808007
800F800007800F800007800F800007800F000007800F000007800F000007800F000007800E0000
07801E000007801C00000780380000078070000007FFE0000007803C000007800E000007800780
00078007C000078003C000078003E000078003E000078003E000078003E000078003E000078003
C000078007C000078007800007800E00000F803C0000FFFFE00000>33 35 -2 1 36]82 dc[<81
FC00C60700C80180F000C0E000C0C00060C000608000708000708000708000700000700000F000
00F00001E00007E0003FC003FF800FFF001FFE003FF0007F0000780000F00000F00000E00020E0
0020E00020E00060E000606000607000E03001E01802600C0C6003F020>20 36 -3 1 27]83 dc
[<03FFFF00000FC000000780000007800000078000000780000007800000078000000780000007
800000078000000780000007800000078000000780000007800000078000000780000007800000
07800000078000000780000007800080078004800780048007800480078004C007800C40078008
400780084007800860078018780780787FFFFFF8>30 34 -2 0 35]84 dc[<0003F000001C0800
003006000060010000E0008001C0008003C0004003C00040038000400780002007800020078000
200780002007800020078000200780002007800020078000200780002007800020078000200780
002007800020078000200780002007800020078000200780002007800020078000200780002007
800020078000700FC000F8FFFC07FF>32 35 -2 1 37]85 dc[<00020000800000030001800000
070001C00000070001C00000070001C000000F8003E000000F8003E000000F8003E000001E4007
9000001E40079000001E40079000003C200F0800003C200F0800003C200F0800007C101E040000
78101E04000078101E040000F8183E060000F0083C020000F0083C020000F0083C020001E00478
010001E00478010001E00478010003C002F0008003C002F0008003C002F00080078001E0004007
8001E00040078001E000400F0003C000200F0003C000200F0003C000701F8007E000F8FFF03FFC
03FE>47 35 -1 1 50]87 dc[<0FC1E03C2390781708F00F08F00708F00708F007087007007807
003C07001E070007C70000FF000007000007000007001807003C0E003C0C001838000FE000>21
21 -2 0 24]97 dc[<083F000C41C00C80600F00700E00380E003C0E001C0E001E0E001E0E001E
0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00300E80600E61C00E1F000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E00001E0000FE00000E0000>23 35
-1 0 27]98 dc[<01F8000706000C01001C0080380040780040700000F00000F00000F00000F0
0000F00000F00000F000007000007800003803001C07800C078007030001FE00>18 21 -2 0 22
]99 dc[<01F0FE070CF00C02E01801E03800E07800E07000E0F000E0F000E0F000E0F000E0F000
E0F000E0F000E07000E07800E03800E01C01E00C02E00704E001F8E00000E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00001E0000FE00000E0>23 35 -2 0 27]
100 dc[<00FC000703000E00801C0040380020780020700000F00000F00000F00000F00000F000
00FFFFE0F000E07000E07801E03801C01C01C00C038007070001FC00>19 21 -1 0 22]101 dc[
<7FF8078007000700070007000700070007000700070007000700070007000700070007000700
0700FFF8070007000700070007000700070007000700030F038F018F00C6003C>16 35 0 0 15]
102 dc[<03FE000E03803800E0600030600030C00018C00018C000184000186000303800F00FFF
E00FFFC01FFE0018000018000010000010000019F0000F1C000E0E001C07001C07003C07803C07
803C07803C07801C07001C07000E0E18071E1801F198000070>21 33 -1 11 24]103 dc[ FF0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00
700E00700E00700F00700F00700E80E00E60C00E1F800E00000E00000E00000E00000E00000E00
000E00000E00000E00000E00000E00001E0000FE00000E0000>24 35 -1 0 27]104 dc[ 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E001E00FE000E
00000000000000000000000000000000001C001E003E001E001C00>10 34 -1 0 14]105 dc[<
3E006180F180F0C060E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E001E00FE001E000000000000000000000000000000000
01C003E003E003E001C0>11 44 2 10 15]106 dc[ C00E07800E07000E0E000E1E000F1C000EF8000E38000E10000E08000E04000E02000E01800E01
C00E01F00E03FC0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
001E0000FE00000E0000>23 35 -1 0 26]107 dc[ 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E001E00FE000E00>11 35 -1 0 14]108 dc[ 00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
3800E00E003800E00E003800E00E003800E00E003800E00E003800E00F003C00E00F003C00E01E
807201C0FE60E183800E1FC07F00>39 21 -1 0 42]109 dc[ 00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700F00700F
00701E80E0FE60C00E1F80>24 21 -1 0 27]110 dc[<01FC000707000E03801C01C03800E078
00F0700070F00078F00078F00078F00078F00078F00078F000787000707000703800E01800C00C
018007070001FC00>21 21 -1 0 24]111 dc[ 00000E00000E00000E00000E3F000E41C00E80E00F00700E00380E003C0E003C0E001E0E001E0E
001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00700E8060FE61C00E1F00>23 31
-1 10 27]112 dc[ 0F000F060F0F1E8FFE460E3C>16 21 -1 0 19]114 dc[<8FC0D030E018C008C00C800C800C80
1C003C01F80FF03FE07F80F000E008C008C008C018601830780F88>14 21 -2 0 19]115 dc[<
01F0030807080E040E040E040E040E040E040E000E000E000E000E000E000E000E000E000E000E
00FFF83E001E000E000600060006000200020002000200>14 31 -1 0 19]116 dc[<00FC7F03
82780601700E00F00E00F00E00700E00700E00700E00700E00700E00700E00700E00700E00700E
00700E00700E00700E00701E00F0FE07F00E0070>24 21 -1 0 27]117 dc[<00100000380000
380000380000740000740000E20000E20000E20001C10001C10003808003808003808007004007
00400E00200E00200E00301E0078FFC1FE>23 21 -1 0 26]118 dc[ 01E00201C0010380018700008E00004E00003C0000380000780000780000E40001C20003830003
81000700800E00C01F01F0FF83FE>23 21 -1 0 26]120 dc[<3C0000430000F18000F08000F0
400000400000200000200000200000100000100000380000380000380000740000740000E20000
E20000E20001C10001C1000380800380800380800700400700400E00200E00200E00301E0078FF
C1FE>23 31 -1 10 26]121 dc /fe df[11 2 0 -8 14]45 dc[ 000700070007000700070007000700070007000700070007000700070007000700070007000700
C700FF003F0007000100>13 28 -4 0 21]49 dc[ 01E000F00078003C001C001E000E000F000700074007400FC00FE00E601E701C38781FF007C0>
16 28 -2 0 21]50 dc[ 1C003C001C003C000FFFF8000FFFF8000E0078000600F0000700F0000700F0000381E0000381E0
000181C0000183C00001C3C00000C3800000C7800000E780000067000000670000002E0000003E
0000003E0000001C0000>25 29 -1 0 28]65 dc[ F00078F00078F00078F00078F000F0F001F0F003E0F03FC0FFFF80FFFE00FFFF80F007C0F001E0
F000F0F000F0F000F0F000F0F000F0F001E0F003C0F00F80FFFF00FFF800>21 29 -4 0 28]66
dc[<003F8000FFF003C0780780180F00081E00003C00003C0000780000780000780000F00000F0
0000F00000F00000F00000F00000F00000F00000F000007800007800007800003C00003C00001E
00000F000007803003C0F000FFF0003FC0>21 31 -3 1 27]67 dc[ E0F000F0F000F0F00078F0003CF0003CF0003CF0001EF0001EF0001EF0001EF0001EF0001EF000
1EF0001EF0001CF0003CF0003CF00038F00078F000F0F001F0F003E0F00F80FFFF00FFFC00>23
29 -4 0 30]68 dc[
4 29 -4 0 12]73 dc[ 7181E0E07181E0E07181E0E0F1C1E0E0E0C1E0E1E0E1E0E1E0E1E0E1C061E0E1C061E0E3C071E0
E3C071E0E38031E0E78039E0E70019E0E70019E0E70019E0EE000DE0EE000DE0EE000DE0FC0007
E0FC0007E0FC0007E0>27 29 -4 0 36]77 dc[<07F0001FFC007C0E00F00700E00380C0018000
01C00001C00001C00001C00003C00003C0000780001F8001FF0007FE001FFC003FE0007F000078
0000F00000E00000E00000E00000E000006000007003003807001C0F000FFE0003F800>18 31
-2 1 23]83 dc[<001C0000003E0000003E0000007B0000007300000073000000F3800000F180
0001E1C00001E1C00001E0C00003C0E00003C0E00003C0600007807000078070000F0038000F00
38000F0038001E001C001E001C003E000E003C000E003C000E00780007007800070078000700F0
000380F0000380>25 29 -1 0 28]86 dc[<3F1C7FDC7FFCF07CE01CE01CE01C781C3FFC0FFC00
FC001C001C401C70387FF83FF00FC0>14 18 -2 0 20]97 dc[ 0EE00EE00EE00EE00EE00EE01EF01CF87CFFF8EFF0E3E0E000E000E000E000E000E000E000E000
E000E000E000>15 29 -3 0 21]98 dc[<07E00FF81FFC3C1C70047000E000E000E000E000E000
E000700070043C1C1FFC0FF807E0>14 18 -2 0 18]99 dc[<0F8E1FEE3FFE7C3E701EF00EE00E
E00EE00EE00EE00EE00E700E700E7C3E3FFE1FEE0F8E000E000E000E000E000E000E000E000E00
0E000E000E>15 29 -2 0 21]100 dc[<07E01FF83FFC3C1C70047000E000E000E000FFFCFFFC
FFFC601C701878783FF01FE007C0>14 18 -2 0 18]101 dc[ 1CE01CE01CE01CE01CE01CE01CF01CF83CFFF8EFF0E3E0E000E000E000E000E000E000E000E000
E000E000E000>14 29 -3 0 21]104 dc[<707070707070707070707070707070707070000000
00000000F0F0F0F0>4 29 -2 0 10]105 dc[ E0E0E0E0E0E0E0E0E0>3 29 -3 0 10]108 dc[ E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0E00E00E0F00F00E0F81F
81E0FFFDFFC0EFF8FF80E3F03F00>27 18 -3 0 36]109 dc[ 1CE01CE01CE01CE01CE01CE01CF01CF83CFFF8EFF0E3E0>14 18 -3 0 21]110 dc[<03F0000F
FC001FFE003C0F00780780700380F003C0E001C0E001C0E001C0E001C0E001C07003807807803C
0F001FFE000FFC0003F000>18 18 -1 0 21]111 dc[ E3C0EFF0FFF8F87CF03CE01CE00EE00EE00EE00EE00EE00EE01EF01CF87CFFF8EFF0E3E0>15 26
-3 8 21]112 dc[ 80E780E380>9 18 -3 0 14]114 dc[<1FC07FE0FFF0F07880380038003800F01FE03FC07F00F0
00E000E000F0307FF03FF01FC0>13 18 -1 0 16]115 dc[<07C00FF01FF01C201C001C001C00
1C001C001C001C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00>12 24 -1
0 15]116 dc[<3F1C7FDCFFFCE07CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C
E01CE01C>14 18 -3 0 21]117 dc[ 0001E00001C00001E00003F0000738000E1C001C1C003C0E00780700700380>18 18 0 0 19]
120 dc[ 381C18381C381C780E700E700EE007E007>16 26 -1 8 19]121 dc /ff df[<00E001E0038007
000E001C001C0038003800700070007000E000E000E000E000E000E000E000E000E00070007000
7000380038001C001C000E000700038001E000E0>11 33 -6 4 22]40 dc[ 1C000E000E000700070003800380038001C001C001C001C001C001C001C001C001C00380038003
80070007000E000E001C0038007000E000C000>10 33 -5 4 22]41 dc[<01C00001C00001C000
01C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF8071C70001C00001C000
01C00001C000>17 18 -2 -4 22]42 dc[<01C00001C00001C00001C00001C00001C00001C000
01C000FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C000>17 19
-2 -3 22]43 dc[<60F0781C1E0E3E7E7E7C38>7 11 -7 6 22]44 dc[<70F8F8F870>5 5 -8 0
22]46 dc[<03E0000FF8001FFC001E3C003C1E00780F00700700700700F00780E00380E00380E0
0380E00380E00380E00380E00380E00380700700700700780F00380E001E3C001FFC000FF80003
E000>17 25 -2 0 22]48 dc[<7FF87FFC7FF80380038003800380038003800380038003800380
03800380038003807380FF807F800F800780038003800180>14 25 -4 0 22]49 dc[<7FFF80FF
FF807FFF803803801E03800F000003800001C00000E000007000003800001C00000E0000070000
0700000380000380600380F00380F00780E00700783E003FFC001FF80007E000>17 25 -2 0 22
]50 dc[<07E0001FF8003FFC00781E00E00700F00380F003806003800003800003803007003C0F
003FFE003FFC003BF0003800003800003800003800003800003800003800003FFE003FFE003FFE
00>17 25 -2 0 22]53 dc[<70F8F8F870000000000000000070F8F8F870>5 18 -8 0 22]58
dc[<40E070381C1C3C7C7C78380000000000000000387C7C7C38>6 24 -7 6 22]59 dc[<7FFF
00FFFF80FFFF80000000000000000000000000000000FFFF80FFFF807FFF00>17 11 -2 -7 22]
61 dc[<01F00007FC000FFE001F0F003C0700380380700380700380F00000E00000E00000E000
00E00000E00000E00000E00000F000007003807003803803803C07801F0F800FFF8007FB8001F1
80>17 25 -2 0 22]67 dc[<7FF800FFFE007FFF001C0F801C07801C03C01C01C01C01C01C00E0
1C00E01C00E01C00E01C00E01C00E01C00E01C00E01C01E01C01C01C01C01C03C01C07801C0F00
7FFF00FFFE007FF800>19 25 0 0 22]68 dc[<7FFFE0FFFFE07FFFE01C00E01C00E01C00E01C
00E01C00E01C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00001C01C01C
01C01C01C01C01C07FFFC0FFFFC07FFFC0>19 25 -1 0 22]69 dc[ 800380038003800380038003800380038003800380038003800380038003800380FFFEFFFEFFFE
>15 25 -3 0 22]73 dc[ E38039F38039B38039B38039B38039B3803BBB803B1B803B1B803B1B803B1B803B1B803A0B80FE
0FE0FE0FE0FC07E0>19 25 -1 0 22]77 dc[<7F0F00FF9F007F1F001C17001C37001C37001C37
001C77001C77001C67001C67001CE7001CE7001CE7001CC7001CC7001DC7001DC7001D87001D87
001D87001D07007F1FC0FF3FE07E1FC0>19 25 -1 0 22]78 dc[<7F03C0FF87E07F07E01C0E70
1C0E701C0E201C0E001C0E001C0E001C0E001C1C001FFC001FF8001FFC001C1E001C0F001C0700
1C07001C07001C07001C0F001C1E007FFC00FFF8007FE000>20 25 -1 0 22]82 dc[ FC00FFFE00F80F00E00700E00380600380000380000380000700000F0000FE0007FC001FF0003F
8000780000F00000E00000E00700E00700F00700781F003FFF001FFF0007E300>17 25 -2 0 22
]83 dc[<00E00001F00001F00001B00003B80003B80003B800031800071C00071C00071C00071C
00060C000E0E000E0E000E0E000E0E001C07001C07001C07001C0700380380FE0FE0FF1FE0FE0F
E0>19 25 -1 0 22]86 dc[ 00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF0FFF0FFF0>12
32 -8 3 22]91 dc[ 00700070007000700070007000700070007000700070007000700070FFF0FFF0FFF0>12 32 -1
3 22]93 dc[<0F83E03FE7E07FFFE0783E00E00E00E00E00E00E00700E003E0E001FFE0003FE00
000E00000E00300E00783C007FF8003FF0001FE000>19 18 -2 0 22]97 dc[<063C000EFF000F
FF800F83C00F01E00E00E00E00700E00700E00700E00700E00700E00700E00E00F00E00F83C00F
FF800EFF000E3E000E00000E00000E00000E00007E0000FE00007E0000>20 25 0 0 22]98 dc[
<03F00FF81FFC3E0E78077007F000E000E000E000E000E0007000780C3C1E1FFE0FFC03F8>16
18 -3 0 22]99 dc[<07C7E00FE7F01FFFE03C1F00700F00700F00E00700E00700E00700E00700
E00700E00700700700780F003C1F001FFF000FF70003C700000700000700000700000700003F00
007F00003F00>20 25 -1 0 22]100 dc[<03F00FFC1FFE3C0F78077007E000E000FFFFFFFFFF
FFE0077007780E3C1E1FFC0FF803E0>16 18 -3 0 22]101 dc[<3FFE007FFF003FFE0001C000
01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF00
7FFF0001C00001C00001C30001E78000FF80007F80001F00>17 25 -1 0 22]102 dc[<03F800
0FFE003FFF807C07C07001C0E000E0E000E0E000E0E000E07803C03FFF801FFF001FFC00180000
3800001BE0001FF0000FF8001C1C00380E00380E00380E00380E00380E001C1CC00FFFE007F7E0
03E3C0>19 28 -1 10 22]103 dc[<7FC7F0FFE7F87FC7F00E03800E03800E03800E03800E0380
0E03800E03800E03800E03800E03800F03800F87800FFF000EFE000E3C000E00000E00000E0000
0E00007E0000FE00007E0000>21 25 0 0 22]104 dc[<7FFFFFFF7FFF01C001C001C001C001C0
01C001C001C001C001C001C001C07FC07FC07FC00000000000000000018003C003C00180>16 26
-3 0 22]105 dc[<3F807FC0FFE0F0F06070003800380038003800380038003800380038003800
38003800380038003800380038003800381FF81FF81FF800000000000000000030007800780030
>13 35 -2 9 22]106 dc[ 01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
FFC000FFC000FFC000>17 25 -2 0 22]108 dc[ 3870E03870E03870E03870E03870E03870E03870E03C78E03C78E0FFFFE0FFEFC0F9C380>21 18
0 0 22]109 dc[<7FC7F0FFE7F87FC7F00E03800E03800E03800E03800E03800E03800E03800E
03800E03800E03800F03800F87807FFF00FEFE007E3C00>21 18 0 0 22]110 dc[<03E0000FF8
001FFC003C1E00780F00700700F00780E00380E00380E00380E00380E00380700700780F003C1E
001FFC000FF80003E000>17 18 -2 0 22]111 dc[<7FC000FFE0007FC0000E00000E00000E00
000E00000E00000E00000E3C000EFF000FFF800F83C00F01E00E00E00E00700E00700E00700E00
700E00700E00700E00E00F00E00F83C07FFF80FEFF007E3E00>20 27 0 9 22]112 dc[ FFFC00FFFC0007000007000007000007000007000007000007000007000007800007800007C000
07F040FF7FE0FF3FE0FF0FC0>19 18 -1 0 22]114 dc[ 3C07F81FF07F807000E01CE01CF03C7FFC3FFC0FEC>15 18 -3 0 22]115 dc[<00F80001FC00
03FE00078700070380070380070380070100070000070000070000070000070000070000070000
FFFF00FFFF007FFF00070000070000070000070000030000>17 23 -1 0 22]116 dc[<03E3F0
07FBF80FFFF00E0F800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0380
0E03807E1F80FE3F807E1F80>21 18 0 0 22]117 dc[<00E00001F00001F00003B80003B80003
B800071C00071C00071C00071C000E0E000E0E000E0E001E0F001C07007F1FC0FF1FE07F1FC0>
19 18 -1 0 22]118 dc[<0F1E000F1E000F1E001DB7001DB7001DB7001DB70019B30019F30019
F30038E380380380380380380380380380FF1FE0FFBFE0FF1FE0>19 18 -1 0 22]119 dc[<7F
1FC0FF3FE07F1FC00E0E00071C00073C0003B80001F00001E00000E00001F00003F00003B80007
3C000F1C007F1FC07F3FC07F1FC0>19 18 -1 0 22]120 dc[<3C00003F00007F80007BC00079
C00001C00000E00000E00000E00000F00000F00000F00001B80001B800039800039C00039C0007
1C00071C00070E000E0E000E0E000E07001C07007F1FC0FF9FE07F1FC0>19 27 -1 9 22]121
dc[<001F80007F8000FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001
C00003C0007F8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001E00000FF80007F80001F80>17 32 -2 3 22]123 dc[<7C0000FF0000FF
800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000FF0000
7F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003
C000FF8000FF00007C0000>17 32 -2 3 22]125 dc /fg df[<703E0000C8618000E470C000C6
6060000600600007007000070030000300380003803800038038000380380003801C0001C01C00
01C01C0001C01C0001C01C0001C00E0000E00E0000E00E0000E00E0000E00E0000E00700007007
00007007000070070007FFFFF80070038000380380003803800038038000380380003801C0001C
01C0001C0DC6000C0EC700060E670001FC3C>32 37 1 8 25]11 dc[<700000CC0000E40000C6
00000600000700000300000380000380380380640380E401C0E201C0E201C0E201C07001C07001
C07000E07000E03800E03800E03800E03800701C00701C00701C07FFFC00700000380000380000
3800003800001800001C03001C07000C030007030001FC>24 37 1 8 23]12 dc[<01FC00000E
03800018006000300010007000080060000400E0000200E0000200E0000100E0000100E0000100
7000E0807000E0803001608039C100801A2080800E1081000E1041000F1022000EE01A000E0004
000E0002000E000100070300800703804003018020038080200180807000C1007000630030003C
0000>28 31 -5 1 32]38 dc[<80402010080804043C3C3C18>6 12 -9 -17 13]39 dc[<0800
080010003000200060006000600060006000E000E000E000E000E0006000600060006000700070
00300030003800180018001C000C000C000600060003000300018000C000C00060003000180008
00060003>16 42 -5 11 17]40 dc[ 60006000300030003800180018001C000C000C000E000E00060006000600060007000700070007
0007000600060006000600060004000C000800100010>16 42 0 11 17]41 dc[<004000006000
006000006000006000003000003000003000003000001800001800001800FFFFFFFFFFFF000C00
000C00000C00000600000600000600000600000300000300000300000300000100>24 26 -6 3
32]43 dc[<804040201010080838783818>5 12 -3 8 13]44 dc[10 3 -3 -7
15]45 dc[<60F07830>5 4 -4 0 13]46 dc[ 00E000E000E000E000700070007000700038003800380038039C007C001C000C00060002>15 28
-4 0 21]49 dc[<80E00083F800C7F8007E0C0040060020020010020010010008000006000001
000000C000003000001800000C000E06001107001083801083800841C00841C00841C00441C004
41C00201C002018001018000C300003C00>18 29 -4 1 21]50 dc[<0C00000E00000E00000700
0007000007000003000003800003800001800001C00000C00000C0000060000060000060000030
00001000001800800800800C00400400400600601A003027003C61001FE08017E08009C040>18
29 -7 1 21]55 dc[<0F000030C000602000601000C01800C00C00C00C00600600600600600600
300E00180E00081E00063C0003780001F00003F00003CC00078600070300060180060180060180
0300C00300C0018080008180006100001E00>18 29 -4 1 21]56 dc[<7C0000860000818000E0
C000E0C000006000003000003800001800001C00079C000C6C00181E00181E00380E00380F0038
07003807003807001C03001C03001C03800C03800E030006030003030001830000C600003C00>
17 29 -5 1 21]57 dc[<60F0783000000000000000000000060F0F06>8 18 -4 0 13]58 dc[<
800040004000200010001000080008003800780038001800000000000000000000000000000000
00000000000300078007800300>9 26 -3 8 13]59 dc[ 0002001C0002001C0001001C0001801C0000801C0000401C00007FFC0000201C0000201C000010
1C0000181C0000081C0000041C0000041C0000023C0000023800000138000001B8000000B80000
0078000000780000003800000038000000180000001800>26 29 -2 0 31]65 dc[ 01E0000700780007003C0007001C0007001E0003800F0003800F0003800F0003800F0001C00F00
01C00F0001C00E0001C01C0000FFF80000E03C0000E00E0000E0070000700780007003C0007003
C0007001C0003801C0003801C0003801C0003803C0003C078001FFFE00>26 28 -3 0 29]66 dc
[<01F80000070600000C01800018004000380020007000100070000800F0000800F0000400F000
0400F0000400F0000000F0000000F0000000F00000007800000078000000780000003C0000003C
0000801C0000801E0000800E000080070000C0038001C001C001C000E003C0003002E0001E0C60
0003F020>27 30 -6 1 30]67 dc[ 038007000380078003800380038003C001C001C001C001E001C001E001C001E000E000F000E000
F000E000F000E000F0007000F00070007000700070007000F0003800E0003800E0003801C00038
01C0003C078001FFFE00>28 28 -3 0 31]68 dc[ 0400070004000380020003800200038001000381010001C0800001C0800001C0800001C0800000
FFC00000E0C00000E0400000E04000007020000070204000700040007000400038004000380040
0038004000380060003C00E001FFFFE0>27 28 -3 0 28]69 dc[ 0700000007000000070000000380000003800000038000000381000001C0800001C0800001C080
0001C0800000FFC00000E0C00000E0400000E04000007020000070208000700080007000800038
00800038008000380080003800C0003C01C001FFFFC0>26 28 -3 0 27]70 dc[<01F800000707
10000C00900018007800380038007000380070003800F0001C00F0001C00F0001C00F0001C00F0
001E00F001FFC0F0000000F00000007800000078000000780000003C0000003C0000801C000080
1E0000800E000080070000C0038001C001C001C000E003C0003002E0001E0C600003F020>27 30
-6 1 32]71 dc[ C00001C00001C00001C00000E00000E00000E00000E00000700000700000700000700000380000
3800003800003800003C0001FFC0>18 28 -2 0 16]73 dc[<3C000047000083800081C000C0C0
00E0E00060E000007000007000007000007000003800003800003800003800001C00001C00001C
00001C00000E00000E00000E00000E00000700000700000700000700000780007FF0>20 29 -5
1 22]74 dc[ 8070000380700001C0700001E0E00001D0E00001C8E00000E5C00000E1C00000E0C00000E04000
0070200000701000007004000070020000380100003800800038004000380030003C003C01FFC0
FF>32 28 -3 0 32]75 dc[ 03800801C00001C00001C00001C00000E00000E00000E00000E000007000007000007000007000
003800003800003800003800003C0001FFE0>21 28 -3 0 26]76 dc[ 0C0700E000040700E000040780E000040740E00002074070000207207000020720700002071070
000107103800010708380001070438000107043800008E021C00008E021C00008E011C00008E01
1C00004E008E00004E004E00004E004E00004E002E00002E002700002E001700002E001700002E
000F00003E00078001FE0007F8>37 28 -3 0 37]77 dc[ 0004003800040038000200740002007400020074000200E4000100E2000100E2000101C2000101
C2000081C10000818100008381000083810000438080004700800047008000470080002E004000
2E0040002E0040003C0060001C007001FC03FE>31 28 -3 0 31]78 dc[<03F800000E0E00001C
0380003801C0007800E0007000700070003800F0003C00F0001E00F0000E00F0000F00F0000F00
F0000780F0000780F0000780780003C0780003C0780003C03C0003C03C0003C01C0003C01E0003
C00E0003C0070003800380038001C0038000E0070000700E00001C1C000007F000>26 30 -6 1
32]79 dc[ 00000380000001C0000001C0000001C0000001FFE00000E0380000E00E0000E0070000E0078000
700380007003C0007003C0007003C0003801C0003801C0003801C000380380003C070001FFFC00
>26 28 -3 0 28]80 dc[<00001E00FFE079000F0078800700F0800700F0400700F0400700F000
0380700003807000038070000380700001C0700001C0700001C0600001C0C00000FFC00000E070
0000E01C0000E00E0000700F000070078000700780007007800038038000380380003803800038
0700003C0E0001FFF800>26 29 -3 1 30]82 dc[<83E000CC1800F00400600200600300600180
6001802000C02000C00000C00000C00001C00001C00007C0007F8001FF0003FC0003E000070000
07000006000006001006001003001803001801001800801800403C00304C000F84>22 30 -3 1
23]83 dc[<7FFE000003C0000001C0000001C0000001C0000001C0000000E0000000E0000000E0
000000E00000007000000070000000700000007000000038000000380000003800000038000000
1C0000801C0080801C0080401C0080400E0080600E0080200E0080300E00C01C0701C01FFFFFC0
>26 28 -7 0 30]84 dc[<0F800000104000003030000060080000E0040000E0040000E0020000
E0020000E0010000E0010000E00100007000800070008000700080007000800038004000380040
0038004000380040001C0020001C0020001C0020001C0020000E0010000E0010000E0010000E00
18000F001C007FF0FF80>25 29 -9 1 31]85 dc[<060000000600000007000000070000000780
000007C0000007400000072000000E2000000E1000000E1800000E0800000E0400000E0400000E
0200000E0200000E0100000E0080001E0080001C0040001C0040001C0020001C0010001C001000
1C0008001C0008001C0004001C000F00FF803FC0>26 29 -9 1 31]86 dc[<1000600000180060
000018007000001C007000001C007800001E007800001E007400001D007400001D807200001C80
7200001C407100001C407180001C207080001C207040001C107040001C107020001C087020001C
087010001C047010001C0470080038027008003802700400380170040038017002003800F00200
3800F0010038007001803C007001C0FF83FF0FF0>36 29 -9 1 41]87 dc[ 06001E0002001C0001001C0000803C00004038000060380000207000001070000008F0000004E0
000002E0000001E0000001C0000001C0000003C0000003A000000790000007080000070400000F
0200000E0100000E0180001E0080001C0060001E00F001FF81FE>31 28 -2 0 31]88 dc[<70F8
F8B08040402020100806>7 12 -8 -17 13]96 dc[<3C38626461E4C0E2C0E2E0E2E070E070E0
70E0707038703830383838181C0C3C063C03CC>15 18 -5 0 21]97 dc[<3C0063006180C1C0C0
C0E0E0E060E070E070E0707038703870387038383038303E6039C01C001C001C001C000E000E00
0E000E00070007003F00>13 29 -5 0 19]98 dc[<1F0030C06020E010E008E000E000E000E000
E0007000700030003838181C0C08070801F0>14 18 -5 0 19]99 dc[<3C380062640061E400C0
E200C0E200E0E200E07000E07000E07000E07000703800703800303800383800181C000C3C0006
3C0003DC00000E00000E00000E00000E00000700000700000700000700000380000380001F80>
17 29 -5 0 21]100 dc[<1F0030C060206010E008E000E000E000E000E0007F80706070103810
18080C10071001E0>13 18 -5 0 19]101 dc[<780000CC0000E60000C6000007000003000003
000003800003800003800001C00001C00001C00001C00001C00000E00000E00000E00000E00000
E00000700000700000700000700000700003FF80003800003800003800003800003800001C0000
1C00001C60000C700006700003C0>20 37 1 8 13]102 dc[<7E00C300E1C0C0C000E000E00070
00700F7018F01878303830383838381C381C381C381C1C0E1C0E0C0E0E0E0607030F018F00F3>
16 26 -3 8 19]103 dc[<601C00E03200707100707080703880703880383800381C00381C0038
1C001C0E001C0E001C0E001C0E000E0E000F0E000E8C000E780007000007000007000007000003
800003800003800003800001C00001C0000FC000>17 29 -3 0 21]104 dc[<3C007200720071
0071007100380038001C001C001C000E008E008E004700470026001C0000000000000000000000
00000000010003800180>9 28 -4 0 13]105 dc[<7800CE00E700C3000380038001C001C001C0
01C000E000E000E000E00070007000700070003800380438043802180218011800F00000000000
0000000000000000000006000E0006>15 36 1 8 13]106 dc[<603800E0640070E40070E20070
E20070E20038E00038E00039C0003F80001E00001D00001C80001C83000E43800E23800E11000E
0F0007000007000007000007000003800003800003800003800001C00001C0000FC000>17 29
-3 0 19]107 dc[<38006800E400E400E400E400700070007000700038003800380038001C001C
001C001C000E000E000E000E000700070007000700038003801F80>9 29 -4 0 11]108 dc[<30
0C01C0701C0320380E0710380E0708380E0388380E03881C0703801C0701C01C0701C01C0701C0
0E0380E00E0380E08E0380E08E0380E04703C0E04683A0E0266318C03C1E0780>29 18 -4 0 34
]109 dc[<300E00701900383880383840381C40381C401C1C001C0E001C0E001C0E000E07000E
07008E07008E07004707004687002646003C3C00>18 18 -4 0 23]110 dc[<1E00318060C0E0
60E030E038E018E01CE01CE01C700E700E300E380C180C0C0C071801E0>15 18 -5 0 21]111
dc[ 03000703800381800381C00381C00381C001C0E001C0E011C0E011C0E008E0C008E0C004D98007
8700>19 26 -1 8 21]112 dc[<3FF00780038003800380038001C001C03DC063C061E0C0E0C0
E0E0E0E070E070E070E0707038703830383838181C0C3C062C03C4>14 26 -5 8 19]113 dc[<
3000700038003800380038001C001C001C001C000E000E008E008E064707468726C23C3C>16 18
-4 0 18]114 dc[<1F0060C08060C030E03060300038007807F00FF01FC01F001C0018180C1C0C
08060801F0>14 18 -3 0 17]115 dc[<0E00190038803840384038401C001C001C001C000E00
0E000E000E00070007000700FFE0038003800380038001C001C001C000C0>11 26 -3 0 14]
116 dc[<078E001C59001839001838803838803838801C1C001C1C001C1C001C1C000E0E000E0E
00870E00870E004707004707002707001E0300>17 18 -4 0 22]117 dc[<07800C4018201810
380818081C081C041C041C040E020E02870287024706470E270E1E06>15 18 -4 0 19]118 dc[
<07C3C00C26301C1C10181C08181C04180C041C0E041C0E021C0E021C0E020E07010E07018707
018707014703834703872703871E0183>24 18 -4 0 28]119 dc[<70F0008B0800CB0400E704
0067020007020003800003800003800003800001C00001C00041C00041C30020E38010E3801991
00070E00>17 18 -3 0 19]120 dc[<3C0047008180E1C0E0C000E00070007007F01C70183818
38383838381C1C1C1C1C1C1C1C0E0E0E0E870E870E4707470727071E03>16 26 -4 8 20]121
dc[<81C043E067F03830100808080400020001000080004000200010100808380FEC07C20382>
15 18 -3 0 17]122 dc /fh df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE
3FFC1FF80FF003C0>16 16 -2 -2 21]15 dc /fi df[<7F87FC000E01C0000E01C0000E01C000
0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0
000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01
C0000E03C1800703C3C00303E3C001C1B180007E1F00>26 29 0 0 24]11 dc[<7F87F80E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C0FFFFC00E00000E00000E00000E00000E00000E01800E03C00703C003018001C180
007E00>21 29 0 0 23]12 dc[<7FCFF80E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00703C00303C001C1C0007FC0>21 29 0 0 23]13 dc[<7FC7FCFF80
0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C
000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E0
1C00FFFFFFFC000E00E000000E00E000000E00E000000E00E000000E00E000000E00E018000E01
E03C000701F03C000380F0180001C09C1800003F07E000>33 29 0 0 35]14 dc[<8080404020
20101010100808080808086868F8F8F0F06060>13 12 -1 -17 21]34 dc[<07C03E001830E180
3009C04070078040E0070020E00F0020E01C8000E03C4000E0384000607020006070200030E010
0010E0100009C0080005C00400038004000380060003800F0003C03FE007400000072000000710
0000071000000708000007080000070800000708000003080000030800000190000000E00000>
27 31 -2 1 32]38 dc[<804020101008080868F8F060>5 12 -4 -17 12]39 dc[<0040008001
00020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E000
E000E000E000E000E000600060006000700030003000180018000C000C00060002000100008000
40>10 42 -3 11 16]40 dc[<800040002000100018000C000C00060006000300030003800180
0180018001C001C001C001C001C001C001C001C001C001C001C001C00180018001800380030003
00060006000C000C0018001000200040008000>10 42 -2 11 16]41 dc[<0006000000060000
000600000006000000060000000600000006000000060000000600000006000000060000000600
0000060000FFFFFFE0FFFFFFE00006000000060000000600000006000000060000000600000006
0000000600000006000000060000000600000006000000060000>27 28 -2 4 32]43 dc[<8040
20201010101070F0F060>4 12 -4 8 12]44 dc[11 2 0 -8 14]45 dc[<60F0F060
>4 4 -4 0 12]46 dc[<07E00C301818300C300C700E60066006E007E007E007E007E007E007E0
07E007E007E007E007E007E00760066006700E300C300C18180C3003C0>16 29 -2 1 21]48 dc
[ 07000700070007000700C7003F0007000300>13 28 -4 0 21]49 dc[ 0C0106010300018000C0006000700038001C001C000E000E000F7007F807F807F80FF00F400E40
0C201C183007C0>16 28 -2 0 21]50 dc[<07E01830201C401CF00EF80FF80FF80F700F000F00
0F000E001C001C003007E0006000300018001C001C381E781E780E781E201C201C183007E0>16
29 -2 1 21]51 dc[<01FFC0001C00001C00001C00001C00001C00001C00001C00FFFFC0C01C00
401C00201C00301C00101C00081C000C1C00041C00021C00031C00011C00009C0000DC00005C00
003C00003C00001C00000C00000C00>18 28 -1 0 21]52 dc[<07C018702038401C401E800EF0
0FF00FF00F600F000F000F000F000E200E301C2818243023E02000200020002000200020003FC0
3FF03FF8300C>16 29 -2 1 21]53 dc[<03E00C301818300C300E700660076007E007E007E007
E007E007E006F00EF00CE818E430E3E0600070007000300C301E181E0C0E0604030C00F0>16 29
-2 1 21]54 dc[<03000007800007800007800007800007800007800003800003800003800003
800001800001800001C00000C00000C00000400000600000200000100000100080080080040080
04004002007FFF007FFF007FFF80400000>17 29 -2 1 21]55 dc[<07E01C10300C60046002C0
03C003C003C003C007600F601E307E18FC07F807F01FE03FB03E08780C70066006600660062006
200C10080C3003E0>16 29 -2 1 21]56 dc[<0F8030C0203070107818780C300C000E00060006
07C70C271817300F700F6007E007E007E007E007E007E006E006600E700C300C18180C3003C0>
16 29 -2 1 21]57 dc[<60F0F0600000000000000000000060F0F060>4 18 -4 0 12]58 dc[<
804020201010101070F0F0600000000000000000000060F0F060>4 26 -4 8 12]59 dc[ FFF01E001F000C001F0004001E0004001E0006003E0002003C0002003C0003007C0001FFF80001
0078000180F8000080F0000080F0000041E0000041E0000041E0000023C0000023C0000023C000
001780000017800000178000000F0000000F0000000F0000000600000006000000060000>28 29
-1 0 31]65 dc[ 000E0F001E0F003C0F00780FFFE00F01F00F00780F003C0F001C0F001E0F001E0F001E0F001E0F
001C0F003C0F00380F00F0FFFFC0>24 28 -2 0 29]66 dc[<001FC00000E03000018008000700
04000E0002001C0001001C00010038000080780000807800008070000080F0000000F0000000F0
000000F0000000F0000000F0000000F0000000F000000070000080780000807800008038000180
1C0001801C0003800E000380070007800180198000E06180001F8080>25 30 -2 1 30]67 dc[<
FFFFC0000F0070000F001C000F000E000F0007000F0007800F0003800F0003C00F0001C00F0001
C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F00
01C00F0003C00F0003800F0007000F0007000F000E000F003C000F00F000FFFFC000>27 28 -2
0 32]68 dc[ 0F02000F02000F06000FFE000F06000F02000F02000F02000F02020F00020F00020F00060F0004
0F00040F000C0F003CFFFFFC>24 28 -2 0 28]69 dc[ 00000F00000F00000F00000F02000F02000F02000F02000F06000FFE000F06000F02000F02000F
02000F02040F00040F00040F000C0F00080F00080F00180F0078FFFFF8>22 28 -2 0 27]70 dc
[<001F800000E060800180118007000B800E0007801C0007801C00078038000780780007807800
078070000780F0000F80F000FFF0F0000000F0000000F0000000F0000000F0000000F000000070
0000807800008078000080380001801C0001801C0003800E000380070007800180198000E06180
001F8080>28 30 -2 1 33]71 dc[ 0F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC000F003C
000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
3C000F003C00FFF3FFC0>26 28 -2 0 31]72 dc[ 0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF0>
12 28 -1 0 15]73 dc[<1F0021C040E0F0F0F878F878F8787078007800780078007800780078
007800780078007800780078007800780078007800780078007800F81FFF>16 29 -1 1 21]74
dc[ 01E0000F01E0000F83C0000F4780000F2780000F2F00000F1F00000F0E00000F0400000F020000
0F0100000F0080000F0040000F0020000F0010000F0008000F000C000F000F00FFF03FE0>28 28
-2 0 32]75 dc[ 00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00000F8000FFF800>21 28 -2 0 26]76 dc[ 00080780780008078078000807807800080F407800080F407800081E207800081E207800081E20
7800083C107800083C107800083C10780008780878000878087800087808780008F004780008F0
04780008F004780009E002780009E00278000BC00178000BC00178000BC00178000F8000F8000F
8000F800FF8000FF80>33 28 -2 0 38]77 dc[ 0008003C0008007C0008007C000800F4000801E4000801E4000803C4000807C40008078400080F
0400080F0400081E0400083C0400083C04000878040008F8040008F0040009E0040009E004000B
C004000F8004000F800E00FF007FC0>26 28 -2 0 31]78 dc[<003F800000E0E0000380380007
001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0
F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003
803C0007801C0007000E000E0007001C000380380000E0E000003F8000>27 30 -2 1 32]79 dc
[ 000FFF800F00E00F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00
780F00E0FFFF80>23 28 -2 0 28]80 dc[<000007C0FFF01C200F003C200F0038100F0078100F
0078100F0078000F0078000F0078000F0078000F0078000F0078000F00F0000F00E0000F03C000
0FFF00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F001C
000F003C000F0078000F01E000FFFF0000>28 29 -2 1 31]82 dc[<83F800CC0C00D00200E003
00C00180C001808001C08001C08001C00001C00003C00007C0000F8000FF8007FF001FFE003FF8
007FC0007C0000F80000F00000E00080E00080E00080E001806001807003803005801C198007E0
80>18 30 -2 1 23]83 dc[<03FFFC00001F8000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F0000000F0000800F0020800F0020800F0020C00F0020400F0040400F0040600F00C070
0F01C07FFFFFC0>27 28 -1 0 30]84 dc[<001F00000070C00000C02000018010000380100007
800800070008000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F000400
0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
000F0004000F0004000F000E00FFF07FC0>26 29 -2 1 31]85 dc[<0006000000060000000600
00000F0000000F0000001F8000001E8000001E8000003C4000003C4000003C4000007820000078
200000F8300000F0100000F0100001F0080001E0080001E0080003C0040003C0040003C0040007
800200078002000F8003000F0001000F0001801F0003C0FFE00FF0>28 29 -1 1 31]86 dc[<00
1800180000180018000018001800003C003C00003C003C00003C003C00003E007C00007A007A00
007A007A00007900FA0000F100F10000F100F10000F100F10001E081E08001E081E08001E081E0
8003E043C04003C043C04003C043C04003C02780400780278020078027802007801F00200F001F
00100F001F00100F001F00101E001E00181F001F003CFFE0FFE0FF>40 29 -1 1 43]87 dc[ C0FFF01F003F8006001F0002001E0003003C0001007C000080780000C0F8000041F0000021E000
0023E0000013C000000F8000000F8000000F0000001F0000001E0000003D0000007D8000007880
0000F0400001F0600001E0200003E0100003C01800078018000FC03E007FF0FFC0>28 28 -1 0
31]88 dc[ E00001E00000F00000F000007800007C00003C00001E00401E00400F00400F804007806003C060
03C07001E07C01F07FFFF0>20 28 -2 0 25]90 dc[ C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE>7 41 -4 10 12]91 dc[<30307878
F8F8B0B080808080808040404040202010100808>13 12 -6 -17 21]92 dc[ 0606060606060606060606060606060606060606060606060606060606060606FEFE>7 41 0 10
12]93 dc[<1F8700304E80603C40E01C40E01C40E01C40601C00701C00381C000F1C0001FC0000
1C00001C00301C00781C007838003070001FC000>18 18 -2 0 21]97 dc[<10F8001906001E03
001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01801E03
001D86001C7C001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FC00
00>19 29 -1 0 23]98 dc[<07C00C301808300470046000E000E000E000E000E000E000600070
30307818780C3007E0>14 18 -2 0 18]99 dc[<07C7E00C3700180F00300700700700600700E0
0700E00700E00700E00700E00700E00700600700700700300700180F000C170003E70000070000
0700000700000700000700000700000700000700000700000700003F00>19 29 -2 0 23]100
dc[<03E00C181804300270026000E000E000E000E000FFFEE0066006700E300C18180C3003E0>
15 18 -1 0 18]101 dc[<7FE00E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E00FFE00E000E000E000E000E000E000E0C061E071E018C00F8>15 29 0 0 13]102
dc[<07F8001C0E00300300600180C000C0C000C0C000C06001C03003801FFF801FFF001FF80018
000030000010000013C0000C30001C3800181800381C00381C00381C00381C001818001C38800C
38C003C4C0000380>18 28 -1 9 21]103 dc[ 03801C03801C03801C03801C03801C03801C03801C03801E03801D03001C87001C7C001C00001C
00001C00001C00001C00001C00001C00001C00001C00001C0000FC0000>20 29 -1 0 23]104
dc[ 0000000000000000000000000018003C003C001800>9 29 -1 0 12]105 dc[<3E006180F1C0F0
C060E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E00FE0000000000000000000000000000000C001E001E000C0>11 37 3 8 13]106 dc[<
FF9FE01C0F801C0F001C0E001C1C001C3C001C38001C78001E70001DE0001CE0001C40001C2000
1C10001C08001C0C001C0F001C3FC01C00001C00001C00001C00001C00001C00001C00001C0000
1C00001C0000FC0000>19 29 -1 0 22]107 dc[ 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FC
00>9 29 -1 0 12]108 dc[ C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C
01C01C001E01E01C001D019018001C83883800FC7E07E000>33 18 -1 0 36]109 dc[ 1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
1E03801D03001C8700FC7C00>20 18 -1 0 23]110 dc[<03F0000E1C00180600300300700380
600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F000
>18 18 -1 0 21]111 dc[ 1D06001E03001C01801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C0
1C01801E03001D8600FC7C00>19 26 -1 8 23]112 dc[<003FE0000700000700000700000700
00070000070000070007C7000C3700180F00300F00700700600700E00700E00700E00700E00700
E00700E00700700700700700300F00180B000C330003C100>19 26 -2 8 22]113 dc[ 001C001C001C001C001C001C001C001C001C001C001C001C301E781E781D30FCE0>13 18 -1 0
16]114 dc[<8FC0D060E010C018C0188018803800F80FF03FE07F80F800E010C010C010403030
701F90>13 18 -1 0 16]115 dc[<03C00E200C101C101C101C101C101C101C001C001C001C00
1C001C001C001C001C00FFE03C001C000C000C000400040004000400>12 26 -1 0 16]116 dc[
<03E3F00E1B800C07801C07801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C0380FC1F80>20 18 -1 0 23]117 dc[<00400000E00000E00000E0
0001D00001D00003D8000388000388000704000704000704000E02000E02001C01001C01003C03
80FF07E0>19 18 -1 0 22]118 dc[<008020000180300001C0700001C0700003C0680003A0E8
0003A0E8000720C4000711C4000711C4000E1182000E0B82000E0B82001C0B01001C0701001C07
01803C0F0380FF3FCFE0>27 18 -1 0 30]119 dc[ 00009C0000F80000780000700000F00001D80001C8000384000702000F03000F03807F8FF0>21
18 0 0 22]120 dc[<3C0000660000F30000F10000F0800000800000800000400000400000E000
00E00000E00001D00001D00003D8000388000388000704000704000704000E02000E02001C0100
1C01003C0380FF07E0>19 26 -1 8 22]121 dc[ 038003C041C040E040F04070603870387FFC>14 18 -1 0 18]122 dc[20 1 0 -11
21]123 dc /fj df[<60F07830>5 4 -3 0 11]46 dc[<87C000D86000601000600800400C0040
0C00200600000600000E00000E00007C0003FC0007F8000FC0000E00000C00000C01000C010006
0180060180030180018280007C40>18 23 -3 0 20]83 dc[<380066004300C100C180C18060C0
60C060C060C030C030C03880370018001800180018000C000C000C000C003E00>10 23 -4 0 16
]98 dc[<38E065904388C188C188C18060C060C060C030C0306018E008E0076000300030003000
300018001800180018007C>14 23 -4 0 18]100 dc[<3C004300C080C0408000C000C000C000
FF0040806040304018800700>10 14 -5 0 16]101 dc[<7C00C300E180618000C000C00EC019
C010E03060306030601830183018300C300C180638023801C8>13 20 -2 6 16]103 dc[<3824
626232301818188C4C4C4C38000000000000060703>8 23 -3 0 11]105 dc[<60D0D0D0D0C060
60606030303030181818180C0C0C0C3E>7 23 -4 0 9]108 dc[<303830261862186118311830
0C180C180C188C18460C470844983870>16 14 -3 0 20]110 dc[<3C004600C100818080C080
C0C060C060C06060606060304018C00780>11 14 -5 0 18]111 dc[<71C0CA20E610C6080608
06000300030003004300218C218E13460E3C>15 14 -2 0 16]120 dc /fk df[<000FC000007F
F80001F03E0003800700060001800C0000C01800006030000030300000306000001860000018C0
00000CC000000CC000000CC000000CC000000CC000000CC000000C600000186000001830000030
30000030180000600C0000C0060001800380070001F03E00007FF800000FC000>30 29 -2 6 35
]13 dc /fl df[ 07001C07001C0700FFFF001C00001C00001C00001C00001C02001C07000E070007820000FC00>
19 23 0 0 20]12 dc[<40402020101070F0F060>4 10 -3 -13 10]39 dc[<00300000300000
3000003000003000003000003000003000003000003000003000FFFFFCFFFFFC00300000300000
3000003000003000003000003000003000003000003000003000>22 24 -2 4 27]43 dc[<4040
2020101070F0F060>4 10 -3 6 10]44 dc[<60F0F060>4 4 -3 0 10]46 dc[<07C01C703018
701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C3018183007C0>15 21
-1 0 18]48 dc[<40402020101070F0F06000000000000060F0F060>4 20 -3 6 10]59 dc[ 03FE3800F01800E00800E00800E00401C00401C007FFC002038002038003078001070001070000
8E00008E00008E00005C00005C00005C00003800003800003800001000>23 23 -1 0 26]65 dc
[<00FC000383000E00801C0040380020300020700010600010E00010E00000E00000E00000E000
00E00000E000106000107000103000303800301C00700E00B003833000FC10>20 23 -2 0 25]
67 dc[ 000E000E000E000E00FFE0>11 23 -1 0 13]73 dc[ 601C00201C00201C00201C00001C00001C00001C00001C00001C00001C00001C00001C00001C00
001C00001C00001C0000FFC000>19 23 -1 0 22]76 dc[ 1001D01001D0100390100710100F10100E10101C1010381010381010701010E01011C01011C010
1380101700101F00101E0038FC00FE>23 23 -1 0 26]78 dc[<87E0D810E008C0048006800680
060006000E001C01FC0FF83FE07F007000E000C004C004C004400C601C302C0FC4>15 23 -2 0
20]83 dc[<07FFC000380000380000380000380000380000380000380000380000380000380000
38000038000038000038000038008038048038048038044038084038086038187FFFF8>22 23
-1 0 25]84 dc[<007E000181800300400600200E00201C00101C00101C00101C00101C00101C
00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C0038FF80FE>
23 23 -1 0 26]85 dc[ 5E00007C0000380000780000780000E80001E40001C2000382000781000700800E00801F01E0FF
83FC>23 23 -1 0 26]88 dc[<60F0F0E0808040402020>4 10 -3 -13 10]96 dc[<1F1E70FF
E079E039E039703830381E3803F800381038383038601FC0>16 14 -1 0 18]97 dc[<10F8001B
0E001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C03001F06001CF8001C
00001C00001C00001C00001C00001C00001C00001C0000FC0000>18 23 0 0 20]98 dc[<07C0
1830300870086000E000E000E000E000600070103038183807F0>13 14 -1 0 16]99 dc[<07CF
C0182E00301E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00300E001C3E0007CE
00000E00000E00000E00000E00000E00000E00000E00000E00007E00>18 23 -1 0 20]100 dc[
<07C01830301070086000E000E000E000FFF8E0187038303018600FC0>13 14 -1 0 16]101 dc
[ 1C200E70067003E0>12 23 0 0 11]102 dc[<0FE03838600CC006C006C006600E3FFC3FF83FE0
600020002F8018C03060707070707070306018E30F9E>16 21 -1 7 18]103 dc[ 001C07001C07001C07001C07001C07001C07001C07001C07001C07001E07001D8E001C7C001C00
001C00001C00001C00001C00001C00001C00001C0000FC0000>19 23 0 0 20]104 dc[ 1C1C1C1C1C1C1C1C1C1C7C0000000000183C3C18>8 23 0 0 10]105 dc[ 001C3C001C78001C70001CF0001FE0001CC0001C40001C20001C18001C1C001C3F801C00001C00
001C00001C00001C00001C00001C00001C0000FC0000>18 23 0 0 19]107 dc[ 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FC
00>9 23 0 0 10]108 dc[ C01C0701C01C0701C01C0701C01C0701C01E0781C01D8E6380FC7C1F00>29 14 0 0 30]109 dc
[ 00FC7C00>19 14 0 0 20]110 dc[<07C018303018701CE00EE00EE00EE00EE00E600C600C3018
183007C0>15 14 -1 0 18]111 dc[ 001C07001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C03001F0E00FCF800>18
20 0 6 20]112 dc[13
14 0 0 14]114 dc[<9F00E0C0C0608060806001E01FC07F80FF00E000C040C04060C01F40>11
14 -1 0 14]115 dc[<0F001C8038403840384038403800380038003800380038003800FF8038
0018001800080008000800>10 20 -1 0 14]116 dc[<03E7E00E17001C0F001C07001C07001C
07001C07001C07001C07001C07001C07001C07001C0700FC3F00>19 14 0 0 20]117 dc[<0180
018003C003C003C0072007200E100E101C081C083C0C3C0EFE1F>16 14 -1 0 19]118 dc[<03
03000303000703800787800787800E86400E4E400E4E401C4C201C3C201C3C20383810383838FC
FE7C>22 14 -1 0 25]119 dc[ 18FE3F>16 14 -1 0 19]120 dc[<7800A400E200E200010001000180018003C003C003C00720
07200E100E101C081C083C0C3C0EFE1F>16 20 -1 6 19]121 dc /fm df[ 0C000C000C000C000C000C000C000C000C000C000C000C00EC001C000C00>10 19 -3 0 17]49
dc[ 00>12 19 -2 0 17]50 dc[<1FC06070E038F018F01C601C001C0018003800700FC000E0003000
3870387038703830700FC0>14 19 -1 0 17]51 dc[<03FC00600060006000600060FFFCC06060
602060106008600C6006600260016000E000E00060>14 19 -1 0 17]52 dc[<1F0021C040E0E0
60E070E07000700070006040E070C04F0040004000400044007F807FC06060>12 19 -2 0 17]
53 dc[<0F0010C0206060204030C030C030C030C020E060D0C0CF00C00060006000207010700C
2007C0>12 19 -2 0 17]54 dc /fn df[<1F00318060C04040C060C060C060C060C060C060C0
60C060404060C031801F00>11 16 -1 0 15]48 dc[ 000C000C000C000C00CC003C000C00>9 16 -2 0 15]49 dc[ 00018000C000600060C060806040C061801F00>11 16 -1 0 15]50 dc[<1F0060808040C060C0
600060004000800F000180008000C060C060C021801F00>11 16 -1 0 15]51 dc[<1FE0030003
0003000300FFE0C30043002300330013000B000F00070003000300>11 16 -1 0 15]52 dc[<1F
00618080C0C060006000600060204030802F002000200020002C003F002080>11 16 -1 0 15]
53 dc[<1F00308060C04060C060C060C060E040F080CF00C000600060C030C018400780>11 16
-1 0 15]54 dc /fo df[ 0C00300C00300C00301800FFE000>17 14 -2 0 20]82 dc bop 302 125 a fa(Creating)22
b(Abstract)g(Sup)r(erclasses)e(b)n(y)h(Refactoring)235 267 y fd(William)14 b
(F.)i(Op)q(dyk)o(e)179 325 y(A)l(T&T)g(Bell)f(Lab)q(oratories)177 383 y(Nap)q
(erville,)f(Illinois)h(60566)202 441 y(op)q(dyk)o([email protected])1110 267 y
(Ralph)i(E.)f(Johnson)945 325 y(Departmen)o(t)f(of)h(Computer)g(Science)837
383 y(Univ)o(ersit)o(y)e(of)j(Illinois)d(at)j(Urbana-Champaign)1067 441 y(Urb\
ana,)f(Illinois)f(61801)1083 499 y([email protected])0 675 y fg(A)o(bstr)n
(act:)39 b(This)25 b(p)n(ap)n(er)h(fo)n(cuses)f(on)h(obje)n(ct-oriente)n(d)
-42 725 y(pr)n(o)n(gr)n(amming)g(and)g(one)g(kind)g(of)g(structur)n(e-impr)n
(oving)-42 775 y(tr)n(ansformation)14 b(\(r)n(efactoring\))g(that)h(is)f(uniq\
ue)h(to)g(obje)n(ct-)-42 824 y(oriente)n(d)i(pr)n(o)n(gr)n(amming:)22 b(\014n\
ding)c(abstr)n(act)e(sup)n(er)n(classes.)-42 874 y(We)22 b(de)n(c)n(omp)n(ose)
f(the)g(op)n(er)n(ation)g(of)g(\014nding)h(an)f(abstr)n(act)-42 924 y(sup)n
(er)n(class)14 b(into)g(a)g(set)g(of)f(r)n(efactoring)g(steps,)h(and)h(pr)n
(ovide)-42 974 y(examples.)27 b(We)18 b(discuss)f(te)n(chniques)h(that)f(c)n
(an)h(automate)-42 1024 y(or)13 b(automatic)n(al)r(ly)g(supp)n(ort)f(these)h
(steps.)18 b(We)c(also)e(c)n(onsid-)-42 1074 y(er)g(some)f(of)h(the)f(c)n(ond\
itions)h(that)g(must)f(b)n(e)h(satis\014e)n(d)g(to)f(p)n(er-)-42 1123 y(form)
16 b(a)g(r)n(efactoring)g(safely;)g(sometimes)g(to)g(satisfy)g(these)-42 1173
y(c)n(onditions)g(other)f(r)n(efactorings)f(must)g(\014rst)h(b)n(e)g(applie)n
(d.)-42 1316 y fb(1)70 b(In)n(tro)r(duction)-42 1408 y fi(Soft)o(w)o(are)16 b
(systems)g(tend)g(to)g(gro)o(w)f(with)g(age)h(as)g(new)g(fea-)-42 1458 y(ture\
s)j(are)e(added)h(and)f(old)f(features)j(are)e(c)o(hanged.)29 b(It)17 b(is)
-42 1508 y(not)c(just)h(the)f(increased)i(n)o(um)o(b)q(er)d(of)h(features)h
(that)f(mak)o(es)-42 1558 y(the)20 b(system)e(gro)o(w;)i(most)d(of)h(us)h(ha)
o(v)o(e)f(rewritten)i(an)e(old)-42 1608 y(system)j(and)f(seen)i(its)f(size)g
(shrink)g(dramatically)l(.)35 b(The)-42 1657 y(real)14 b(problem)f(is)g(that)
h(the)h(original)c(design)j(w)o(as)g(not)g(suit-)-42 1707 y(ed)j(for)e(the)h
(subsequen)o(t)h(purp)q(oses)g(of)e(the)i(system.)22 b(Also,)-42 1757 y(progr\
ams)15 b(are)g(often)h(extended)g(defensiv)o(ely)m(,)f(b)o(y)g(cop)o(ying)-42
1807 y(co)q(de)f(instead)e(of)g(c)o(hanging)g(the)h(original)d(v)o(ersion.)18
b(F)m(or)12 b(ex-)-42 1857 y(ample,)g(instead)j(of)e(making)f(a)h(subroutine)
i(more)e(general,)-42 1907 y(a)19 b(programmer)d(migh)o(t)h(mak)o(e)g(a)h(new)
h(v)o(ersion)g(of)f(it)g(and)-42 1956 y(call)e(that)h(v)o(ersion,)g(and)f(so)
g(a)o(v)o(oid)g(an)o(y)g(c)o(hance)h(of)f(a\013ect-)-42 2006 y(ing)e(other)g
(parts)h(of)e(the)i(system)e(that)h(called)g(the)h(original)-42 2056 y(subrou\
tine.)22 b(The)16 b(result)f(is)g(that)g(a)f(program's)g(structure)-42 2106 y
(deteriorates)i(o)o(v)o(er)e(time.)0 2157 y(The)25 b(only)e(w)o(a)o(y)h(to)g
(prev)o(en)o(t)i(the)f(structure)h(of)e(pro-)-42 2206 y(grams)16 b(b)q(eing)g
(main)o(tained)e(from)h(deca)o(ying)h(is)g(to)h(rewrite)-42 2245 y 383 2 v 5
2647 a fn(0)1027 675 y fi(them.)23 b(This)16 b(pap)q(er)h(is)e(ab)q(out)h(tec)
o(hniques)h(for)f(incremen-)1027 725 y(tally)g(rewriting)h(programs)f(and)h
(impro)o(ving)e(their)i(struc-)1027 775 y(ture.)i(It)14 b(fo)q(cuses)h(on)f
(ob)r(ject-orien)o(ted)h(programmi)o(ng)c(and)1027 824 y(one)16 b(kind)e(of)h
(structure-impro)o(ving)f(transformation)f(that)1027 874 y(is)22 b(unique)f
(to)h(ob)r(ject-orien)o(ted)g(programming:)30 b(\014nding)1027 924 y(abstract)
15 b(sup)q(erclasses.)1069 987 y(Ob)r(ject-orien)o(ted)23 b(programming)18 b
(is)k(touted)g(as)f(b)q(eing)1027 1037 y(more)14 b(reusable)i(and)f(extensibl\
e)h(than)f(con)o(v)o(en)o(tional)f(pro-)1027 1087 y(gramming)21 b([19)o(].)49
b(Nonetheless,)28 b(the)d(structure)h(of)e(an)1027 1137 y(ob)r(ject-orien)o
(ted)16 b(program)d(still)h(deteriorates)i(as)e(features)1027 1187 y(are)22 b
(added.)42 b(As)22 b(an)g(ob)r(ject-orien)o(ted)h(program)d(gro)o(ws,)1027
1237 y(class)d(hierarc)o(hies)g(get)f(larger)g(and)g(less)h(rational,)e(co)q
(de)i(is)1027 1286 y(duplicated,)10 b(and)f(individual)f(classes)i(get)g(larg\
er)f(and)h(hard-)1027 1336 y(er)16 b(to)f(understand.)22 b(A)15 b(common)d
(practice)k(in)e(the)i(ob)r(ject-)1027 1386 y(orien)o(ted)c(comm)o(unit)o(y)c
(is)j(to)h(in)o(terlea)o(v)o(e)f(p)q(erio)q(ds)h(of)f(gro)o(wth)1027 1436 y
(with)18 b(consolidation)f(p)q(erio)q(ds)j(in)e(whic)o(h)g(the)h(program)e
(is)1027 1486 y fg(r)n(efactor)n(e)n(d)d fi(\(restructured\))j(to)e(mak)o(e)e
(it)h(smaller)f(and)h(eas-)1027 1535 y(ier)g(to)g(understand)h([18)o(].)1069
1599 y(Refactoring)39 b(is)h(also)f(imp)q(ortan)o(t)g(in)g(dev)o(eloping)1027
1649 y(reusable)30 b(soft)o(w)o(are,)j(esp)q(ecially)d(framew)o(orks)e([14)o
(,)g(20,)1027 1698 y(21].)c(F)m(ramew)o(orks)15 b(are)i(program)e(sk)o(eleton\
s)i(that)f(can)h(b)q(e)1027 1748 y(\\\015eshed)12 b(out")e(to)g(construct)j
(a)d(complete)g(program)f([9)o(,)h(30)o(].)1027 1798 y(F)m(ramew)o(orks)15 b
(are)i(usually)e(dev)o(elop)q(ed)i(b)o(y)f(generalizing)g(a)1027 1848 y(set)i
(of)e(concrete)i(applications.)25 b(Sometimes)15 b(framew)o(orks)1027 1898 y
(are)d(dev)o(elop)q(ed)f(b)o(y)g(careful)g(planning,)f(starting)h(with)g(a)g
(do-)1027 1948 y(main)j(analysis)i(and)f(a)h(study)h(of)e(sev)o(eral)i(applic\
ations)e(in)1027 1997 y(the)d(problem)f(domain.)k(In)c(these)j(cases)f(refact\
oring)e(is)h(less)1027 2047 y(imp)q(ortan)o(t.)23 b(Ho)o(w)o(ev)o(er,)17 b
(if)e(existing)h(soft)o(w)o(are)h(is)f(going)f(to)1027 2097 y(re\015ect)20 b
(the)f(new)g(abstraction)g(then)g(it)e(has)i(to)f(b)q(e)h(refac-)1027 2147 y
(tored.)28 b(Also,)17 b(it)g(often)g(is)g(more)f(economical)f(to)i(refactor)
1027 2197 y(an)g(existing)g(application)f(to)h(extract)h(a)f(framew)o(ork)e
(that)1027 2246 y(could)g(ha)o(v)o(e)f(b)q(een)i(used)g(to)f(create)h(it)e
(than)h(to)g(start)g(o)o(v)o(er.)1027 2296 y(Finally)m(,)10 b(an)i(imp)q(orta\
n)o(t)f(part)h(of)g(building)f(a)h(framew)o(ork)f(is)1027 2346 y(testing)h
(it)g(for)f(reusabilit)o(y)h(b)o(y)f(building)g(applications)f(that)1027 2396
y(use)17 b(it,)e(and)g(these)i(test)g(cases)g(often)f(p)q(oin)o(t)f(out)g(the)
h(need)1027 2446 y(for)i(c)o(hanging)e(the)j(framew)o(ork.)28 b(In)17 b(these)
i(cases,)h(under-)1027 2495 y(standing)14 b(refactoring)g(is)g(crucial.)1069
2559 y(Refactoring)f(has)h(alw)o(a)o(ys)f(b)q(een)i(carried)g(out)e(man)o(ual\
ly)m(,)1027 2609 y(but)k(there)h(ha)o(v)o(e)f(b)q(een)h(sev)o(eral)f(studies)
h(of)e(ho)o(w)g(to)h(auto-)1027 2658 y(mate)f(or)g(partially)f(automate)g(it.)
25 b(Casais)16 b([7])g(and)g(Berg-)g eop bop -42 0 a fi(stein)15 b([5])e(ha)o
(v)o(e)h(b)q(oth)h(in)o(v)o(en)o(ted)f(algorithms)e(to)i(create)i(ab-)-42 50 y
(stract)k(classes)f(from)e(a)g(set)j(of)d(concrete)j(classes.)32 b(These)-42
100 y(algorithms)20 b(do)i(the)h(easy)f(part)g(of)g(abstraction,)i(whic)o(h)
-42 149 y(is)c(mo)o(ving)e(common)f(features)k(to)f(a)g(single)f(class.)37 b
(The)-42 199 y(hard)14 b(part)g(of)f(the)h(pro)q(cess)h(is)f(deciding)f(wheth\
er)i(t)o(w)o(o)e(fea-)-42 249 y(tures)20 b(are)e(the)h(same,)e(and)h(making)e
(similar)f(features)k(b)q(e)-42 299 y(the)e(same.)25 b(Casais)16 b(has)h(done)
f(some)g(w)o(ork)g(in)g(this)g(latter)-42 349 y(area;)h(w)o(e)g(consider)g
(sev)o(eral)g(issues)g(outside)f(the)h(scop)q(e)g(of)-42 399 y(his)d(w)o(ork.)
0 450 y(This)f(pap)q(er)h(lo)q(oks)e(at)h(one)g(particular)g(refactoring)g
(that)-42 500 y(is)21 b(unique)f(to)g(ob)r(ject-orien)o(ted)h(programming:)27
b(making)-42 549 y(an)14 b(abstract)i(sup)q(erclass)g(of)d(a)h(set)h(of)f(con\
crete)i(classes.)21 b(It)-42 599 y(should)g(b)q(e)g(noted)g(that)f(an)o(y)g
(kind)g(of)g(program)e(can)j(b)q(e)-42 649 y(refactored,)16 b(not)f(just)g
(ob)r(ject-orien)o(ted)h(ones,)f(though)f(the)-42 699 y(set)e(of)e(p)q(ossibl\
e)h(refactorings)g(dep)q(ends)h(on)f(the)g(st)o(yle)g(of)f(the)-42 749 y(prog\
ram.)25 b(F)m(or)17 b(example,)e(Grisw)o(ald)h(refactored)i(Sc)o(heme)-42 798
y(programs)f([12)o(].)31 b(In)18 b(fact,)g(though)g(he)h(didn't)e(study)i(the)
-42 848 y(ob)r(ject-orien)o(ted)e(transformations)e(that)h(are)g(the)g(sub)r
(ject)-42 898 y(of)g(this)h(pap)q(er,)g(he)g(sho)o(w)o(ed)f(ho)o(w)g(to)g(imp\
lemen)o(t)e(some)h(of)-42 948 y(the)e(simpler)d(refactorings)i(that)g(w)o(e)g
(will)e(use,)i(suc)o(h)h(as)f(con-)-42 998 y(v)o(erting)i(co)q(de)h(segmen)o
(ts)f(in)o(to)f(pro)q(cedures.)0 1049 y(Refactoring)c(to)h(create)h(an)f(abst\
ract)g(sup)q(erclass)i(is)e(more)-42 1099 y(complicated)f(than)g(has)h(b)q
(een)g(recognized)h(in)e(the)h(past,)g(and)-42 1149 y(dep)q(ends)j(as)f(m)o
(uc)o(h)e(on)h(the)g(purp)q(ose)i(of)d(the)i(abstraction)g(as)-42 1198 y(in)g
(the)g(structure)i(of)d(the)h(program.)k(Th)o(us,)11 b(it)h(is)f(unreason-)
-42 1248 y(able)h(to)f(try)g(to)h(completely)e(automate)g(it.)17 b(Our)12 b
(in)o(terest)g(in)-42 1298 y(this)k(problem)d(is)i(to)g(pro)o(vide)g(to)q(ols)
g(for)g(making)d(refactor-)-42 1348 y(ing)i(easier,)i(so)e(w)o(e)h(w)o(an)o
(t)g(to)f(automate)g(as)g(man)o(y)f(steps)j(in)-42 1398 y(the)h(refactoring)f
(as)g(p)q(ossible.)24 b(Belo)o(w)16 b(w)o(e)g(describ)q(e)i(what)-42 1447 y
(can)g(b)q(e)f(automated,)f(what)h(cannot)g(b)q(e)g(automated,)f(and)-42 1497
y(what)e(that)g(are)h(still)d(up)i(in)g(the)g(air.)-42 1642 y fb(2)70 b(Examp\
les)54 b(of)i(Finding)f(Ab-)62 1717 y(stract)22 b(Classes)-42 1810 y fi(An)15
b(abstract)h(class)f(is)g(a)g(class)g(designed)h(to)e(b)q(e)i(used)f fg(only)
-42 1860 y fi(as)e(a)f(sup)q(erclass)i([30)o(].)j(This)12 b(is)h(in)f(con)o
(trast)h(to)f(the)h(normal)-42 1910 y(w)o(a)o(y)19 b(that)g(a)g(class)g(is)g
(used,)i(whic)o(h)e(is)g(b)q(oth)g(b)o(y)g(making)-42 1960 y(instances)h(of)d
(it)h(and)f(b)o(y)h(using)g(it)g(as)g(a)f(sup)q(erclass.)33 b(An)-42 2010 y
(abstract)21 b(class)f(usually)f(defers)i(the)f(implemen)o(tation)c(of)-42
2059 y(some)h(of)g(its)h(op)q(erations)f(to)h(its)f(sub)q(classes,)j(so)e(it)
f(is)g(on-)-42 2109 y(ly)e(a)g(partial)g(sp)q(eci\014cation)h(of)f(an)g(ob)r
(ject)h(and)f(cannot)h(b)q(e)-42 2159 y(directly)f(used)f(to)g(mak)o(e)f(inst\
ances.)0 2210 y(Abstract)e(classes)g(are)f(an)g(imp)q(ortan)o(t)e(design)i
(tec)o(hnique,)-42 2260 y(but)25 b(are)g(not)g(alw)o(a)o(ys)e(directly)i(supp)
q(orted)h(b)o(y)e(ob)r(ject-)-42 2310 y(orien)o(ted)11 b(programmi)o(ng)c(lan\
guages.)16 b(Although)9 b(statically)-42 2360 y(t)o(yp)q(ed)i(languages)d(suc)
o(h)j(as)e(C++)h(often)g(ha)o(v)o(e)f(a)g(w)o(a)o(y)g(to)g(giv)o(e)-42 2409 y
(a)j(signature)h(for)f(an)f(op)q(eration)h(without)g(giving)f(an)h(imple-)-42
2459 y(men)o(tation)h(\(e.g.)20 b(pure)15 b(virtual)e(functions)i(in)f(C++)g
([10]\),)-42 2509 y(un)o(t)o(yp)q(ed)f(languages)f(suc)o(h)h(as)f(Smalltalk)d
(sp)q(ecify)k(abstract)-42 2559 y(classes)f(only)e(b)o(y)g(con)o(v)o(en)o(tio\
n.)17 b(In)10 b(Smalltalk,)d(for)j(example,)-42 2609 y(do)q(cumen)o(tation)i
(usually)g(sp)q(eci\014es)i(whic)o(h)e(classes)i(are)f(ab-)-42 2658 y(stract,)
i(the)g(names)e(of)g(abstract)i(classes)g(sometimes)d(start)1027 0 y(with)18 b
(\\Abstract",)h(and)e(the)i(op)q(erations)f(in)f(an)h(abstract)1027 50 y(clas\
s)h(that)f(are)h(left)f(to)g(sub)q(classes)i(are)e(supp)q(osed)i(to)e(b)q(e)
1027 100 y(implemen)o(ted)d(to)i(generate)h(a)e(\\sub)q(class)i(resp)q(onsibi\
lit)o(y")1027 149 y(error)d(message.)1069 199 y(Abstract)i(classes)g(are)f
(alw)o(a)o(ys)f(in)o(v)o(en)o(ted)h(b)o(y)f(generaliz-)1027 249 y(ing)f(from)
e(concrete)17 b(sub)q(classes.)k(Once)16 b(an)e(abstract)h(class)1027 299 y
(is)c(found,)g(man)o(y)f(more)g(concrete)k(sub)q(classes)f(can)f(b)q(e)g(made)
1027 349 y(from)e(it)h(in)f(a)h(top)h(do)o(wn)e(fashion,)h(but)g(the)h(origin\
al)e(disco)o(v-)1027 399 y(ery)h(of)g(an)f(abstract)i(class)f(is)f(b)q(ottom)
g(up.)17 b(This)10 b(b)q(ottom)f(up)1027 448 y(disco)o(v)o(ery)16 b(can)f(hap\
p)q(en)g(early)g(in)g(the)g(life-cycle)g(of)f(a)h(sys-)1027 498 y(tem:)21 b
(Wirfs-Bro)q(c)o(k)16 b(et.)25 b(al.)e(sho)o(w)15 b(ho)o(w)h(to)g(\014nd)g
(abstract)1027 548 y(classes)k(during)f(an)g(early)g(design)g(phase)g(b)q(efo\
re)h(an)o(y)e(al-)1027 598 y(gorithms)13 b(ha)o(v)o(e)g(b)q(een)i(sp)q(eci\
\014ed)h([29)o(].)i(Ho)o(w)o(ev)o(er,)c(abstract)1027 648 y(classes)20 b(can)
e(b)q(e)h(disco)o(v)o(ered)g(an)o(ywhere)g(in)f(the)h(life-cycle)1027 698 y
(of)c(a)f(system,)h(though)g(pulling)e(abstract)j(classes)g(out)f(of)g(a)1027
747 y(set)f(of)f(concrete)i(classes)g(is)e(harder)h(once)g(the)g(classes)h
(ha)o(v)o(e)1027 797 y(b)q(een)j(implem)o(en)o(ted,)d(as)h(the)h(next)g(t)o
(w)o(o)e(examples)h(\(using)1027 847 y(C++)f(syn)o(tax\))f(sho)o(w.)1027 964 y
fc(2.1)56 b(Matrix)18 b(Example)1027 1041 y fi(This)d(\014rst)i(example)d(sho)
o(ws)h(what)h(happ)q(ens)g(when)g(a)f(Ma-)1027 1090 y(trix)e(class)h(is)f(gen\
eralized)h(to)f(supp)q(ort)h(sparse)g(arra)o(ys.)k(W)m(e)1027 1140 y(will)c
(start)i(with)g(a)f(concrete)i(Matrix)e(class)h(is)g(that)f(is)h(not)1027 1190
y(sparse,)e(then)g(build)f(a)g(sparse)h(v)o(ersion,)f(and)g(then)h(capture)
1027 1240 y(their)d(commonal)o(ities)d(in)h(an)i(abstract)g(Matrix)f(class.)
17 b(Con-)1027 1290 y(sider)e(this)e(initial)f(implemen)o(tation)e(of)j(the)i
(class)f fe(Matrix)p fi(:)1965 1275 y fm(1)1071 1373 y ff(class)21 b(Matrix)
1136 1423 y({)1136 1473 y(protected:)1202 1523 y(int)g(elements[10000];)1202
1572 y(int)g(columns,)f(rows;)1136 1622 y(public:)1202 1672 y(int)h(get\(int)
f(rowNum,)g(int)i(colNum\))1245 1722 y({)g(...)f(};)1202 1772 y(void)g(put)g
(\(int)g(newVal,)f(int)h(rowNum,)1245 1822 y(int)g(colNum\))g({)g(...)g(};)
1202 1871 y(Matrix)f(\(int)h(numRows,)f(int)h(numCols\))1245 1921 y({)h(...)f
(};)1202 1971 y(Matrix)f(matrixMultiply)f(\(Matrix)h(m2\))1245 2021 y({)i(...)
f(};)1202 2071 y(void)g(rotate\(\))f({)h(...};)1202 2120 y(Matrix)f(martixInv\
erse\(\))f({)i(...})1136 2170 y(};)1027 2262 y fi(A)14 b(reference)j(to,)c
(for)g(example,)f(the)j(matrix)d(elemen)o(t)h(in)1027 2312 y(ro)o(w)h fg(x)p
fi(,)g(column)e fg(y)i fi(migh)o(t)e(b)q(e)i(co)q(ded)h(as:)1071 2404 y ff
(j)21 b(=)h(elements[\(x)e(*)h(columns\))f(+)i(y])1069 2496 y fi(The)17 b(cur\
ren)o(t)i(implemen)o(tatio)o(n)14 b(is)j(\014ne)h(for)f(dense)h(ma-)1027 2545
y(trices,)g(but)f(a)g(di\013eren)o(t)g(represen)o(tation)h(w)o(ould)e(b)q(e)h
(more)1027 2580 y 383 2 v 1073 2607 a fn(1)1091 2619 y fl(In)j(this)f(example\
,)i(the)e(elemen)o(ts)g(of)h(a)g(matrix)f(are)g(alw)o(a)o(ys)1027 2658 y(in)o
(tegers.)g eop bop -42 0 a fi(space)18 b(e\016cien)o(t)f(for)f(sparse)h(matri\
ces.)25 b(Suc)o(h)17 b(a)f(represen-)-42 50 y(tation)k(w)o(ould)g(store)i(onl\
y)d(the)i(non-zero)g(v)n(alues,)h(along)-42 100 y(with)13 b(their)g(lo)q(cati\
ons.)k(Retrieving)c(and)f(storing)h(elemen)o(ts)-42 149 y(w)o(ould)h(b)q(e)i
(di\013eren)o(t)f(with)g(this)g(represen)o(tation.)22 b(The)15 b(fol-)-42 199
y(lo)o(wing)f(steps)j(could)e(b)q(e)h(applied)e(to)h(supp)q(ort)h(b)q(oth)g
(t)o(yp)q(es)-42 249 y(of)i(matrices,)h(while)f(capturing)h(their)g(commonali)
o(ties)d(in)-42 299 y(an)e(abstract)h(sup)q(erclass:)-12 383 y(1.)21 b(rename)
13 b(the)h fe(Matrix)h fi(class)f(to)g(b)q(e)g fe(denseMatrix)-12 468 y fi
(2.)21 b(in)14 b(functions)h(other)h(than)f fg(get)g fi(and)g fg(put)p fi(,)g
(replace)h(ref-)42 517 y(erences)g(to)e fg(elements)f fi(with)h(calls)f(to)h
fg(get)g fi(and)g fg(put)p fi(.)-12 602 y(3.)21 b(de\014ne)h(a)g(new)g(class)
g fe(spa)o(rseMatrix)p fi(,)i(and)d(cop)o(y)h(the)42 652 y(mem)o(b)q(ers)12 b
(of)h fe(denseMatrix)j fi(in)o(to)e fe(spa)o(rseMatrix)-12 736 y fi(4.)21 b
(de\014ne)16 b(a)e(new)i(t)o(yp)q(e)f(\()p fg(sp)n(arseElement)p fi(\),)g(to)
g(represen)o(t)42 786 y(an)g(elemen)o(t)g(of)h(a)f(sparse)i(matrix.)22 b(Eac)
o(h)16 b(sparseEle-)42 836 y(men)o(t)c(stores)k(its)e(lo)q(cation)e(along)h
(with)h(its)g(v)n(alue.)-12 921 y(5.)21 b(in)13 b(the)h(class)h fe(spa)o(rseM\
atrix)p fi(:)59 1005 y(\(a\))21 b(c)o(hange)14 b(the)g(t)o(yp)q(e)g(of)f(the)
i(v)n(ariable)d fg(elements)i fi(to)133 1055 y(b)q(e:)176 1131 y ff(sparseEle\
ment)20 b(elements[50];)57 1207 y fi(\(b\))h(c)o(hange)10 b(the)h fg(get)g
(&)h(put)e fi(functions.)17 b(F)m(or)10 b(a)f(sparse)133 1257 y(matrix,)k(the)
k(function)e fg(get)g fi(will)f(return)j(0)e(if)g(no)133 1306 y(elemen)o(t)e
(is)h(de\014ned)h(in)e fg(elements)h fi(for)f(the)h(sp)q(ec-)133 1356 y(i\014\
ed)e(lo)q(cation.)17 b(The)c fg(put)g fi(function)f(will)f(remo)o(v)o(e)133
1406 y(the)22 b(old)e(v)n(alue)g(\(if)h(an)o(y\))g(from)e fg(elements)i fi
(and)133 1456 y(write)f(a)g(new)g(v)n(alue)f(there)j(only)d(if)g(the)h(v)n
(alue)133 1506 y(is)e(non-zero.)31 b(Since)18 b(the)h(other)f(functions)g(are)
133 1556 y(written)13 b(in)g(terms)f(of)h(the)g fg(get)h(&)g(put)f fi(functio\
ns,)133 1605 y(they)h(need)h(not)f(b)q(e)g(c)o(hanged.)-12 1690 y(6.)21 b(de\
\014ne)e(an)f(abstract)i(sup)q(erclass)g fe(Matrix)f fi(for)f(classes)42 1740
y fe(denseMatrix)e fi(and)d fe(spa)o(rseMatrix)p fi(:)59 1824 y(\(a\))21 b
(add)15 b(to)g fe(Matrix)h fi(class)f(the)h(function)f(signatures)133 1874 y
(for)22 b fg(matrixMultiply,)i(r)n(otate,)g fi(and)f fg(martixIn-)133 1924 y
(verse)p fi(.)45 b(These)25 b(de\014ne)f(the)g fg(pr)n(oto)n(c)n(ol)e fi(for)
h(the)133 1974 y(class;)d(that)e(is,)h(the)f(set)h(of)f(messages)g(that)g(an)
133 2024 y(instance)c(of)g(the)g(class)h(will)d(accept.)57 2091 y(\(b\))21 b
(mo)o(v)o(e)10 b(the)j(v)n(ariables)e fg(c)n(olumns)i fi(and)f fg(r)n(ows)f fi
(to)h(the)133 2141 y(sup)q(erclass)61 2208 y(\(c\))22 b(add)12 b(the)g(functi\
on)g(signatures)h(for)e fg(get)j(&)f(put)f fi(to)133 2258 y(the)i(sup)q(ercla\
ss)57 2325 y(\(d\))21 b(add)12 b(the)i(function)e(b)q(o)q(dies)i(for)e fg(mat\
rixMultiply,)133 2375 y(r)n(otate,)f fi(and)h fg(martixInverse)g fi(to)g(the)
g(sup)q(erclass,)133 2424 y(and)19 b(delete)g(the)h(redundan)o(t)g(de\014niti\
ons)e(from)133 2474 y(the)c(sub)q(classes.)0 2559 y(After)g(these)g(c)o(hange\
s,)g(class)g fe(Matrix)f fi(is)g(an)g(abstract)h(su-)-42 2609 y(p)q(erclass.)
19 b(Its)12 b(only)e(data)h(are)h(v)n(ariables)e(to)h(store)h(the)g(n)o(um-)
-42 2658 y(b)q(er)k(of)e(columns)g(and)h(ro)o(ws,)f(but)h(the)h(data)e(in)h
(the)g fe(Matrix)1027 0 y fi(is)i(de\014ned)i(b)o(y)e(the)g(sub)q(classes.)30
b fe(Matrix)18 b fi(de\014nes)g fg(get)g fi(and)1027 50 y fg(put)i fi(as)f
(pure)h(virtual)e(functions,)j(so)e(their)h(implem)o(en)o(ta-)1027 100 y(tion)
14 b(is)h(left)f(to)g(sub)q(classes,)i(to)q(o.)k(Ho)o(w)o(ev)o(er,)15 b(it)f
(can)g(de\014ne)1027 149 y(op)q(erations)20 b(suc)o(h)g(as)g fg(matrixMultipl\
y)p fi(,)f fg(r)n(otate)p fi(,)h(and)f fg(ma-)1027 199 y(trixInverse)13 b fi
(in)h(terms)g(of)f fg(get)h fi(and)f fg(put)p fi(.)1069 253 y(Classes)k fe
(denseMatrix)i fi(and)e fe(spa)o(rseMatrix)g fi(are)g(concrete)1027 303 y(sub)
q(classes)f(of)e fe(Matrix)g fi(that)g(de\014ne)h(ho)o(w)f(the)g(data)g(for)g
(the)1027 353 y(matrix)9 b(is)i(stored)h(and)e(implemen)o(t)e fg(get)j fi(and)
g fg(put)g fi(functions.)1027 403 y(These)i(classes)h(will)c(also)h(ha)o(v)o
(e)h(to)g(implem)o(en)o(t)e(constructor)1027 453 y(and)j(destructor)i(functio\
ns.)i(In)c(practice,)h(some)e(of)g(the)h(al-)1027 502 y(gorithms)e(inherited)
i(from)d(class)j fe(Matrix)g fi(migh)o(t)d(b)q(e)j(to)q(o)f(in-)1027 552 y
(e\016cien)o(t)h(and)f(will)e(probably)i(b)q(e)g(reimplemen)o(ted,)f(but)h
(the)1027 602 y(original)17 b(algorithms)g(are)i(correct.)34 b(F)m(or)18 b
(example,)h(most)1027 652 y(represen)o(tations)e(of)e(sparse)h(matrixes)e(p)q
(ermit)g(a)h(more)f(ef-)1027 702 y(\014cien)o(t)h(w)o(a)o(y)e(of)h(rotating)f
(the)i(matrix)d(than)j(just)f(iterating)1027 752 y(o)o(v)o(er)k(all)e(the)i
(elemen)o(ts)g(and)f(relo)q(cating)h(them,)f(whic)o(h)h(is)1027 801 y(the)d
(natural)e(algorithm)e(to)j(b)q(e)h(de\014ned)g(in)e(class)h fe(Matrix)p fi
(.)1069 855 y(In)k(summary)m(,)e(as)i(a)g(result)h(of)f(these)h(refactorings)
g(the)1027 905 y(program)f(de\014nes)i(t)o(w)o(o)e(t)o(yp)q(es)i(of)e(Matrice\
s,)j(making)16 b(ex-)1027 955 y(plicit)h(their)i(common)c(features.)31 b(This)
18 b(structure)i(w)o(ould)1027 1005 y(mak)o(e)13 b(it)h(easier)i(to)e(extend)
h(the)g(program)e(to)i(supp)q(ort)g(ad-)1027 1055 y(ditional)d(matrix)g(repre\
sen)o(tations)k(in)e(the)g(future.)1069 1109 y(This)e(example)f(assumes)i(tha\
t)g(the)g(programmer)d(recog-)1027 1159 y(nized)16 b(early)f(that)g(the)h(sto\
rage)f(and)g(retriev)n(al)g(op)q(erations)1027 1209 y(w)o(ould)j(di\013er)h
(for)f(dense)i(and)e(sparse)i(matrices,)f(and)f(re-)1027 1258 y(placed)d(dire\
ct)g(references)i(to)d fg(elements)g fi(with)g(calls)g(to)g(the)1027 1308 y
(functions)d fg(get)g fi(and)f fg(put)p fi(.)18 b(The)11 b(next)g(example)f
(sho)o(ws)h(a)f(case)1027 1358 y(where)15 b(co)q(de)f(replacemen)o(t)g(is)f
(done)h(later)g(in)f(the)h(refactor-)1027 1408 y(ing)f(pro)q(cess.)1027 1547 y
fc(2.2)56 b(Ino)r(de)18 b(Example)1027 1632 y fi(The)d(second)h(example)d(des\
crib)q(es)k(ho)o(w)d(refactorings)h(w)o(ere)1027 1681 y(applied)k(to)h(impro)
o(v)o(e)e(the)j fe(Ino)q(de)1571 1666 y fm(2)1610 1681 y fi(class)f(during)g
(the)g(de-)1027 1731 y(sign)e(of)g(the)g fg(Choic)n(es)g fi(\014le)g(system)g
(framew)o(ork)f([17)o(].)30 b(An)1027 1781 y(Ino)q(de)23 b(con)o(tains)f(a)g
(description)h(of)e(the)i(disk)f(la)o(y)o(out)f(of)1027 1831 y(a)d(\014le)g
(and)g(other)h(information)c(suc)o(h)k(as)g(the)f(\014le)h(o)o(wner,)1027 1881
y(access)k(p)q(ermissions)d(and)h(access)i(times.)38 b(The)22 b fg(Choic)n
(es)1027 1930 y fi(ob)r(ject-orien)o(ted)16 b(op)q(erating)e(system)g(pro)r
(ject)i(at)e(the)h(Uni-)1027 1980 y(v)o(ersit)o(y)22 b(of)f(Illinois)g(has)g
(de\014ned)i(an)f(op)q(erating)g(system)1027 2030 y(framew)o(ork)16 b(consist\
ing)h(of)f(in)o(terlo)q(c)o(king)h(framew)o(orks)f(for)1027 2080 y(\014le)11 b
(systems)h([17)o(],)e(virtual)h(memory)d([26)o(],)j(comm)o(unicatio)o(n)1027
2130 y([31)o(],)19 b(and)g(pro)q(cess)i(sc)o(heduling)e([25)o(].)33 b(An)19 b
(early)f(v)o(ersion)1027 2180 y(of)c(the)h fg(Choic)n(es)g fi(\014le)f(system)
g(framew)o(ork)f(supp)q(orted)j(only)1027 2229 y(the)j(BSD)f(UNIX)g(\014le)g
(format.)29 b(Then,)19 b(it)f(w)o(as)g(extended)1027 2279 y(to)e(handle)g(b)q
(oth)g(BSD)f(UNIX)i(and)e(UNIX)h(System)g(V)g([1)o(])1027 2329 y(\014le)c(for\
mats.)j(T)m(o)c(supp)q(ort)h(b)q(oth)g(formats,)e(the)i fe(Ino)q(de)g fi(clas\
s)1027 2379 y(w)o(as)i(c)o(hanged)g(as)g(follo)o(ws:)1057 2487 y(1.)20 b(the)
15 b fe(Ino)q(de)f fi(class)h(w)o(as)e(renamed)h(to)g fe(BSDIno)q(de)p fi(,)
1027 2539 y 383 2 v 1073 2568 a fn(2)1091 2580 y fl(Ino)q(de)d(is)h(standard)
e(UNIX)1474 2564 y fo(R)1465 2565 y fk(\015)1514 2580 y fl(op)q(erating)g(sys\
tem)g(terminology;)1027 2619 y(it)f(is)h(a)f(con)o(traction)d(of)j(the)f(term)
h fj(index)i(no)n(de.)16 b fl(UNIX)11 b(is)e(a)g(registered)1027 2658 y(trade\
mark)g(of)i(UNIX)i(Systems)c(Lab)q(oratories,)g(Inc.)g eop bop -26 -42 a
14603551 6446613 13287915 27430993 27891466 33877606 startTexFig

%!PS-Adobe-2.0 EPSF-1.2
%%DocumentFonts: Times-Bold Helvetica-Bold
%%Pages: 1
%%BoundingBox: 202 417 424 515
%%EndComments

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
} {
dup -1 eq {
/patternGrayLevel idef
/patternString idef
} {
/patternGrayLevel idef
} ifelse
false /patternNone idef
} ifelse
} def

/BSpl {
0 begin
storexyn
newpath
n 1 gt {
0 0 0 0 0 0 1 1 true subspline
n 2 gt {
0 0 0 0 1 1 2 2 false subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
} if
n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Circ {
newpath
0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
} def

/CBSpl {
0 begin
dup 2 gt {
storexyn
newpath
n 1 sub dup 0 0 1 1 2 2 true subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
patternNone not { ifill } if
brushNone not { istroke } if
} {
Poly
} ifelse
end
} dup 0 4 dict put def

/Elli {
0 begin
newpath
4 2 roll
translate
scale
0 0 1 0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 1 dict put def

/Line {
0 begin
2 storexyn
newpath
x 0 get y 0 get moveto
x 1 get y 1 get lineto
brushNone not { istroke } if
0 0 1 1 leftarrow
0 0 1 1 rightarrow
end
} dup 0 4 dict put def

/MLine {
0 begin
storexyn
newpath
n 1 gt {
x 0 get y 0 get moveto
1 1 n 1 sub {
/i exch def
x i get y i get lineto
} for
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Poly {
3 1 roll
newpath
moveto
-1 add
{ lineto } repeat
closepath
patternNone not { ifill } if
brushNone not { istroke } if
} def

/Rect {
0 begin
/t exch def
/r exch def
/b exch def
/l exch def
newpath
l b moveto
l t lineto
r t lineto
r b lineto
closepath
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 4 dict put def

/Text {
ishow
} def

/idef {
dup where { pop pop pop } { exch def } ifelse
} def

/ifill {
0 begin
gsave
patternGrayLevel -1 ne {
fgred bgred fgred sub patternGrayLevel mul add
fggreen bggreen fggreen sub patternGrayLevel mul add
fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
eofill
} {
eoclip
originalCTM setmatrix
pathbbox /t exch def /r exch def /b exch def /l exch def
/w r l sub ceiling cvi def
/h t b sub ceiling cvi def
/imageByteWidth w 8 div ceiling cvi def
/imageHeight h def
bgred bggreen bgblue setrgbcolor
eofill
fgred fggreen fgblue setrgbcolor
w 0 gt h 0 gt and {
l 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

%%EndProlog

%I Idraw 7 Grid 8

%%Page: 1 1

Begin
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.8 0 0 0.8 0 0 ] concat
/originalCTM matrix currentmatrix def

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
525 453 525 453 Line
End

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 0.717949 0 0 0.717949 110.542 164.444 ] concat

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 209.229 661.663 ] concat
%I
[
(BEFORE:)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 203.795 635.47 ] concat
%I
[
(Inode \(BSD\))
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 457.217 660.988 ] concat
%I
[
(DURING:)
] Text
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 0 0 1 313.048 15.494 ] concat
%I
155 626 155 626 Line
End

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 1 0 0 1 1.08432 61.8073 ] concat

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 406.048 573.952 ] concat
%I
[
(BSDInode)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 487.964 573.868 ] concat
%I
[
(SystemVInode)
] Text
End

End %I eop

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 1 0 0 1 10.8434 26.0241 ] concat

Begin %I Line
%I b 65535
1 0 1 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1.08434 0 0 1.08434 1.08434 122.53 ] concat
%I
267 437 351 437 Line
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 292.578 613.976 ] concat
%I
[
(Steps 1 & 2:)
] Text
End

End %I eop

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 0 0 1 -24.94 107.349 ] concat
%I
472 439 472 439 Line
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 311.59 589.096 ] concat
%I
[
(AFTER:)
] Text
End

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 1 0 0 1 0 135.542 ] concat

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 260.421 379.53 ] concat
%I
[
(BSDInode)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 343.421 380.53 ] concat
%I
[
(SystemVInode)
] Text
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 0 0 1 -186.579 -148.47 ] concat
%I
510 565 471 532 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 0 0 1 -180.579 -147.47 ] concat
%I
518 566 565 530 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1 0 0 1 -180.579 -147.47 ] concat
%I
529 560 529 560 Line
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 315.421 431.53 ] concat
%I
[
(Inode)
] Text
End

End %I eop

Begin %I Pict
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ 1 0 0 1 10.8434 59.6384 ] concat

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-times-bold-r-*-140-*
/Times-Bold 14 SetF
%I t
[ 1 0 0 1 464.228 530.808 ] concat
%I
[
(Steps 3 & 4:)
] Text
End

Begin %I Line
%I b 65535
1 0 1 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t
[ 1.08434 0 0 1.08434 3.25301 135.542 ] concat
%I
449 384 391 345 Line
End

End %I eop

End %I eop

End %I eop

showpage

%%Trailer

end
endTexFig
46 533 a fi(Figure)14 b(1:)k(Creating)c(An)g(Abstract)h(Sup)q
(erclass)-12 662 y(2.)21 b(the)13 b fe(SystemVIno)q(de)e fi(class)i(w)o(as)f
(added)h(as)g(a)g(sibling)e(of)42 712 y fe(BSDIno)q(de)217 697 y fm(3)236 712
y fi(;)16 b(v)n(ariables)f(and)h(functions)g(w)o(ere)g(copied)42 762 y(from)c
(the)i fe(BSDIno)q(de)g fi(class,)g(and)g(mo)q(di\014ed,)-12 843 y(3.)21 b
(a)12 b(new)i(class)g fe(Ino)q(de)g fi(w)o(as)f(added)g(as)h(the)f(sup)q(ercl\
ass)i(of)42 893 y fe(BSDIno)q(de)f fi(and)g fe(SystemVI)o(no)q(de)p fi(,)-12
974 y(4.)21 b(the)k(mem)o(b)q(ers)f(common)e(to)j fe(BSDIno)q(de)h fi(and)f fe
(Sys-)42 1024 y(temVI)o(no)q(de)18 b fi(w)o(ere)j(migrated)e(up)h(to)g(their)
h(common)42 1073 y(sup)q(erclass.)0 1160 y(The)c(fourth)f(step)h(had)f(to)g
(mak)o(e)f(structural)j(mo)q(di\014ca-)-42 1210 y(tions)h(to)f(the)h(sub)q
(classes)i(b)q(efore)e(some)f(of)f(the)j(common)-42 1260 y(mem)o(b)q(ers)10 b
(could)g(b)q(e)h(mo)o(v)o(ed.)k(F)m(or)10 b(example,)f(while)h(most)f(of)-42
1310 y(the)16 b(co)q(de)g(in)e(the)i fe(SystemVI)o(no)q(de)d fi(implemen)o
(tation)f(of)i(the)-42 1359 y fg(mapUnit)j fi(function)f(w)o(as)h(the)g(same)
e(as)i(in)f(the)h fe(BSDIno)q(de)-42 1409 y fi(class,)12 b(there)g(w)o(ere)g
(a)e(few)h(minor)e(di\013erences.)19 b(Getting)11 b(and)-42 1459 y(setting)j
(logical)d(blo)q(c)o(k)h(n)o(um)o(b)q(ers)h(w)o(as)g(handled)f(di\013eren)o
(tly)-42 1509 y(for)i(the)h(t)o(w)o(o)e(\014le)h(formats.)j(T)m(o)c(handle)h
(this,)f(the)i(di\013ering)-42 1559 y(co)q(de)i(w)o(as)e(\014rst)h(split)f
(o\013)g(in)o(to)g(separate)i(functions;)e(then,)-42 1608 y(when)e(the)f(impl\
emen)o(tations)d(of)i(the)h fg(mapunit)h fi(function)e(in)-42 1658 y(b)q(oth)
j(sub)q(classes)i(matc)o(hed,)c(it)h(w)o(as)h(mo)o(v)o(ed)e(to)h(the)i(sup)q
(er-)-42 1708 y(class.)-42 1845 y fb(3)70 b(Steps)40 b(In)h(Creating)f(An)h
(Ab-)62 1919 y(stract)22 b(Sup)r(erclass)-42 2010 y fi(This)c(section)g(will)
e(sho)o(w)i(ho)o(w)f(to)g(create)i(a)e(abstract)h(su-)-42 2060 y(p)q(erclass)
i(for)d(a)h(pair)f(of)g(classes)i fe(A)f fi(and)f fe(B)p fi(.)g(It)h(is)g(eas\
y)g(to)-42 2110 y(generalize)i(this)f(to)g(more)f(than)h(t)o(w)o(o)f(classes.)
35 b fe(A)18 b fi(and)h fe(B)-42 2160 y fi(m)o(ust)11 b(already)g(ha)o(v)o
(e)h(a)f(common)e(sup)q(erclass,)14 b(or)d(no)h(sup)q(er-)-42 2209 y(classes.)
19 b(If)11 b(necessary)m(,)i(one)e(of)g(them)f(can)i(b)q(e)g(mo)o(v)o(ed)d
(in)i(the)-42 2259 y(sup)q(erclass)18 b(graph)d(so)g(that)g(they)h(b)q(ecome)
f(sibling)f(classes)-42 2309 y([20].)0 2359 y(The)21 b(\014rst)g(imp)q(ortan)
o(t)e(step)j(in)e(creating)h(an)f(abstract)-42 2409 y(sup)q(erclass)d fe(S)e
fi(of)f(a)h(pair)f(of)h(classes)h fe(A)e fi(and)h fe(B)g fi(is)f(to)h(create)
-42 2458 y(an)c(empt)o(y)f(class)i(with)e(a)h(unique)g(name)f(that)h(is)g(a)f
(sibling)g(of)-42 2508 y fe(A)k fi(and)g fe(B)p fi(.)f(Then,)h fe(A)f fi(and)
h fe(B)f fi(are)i(giv)o(en)e fe(S)h fi(as)g(a)g(sup)q(erclass.)-42 2541 y 383
2 v 5 2568 a fn(3)22 2580 y fj(Sibling)9 b fl(classes)d(are)h(classes)g(that)
g(either)f(share)g(a)i(common)d(direct)-42 2619 y(sup)q(erclass)15 b(or)h(are)
g(b)q(oth)g(top)g(most)g(classes)f(in)i(their)e(inheritance)-42 2658 y(hierar\
c)o(h)o(y)m(.)1069 0 y fi(The)21 b(prior)f(examples)f(\(in)h(particular,)i
(step)f(6)f(of)g(the)1027 50 y fe(Matrix)d fi(example)d(and)i(step)h(4)f(of)f
(the)i fe(Ino)q(de)g fi(example\))e(il-)1027 100 y(lustrate)h(the)g(subsequen)
o(t)i(refactoring)d(steps)i(in)o(v)o(olv)o(ed)d(in)1027 149 y(creating)e(an)f
(abstract)h(sup)q(erclass,)i(whic)o(h)d(are)h(de\014ned)g(b)q(e-)1027 199 y
(lo)o(w)h([20)o(]:)1069 295 y fh(\017)20 b fi(adding)11 b(function)g(signatur\
es)i(to)e(the)h(sup)q(erclass)i(pro-)1110 345 y(to)q(col)9 b(\(after)h(making)
d(them)i(compatible)f(in)h(b)q(oth)g(sub-)1110 395 y(classes\))1069 482 y fh
(\017)20 b fi(making)14 b(functions)j(b)q(o)q(dies)g(\(and)g(the)g(v)n(ariabl\
es)f(ref-)1110 532 y(erenced)g(b)o(y)e(them\))f(compatible)f(in)i(b)q(oth)g
(sub)q(classes)1069 619 y fh(\017)20 b fi(migrating)11 b(common)h(v)n(ariable\
s)h(to)g(the)i(sup)q(erclass)1069 706 y fh(\017)20 b fi(migrating)11 b(common)
h(co)q(de)i(to)g(the)g(sup)q(erclass.)1027 828 y fc(3.1)56 b(Adding)39 b(F)-5
b(unction)39 b(Signatures)f(T)-5 b(o)1155 887 y(The)18 b(Sup)r(erclass)1027
965 y fi(F)m(unctions)10 b(b)q(elong)g(in)f(the)i(sup)q(erclass)h(proto)q(col)
d(if)h(they)g(are)1027 1015 y(part)18 b(of)g(the)g(common)d(abstraction)j(rep\
resen)o(ted)j(b)o(y)d(the)1027 1065 y(sup)q(erclass.)k(Sometimes,)12 b(functi\
on)i(signatures)h(in)f(one)g(or)1027 1115 y(b)q(oth)f(of)e(the)i(classes)h
(need)f(to)f(b)q(e)h(c)o(hanged)g(b)q(efore)g(the)g(sig-)1027 1164 y(nature)j
(can)f(b)q(e)h(added)f(to)g(the)h(sup)q(erclass.)23 b(Supp)q(ose,)16 b(for)
1027 1214 y(example)c(the)h(abstract)g(sup)q(erclass)i fe(V)o(ehicle)e fi(is)
g(created)h(for)1027 1264 y(the)h(existing)e(classes)i fe(Automobile)c fi(and)
j fe(Subma)o(rine)p fi(.)i(Class)1027 1314 y fe(Automobile)11 b fi(has)j(a)g
(function)g(whose)g(signature)g(is:)1027 1451 y ff(void)21 b(shiftDirection\(\
dir)o(ectio)o(n)e(newDirection,)1507 1501 y(int)i(newSpeed\))1027 1587 y fi
(while)f(in)g(class)h fe(Subma)o(rine)e fi(there)j(is)e(a)h(function)f(whose)
1027 1637 y(signature)14 b(is:)1071 1724 y ff(void)21 b(redirect\(int)e(newSp\
eed,)1376 1774 y(direction)h(newDirection\).)1069 1860 y fi(F)m(or)e(the)i
(function)e(signatures)i(to)e(matc)o(h,)h(one)g(of)f(the)1027 1910 y(function)
i(names)f(needs)j(to)e(b)q(e)g(c)o(hanged,)i(and)e(function)1027 1960 y(argum\
en)o(ts)15 b(reordered.)26 b(There)17 b(is)f(a)g(range)g(of)f(assistance)1027
2010 y(that)d(w)o(e)g(could)g(exp)q(ect)i(from)c(a)h(to)q(ol.)17 b(Hueristics)
c(could)f(b)q(e)1027 2060 y(applied)j(to)h(determine,)g(based)g(on)g(structur\
al)h(attributes)1027 2109 y(of)h(the)i(function)e(signatures,)i(what)f(refact\
orings)g(w)o(ould)1027 2159 y(b)q(e)g(needed)h(to)e(mak)o(e)f(them)g(matc)o
(h)h([20)o(].)30 b(In)19 b(the)g(ab)q(o)o(v)o(e)1027 2209 y(example,)e(the)h
(to)q(ol)f(could)h(prompt)f(the)h(user)h(that)f(a)f(re-)1027 2259 y(naming)d
(w)o(as)i(needed,)i(and)e(pro)o(vide)g(a)g(men)o(u)f(of)h(c)o(hoices:)1027
2309 y(one)g(of)e(the)i(functions)g(could)f(b)q(e)h(renamed)f(to)g(matc)o(h)f
(the)1027 2359 y(other)h(function,)f(or)h(b)q(oth)g(could)f(b)q(e)h(giv)o(en)
f(an)h(\(iden)o(tical\))1027 2408 y(new)f(name.)i(Similar)11 b(supp)q(ort)j
(could)f(b)q(e)h(pro)o(vided)f(for)g(ar-)1027 2458 y(gumen)o(t)g(reordering.)
1069 2509 y(A)e(more)g(p)q(o)o(w)o(erful)g(form)f(of)h(automated)f(supp)q(ort)
i(w)o(ould)1027 2559 y(b)q(e)21 b(to)e(determine,)i(giv)o(en)e(t)o(w)o(o)h
(classes,)i(what)d(functions)1027 2609 y(ha)o(v)o(e)h(structural)g(similariti\
es)e(that)h(suggest)i(conceptual)1027 2658 y(similarities.)h(Ho)o(w)o(ev)o
(er,)17 b(h)o(ueristics)g(based)g(on)e(structural)g eop bop -42 0 a fi(simila\
rities)10 b(are)j(not)f(fo)q(olpro)q(of.)k(Supp)q(ose)d(that)g(the)f(class-)
-42 50 y(es)17 b fe(Automo)o(bile)d fi(and)h fe(Subma)o(rine)g fi(eac)o(h)h
(con)o(tained)f(a)h(func-)-42 100 y(tion)i(with)g(a)f(single,)i(in)o(teger)f
(argumen)o(t.)29 b(But,)19 b(supp)q(ose)-42 149 y(that)h(in)f(the)h fe(Automo\
bile)d fi(class,)j(the)h(function)e(is)g(called)-42 199 y fg(changeOil)g fi
(whose)g(argumen)o(t)e(is)h(the)g(n)o(um)o(b)q(er)g(of)f(quarts)-42 249 y(of)
j(oil)f(needed;)25 b(in)20 b(the)h fe(Subma)o(rine)e fi(class,)j(the)f(functi\
on)-42 299 y(is)e(called)g fg(submer)n(ge)g fi(whose)h(argumen)o(t)e(is)h(the)
h(depth)g(to)-42 349 y(whic)o(h)11 b(to)g(descend.)19 b(These)12 b(functions)
f(clearly)f(don't)h(share)-42 399 y(a)18 b(common)d(abstraction,)k(but)g(auto\
matically)c(matc)o(hing)-42 448 y(on)f(attributes)h(of)e(the)i(signature)f
(w)o(on't)f(detect)j(this.)0 499 y(Suc)o(h)21 b(h)o(ueristics,)j(despite)e
(their)f(shortcomings,)h(ma)o(y)-42 549 y(b)q(e)c(p)q(o)o(w)o(erful)e(enough)
h(to)g(supp)q(ort)h(practical)f(refactoring)-42 599 y(tasks.)23 b(More)15 b
(p)q(o)o(w)o(erful)g(similarit)o(y)d(detection)k(is)f(p)q(ossible)-42 649 y
(in)f(some)f(cases)i([8)o(,)f(11)o(].)0 700 y(Once)f(the)g(signature)f(of)f
(a)h(function)f(in)h(b)q(oth)g(sub)q(classes)-42 749 y(matc)o(h,)g(the)h(func\
tion)g(signature)g(can)g(b)q(e)g(added)h(as)e(to)h(the)-42 799 y(sup)q(erclas\
s.)150 784 y fm(4)-42 921 y fc(3.2)56 b(Making)17 b(F)-5 b(unction)18 b(Bo)r
(dies)e(Compat-)86 979 y(ible)-42 1058 y fi(As)f(for)f(the)h fg(mapunit)f fi
(functions)g(describ)q(ed)i(earlier)e(in)g(the)-42 1108 y fe(Ino)q(de)i fi
(example,)e(the)h(function)g(b)q(o)q(dies)h(in)e(the)i(sub)q(classes)-42 1158
y(ma)o(y)11 b(b)q(e)i(similar)d(but)j(not)f(iden)o(tical.)17 b(Before)d(the)f
(function)-42 1208 y(b)q(o)q(dy)18 b(can)g(b)q(e)g(migrated)e(to)h(the)h(sup)
q(erclass,)h(di\013erences)-42 1257 y(need)c(to)f(b)q(e)h(separated)g(from)d
(the)i(common)d(co)q(de.)0 1308 y(The)18 b(approac)o(hes)g(for)f(detecting)i
(program)c(di\013erences)-42 1358 y(in)o(v)o(olv)o(e)d(string)h(comparison,)e
(tree)j(comparison)d(or)i(a)f(com-)-42 1408 y(bination)g(of)g(these)i(tec)o
(hniques)g([4)o(].)j(The)c(approac)o(hes)g(rep-)-42 1458 y(resen)o(t)20 b(the)
f(di\013erences)h(b)q(et)o(w)o(een)g(programs)d(as)h(a)g(set)h(of)-42 1508 y
(edit)11 b(op)q(erations)f(\(co)q(de)i(insertion,)e(replacemen)o(t)g(and)g
(dele-)-42 1557 y(tion\),)h(to)g(get)h(from)d(one)j(program)d(to)j(the)f(othe\
r.)18 b(Program)-42 1607 y(di\013erences)24 b(ha)o(v)o(e)c(b)q(een)i(studied)
g(in)e(regard)i(to)e(sp)q(elling)-42 1657 y(correction)c([13)o(,)e(27],)f(par\
sing)i(error)g(correction)h([28)o(],)d(v)o(er-)-42 1707 y(sion)k(storage)g
([24)o(])f(and)h(other)g(uses.)28 b(String)16 b(comparison)-42 1757 y(\014nds)
i(the)g(minim)n(um)13 b(cost)18 b(sequence)h(of)e(edit)g(op)q(erations)-42
1806 y(to)f(con)o(v)o(ert)g(one)f(string)h(in)o(to)e(another.)23 b(T)m(ree)16
b(comparison)-42 1856 y(algorithms)f(detect)j(syn)o(tactic)g(di\013erences)h
(b)q(et)o(w)o(een)f(pro-)-42 1906 y(grams)h(b)o(y)g(building)g(syn)o(tax)g
(trees)j(and)d(comparing)f(the)-42 1956 y(trees.)31 b(T)m(ree)18 b(comparison)
e(algorithms)f(are)j(more)f(exp)q(en-)-42 2006 y(siv)o(e)f(than)f(string)h
(comparison)d(approac)o(hes,)j(but)g(are)g(not)-42 2055 y(as)h(sensitiv)o(e)g
(to)g(minor)e(di\013erences)k(in)d(co)q(ding)g(st)o(yle)h(\(for)-42 2105 y
(example,)c(extra)h(spaces)h(or)f(blank)f(lines\).)0 2156 y(These)i(tec)o(hni\
ques)g(can)e(b)q(e)h(used)h(in)e(refactoring)g(as)h(fol-)-42 2206 y(lo)o(ws)j
([20)o(]:)24 b(Supp)q(ose)17 b(the)h(function)f fg(c)n(ommonF)m(unction)h fi
(is)-42 2256 y(de\014ned)13 b(in)e(classes)i fe(C1)d fi(and)h fe(C2)p fi(.)17
b(F)m(or)11 b(eac)o(h)h(edit)f(op)q(eration,)-42 2306 y(de\014ne)k(a)f(new)g
(function)g(in)f(b)q(oth)h(classes:)0 2392 y fh(\017)21 b fi(for)c(eac)o(h)i
(insertion,)g(de\014ne)g(in)f fe(C2)f fi(a)h(new)h(function)42 2442 y(whose)
13 b(b)q(o)q(dy)g(con)o(tains)f(the)i(inserted)g(co)q(de;)f(de\014ne)h(in)42
2492 y fe(C1)k fi(a)g(new)i(function)e(with)h(the)g(same)f(name)g(whose)42
2541 y(b)q(o)q(dy)13 b(is)h(n)o(ull.)j(Con)o(v)o(ert)d(in)g fe(C2)f fi(the)h
(inserted)h(co)q(de)g(to)-42 2580 y 383 2 v 5 2607 a fn(4)22 2619 y fl(In)i
(C++,)j(the)c(function)f(can)h(b)q(e)h(de\014ned)e(as)i(a)g(pure)f(virtual)
-42 2658 y(function)10 b(b)o(y)h(assigning)e(its)i(v)n(alue)f(to)i(b)q(e)f
(`0')g(in)g(the)f(sup)q(erclass.)1110 0 y fi(a)15 b(call)e(to)i(the)g(new)g
(function;)f(at)g(the)i(corresp)q(onding)1110 50 y(lo)q(cation)k(within)f fg
(c)n(ommonF)m(unction)i fi(in)f fe(C1)p fi(,)h(add)f(a)1110 100 y(call)13 b
(to)h(the)h(new)f(function.)1069 187 y fh(\017)20 b fi(for)11 b(eac)o(h)g(rep\
lacemen)o(t,)g(de\014ne)g(in)f fe(C1)g fi(a)h(new)g(function)1110 237 y(whose)
i(b)q(o)q(dy)e(con)o(tains)h(the)h(replaced)f(co)q(de;)h(de\014ne)g(in)1110
287 y fe(C2)18 b fi(a)h(new)g(function)g(with)g(the)g(same)f(name)g(whose)
1110 337 y(b)q(o)q(dy)12 b(con)o(tains)g(the)g(replacing)g(co)q(de.)18 b(In)
12 b fe(C1)p fi(,)f(con)o(v)o(ert)1110 387 y(the)16 b(replaced)g(co)q(de)h
(to)e(a)g(call)f(to)i(the)f(new)h(function;)1110 436 y(in)g fe(C2)p fi(,)f
(con)o(v)o(ert)h(the)h(replacing)f(co)q(de)g(with)g(a)f(call)h(to)1110 486 y
(the)f(new)f(function.)1069 574 y fh(\017)20 b fi(for)g(eac)o(h)g(deletion,)h
(in)f fe(C1)f fi(de\014ne)i(a)e(new)i(function)1110 624 y(whose)16 b(b)q(o)q
(dy)e(con)o(tains)h(the)h(deleted)f(co)q(de;)h(de\014ne)g(in)1110 674 y fe
(C2)i fi(a)h(new)g(function)g(with)g(the)g(same)f(name)g(whose)1110 723 y(b)q
(o)q(dy)d(is)g(n)o(ull.)20 b(In)14 b fe(C1)p fi(,)g(con)o(v)o(ert)i(the)f(del\
eted)h(co)q(de)g(to)1110 773 y(a)f(call)e(to)i(the)g(new)g(function;)f(at)g
(the)i(corresp)q(onding)1110 823 y(lo)q(cation)k(within)f fg(c)n(ommonF)m(unc\
tion)i fi(in)f fe(C2)p fi(,)h(add)f(a)1110 873 y(call)13 b(to)h(the)h(new)f
(function.)1069 959 y(These)h(op)q(erations)g(are)f(safe)h(if)e(the)i(co)q
(de)g(segmen)o(ts)f(b)q(e-)1027 1009 y(ing)23 b(inserted,)k(replaced)e(and)e
(deleted)i(mak)o(e)d(syn)o(tactic)1027 1059 y(sense)f(as)e(the)h(b)q(o)q(dies)
f(of)g(new)g(functions.)34 b(This)19 b(can)g(b)q(e)1027 1109 y(more)13 b(easi\
ly)h(realized)g(b)o(y)g(using)g(tree)h(analysis)f(approac)o(h-)1027 1159 y
(es.)1069 1210 y(While)e(suc)o(h)i(function)e(splitting)h(can)g(b)q(e)g(safel\
y)g(applied)1027 1259 y(to)19 b(a)g(program,)g(the)h(resultan)o(t)g(new)f(fun\
ctions)h(will)e(not)1027 1309 y(necessarily)d(corresp)q(ond)g(to)f(meaningful)
d(concepts)16 b(in)d(the)1027 1359 y(application)8 b(domain.)15 b(F)m(or)9 b
(example,)f(when)i(t)o(w)o(o)f(functions)1027 1409 y(are)18 b(compared,)e(seg\
men)o(ts)h(of)g(co)q(de)h(that)f(di\013er)g(b)q(et)o(w)o(een)1027 1459 y(them)
12 b(ma)o(y)f(b)q(e)i(preceded)i(or)e(follo)o(w)o(ed)e(b)o(y)h(segmen)o(ts)h
(of)f(re-)1027 1508 y(lated)h(co)q(de)h(that)g(\(coinciden)o(tally\))e(are)i
(the)f(same)g(in)f(b)q(oth)1027 1558 y(functions.)18 b(In)12 b(order)g(for)g
(the)g(new)g(functions)g(to)g(represen)o(t)1027 1608 y(meaningful)h(abstracti\
ons,)j(this)g(\\common")c(co)q(de)17 b(migh)o(t)1027 1658 y(really)d(b)q(elon\
g)h(together)g(with)g(the)g(di\013ering)f(segmen)o(ts)h(in)1027 1708 y(those)
g(new)f(functions.)1069 1759 y(This)19 b(suggests)h(that)f(automated)e(analys\
is)h(should)h(b)q(e)1027 1809 y(com)o(bined)11 b(with)h(user)h(in)o(teraction\
,)e(suc)o(h)i(as)f(the)g(approac)o(h)1027 1858 y(Rak)i([23)o(])g(describ)q
(es)j(for)d(abstracting)h(a)f(function)g(\(Small-)1027 1908 y(talk)h(metho)q
(d\))g(in)o(to)g(a)g(sup)q(erclass)i(from)d(its)i(sub)q(class)h(im-)1027 1958
y(plemen)o(tations.)1027 2080 y fc(3.3)56 b(Mo)n(ving)18 b(V)-5 b(ariables)
1027 2159 y fi(Ha)o(ving)22 b(created)i(the)g(abstract)f(sup)q(erclass)i(and)
d(deter-)1027 2209 y(mined)17 b(the)i(function)f(signatures,)h(it)f(is)g(some\
times)f(nec-)1027 2259 y(essary)i(to)f(add)g(mem)o(b)q(er)e(v)n(ariables)h
(to)h(the)g(abstract)h(su-)1027 2309 y(p)q(erclass.)26 b(The)16 b(most)f(comm\
on)e(reason)k(is)f(that)g(they)g(are)1027 2358 y(referenced)k(b)o(y)d(common)
e(co)q(de)j(that)f(b)q(elongs)g(in)g(the)h(su-)1027 2408 y(p)q(erclass.)1069
2459 y(As)13 b(w)o(as)f(the)h(case)h(with)e(function)g(signatures,)h(v)n(aria\
bles)1027 2509 y(de\014ned)20 b(in)e(one)h(sub)q(class)h(ma)o(y)d(b)q(e)i(str\
ucturally)g(similar)1027 2559 y(to,)i(but)f(not)g(exactly)g(matc)o(h,)g(conce\
ptually)g(equiv)n(alen)o(t)1027 2609 y(v)n(ariables)13 b(in)g(the)h(other)g
(sub)q(class.)20 b(As)14 b(with)f(function)g(sig-)1027 2658 y(natures,)j(stru\
ctural)g(heuristics)h(could)e(detect)h(structural)g eop bop -42 0 a fi(simila\
rities)11 b(\(in)j(name,)d(access)16 b(con)o(trol)d(mo)q(de)f(and)i(t)o(yp)q
(e\).)-42 50 y(In)j(cases)h(where)f(the)h(attributes)f(of)f(the)h(v)n(ariable\
s)f(di\013er,)-42 100 y(refactorings)21 b(can)f(b)q(e)g(applied)f(to)h(mak)o
(e)e(them)h(conform)-42 149 y([20].)0 199 y(Once)c(the)g(attributes)f(of)g
(a)f(v)n(ariable)g(in)h(b)q(oth)g(sub)q(class-)-42 249 y(es)i(matc)o(h,)e(the)
h(v)n(ariable)f(can)h(b)q(e)h(mo)o(v)o(ed)d(to)i(the)h(abstract)-42 299 y(sup)
q(erclass.)-42 413 y fc(3.4)56 b(Migrating)27 b(Common)e(Co)r(de)i(to)g(the)
86 471 y(Abstract)19 b(Sup)r(erclass)-42 548 y fi(Before)13 b(migrating)c(the)
j(function)f(b)q(o)q(dy)g(to)g(the)h(sup)q(erclass,)-42 597 y(an)o(y)j(di\013\
erences)h(b)q(et)o(w)o(een)g(the)g(functions)e(need)i(to)e(b)q(e)h(de-)-42 647
y(termined.)23 b(V)m(ariables)14 b(and)i(functions)f(referenced)j(b)o(y)d(the)
-42 697 y(common)10 b(co)q(de)j(m)o(ust)e(b)q(e)h(visible)g(from)e(the)i(sup)
q(erclass)i(b)q(e-)-42 747 y(fore)g(the)h(common)c(co)q(de)k(can)f(b)q(e)g
(mo)o(v)o(ed)f(there.)0 797 y(The)h(preconditions)h(for)e(this)h(refactoring)
g(are:)-12 869 y(1.)21 b(the)26 b(function)g(signature,)k(but)c(not)g(the)h
(function)42 919 y(b)q(o)q(dy)m(,)13 b(is)g(already)h(de\014ned)h(in)e(the)i
(sup)q(erclass)786 904 y fm(5)-12 996 y fi(2.)21 b(eac)o(h)14 b(di\013ering)h
(co)q(de)g(segmen)o(t)f(can)g(b)q(e)h(con)o(v)o(erted)h(to)42 1046 y(a)d(lega\
l)g(function)-12 1124 y(3.)21 b(the)10 b(scop)q(e)g(of)f(all)f(v)n(ariables)h
(and)h(functions)f(referenced)42 1174 y(b)o(y)j(the)g(common)e(co)q(de)j(incl\
udes)g(the)g(sup)q(erclass)h(and)42 1224 y(b)q(oth)g(sub)q(classes.)-42 1301 y
(After)h(c)o(hec)o(king)f(its)g(preconditions,)g(this)g(refactoring:)-12 1379
y(1.)21 b(for)13 b(eac)o(h)h(di\013ering)g(co)q(de)h(segmen)o(t:)59 1457 y
(\(a\))21 b(creates)26 b(a)d(new)i(function)e(in)h(eac)o(h)g(sub)q(class.)133
1507 y(The)16 b(name)e(of)h(the)h(new)g(function)f(is)h(automat-)133 1557 y
(ically)22 b(generated)i(and)f(is)g(distinct)g(from)e(the)133 1607 y(name)13 b
(of)g(an)o(y)g(existing)h(mem)o(b)q(er.)682 1591 y fm(6)57 1668 y fi(\(b\))21
b(adds)d(the)h(signature)f(of)g(the)g(new)h(function)f(to)133 1717 y(the)c
(sup)q(erclass)i(proto)q(col)-12 1795 y(2.)21 b(adds)f(a)g(function)g(b)q(o)q
(dy)g(to)g(the)g(mem)o(b)q(er)f(function)42 1845 y(signature)14 b(in)f(the)i
(sup)q(erclass)-12 1923 y(3.)21 b(deletes)12 b(the)f(mem)o(b)q(er)e(function)
h(from)f(the)i(sub)q(classes.)-42 2036 y fc(3.5)56 b(Summary)-42 2113 y fi
(Giv)o(en)10 b(t)o(w)o(o)g(classes,)i(this)e(section)h(de\014nes)h(an)e(appro\
ac)o(h)g(for)-42 2163 y(creating)15 b(a)e(common)e(abstract)k(sup)q(erclass)h
(that)e(con)o(tains)-42 2213 y(a)i(set)h(of)f(mem)o(b)q(er)e(function)i(signa\
tures,)h(and)f(p)q(ossibly)g(a)-42 2263 y(set)g(of)d(mem)o(b)q(er)g(v)n(ariab\
les)g(and)h(the)h(partial)e(implemen)o(ta-)-42 2312 y(tions)k(of)g(some)f(fun\
ctions.)28 b(After)17 b(refactoring,)h(the)f(de\014-)-42 2362 y(nitions)e(in)
g(the)h(sub)q(classes)h(are)e(streamlined,)g(as)g(some)f(of)-42 2412 y(the)g
(b)q(eha)o(vior)g(that)f(had)g(b)q(een)i(lo)q(cally)d(de\014ned)i(is)f(no)o
(w)g(in-)-42 2462 y(herited.)25 b(The)16 b(commonal)o(iti)o(es)e(and)h(di\013\
erences)j(b)q(et)o(w)o(een)-42 2512 y(the)d(sub)q(classes)h(are)e(made)f(more)
g(explicit.)-42 2541 y 383 2 v 5 2568 a fn(5)22 2579 y fl(This)f(is)f(satis\
\014ed)f(b)o(y)h(the)f(results)h(of)g(a)g(prior)g(step.)5 2607 y fn(6)22 2619
y fl(A)d(refactoring)d(could)h(later)h(b)q(e)g(applied)f(to)i(mak)o(e)e(the)h
(name)f(more)-42 2658 y(descriptiv)o(e.)1027 0 y fb(4)69 b(Conclusions)1027
100 y fi(Although)24 b(refactoring)h(is)f(common)e(in)i(the)i(Smalltalk)1027
149 y(comm)o(unit)o(y)m(,)9 b(it)j(seems)h(to)f(b)q(e)i(practiced)f(less)h
(often)e(b)o(y)h(the)1027 199 y(C++)g(comm)o(unit)o(y)c(and)j(do)q(es)h(not)f
(seem)g(to)g(b)q(e)g(recognized)1027 249 y(as)f(an)f(imp)q(ortan)o(t)e(part)i
(of)g(the)h(soft)o(w)o(are)f(life-cycle)g(of)g(C++)1027 299 y(programs.)20 b
(W)m(e)15 b(conjecture)h(that)f(one)h(imp)q(ortan)o(t)d(reason)1027 349 y(is)
19 b(that)f(refactoring)g(has)h(b)q(een)h(easier)f(to)f(do)g(for)g(Small-)
1027 398 y(talk)c(programs)g(than)h(for)f(C++)h(programs.)20 b(Smalltalk)12 b
(is)1027 448 y(a)17 b(simpler,)f(more)g(compact)g(language)g(than)h(C++.)28 b
(The)1027 498 y(bro)o(wsing)18 b(and)g(cross-reference)j(to)q(ols)d(that)g
(mak)o(e)f(refac-)1027 548 y(toring)h(easier)i(are)f(more)e(a)h(part)h(of)f
(the)h(Smalltalk)d(pro-)1027 598 y(gramming)c(en)o(vironmen)o(ts)i(than)h(amo\
ng)e(some)i(curren)o(tly)1027 647 y(used)h(C++)g(programming)c(en)o(vironmen)
o(ts.)21 b(Ho)o(w)o(ev)o(er,)15 b(as)1027 697 y(C++)e(programmi)o(ng)c(en)o
(vironmen)o(ts)j(are)g(b)q(ecoming)f(more)1027 747 y(p)q(o)o(w)o(erful)k(refa\
ctoring)f(is)h(b)q(ecoming)f(easier)h(to)g(realize)g(for)1027 797 y(C++)g(pro\
grams.)1069 851 y(Refactoring)j(seems)g(to)g(b)q(e)h(considered)h(ev)o(en)f
(less)h(im-)1027 901 y(p)q(ortan)o(t)13 b(outside)h(the)f(ob)r(ject-orien)o
(ted)i(comm)o(uni)o(t)o(y)m(.)g(This)1027 951 y(is)h(probably)f(b)q(ecause)j
(its)e(relativ)o(e)g(cost)g(and)g(b)q(ene\014t)h(dif-)1027 1001 y(fer)j(from)
e(one)i(group)g(to)f(another.)36 b(Reducing)19 b(the)i(cost)1027 1051 y(of)16
b(refactoring)f(should)h(also)f(encourage)i(these)g(groups)g(to)1027 1100 y
(consider)g(refactoring)f(their)g(programs)e(to)i(k)o(eep)g(the)h(pro-)1027
1150 y(grams)d(w)o(ell-structured)i(and)f(mak)o(e)e(it)i(easier)g(to)g(pro)q
(duce)1027 1200 y(reusable)g(soft)o(w)o(are.)1069 1254 y(There)h(are)g(sev)o
(eral)g(reasons)g(wh)o(y)f(refactoring)h(is)f(hard.)1027 1304 y(The)f(\014rst)
g(is)f(that)g(it)g(isn't)g(recognized)h(as)g(signi\014can)o(t.)j(W)m(e)1027
1354 y(\014nd)c(that)g(simply)d(ha)o(ving)i(names)g(for)g(the)h(di\013eren)o
(t)h(refac-)1027 1404 y(torings)f(mak)o(es)g(it)f(easier)j(to)e(notice)g(when)
h(they)g(are)g(need-)1027 1454 y(ed,)e(to)g(plan)f(for)h(them,)f(and)g(to)h
(carry)g(them)f(out.)18 b(Another)1027 1504 y(reason)e(is)f(that)g(refactorin\
g)g(tak)o(es)g(time.)20 b(It)15 b(requires)h(an-)1027 1553 y(alyzing)f(the)i
(program)d(to)i(\014nd)g(all)f(the)i(places)g(that)f(ha)o(v)o(e)1027 1603 y
(to)g(b)q(e)g(c)o(hanged.)23 b(Refactorings)15 b(that)g(require)i(man)o(y)c
(sim-)1027 1653 y(ple)h(c)o(hanges)g(can)f(still)g(tak)o(e)g(a)g(long)f(time)
g(to)i(carry)f(out)h(b)o(y)1027 1703 y(hand.)31 b(A)18 b(third)g(reason)h(is)
f(that)g(an)o(y)g(c)o(hange)h(to)f(a)g(pro-)1027 1753 y(gram,)e(including)g
(a)g(refactoring,)h(can)g(in)o(tro)q(duce)h(defects)1027 1802 y(in)o(to)13 b
(it.)1069 1857 y(W)m(e)h(ha)o(v)o(e)g(addressed)i(the)f(\014rst)g(problem)e
(b)o(y)h(sp)q(ecifying)1027 1907 y(a)j(set)g(of)f(refactorings)h(that)g(are)g
(commonly)c(used)18 b(in)e(the)1027 1956 y(ob)r(ject-orien)o(ted)i(comm)o(uni\
t)o(y)13 b([20,)j(21)o(].)26 b(These)18 b(refactor-)1027 2006 y(ings)13 b(inc\
lude)g(lo)o(w-lev)o(el)f(transformations)g(suc)o(h)i(as)f(c)o(hang-)1027 2056
y(ing)22 b(the)g(name)f(of)h(a)g(function)g(or)g(v)n(ariable,)g(mo)o(ving)e
(a)1027 2106 y(function)e(or)g(v)n(ariable)f(from)f(one)i(class)h(to)f(anothe\
r,)h(and)1027 2156 y(breaking)13 b(a)f(function)g(in)o(to)g(smaller)f(pieces,)
j(and)e(also)g(con-)1027 2206 y(tains)g(higher-lev)o(el)f(refactorings)h(suc)
o(h)h(as)e(dividing)g(a)g(class)1027 2255 y(in)o(to)17 b(sev)o(eral)h(smaller)
e(classes)j(and)f(\014nding)f(abstract)h(su-)1027 2305 y(p)q(erclasses.)25 b
(W)m(e)15 b(ha)o(v)o(e)g(protot)o(yp)q(ed)h(most)e(of)g(these)j(refac-)1027
2355 y(torings)f(for)f(a)h(constrained)h(set)f(of)g(C++)g(programs,)f(and)
1027 2405 y(are)k(in)e(the)i(pro)q(cess)g(of)f(building)e(a)i(refactoring)g
(to)q(ol)f(for)1027 2455 y(Smalltalk.)1069 2509 y(The)f(b)q(est)h(w)o(a)o(y)e
(to)g(solv)o(e)h(the)g(last)g(t)o(w)o(o)f(problems)g(is)h(to)1027 2559 y(pro)
o(vide)g(to)q(ols)f(to)h(carry)g(out)g(refactoring)g(automatically)l(.)1027
2609 y(Unfortunately)m(,)c(it)h(is)f(probably)g(imp)q(ossible)g(to)g(complete\
-)1027 2658 y(ly)f(automate)e(refactoring.)17 b(The)11 b(purp)q(ose)h(of)f
(a)f(refactoring)g eop bop -42 0 a fi(is)11 b(to)g(impro)o(v)o(e)e(the)i(desi\
gn)g(of)g(a)f(system,)h(but)g(a)g(refactoring)-42 50 y(that)j(can)g(b)q(e)g
(applied)e(safely)h(to)h(a)f(program)f(will)g(not)h(nec-)-42 100 y(essarily)k
(impro)o(v)o(e)d(its)i(design.)25 b(On)17 b(the)f(con)o(trary)m(,)h(apply-)
-42 149 y(ing)c(arbitrary)f(refactorings)i(to)f(a)f(program)f(is)i(more)f(lik)
o(ely)-42 199 y(to)20 b(corrupt)g(the)g(design)g(rather)g(than)f(impro)o(v)o
(e)f(it,)i(ev)o(en)-42 249 y(though)13 b(the)h(b)q(eha)o(vior)f(of)f(the)i
(program)d(is)i(unc)o(hanged.)19 b(A)-42 299 y(refactoring)11 b(impro)o(v)o
(es)e(design)i(if)e(the)i(resultan)o(t)g(co)q(de)h(units)-42 349 y(corresp)q
(ond)20 b(to)d(meaningful)e(abstractions)j(that)f(mak)o(e)f(it)-42 399 y(easi\
er)c(to)e(re\014ne)i(or)e(extend)i(the)f(program.)k(What)10 b(abstrac-)-42 448
y(tions)k(are)h(meaningful)c(dep)q(ends)16 b(on)e(the)g(application)f(and)-42
498 y(on)i(the)h(designer.)23 b(This)15 b(implies)e(that)i(refactoring)h(task\
s,)-42 548 y(esp)q(ecially)10 b(the)h(more)e(complex)f(tasks,)j(require)g(som\
e)e(in)o(ter-)-42 598 y(action)i(with)g(the)h(designer.)18 b(Nev)o(ertheless,)
c(m)o(uc)o(h)c(supp)q(ort)-42 648 y(can)15 b(b)q(e)f(pro)o(vided)g(b)o(y)g
(a)f(refactoring)h(to)q(ol)f([20)o(].)0 702 y(W)m(e)24 b(ha)o(v)o(e)h(algorit\
hms)e(for)h(all)g(of)g(our)h(refactorings,)-42 752 y(though)17 b(man)o(y)e
(of)g(these)j(algorithms)d(require)i(sev)o(eral)g(in-)-42 802 y(puts)c(from)e
(a)h(user.)18 b(Eac)o(h)13 b(algorithm)d(has)i(a)g(precondition;)-42 851 y
(if)e(the)g(precondition)g(is)g(met)f(then)h(the)h(algorithm)c(is)j(b)q(eha)o
(v-)-42 901 y(ior)j(preserving)g(and)g(will)e(not)i(in)o(tro)q(duce)g(an)o
(y)f(defects)i(in)o(to)-42 951 y(the)e(program.)j(Since)d(testing)f(for)g(pro\
gram)e(equiv)n(alence)i(is)-42 1001 y(undecidable,)g(the)g(preconditions)g
(are)f(often)h(conserv)n(ativ)o(e.)-42 1051 y(Sev)o(eral)g(of)e(them)g(are)h
(based)h(on)e(data\015o)o(w)g(tec)o(hniques,)j(and)-42 1100 y(can)f(almost)e
(certainly)h(b)q(e)h(impro)o(v)o(ed)e(up)q(on.)17 b(Ho)o(w)o(ev)o(er,)11 b
(the)-42 1150 y(undecidabilit)o(y)h(of)g(the)h(basic)g(problem)f(requires)h
(that)g(an)o(y)-42 1200 y(algorithm)e(for)i(c)o(hec)o(king)h(preconditions)g
(will)e(b)q(e)i(to)q(o)f(con-)-42 1250 y(serv)n(ativ)o(e.)0 1304 y(Refactorin\
g)k(is)g(similar)e(to)j(the)g(sc)o(hema)f(mo)q(di\014cation)-42 1354 y(in)f
(databases)g([3)o(,)f(16,)g(22)o(].)22 b(The)16 b(main)e(di\013erence)j(is)f
(that)-42 1404 y(sc)o(hema)24 b(mo)q(di\014cation)d(is)j(concerned)i(only)d
(with)g(data,)-42 1454 y(while)15 b(refactorings)g(are)g(concerned)h(with)f
(b)q(oth)g(data)f(and)-42 1504 y(program.)31 b(On)19 b(the)g(other)g(hand,)g
(the)h(w)o(ork)e(on)g(sc)o(hema)-42 1553 y(mo)q(di\014cation)12 b(is)i(concer\
ned)i(with)d(up)q(dating)h(the)g(existing)-42 1603 y(ob)r(jects)19 b(in)f(the)
g(database.)30 b(Our)18 b(w)o(ork)g(has)g(ignored)f(the)-42 1653 y(problem)c
(of)h(c)o(hanging)g(existing)g(ob)r(jects,)h(since)g(most)e(im-)-42 1703 y
(plemen)o(tations)d(of)g(languages)g(suc)o(h)i(as)f(C++)g(do)g(not)f(allo)o
(w)-42 1753 y(programs)16 b(to)g(b)q(e)h(mo)q(di\014ed)e(in)g(the)i(middle)e
(of)g(their)i(exe-)-42 1802 y(cution.)32 b(An)18 b(OODBMS,)h(whic)o(h)f(uni\
\014es)h(programs)e(and)-42 1852 y(p)q(ersisten)o(t)f(data,)d(w)o(ould)g(ha)o
(v)o(e)h(to)g(deal)f(with)h(b)q(oth.)0 1907 y(Refactoring)h(is)h(also)f(simil\
ar)e(to)i(the)i(more)d(traditional)-42 1957 y(program)f(transformation)f(w)o
(ork,)i(whic)o(h)g(usually)f(has)h(the)-42 2006 y(goal)20 b(of)g(impro)o(ving)
d(e\016ciency)m(,)22 b(of)e(con)o(v)o(erting)h(abstract)-42 2056 y(program)10
b(sc)o(hemas)h(in)o(to)f(co)q(de,)i(or)f(of)g(transforming)e(an)i(ab-)-42 2106
y(stract)h(design)e(in)o(to)g(a)g(concrete)i(program)c([2,)h(6,)h(15)o(].)16 b
(These)-42 2156 y(systems)e(often)f(p)q(erform)f(the)i(in)o(v)o(erse)f(transf\
ormations)f(to)-42 2206 y(ours,)18 b(since)g(refactorings)f(often)g(are)h(use\
d)g(to)e(mak)o(e)g(pro-)-42 2255 y(grams)g(more)g(abstract)i(and)f(are)h(not)
f(usually)f(concerned)-42 2305 y(with)e(e\016ciency)m(.)0 2360 y(Refactoring)
g(is)h(a)g(practical)f(problem)g(that)h(needs)h(b)q(et-)-42 2409 y(ter)i(supp)
q(ort.)29 b(The)18 b(examples)e(in)h(this)g(pap)q(er)h(sho)o(w)f(that)-42 2459
y(ev)o(en)k(relativ)o(ely)f(straigh)o(tforw)o(ard)g(refactorings)h(suc)o(h)g
(as)-42 2509 y(\014nding)e(a)g(common)d(sup)q(erclass)21 b(are)f(more)e(compl\
icated)-42 2559 y(than)i(they)g(app)q(ear)g(at)g(\014rst.)35 b(Although)19 b
(this)h(seems)g(to)-42 2609 y(eliminate)11 b(c)o(hances)k(for)d(refactoring)h
(programs)e(complete-)-42 2658 y(ly)k(automatically)l(,)d(it)j(should)g(b)q
(e)h(p)q(ossible)f(to)g(build)f(to)q(ols)1027 0 y(that)19 b(mak)o(e)e(refacto\
ring)i(easier.)33 b(In)19 b(the)g(long)f(run,)h(this)1027 50 y(will)10 b(help)
h(mak)o(e)f(our)h(programs)f(easier)i(to)g(extend)g(and)f(will)1027 100 y(mak)
o(e)i(it)g(easier)i(to)f(dev)o(elop)f(reusable)i(soft)o(w)o(are.)1027 237 y fb
(5)69 b(Ac)n(kno)n(wledgemen)n(ts)1027 328 y fi(P)o(eter)20 b(Madan)o(y)d(pro)
o(vided)h(helpful)f(input)h(regarding)g(the)1027 377 y(ev)o(olution)10 b(of)g
(the)i fg(Choic)n(es)f fi(\014le)g(system)f(framew)o(ork.)16 b(Janet)1027 427
y(Coleman,)10 b(W)m(arren)j(Mon)o(tgomery)d(and)j(Ed)f(Rak)g(review)o(ed)1027
477 y(drafts)19 b(of)e(this)i(pap)q(er.)31 b(The)19 b(conference)h(review)o
(ers)g(also)1027 527 y(pro)o(vided)14 b(helpful)f(commen)o(ts.)1069 577 y(A)m
(T&T)f(Bell)f(Lab)q(oratories)h(has)h(supp)q(orted)g(William)8 b(F.)1027 626 y
(Op)q(dyk)o(e's)15 b(researc)o(h)i(at)d(the)h(Univ)o(ersit)o(y)g(of)f(Illinoi\
s)f(under)1027 676 y(the)i(full-time)c(do)q(ctoral)j(supp)q(ort)g(program.)
1027 813 y fb(References)1048 904 y fi([1])20 b(A)m(T&T.)11 b fg(UNIX)g(Syste\
m)g(V)g(User)g(R)n(efer)n(enc)n(e)g(Manual)p fi(.)1113 954 y(A)m(T&T,)i(1984.)
1048 1036 y([2])20 b(Rob)q(ert)13 b(Balzer.)k(A)c(\014fteen-y)o(ear)g(p)q(ers\
p)q(ectiv)o(e)i(on)e(au-)1113 1086 y(tomatic)k(programmi)o(ng.)29 b(In)19 b fg
(Softwar)n(e)g(R)n(eusability)1113 1136 y(-)13 b(V)m(olume)h(II:)g(Applic)n
(ations)g(and)g(Exp)n(erienc)n(e)p fi(,)f(pages)1113 1186 y(289{311,)e(1989.)
1048 1268 y([3])20 b(Ja)o(y)j(Banerjee)h(and)g(W)m(on)e(Kim.)44 b(Seman)o(tic\
s)23 b(and)1113 1318 y(implem)o(en)o(tation)17 b(of)i(sc)o(hema)g(ev)o(olutio\
n)g(in)g(ob)r(ject-)1113 1368 y(orien)o(ted)d(databases.)25 b(In)16 b fg(Pr)n
(o)n(c)n(e)n(e)n(dings)h(of)g(the)g(A)o(CM)1113 1417 y(SIGMOD)e(Confer)n(enc)
n(e)p fi(,)f(1987.)1048 1500 y([4])20 b(Carol)g(Sue)i(Bec)o(kman-Da)o(vies.)
39 b fg(Finding)22 b(Pr)n(o)n(gr)n(am)1113 1550 y(Di\013er)n(enc)n(es)e(Base)
n(d)g(on)g(Syntactic)h(T)m(r)n(e)n(e)d(Structur)n(e)p fi(.)1113 1599 y(PhD)24
b(thesis,)j(Univ)o(ersit)o(y)d(of)g(Illinois)f(at)h(Urbana-)1113 1649 y(Champ\
aign,)10 b(1989.)1048 1731 y([5])20 b(P)o(aul)10 b(L.)g(Bergstein.)k(Ob)r(jec\
t-preserving)f(class)e(trans-)1113 1781 y(formations.)47 b(In)25 b fg(Pr)n
(o)n(c)n(e)n(e)n(dings)f(of)h(OOPSLA)g(`91)p fi(,)1113 1831 y(1991.)1048 1913
y([6])20 b(R.)10 b(M.)i(Burstall)f(and)h(J.)f(Darlington.)i(A)f(transforma-)
1113 1963 y(tion)18 b(system)h(for)f(dev)o(eloping)h(recursiv)o(e)h(programs.)
1113 2013 y fg(Journal)14 b(of)h(the)g(A)o(CM)p fi(,)e(24\(1\):44{67,)e(1977.)
1048 2095 y([7])20 b(Eduardo)h(Casais.)39 b fg(R)n(e)n(or)n(ganizing)21 b(an)
h(Obje)n(ct)f(Sys-)1113 2145 y(tem)p fi(,)41 b(pages)c(161{189.)84 b(Cen)o
(tre)38 b(Univ)o(ersitair)1113 2195 y(d'Informatique,)11 b(Univ)o(ersite)j
(de)h(Genev)o(e,)f(1989.)1048 2277 y([8])20 b(N.)c(Dersho)o(witz.)26 b(Progra\
mming)14 b(b)o(y)i(analogy)m(.)24 b fg(Ma-)1113 2327 y(chine)d(L)n(e)n(arning\
:)33 b(A)o(n)21 b(A)o(rti\014cial)f(Intel)r(ligenc)n(e)i(Ap-)1113 2377 y(pr)n
(o)n(ach)16 b(\(R.S.)g(Michalski,)h(J.)e(G.)h(Carb)n(onel)r(l)g(and)h(T.)1113
2427 y(M.)d(Mitchel)r(l,)g(e)n(ds\))p fi(,)g(2:395{424,)d(1986.)1048 2509 y
([9])20 b(L.)13 b(P)o(eter)j(Deutsc)o(h.)k(Design)15 b(reuse)g(and)g(framew)o
(orks)1113 2559 y(in)8 b(the)i(Smalltalk-80)c(system.)k(In)f fg(Softwar)n(e)h
(R)n(eusabil-)1113 2609 y(ity)22 b(-)g(V)m(olume)h(II:)f(Applic)n(ations)g
(and)i(Exp)n(erienc)n(e)p fi(,)1113 2658 y(pages)14 b(57{72,)e(1989.)g eop bop
-42 0 a fi([10])20 b(Margaret)e(A.)f(Ellis)g(and)h(Bjarne)g(Stroustrup.)31 b
fg(The)44 50 y(A)o(nnotate)n(d)23 b(C++)f(R)n(efer)n(enc)n(e)g(Manual)p fi
(.)43 b(Addison-)44 100 y(W)m(esley)14 b(Publishing)f(Co.,)f(Reading,)h(MA,)g
(1990.)-42 184 y([11])20 b(R.)e(Greiner.)33 b(Learning)18 b(b)o(y)h(understan\
ding)g(analo-)44 234 y(gies.)f fg(A)o(rti\014cial)c(Intel)r(ligenc)n(e)p fi
(,)f(35:81{125,)e(1988.)-42 319 y([12])20 b(William)9 b(G.)k(Grisw)o(old.)j fg
(Pr)n(o)n(gr)n(am)e(R)n(estructuring)h(as)44 368 y(an)20 b(A)o(id)g(in)g(Soft\
war)n(e)f(Maintenanc)n(e)p fi(.)35 b(PhD)19 b(thesis,)44 418 y(Univ)o(ersit)o
(y)14 b(of)f(W)m(ashington,)f(1991.)-42 503 y([13])20 b(P)o(atric)o(k)d(A.)f
(V.)h(Hall)f(and)h(Geo\013)g(R.)f(Do)o(wling.)26 b(Ap-)44 553 y(pro)o(ximate)
11 b(string)j(matc)o(hing.)h fg(Computing)g(Surveys)p fi(,)44 602 y(12\(4\):3\
81{402,)c(Decem)o(b)q(er)j(1980.)-42 687 y([14])20 b(Ralph)c(E.)h(Johnson)h
(and)g(Brian)f(F)m(o)q(ote.)29 b(Designing)44 737 y(reusable)11 b(classes.)i
fg(Journal)e(of)h(Obje)n(ct-Oriente)n(d)e(Pr)n(o-)44 787 y(gr)n(amming)p fi
(,)j(1\(2\):22{35,)e(1988.)-42 871 y([15])20 b(W.)c(Lewis)h(Johnson)h(and)e
(Martin)h(F)m(eather.)28 b(Build-)44 921 y(ing)13 b(an)h(ev)o(olution)f(trans\
formation)f(library)m(.)18 b(In)c fg(Pr)n(o-)44 971 y(c)n(e)n(e)n(dings)f(of)
h(the)f(12th)h(International)f(Confer)n(enc)n(e)g(on)44 1021 y(Softwar)n(e)h
(Engine)n(ering)p fi(,)g(pages)g(238{247,)e(1990.)-42 1105 y([16])20 b(W)m
(on)29 b(Kim.)65 b fg(Intr)n(o)n(duction)30 b(to)g(Obje)n(ct-Oriente)n(d)44
1155 y(Datab)n(ases)p fi(.)19 b(MIT)13 b(Press,)i(1990.)-42 1239 y([17])20 b
(P)o(eter)f(W.)d(Madan)o(y)m(.)27 b fg(A)o(n)18 b(Obje)n(ct-Oriente)n(d)f(F)m
(r)n(ame-)44 1289 y(work)24 b(for)h(Filesystems)p fi(.)51 b(PhD)25 b(thesis,)
k(Univ)o(ersi-)44 1339 y(t)o(y)18 b(of)g(Illinois)e(at)i(Urbana-Champaign,)e
(1992.)30 b(Al-)44 1389 y(so)13 b(T)m(ec)o(hnical)g(Rep)q(ort)g(No.)g(UIUCDCS\
{R{92{1751,)44 1439 y(Departmen)o(t)h(of)h(Computer)f(Science,)i(Univ)o(ersit)
o(y)f(of)44 1489 y(Illinois)d(at)i(Urbana-Champaign.)-42 1573 y([18])20 b(Je\
\013)e(McKenna.)27 b(A)17 b(prop)q(osal)g(for)f(c)o(hange)i(manage-)44 1623 y
(men)o(t)e(for)h(smalltalk.)24 b fg(Smal)r(ltalk)17 b(R)n(ep)n(ort)p fi(,)h
(1\(5\):1{3,)44 1673 y(1991.)-42 1757 y([19])i(Bertrand)c(Mey)o(er.)21 b fg
(Obje)n(ct-oriente)n(d)15 b(Softwar)n(e)g(Con-)44 1807 y(struction)p fi(.)i
(Pren)o(tice)f(Hall,)c(1988.)-42 1892 y([20])20 b(William)6 b(F.)j(Op)q(dyk)o
(e.)k fg(R)n(efactoring)e(Obje)n(ct-Oriente)n(d)44 1941 y(F)m(r)n(ameworks)p
fi(.)30 b(PhD)18 b(thesis,)i(Univ)o(ersit)o(y)f(of)e(Illinois)44 1991 y(at)23
b(Urbana-Champaign,)g(1992.)47 b(Also)23 b(T)m(ec)o(hnical)44 2041 y(Rep)q
(ort)14 b(No.)g(UIUCDCS{R{92{1759,)d(Departmen)o(t)44 2091 y(of)21 b(Computer)
h(Science,)j(Univ)o(ersit)o(y)d(of)f(Illinois)g(at)44 2141 y(Urbana-Champaign\
.)-42 2225 y([21])f(William)25 b(F.)j(Op)q(dyk)o(e)h(and)g(Ralph)e(E.)i(Johns\
on.)44 2275 y(Refactoring:)38 b(An)25 b(aid)e(in)h(designing)g(application)44
2325 y(framew)o(orks)i(and)g(ev)o(olving)g(ob)r(ject-orien)o(ted)i(sys-)44
2375 y(tems.)g(In)17 b fg(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)g(Symp)n(osium)h
(on)f(Obje)n(ct-)44 2424 y(Oriente)n(d)28 b(Pr)n(o)n(gr)n(amming)g(Emphasizin\
g)i(Pr)n(actic)n(al)44 2474 y(Applic)n(ations)15 b(\(SOOPP)m(A\))p fi(,)e(Sep\
tem)o(b)q(er)h(1990.)-42 2559 y([22])20 b(D.)15 b(Jason)h(P)o(enney)h(and)e
(Jacob)h(Stein.)24 b(Class)16 b(mo)q(di-)44 2609 y(\014cation)f(in)g(the)h
(GemStone)e(ob)r(ject-orien)o(ted)j(dbms.)44 2658 y(In)d fg(Pr)n(o)n(c)n(e)n
(e)n(dings)g(of)h(OOPSLA)g(`87)p fi(,)f(1987.)1027 0 y([23])20 b(Edw)o(ard)d
(J.)h(Rak.)27 b(Tw)o(o)17 b(redesign)i(to)q(ols)e(for)g(Small-)1113 50 y(talk\
.)37 b(Master's)22 b(thesis,)h(Univ)o(ersit)o(y)d(of)h(Illinois)e(at)1113 100
y(Urbana-Champaign,)10 b(1990.)1027 183 y([24])20 b(Marc)14 b(J.)f(Ro)q(c)o
(hkind.)k(The)d(source)h(co)q(de)g(con)o(trol)e(sys-)1113 232 y(tem.)19 b fg
(IEEE)e(T)m(r)n(ansactions)e(on)h(Softwar)n(e)f(Engine)n(er-)1113 282 y(ing)p
fi(,)e(SE-1\(4\):364{370,)e(Decem)o(b)q(er)j(1975.)1027 365 y([25])20 b(Vince)
11 b(Russo,)g(Gary)g(Johnston,)h(and)f(Ro)o(y)f(H.)g(Camp-)1113 415 y(b)q(ell\
.)h(Pro)q(cess)h(Managemen)o(t)d(in)h(Multipro)q(cessor)h(Op-)1113 465 y(erat\
ing)g(Systems)g(using)g(Class)h(Hierarc)o(hical)f(Design.)1113 515 y(In)i fg
(Pr)n(o)n(c)n(e)n(e)n(dings)i(of)f(OOPSLA)h('88)p fi(,)e(San)g(Diego,)g(Ca.,)
1113 565 y(Septem)o(b)q(er)h(1988.)1027 648 y([26])20 b(Vincen)o(t)f(Russo)g
(and)f(Ro)o(y)g(H.)g(Campb)q(ell.)30 b(Virtual)1113 697 y(Memory)20 b(and)h
(Bac)o(king)g(Storage)g(Managemen)o(t)f(in)1113 747 y(Multipro)q(cessor)h(Op)
q(erating)h(Systems)e(using)g(Class)1113 797 y(Hierarc)o(hical)d(Design.)27 b
(In)18 b fg(Submitte)n(d)g(to)f(OOPSLA)1113 847 y('89)p fi(,)12 b(1989.)k(Als\
o)d(a)o(v)n(ailable)e(as)i(Univ)o(ersit)o(y)g(of)f(Illinois)1113 897 y(T)m
(ec)o(hnical)h(Rep)q(ort.)1027 980 y([27])20 b(Da)o(vid)c(Sank)o(o\013)i(and)
g(Joseph)h(B.)e(Krusk)n(al.)30 b(Macro-)1113 1029 y(molecular)9 b(sequences.)
15 b(In)c fg(Time)g(Warps,)i(String)e(Ed-)1113 1079 y(its,)i(and)i(Macr)n(omo\
le)n(cules:)k(The)14 b(The)n(ory)g(and)h(Pr)n(ac-)1113 1129 y(tic)n(e)f(of)g
(Se)n(quenc)n(e)i(Comp)n(arison)f(\(D.)f(Sanko\013)j(and)e(J.)1113 1179 y(Kru\
skal,)f(e)n(ds\))p fi(,)f(pages)h(45{53,)f(1983.)1027 1262 y([28])20 b(Rob)q
(ert)d(A.)f(W)m(agner.)25 b(Order-n)18 b(correction)g(for)e(reg-)1113 1312 y
(ular)i(languages.)34 b fg(Communic)n(ations)20 b(of)f(the)h(A)o(CM)p fi(,)
1113 1362 y(17\(5\):265{268,)10 b(1974.)1027 1445 y([29])20 b(Reb)q(ecca)31 b
(Wirfs-Bro)q(c)o(k,)j(Brian)c(Wilk)o(erson,)k(and)1113 1494 y(Lauren)12 b(Wie\
ner.)j fg(Designing)f(Obje)n(ct-Oriente)n(d)e(Soft-)1113 1544 y(war)n(e)p fi
(.)17 b(Pren)o(tice-Hall,)c(1990.)1027 1627 y([30])20 b(Reb)q(ecca)c(J.)g(Wir\
fs-Bro)q(c)o(k)f(and)h(Ralph)e(E.)i(Johnson.)1113 1677 y(A)h(surv)o(ey)i(of)e
(curren)o(t)i(researc)o(h)g(in)e(ob)r(ject-orien)o(ted)1113 1727 y(design.)11
b fg(Communic)n(ations)h(of)f(the)g(A)o(CM)p fi(,)e(Septem)o(b)q(er)1113 1777
y(1990.)1027 1860 y([31])20 b(Jonathan)15 b(Zw)o(eig)h(and)f(Ralph)g(Johnson.)
23 b(Conduits:)1113 1910 y(A)15 b(comm)o(unication)e(abstraction)j(in)f(C++.)
24 b(In)16 b fg(Pr)n(o-)1113 1959 y(c)n(e)n(e)n(dings)d(of)h(the)g(USENIX)f
(C++)27 b(Workshop)p fi(,)13 b(pages)1113 2009 y(191{203,)e(1990.)g eop eos
@end


  3 Responses to “Category : Various Text files
Archive   : OOARTPS1.ZIP
Filename : ARTICLE1.PS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/