%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 4.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 4.0, for use with Frame 4.0 products % This ps_prolog file is Copyright (c) 1986-1993 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameBuilder and FrameViewer as long as this % copyright notice is preserved. % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to True, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (4.0) def /FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor FMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog!) FMFAILURE } if } def /FMBADEPSF { (PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X ) dup dup (X) search pop exch pop exch pop length 4 -1 roll putinterval FMFAILURE } def /FMLOCAL { FrameDict begin 0 def end } def /concatprocs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /FrameNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat setrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put FMLevel1 not { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } if /combineColor { FrameSepIs FMnone eq { graymode FMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { FMPColor graymode and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode FMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not FMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen FMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgrxfer FMLOCAL /orggxfer FMLOCAL /orgbxfer FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /orgrproc FMLOCAL /orggproc FMLOCAL /orgbproc FMLOCAL /organgle FMLOCAL /orgrangle FMLOCAL /orggangle FMLOCAL /orgbangle FMLOCAL /orgfreq FMLOCAL /orgrfreq FMLOCAL /orggfreq FMLOCAL /orgbfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /edown FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /FrameNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def FMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse { (Can't select requested paper size for Frame print job!) FMFAILURE } if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped { (Can't select requested paper size for Frame print job!) FMFAILURE } if {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer FrameNegative { 1 1 4 { pop { 1 exch sub } concatprocs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer FrameNegative { { 1 exch sub } concatprocs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /pwid FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /initmatrix {(initmatrix) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setPatternMode { FMLevel1 { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div FrameNegative {1.0 exch sub} if /FrameCurGray exch def } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def FMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode FMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode FMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rad FMLOCAL /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup dup 24 eq { pop pop 3 mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL FMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch concatprocs settransfer } bind def /BITMAPCOLOR { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def FMLevel1 { colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is w d wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def FMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {ip} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris gis bis w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (4.0) FMVERSION 1 1 0 0 612 792 0 1 23 FMDOCUMENT 0 0 /Times-Roman FMFONTDEFINE 1 0 /Times-Bold FMFONTDEFINE 2 0 /Courier-Bold FMFONTDEFINE 3 0 /Courier FMFONTDEFINE 4 0 /Times-Italic FMFONTDEFINE 5 1 /Symbol FMFONTDEFINE 6 0 /Times-BoldItalic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (1) 536 42.62 T 0 18 Q (V) 161.54 708 T (isual Programming and Parallel Computing) 173.46 708 T 1 12 Q (James C. Br) 276.28 670 T (owne) 339.05 670 T 0 8 Q ( \240) 365.72 674 T 1 12 Q (Jack Dongarra) 280.5 654 T 0 8 Q ( \240\240) 357.5 658 T 1 12 Q (Syed I. Hyder) 285.5 638 T 0 8 Q ( \240) 356.5 642 T 1 12 Q (Keith Moor) 286.28 622 T (e) 346.39 622 T 0 8 Q ( \240\240) 351.72 626 T 1 12 Q (Peter Newton) 284.18 606 T 0 8 Q ( \240\240) 353.82 610 T 1 12 Q (Abstract) 301.67 576 T 0 10 Q 0.96 (V) 144 551.33 P 0.96 (isual programming ar) 150.62 551.33 P 0.96 (guably provides greater bene\336t in explicit parallel programming,) 238.45 551.33 P -0.21 (particularly coarse grain MIMD programming, than in sequential programming. Explicitly) 144 539.33 P 0.73 (parallel programs are multi-dimensional objects; the natural representations of a parallel) 144 527.33 P 0.49 (program are annotated directed graphs: data \337ow graphs, control \337ow graphs, etc. where) 144 515.33 P 0.18 (the nodes of the graphs are sequential computations. The execution of parallel programs) 144 503.33 P 1.37 (is a directed graph of instances of sequential computations. A visually based \050directed) 144 491.33 P 0.12 (graph\051 representation of parallel programs is thus more natural than a pure text string lan-) 144 479.33 P 0.59 (guage where multi-dimensional structures must be implicitly de\336ned. The naturalness of) 144 467.33 P 0.14 (the annotated directed graph representation of parallel programs enables methods for pro-) 144 455.33 P 1.07 (gramming and debugging which are qualitatively dif) 144 443.33 P 1.07 (ferent and ar) 360.79 443.33 P 1.07 (guably superior to the) 413.29 443.33 P 0.77 (conventional practice based on pure text string languages. Annotation of the graphs is a) 144 431.33 P 0.09 (critical element of a practical visual programming system; text is still the best way to rep-) 144 419.33 P (resent many aspects of programs.) 144 407.33 T -0.19 (This paper presents a model of parallel programming and a model of execution for parallel) 144 383.33 P 0.64 (programs which are the conceptual framework for a complete visual programming envi-) 144 371.33 P -0.19 (ronment including capture of parallel structure, compilation and behavior analysis \050perfor-) 144 359.33 P 0.58 (mance and debugging\051. T) 144 347.33 P 0.58 (wo visually-oriented parallel programming systems, CODE 2.0) 247.23 347.33 P 0.35 (and HeNCE, each based on a variant of the model of programming, will be used to illus-) 144 335.33 P 0.63 (trate the concepts. The bene\336ts of visually-oriented realizations of these models for pro-) 144 323.33 P 0.91 (gram structure capture, software component reuse, performance analysis and debugging) 144 311.33 P 0.95 (will be explored and hopefully demonstrated by examples in these representations. It is) 144 299.33 P 0.58 (only by actually implementing and using visual parallel programming languages that we) 144 287.33 P (have been able to fully evaluate their merits.) 144 275.33 T 1 16 Q (1.0 Intr) 108 235.33 T (oduction) 163.26 235.33 T 0 12 Q 0.28 (During the past 15 years microprocessor performance has improved dramatically in com-) 108 208 P 0.17 (parison to the performance of lar) 108 194 P 0.17 (ger systems [Pat90]. From a hardware point of view) 266.27 194 P 0.17 (, this) 516.49 194 P 5.18 (trend has made parallel computers increasingly attractive since high-performance) 108 180 P 1.69 (machines can be built by combining lar) 108 166 P 1.69 (ge numbers of microprocessors that have been) 307.24 166 P -0.04 (bought at commodity prices. The design details vary greatly from one machine to another) 108 152 P -0.04 (,) 537 152 P 0.95 (but most recent machines adopt the MIMD \050multiple instruction streams - multiple data) 108 138 P 0.69 (streams\051 model in which each processor can perform dif) 108 124 P 0.69 (ferent computations on dif) 383.19 124 P 0.69 (ferent) 512.02 124 P 0.62 (data. Some machines use a shared address space for memory; others require that proces-) 108 110 P 0.95 (sors communicate via explicit message sending. It is even possible, since they are often) 108 96 P 108 56 540 80 R 7 X V 0 10 Q 0 X (\240 University of T) 108 73.33 T (exas at Austin.) 176.46 73.33 T (\240\240 University of T) 108 61.33 T (ennessee at Knoxville.) 181.46 61.33 T FMENDPAGE %%EndPage: "1" 1 %%Page: "2" 2 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (2) 536 42.62 T 0 12 Q -0.02 (available, to use a network of workstations as a parallel computer) 108 712 P -0.02 (. All of these designs are) 421.44 712 P 0.34 (intended for coarse-grain computations in which processors execute a substantial number) 108 698 P 0.07 (of instructions between communications or other interactions with other processors. If the) 108 684 P 0.85 (computation grain becomes too small, performance suf) 108 670 P 0.85 (fers. This paper will focus exclu-) 377.14 670 P (sively on visual programming methods for coarse-grain MIMD parallel architectures.) 108 656 T 0.85 (The primary reason that parallel computing is not more common than it is today is that,) 108 630 P -0.09 (while the machines are fairly easy to build, it is quite dif) 108 616 P -0.09 (\336cult to write programs which are) 377.46 616 P 0.86 (both ef) 108 602 P 0.86 (\336cient and portable across machines since the design details of parallel machines) 142.3 602 P 1.61 (impact both the programming model and execution performance far more signi\336cantly) 108 588 P 0.69 (than do the details of the designs of sequential machines. The dif) 108 574 P 0.69 (\336culty of programming) 426.63 574 P (parallel machines is the major bottleneck preventing their wider acceptance.) 108 560 T 0.56 (It is easy to see that parallel programming is more dif) 108 534 P 0.56 (\336cult than sequential programming) 370 534 P 2.13 (since sequential programs are simply a degenerate case of parallel programs. Coarse-) 108 520 P -0.16 (grained MIMD parallel programs consist of interacting sequential elements. The program-) 108 506 P (mer must specify both the sequential elements and their interactions.) 108 492 T 0.34 (A model of programming in which parallel programs are created by \336rst de\336ning a set of) 108 466 P 3.79 (sequential units of computation and then composing them into a parallel program) 108 452 P 2.62 (addresses this complexity issue by a divide and conquer \050or separation of concerns\051) 108 438 P -0.15 (approach since the two steps are done separately) 108 424 P -0.15 (. Directed graphs are a very natural mech-) 339.11 424 P -0.03 (anism for the composition step. Nodes represent atomic sequential computations, and arcs) 108 410 P 2.19 (represent dependencies between them. The nature of the dependencies can vary from) 108 396 P (model to model as we shall see.) 108 382 T 0.4 (Parallel programs written in the directed graph model are also intrinsically more portable) 108 356 P 0.76 (across architectures since the interactions among the sequential units of computation are) 108 342 P 1.26 (expressed in the structure of the graph independently of the mechanisms in which they) 108 328 P 0.26 (will ultimately be realized. The separation of concerns which assists in reduction of com-) 108 314 P -0.13 (plexity of programming also results in reduction of the complexity of compilation of these) 108 300 P 1.91 (abstract speci\336cations for interactions into ef) 108 286 P 1.91 (\336cient executable forms. As we shall see) 332.94 286 P 1.05 (later) 108 272 P 1.05 (, the two systems used as examples in this paper) 128.84 272 P 1.05 (, HeNCE [Beg91a] and CODE 2.0) 369.12 272 P 0.06 ([New93, New92], demonstrate that in at least some circumstances, competitively ef) 108 258 P 0.06 (\336cient) 510 258 P (code can be generated from the abstract speci\336cations of interactions.) 108 244 T 2.03 (This separation of concerns also leads naturally to the reuse of components since the) 108 218 P 0.74 (sequential computations from which the parallel computations are composed are de\336ned) 108 204 P -0.28 (in a precisely speci\336ed data and control context and must have clean and precise interfaces) 108 190 P (and well-understood semantics.) 108 176 T -0.24 (Parallel programming also dif) 108 150 P -0.24 (fers from sequential programming in that programmers must) 250.72 150 P 0.58 (understand the lar) 108 136 P 0.58 (ge-scale structure of their programs in order to understand their execu-) 194.93 136 P 0.14 (tion performance. This is a vital issue since performance is the major reason for the exist-) 108 122 P 2.55 (ence of parallel computing. Programmers must know what elements of their parallel) 108 108 P 0.48 (program are scheduled for execution and which communicate with which, and they must) 108 94 P 2.03 (have a grasp of the granularity \050or size\051 of the computation that takes place within a) 108 80 P FMENDPAGE %%EndPage: "2" 2 %%Page: "3" 3 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (3) 536 42.62 T 0 12 Q 3.87 (sequential element between communications. Furthermore, programmers often must) 108 712 P 0.4 (understand how their computations are mapped onto the processors of a parallel machine) 108 698 P (\050which can also be represented as a graph\051.) 108 684 T 2.25 (Graphical tools are widely used to display information about execution behavior, but) 108 658 P 1.78 (directed graph based visual parallel programming languages have a special advantage.) 108 644 P -0.03 (The execution data can be directly related to the user's original program since they share a) 108 630 P 0.95 (common graphical format. This integrates the steps of program creation and debugging,) 108 616 P (both for performance and correctness.) 108 602 T 1 F (1.1 Conventional Appr) 108 570 T (oaches in Parallel Pr) 227.8 570 T (ogramming Languages) 333.24 570 T 0 F 1.27 (Many programming language and compiler approaches have been proposed to simplify) 108 544 P 0.23 (programming parallel machines, but none have been completely successful. It is useful to) 108 530 P (review them before moving on to the virtues of visual parallel programming.) 108 516 T 2 F (\245) 108 496 T 0 F (Augment sequential languages with architecture-speci\336c procedural primitives.) 121.75 496 T 0.72 (This approach permits the creation of ef) 108 470 P 0.72 (\336cient parallel programs, but the primitives sup-) 304.04 470 P 0.55 (plied tend to be at such a low level of abstraction that they may be awkward to use for a) 108 456 P 1.08 (wide variety of algorithms. Program development with them tends to be slow and error) 108 442 P 0.31 (prone. In addition, parallel architectures are quite diverse, and their programming models) 108 428 P -0.11 (are equally diverse. For this reason parallel programs written using architecturally speci\336c) 108 414 P 0.42 (extensions to sequential languages tend to be quite non-portable, although there has been) 108 400 P (progress in de\336ning standard libraries for some important and broad classes of machines.) 108 386 T 2 F (\245) 108 366 T 0 F (Have compilers automatically detect parallelism in sequential language programs.) 121.75 366 T -0.2 (The parallelism in a program is implicit and must be discovered and exploited by the com-) 108 340 P 0.94 (piler) 108 326 P 0.94 (. This approach clearly provides application portability) 129.34 326 P 0.94 (. It is the case, however) 397.85 326 P 0.94 (, that) 515.06 326 P 0.6 (current parallel compilers often miss signi\336cant parallelism due to the dif) 108 312 P 0.6 (\336culties engen-) 465.74 312 P 1.85 (dered by name ambiguity in programs written in today\325) 108 298 P 1.85 (s sequential programming lan-) 388.13 298 P 0.94 (guages [EIG91]. This approach also suf) 108 284 P 0.94 (fers from the fact that, in practice, programmers) 303.12 284 P 0.39 (must be aware of the parallel structures the compiler will produce from given source text) 108 270 P 0.97 (since they must program idiomatically so that the compiler will be able to produce ef) 108 256 P 0.97 (\336-) 529.33 256 P 0.48 (cient code. In this sense, the parallelism is not implicit at all. It is merely expressed indi-) 108 242 P (rectly) 108 228 T (.) 134.54 228 T 2 F (\245) 108 208 T 0 F (Extend sequential languages to allow data partitions to be speci\336ed.) 121.75 208 T 0.31 (One emer) 108 182 P 0.31 (ging trend is to include declarative partitioning of data structures in the sequen-) 155.07 182 P 0.16 (tial program formulation and to ask the compiler to utilize this parallel structure [HIR91].) 108 168 P 1.66 (This promising method is as yet immature. It is unclear how ef) 108 154 P 1.66 (fectively complex data) 427.37 154 P -0.28 (structures such as unbalanced trees can be partitioned, either at compile time or at runtime.) 108 140 P 1 F (1.2 V) 108 108 T (isual Parallel Pr) 137.22 108 T (ogramming Languages) 219.67 108 T 0 F -0.23 (Graphical displays are useful and common aspects of parallel programming environments,) 108 82 P -0.1 (but they tend to be limited to displaying the performance, behavior) 108 68 P -0.1 (, or structure of parallel) 427.45 68 P FMENDPAGE %%EndPage: "3" 3 %%Page: "4" 4 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (4) 536 42.62 T 0 12 Q -0.19 (programs that are expressed conventionally) 108 712 P -0.19 (, as text. This paper ar) 315.09 712 P -0.19 (gues that signi\336cant ben-) 420.24 712 P 1.57 (e\336ts can be obtained by going a step further and directly expressing parallel programs) 108 698 P 0.46 (visually) 108 684 P 0.46 (. The concept of visual directed graph programming systems is not new) 145.22 684 P 0.46 (. The \336rst) 492.75 684 P 1.1 (signi\336cant system was probably that of Keller and Y) 108 670 P 1.1 (en [Kel81] in 1981. It is, however) 368.24 670 P 1.1 (,) 537 670 P 0.24 (only in recent years that a signi\336cant impact from visual directed graph parallel program-) 108 656 P -0.25 (ming languages has been obtained. The advantages of this approach will be discussed both) 108 642 P 0.5 (in the abstract and speci\336cally in terms of two implemented visual parallel programming) 108 628 P (languages, HeNCE 2.0 and CODE 2.0.) 108 614 T 0.53 (These two languages dif) 108 588 P 0.53 (fer in many ways but both rest upon the notion that parallel pro-) 226.35 588 P 1.16 (grams can usefully be represented as directed graphs in which nodes with certain icons) 108 574 P 0.68 (represent sequential computations and the graph as a whole represents the parallel struc-) 108 560 P 0.21 (ture of the program. Each graph shows, in some fashion, what sequential computations in) 108 546 P 1.58 (the parallel program can be run concurrently with what other sequential computations.) 108 532 P (There are many advantages to this view) 108 518 T (.) 297.84 518 T (1.) 108 498 T -0.05 (Graphs are a more natural representation for parallel programs than linear text because) 121.75 498 P (parallel program behavior is inherently multi-dimensional.) 121.75 484 T (2.) 108 464 T (A graph-based visual parallel programming language can separate the programming) 121.75 464 T (process into two distinct concerns, creating sequential program elements and compos-) 121.75 450 T (ing them into a complete parallel program thus facilitating a divide and conquer) 121.75 436 T (approach to design.) 121.75 422 T (3.) 108 402 T (Graphs directly display and expose lar) 121.75 402 T (ge scale program structure that programmers) 305.82 402 T (must understand in order to achieve good performance.) 121.75 388 T (4.) 108 368 T (V) 121.75 368 T (isual representation promotes the exploitation of data locality) 129.69 368 T (, another key to parallel) 423.21 368 T (program performance.) 121.75 354 T (5.) 108 334 T (A graph model can permit logical and performance debugging to be carried out in the) 121.75 334 T (same framework as programming. T) 121.75 320 T (ools to support these tasks integrate neatly into a) 295.86 320 T (single visual framework.) 121.75 306 T (These advantages will be elaborated in the sections that follow) 108 280 T (.) 408.17 280 T 1 16 Q (2.0 Parallel Pr) 108 239.33 T (ograms Ar) 209.92 239.33 T (e Graphs) 282.94 239.33 T 0 12 Q 0.68 (Representations of parallel programs and parallel program behaviors are naturally multi-) 108 212 P 1.22 (dimensional. This structure, for both the program and its executions, is ef) 108 198 P 1.22 (fectively cap-) 473.14 198 P -0.09 (tured by directed graphs. This suggests directed graphs as a means of representing parallel) 108 184 P (programs since they will better permit programmers to relate programs to their behavior) 108 170 T (.) 529.93 170 T 0.67 (The source of this non-linearity is that MIMD Parallel programs, regardless of how they) 108 144 P 0.41 (are expressed, consist of multiple interacting threads of control. T) 108 130 P 0.41 (wo examples will dem-) 426.45 130 P (onstrate.) 108 116 T FMENDPAGE %%EndPage: "4" 4 %%Page: "5" 5 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (5) 536 42.62 T 1 12 Q (2.1 Dir) 108 712 T (ect Repr) 146.11 712 T (esentation of Implicit Parallelism) 189.54 712 T 0 F 0.47 (Consider the sequence of assignment statements shown in the program in Figure 1. They) 108 686 P 0.06 (have an obvious interpretation as a sequential program and imply the execution sequence:) 108 672 P -0.13 (1-2-3-4. This is clearly a linear representation and remains so even in the presence of mul-) 108 658 P (tiple control \337ow paths since only one is taken.) 108 644 T (Figure 1. Example Program.) 262.72 544 T 0.63 (This program can also be viewed as a parallel program since some of the steps are inde-) 108 516 P 0.89 (pendent since they access no common variables. For example steps 1 and 2 can be exe-) 108 502 P 0.07 (cuted in parallel or in either order) 108 488 P 0.07 (. Hence, the program\325) 269.06 488 P 0.07 (s execution is now longer a simple) 373.58 488 P -0.05 (sequence. Computations such as the following can all be valid interpretations of the paral-) 108 474 P 0.81 (lel program, although not all exploit maximal parallelism. The notation \0501,2\051 means that) 108 460 P (steps 1 and 2 are performed in parallel.) 108 446 T 3 10 Q (1-2-3-4) 144 427.33 T (2-1-3-4) 300 427.33 T (1-3-2-4) 144 415.33 T (\0501,2\051-3-4) 300 415.33 T 0 12 Q 0.64 (Listing all of the possible computations is a cumbersome way of understanding this pro-) 108 390 P 0.3 (gram. For example, step 2 can also run in parallel with step 3 as long as the latter is done) 108 376 P (after step 1.) 108 362 T 0.54 (However) 108 336 P 0.54 (, notice that a computation graph such as that shown in Figure 2 neatly summa-) 151.5 336 P 1.21 (rizes the program\325) 108 322 P 1.21 (s behavior) 197.73 322 P 1.21 (. The nodes represent steps. The arcs in this diagram show) 247.94 322 P (data \337ow) 108 308 T (. T) 151.55 308 T (wo nodes may be run in parallel if there is no path from either to the other) 164.04 308 T (.) 518.65 308 T (Figure 2. Computation Graph of Example Program.) 206.89 141 T 1 F (2.2 Message Passing Example) 108 111 T 0 F 1.48 (Of course, parallelism at the statement level is inappropriate for machines that support) 108 85 P (only coarse-grain computation. For them, nodes must represent lar) 108 71 T (ger computations.) 427.07 71 T 108 63 540 720 C 229 566 419 614 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 3 10 Q 0 X 0 0 0 1 0 0 0 K (/* step 1 */) 234 600 T (x = 5;) 330 600 T (/* step 2 */) 234 591.69 T (y = 3;) 330 591.69 T (/* step 3 */) 234 583.38 T (z = x + 2;) 330 583.38 T (/* step 4 */) 234 575.07 T (w = x + y + z;) 330 575.07 T 229.5 566.5 418.5 613.5 R 1 H 0 Z N 108 63 540 720 C 0 -208 1000 792 C 108 63 540 720 C 231.5 163 416.5 278 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 H 2 Z 0 X 0 0 0 1 0 0 0 K 90 450 12.5 12.5 372.5 255.3 A 90 450 12.5 12.5 265.5 256.3 A 90 450 12.5 12.5 283.5 215.3 A 90 450 12.5 12.5 341.5 185.3 A 0 12 Q (1) 264 253.8 T (2) 368 251.8 T (3) 281 211.8 T (4) 339 182.8 T 275.89 234.22 277 226.3 271.86 232.43 274.2 232.59 4 Y V 269 244.3 274.2 232.59 2 L N 322.29 194.41 328 188.8 320.19 190.53 321.95 192.09 4 Y V 293 207.8 321.95 192.09 2 L N 329.74 204.58 334 197.8 326.8 201.29 328.87 202.4 4 Y V 276 249.8 328.87 202.4 2 L N 353.25 204.84 348 198.8 349.25 206.7 350.91 205.04 4 Y V 368.75 243.25 350.91 205.04 2 L N (x) 284 247 T (x) 264 233 T (y) 371 232 T (z) 295 195 T 232 163.5 416 277.5 R 0 Z N 108 63 540 720 C 0 -208 1000 792 C FMENDPAGE %%EndPage: "5" 5 %%Page: "6" 6 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (6) 536 42.62 T 0 12 Q 0.1 (The above example suggests that parallelism, implicit in conventional sequential program) 108 712 P 0.1 (representations, has a natural representation as a directed graph. This is true also of repre-) 108 698 P 0.74 (sentations that show parallelism directly) 108 684 P 0.74 (. Consider programs expressed in \322C\323 with calls) 303.51 684 P 0.55 (to explicit message passing libraries in the general style of the PVM system [Gei93]. An) 108 670 P (example is shown in Figure 3.) 108 656 T (Figure 3. Example Message-Passing Program.) 219.89 397 T 0.39 (Graphical display tools often represent the behavior of such programs by means of a dia-) 108 369 P 0.58 (gram that shows messages being sent from one process to another) 108 355 P 0.58 (. In other words, every) 429.06 355 P 1.17 (interaction between processes is shown by an arc. Figure 4 shows such as diagram and) 108 341 P 0.44 (how it can be interpreted as a computation graph by identifying each segment of sequen-) 108 327 P (tial processing between communications as a node.) 108 313 T (Figure 4. Message-Passing Program and It\325) 174.05 112 T (s Computation Graph.) 381.37 112 T 108 63 540 720 C 146 419 502 626 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 3 10 Q 0 X 0 0 0 1 0 0 0 K (ProcA\050\051) 163 527 T ({) 163 517 T (while\050!done\051 {) 175 507 T (...) 187 497 T (sendto\050ProcB, data\051;) 187 487 T (...) 187 477 T (recvfrom\050ProcC, data\051;) 187 467 T (}) 175 457 T (}) 163 447 T (ProcB\050\051) 337 611 T ({) 337 601 T (while\050!done\051 {) 349 591 T (...) 361 581 T (sendto\050ProcC, data\051;) 361 551 T (...) 361 561 T (recvfrom\050ProcA, data\051;) 360 569 T (}) 349 541 T (}) 337 531 T (ProcC\050\051) 336 513 T ({) 336 503 T (while\050!done\051 {) 348 493 T (...) 360 483 T (sendto\050ProcA, data\051;) 360 451 T (...) 360 463 T (recvfrom\050ProcB, data\051;) 361 471 T (}) 348 443 T (}) 336 433 T 159 440 321 538 R 0.5 H 2 Z N 333 526 496 621 R N 333 426 496 522 R N (main \050\051) 158 612 T ({) 158 602 T (spawn\050ProcA\051;) 170 592 T (spawn\050ProcB\051;) 170 582 T (spawn\050ProcC\051;) 170 572 T (}) 158 562 T 153 548 325 621 R N 146.5 419.5 501.5 625.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C 108 63 540 720 C 146.5 134 501.5 283 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (ProcA) 153.5 271 T 244.5 142 258.5 267 R 0.5 H 2 Z N (ProcB) 196.5 271 T 160.5 141 174.5 267 R N 202.5 142 216.5 267 R N (ProcC) 237.5 271 T 204.75 252.29 211.5 248 203.5 248.07 204.89 249.95 4 Y V 167.5 261 204.9 249.95 2 L N 247.09 221.02 254.5 218 246.62 216.64 247.65 218.74 4 Y V 208.5 223 247.65 218.74 2 L N 173.5 163.09 165.5 163 172.24 167.32 172.1 164.97 4 Y V 252.5 189 172.1 164.97 2 L N 263.5 218 263.5 191 2 L 2 H N (Strips between) 270.5 215 T (communications) 270.5 203 T (are sequential.) 270.5 191 T 0.5 H 90 450 8 8 443.5 251 A 445.7 239.69 443.5 232 441.3 239.69 443.5 238.89 4 Y V 443.5 243 443.5 238.89 2 L N 90 450 8 8 443.5 224 A 445.7 211.69 443.5 204 441.3 211.69 443.5 210.89 4 Y V 443.5 216 443.5 210.89 2 L N 90 450 8 8 443.5 196 A 445.7 184.69 443.5 177 441.3 184.69 443.5 183.89 4 Y V 443.5 188 443.5 183.89 2 L N 90 450 8 8 443.5 169 A 445.7 153.19 443.5 145.5 441.3 153.19 443.5 152.39 4 Y V 443.5 161 443.5 152.39 2 L N (ProcA1) 454.5 250 T (ProcB1) 455.5 222 T (ProcC1) 453.5 193 T (ProcA2) 453.5 167 T (Interpret as graph...) 300 248 T 417.31 244.21 425 242 417.31 239.79 418.11 242 4 Y V 290 242 418.11 242 2 L N 147 134.5 501 282.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "6" 6 %%Page: "7" 7 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (7) 536 42.62 T 1 16 Q (3.0 V) 108 709.33 T (isual Parallel Pr) 146.96 709.33 T (ogramming) 256.9 709.33 T 0 12 Q 1.52 (If directed graphs are a natural mechanism for displaying the behavior of parallel pro-) 108 682 P 0.73 (grams, then why not use them as a basis for a programming language in order to reduce) 108 668 P 0.32 (the distance between representation and behavior? There are many ways to go about this,) 108 654 P 0.2 (but we will assume that programs are represented by directed graphs in which nodes with) 108 640 P 1.81 (speci\336c icons represent sequential computations \050other icons may represent other con-) 108 626 P (structs\051 and the graph in some fashion represents the overall parallel structure.) 108 612 T 1 F (3.1 T) 108 580 T (wo Steps in Pr) 136.12 580 T (ogramming) 209.57 580 T 0 F 0.91 (One immediate advantage of this view is that the process of creating a parallel program) 108 554 P 1.67 (can be divided into two distinct steps: creation of components and the composition of) 108 540 P 0 (these components into a graph. The primitive components can be sequential computations) 108 526 P 0.92 (but other cases are allowed. For example, a component could be a call to another graph) 108 512 P 1.06 (that speci\336es a parallel sub-computation. In any case, components can either be created) 108 498 P 0.94 (from scratch for a particular program or they can be obtained from libraries. The key is) 108 484 P 0.86 (that each component simply maps some inputs to some outputs with a clean and clearly) 108 470 P 1.76 (de\336ned interface. These components can then be composed into a graph which shows) 108 456 P (which components can run in parallel with which other components.) 108 442 T 1.96 (Component creation and component composition are distinct operations. Programmers) 108 416 P 0.69 (need not think about the details of one while performing the other \050except to ensure that) 108 402 P 0.4 (the sequential routines are, in fact, de\336ned with clean interfaces and well-speci\336ed input/) 108 388 P 0.2 (output semantics\051. In particular the speci\336cation of parallel structure is done without con-) 108 374 P 1.39 (cern about the inner workings of the components involved. Furthermore, the best tools) 108 360 P (available can be used for the dif) 108 346 T (ferent tasks.) 261.07 346 T 1 F (3.2 Sequential Components) 108 314 T 0 F 0.9 (Both HeNCE and CODE emphasize the use of sequential subroutines expressed in C or) 108 288 P 1.49 (Fortran for use as primitive components\320 in fact HeNCE requires it. There are several) 108 274 P (bene\336ts from this decision.) 108 260 T (1.) 108 240 T (Implementation is facilitated since we build on the existing tool base of tested and) 121.75 240 T (accepted sequential languages and compilers.) 121.75 226 T (2.) 108 206 T (This approach permits subroutines from existing sequential programs to be incorpo-) 121.75 206 T (rated into new parallel programs. Leveraging existing code is often vital to the accep-) 121.75 192 T (tance of new tools.) 121.75 178 T (3.) 108 158 T (The learning curve for users is less steep since they are not asked to relearn sequential) 121.75 158 T (programming when adopting a parallel programming environment.) 121.75 144 T 1 F (3.3 Parallel Composition into Dir) 108 112 T (ected Graphs) 280.45 112 T 0 F 0.92 (It is common for programmers to draw informal diagrams that show lar) 108 86 P 0.92 (ge scale parallel) 460.86 86 P 0.59 (structure when designing parallel programs. The purpose of these diagrams is to abstract) 108 72 P FMENDPAGE %%EndPage: "7" 7 %%Page: "8" 8 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (8) 536 42.62 T 0 12 Q 0.15 (away the details of the components of the system being designed and concentrate on their) 108 712 P 0.98 (interactions. A graph-based visual parallel programming language can help to formalize) 108 698 P (this process.) 108 684 T 0.36 (Understanding the lar) 108 658 P 0.36 (ge scale structure of parallel programs tends to be of greater impor-) 212.48 658 P 0.69 (tance than it is in the sequential case due to the fact that lar) 108 644 P 0.69 (ge scale structure can have a) 399.63 644 P -0.07 (dramatic impact on the execution performance of parallel programs. In order for program-) 108 630 P 0.19 (mers to achieve and understand program performance, they must understand the structure) 108 616 P 1.83 (of the computation graph of their program\320 regardless of how their program is repre-) 108 602 P 1.12 (sented. Consider the computation of Section) 108 588 P 1.12 (2.2. If the execution time of the sequential) 329.23 588 P 1.11 (segments between communications is too short, performance will suf) 108 574 P 1.11 (fer since it will be) 448.92 574 P (dominated by the overhead of message passing.) 108 560 T 0.13 (A direct graphical representation of parallel programs renders such concerns explicit. The) 108 534 P -0.2 (programmer knows exactly what the sequential components are precisely because they are) 108 520 P 3.04 (separate components. Especially if they are subprograms that perform some cleanly) 108 506 P 1.98 (de\336ned function, the programmer will also have a good feel for their execution time.) 108 492 P (Hence, he or she will be aware of the computation\325) 108 478 T (s granularity) 352.61 478 T (.) 412.15 478 T -0.23 (The graph can also directly display other information that is vital to understanding the per-) 108 452 P 0.11 (formance of any parallel program. Issues such as poor load balance or inadequate degrees) 108 438 P 1.41 (of parallelism are apparent from the shape of the graph and the execution times of the) 108 424 P (nodes, interpreted relative to communication overheads. Figure 5 shows two examples.) 108 410 T 0.39 (A graphical representation is also useful because it can promote locality in designs to the) 108 384 P 0.26 (extent to which components are in dif) 108 370 P 0.26 (ferent name spaces in the language. In CODE, state) 290.65 370 P 0.35 (is retained from one execution of a node to another) 108 356 P 0.35 (, and communications must be explic-) 355.6 356 P -0.11 (itly de\336ned as part of the interface to a sequential computation node. This encourages pro-) 108 342 P 0.8 (grammers to try to package a node\325) 108 328 P 0.8 (s data with the node. Locality is easy to express, but) 282.07 328 P 2.3 (remote access requires more ef) 108 314 P 2.3 (fort. Thus, beginning parallel programmers are guided) 265.59 314 P (towards designs that exploit good data locality) 108 300 T (.) 330.54 300 T (Figure 5. Graphs Showing Poor Performance. \050Runtimes shown in nodes.\051) 152.23 70 T 108 63 540 720 C 157.5 92 490.5 270 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K 90 450 8 8 204 225 A 206.21 208.69 204 201 201.79 208.69 204 207.89 4 Y V 204 218 204 207.89 2 L N 90 450 8 8 204 164 A 206.21 150.69 204 143 201.79 150.69 204 149.89 4 Y V 204 156 204 149.89 2 L N 90 450 8 8 204 135 A 206.21 120.69 204 113 201.79 120.69 204 119.89 4 Y V 204 127 204 119.89 2 L N 90 450 8 8 204 105 A 90 450 8 8 229 196 A 90 450 8 8 178 195 A 190.94 203.97 183.66 200.66 188.08 207.33 188.9 205.13 4 Y V 204 218 188.9 205.12 2 L N 218.27 207.54 222.34 200.66 215.24 204.34 217.34 205.39 4 Y V 204 218 217.34 205.39 2 L N 199.58 178.67 204 172 196.72 175.31 198.76 176.47 4 Y V 183.66 189.34 198.76 176.47 2 L N 211.1 175.68 204 172 208.07 178.89 209 176.73 4 Y V 222.34 189.34 209.01 176.73 2 L N 90 450 8 8 204 195 A 206.21 178.69 204 171 201.79 178.69 204 177.89 4 Y V 204 188 204 177.89 2 L N 90 450 8 8 358 160 A 90 450 8 8 417 121 A 90 450 8 8 418 190 A 90 450 8 8 393 158 A 0 12 Q (1) 202 222 T (1) 202 192 T (1) 226 192 T (1) 176 192 T (2) 202 102 T (2) 202 161 T (2) 202 132 T 90 450 8 8 437 157 A 90 450 8 8 475 157 A 400.09 169.69 392.99 166 397.06 172.89 397.99 170.74 4 Y V 412.34 184.34 398 170.74 2 L N 371.62 166.35 363.65 165.66 370.04 170.47 370.08 168.13 4 Y V 412.34 184.34 370.09 168.12 2 L N 434.44 172.58 437 165 430.81 170.08 433.08 170.67 4 Y V 423.66 184.34 433.09 170.67 2 L N 463.34 167.95 469.34 162.66 461.45 163.96 463.12 165.61 4 Y V 423.66 184.34 463.12 165.61 2 L N 405.48 132.1 411.34 126.66 403.48 128.17 405.2 129.77 4 Y V 360.66 152.34 405.2 129.77 2 L N 412.66 135.73 416.99 129.01 409.75 132.41 411.81 133.54 4 Y V 393 150 411.82 133.53 2 L N 424 132.88 417 129 420.88 136 421.87 133.87 4 Y V 437 149 421.87 133.87 2 L N 430.48 128.3 422.65 126.66 428.42 132.2 428.74 129.88 4 Y V 469.34 151.34 428.74 129.88 2 L N (1) 415 188 T (1) 415 118 T (1) 435 154 T (1) 473 154 T (9) 355 157 T (9) 391 155 T (Poor Load Balance) 354 258 T (\050T) 329 247 T (wo Processors mostly idle.\051) 339.49 247 T (Insuf) 174 258 T (\336cient Parallelism) 198.44 258 T (\050T) 163 247 T (wo Processors mostly idle.\051) 173.49 247 T (Most of the execution) 237 130 T (time is in this sequential) 237 118 T (region.) 237 106 T (The two nodes on the) 320 229 T (left run much longer) 320 217 T (than the others.) 320 205 T 387.12 190 391 183 384 186.88 386.13 187.87 4 Y V 376 198 386.13 187.87 2 L 1 H N 218.72 150.19 217 158 222.6 152.29 220.28 151.95 4 Y V 230 134 220.28 151.94 2 L N 224.24 104.41 217 101.01 221.33 107.73 222.18 105.54 4 Y V 233 115 222.18 105.53 2 L N 348.92 183.97 344.99 177 344.63 184.99 346.59 183.7 4 Y V 350 198 346.6 183.7 2 L N 158 92.5 490 269.5 R 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "8" 8 %%Page: "9" 9 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (9) 536 42.62 T 1 16 Q (4.0 Compilers and Atomic Component Graph Models) 108 709.33 T 0 12 Q -0.07 (Graph based models that are based on the composition of atomic components have advan-) 108 682 P 4.31 (tages for compilation as well as for programmers. Directed graph representations) 108 668 P 0.27 (abstractly express parallel structure and so are not tied to a single machine type. Portabil-) 108 654 P 1.11 (ity is enhanced. Nodes are atomic mappings from inputs to outputs and can run on any) 108 640 P 0.65 (type of machine. In fact, there is no reason to assume that all nodes must execute on the) 108 626 P 1.56 (same type of processor) 108 612 P 1.56 (. For example, HeNCE programs run on a potentially heteroge-) 222.33 612 P (neous collection of UNIX workstations.) 108 598 T 1 F (Compiling) 108 570 T 0 F 0.4 (Since the parallelism in the graph model is explicit, a compiler does not have to discover) 108 544 P 0.81 (it; it must only exploit it. Furthermore, in CODE and HeNCE the granularity of compo-) 108 530 P 1.12 (nents will likely be fairly high since they are based on calls to sequential subprograms.) 108 516 P (This reduces the dif) 108 502 T (\336culty of assigning tasks of appropriate granularity to processors.) 202.76 502 T 1.62 (The fact that components receive input, run to completion, and then send outputs also) 108 476 P 0.61 (helps to control granularity and promotes language implementations that batch messages) 108 462 P 0.92 (that are to be sent to the same destination. For an example, consider the following code) 108 448 P (fragment.) 108 434 T 3 10 Q (sendto\050ProcA, data1\051;) 144 415.33 T (some_short_computation\050\051;) 144 403.33 T (sendto\050ProcA, data2\051;) 144 391.33 T 0 12 Q 0.2 (It is often better to combine the two sends into one. This is also true when sending to two) 108 366 P (dif) 108 352 T (ferent processes that have been assigned to the same physical processor) 121.12 352 T (.) 463.7 352 T 1 F (Scheduling) 108 324 T 0 F 3.26 (The simpler incarnations of such graph models also lend themselves to the use of) 108 298 P 1.73 (advanced scheduling techniques [Y) 108 284 P 1.73 (an91] since the components are often arranged into) 282.28 284 P 1.46 (directed acyclic graphs \050or directed acyclic subgraphs can be found\051 and the execution) 108 270 P 0.43 (times of components is often \336xed from invocation to invocation. Furthermore execution) 108 256 P -0.22 (characteristic of sequential elements are easier to de\336ne and measure since they are encap-) 108 242 P 0.61 (sulated. This encapsulation can also simplify dynamic \050runtime\051 scheduling for load bal-) 108 228 P (ancing since the state of sequential elements is \336xed between executions.) 108 214 T 1.31 (The graph model also lends itself to implementation in heterogeneous parallel environ-) 108 188 P 0.47 (ments in which processing elements have varying speeds and capabilities. This is a more) 108 174 P -0.14 (complex case of the scheduling problem just mentioned since characteristics of processors) 108 160 P 0.13 (vary as well as characteristics of nodes. The HeNCE system is tar) 108 146 P 0.13 (geted towards heteroge-) 424.45 146 P (neous environments.) 108 132 T 0.75 (Fault-tolerance tends to be simpler to implement in models in which components do not) 108 106 P 0.36 (retain state from execution to execution. This factor will be most important when using a) 108 92 P FMENDPAGE %%EndPage: "9" 9 %%Page: "10" 10 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (10) 532 42.62 T 0 12 Q 0.43 (lar) 108 712 P 0.43 (ge network of independent workstations as the parallel machine to perform lar) 120.44 712 P 0.43 (ge com-) 500.58 712 P (putations.) 108 698 T 1 16 Q (5.0 CODE and HeNCE) 108 657.33 T 0 12 Q 2.34 (CODE and HeNCE are implemented visual parallel programming languages that rest) 108 630 P 0.37 (upon the ideas described above. They are very similar in purpose and general philosophy) 108 616 P -0.29 (but are signi\336cantly dif) 108 602 P -0.29 (ferent in detail. This section will summarize the languages and then) 218.58 602 P (provide an example of a program expressed in each.) 108 588 T -0.1 (Both languages are alike in that users create a parallel program by drawing and then anno-) 108 562 P 1.08 (tating a directed graph that shows the structure of the parallel program. Both languages) 108 548 P 0.57 (of) 108 534 P 0.57 (fer several dif) 117.78 534 P 0.57 (ferent node types, each with its own icon and purpose. In both cases, the) 185.34 534 P -0.17 (fundamental node type is the sequential computation node which is represented by a circle) 108 520 P 1.57 (icon. The graph annotations include sequential subroutines that de\336ne the computation) 108 506 P 1.12 (that computation nodes will perform as well as speci\336cation of what data computations) 108 492 P (will act upon.) 108 478 T 1 F (5.1 An Intr) 108 446 T (oductory Example: CODE) 167.78 446 T 0 F 1.41 (Figure 6 shows an extremely simple CODE program that will serve as an introductory) 108 420 P 0.67 (example. It numerically integrates a function in parallel over a de\336nite interval [) 108 406 P 1 F 0.67 (a) 500.99 406 P 0 F 0.67 (,) 506.99 406 P 1 F 0.67 (b) 513.66 406 P 0 F 0.67 (] by) 520.33 406 P 0.54 (computing the midpoint) 108 392 P 1 F 0.54 (m) 227.97 392 P 0 F 0.54 ( between) 237.96 392 P 1 F 0.54 (a) 285.03 392 P 0 F 0.54 ( and) 291.03 392 P 1 F 0.54 (b) 315.44 392 P 0 F 0.54 ( and then having one sequential computation) 322.11 392 P -0.04 (node integrate the interval [) 108 378 P 1 F -0.04 (a) 240.5 378 P 0 F -0.04 (,) 246.5 378 P 1 F -0.04 (m) 252.46 378 P 0 F -0.04 (] while the other does [) 262.46 378 P 1 F -0.04 (m) 373.26 378 P 0 F -0.04 (,) 383.26 378 P 1 F -0.04 (b) 389.22 378 P 0 F -0.04 (] at the same time. The results) 395.89 378 P (are summed to form the \336nal result.) 108 364 T 1.13 (The nodes in the graph that do the integration are both named) 108 338 P 1 F 1.13 (Integ Half) 420.17 338 P 0 F 1.13 ( and a glance) 473.64 338 P 0 (shows that they can run in parallel since there is no path from one to the other) 108 324 P 0 (. The arcs in) 480.67 324 P -0.16 (this CODE graph represent data\337ow from one node to another on FIFO queues. The graph) 108 310 P 0.11 (is read from top to bottom, following the arrows on arcs. Thus, the graph shows that node) 108 296 P 1 F -0.1 (Split Interval) 108 282 P 0 F -0.1 ( is creating some data that are passed to the two) 176.24 282 P 1 F -0.1 (Integ Half) 406.75 282 P 0 F -0.1 ( nodes. This data) 458.98 282 P (consists of a structure de\336ning the integration the receiving node is to perform.) 108 268 T 3 10 Q (type IntegInfo is struct {) 144 249.33 T ( real a; // Start of interval.) 144 237.33 T ( real b; // End of interval.) 144 225.33 T ( int n; // Number of points to evaluate) 144 213.33 T (};) 144 201.33 T FMENDPAGE %%EndPage: "10" 10 %%Page: "11" 11 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (1) 532.3 42.62 T (1) 536 42.62 T 0 12 Q (Figure 6. CODE Integration Program) 241.39 491 T 0.43 (So, to create this parallel program, the programmer draws with the mouse a graph just as) 108 463 P -0.11 (shown in Figure 6 and then enters textual annotations into dif) 108 449 P -0.11 (ferent pop-up windows asso-) 401.35 449 P 0.16 (ciated with various objects such as nodes, arcs, etc. This information includes such famil-) 108 435 P 0.7 (iar items as type de\336nitions and sequential function prototypes \050for type checking calls\051.) 108 421 P -0.18 (W) 108 407 P -0.18 (e will ignore these and focus on the annotations of computation nodes. When annotation) 118.37 407 P 1.46 (is complete, the user picks \322translate\323 from a menu, and a parallel program is created,) 108 393 P (complete with a Make\336le, ready to be built and run on the selected parallel machine.) 108 379 T 0.36 (The annotation for a computation node consists mostly of a sequence of stanzas, some of) 108 353 P -0.09 (which are optional. The annotation for the) 108 339 P 1 F -0.09 (Integ Half) 312.66 339 P 0 F -0.09 ( nodes follows. Both nodes are iden-) 364.9 339 P 0.46 (tical. W) 108 325 P 0.46 (e will see later how a single replicated node could have been used in place of the) 145.49 325 P (two identical nodes.) 108 311 T 3 10 Q (input_ports { IntegInfo I; }) 144 292.33 T (output_ports { real S; }) 144 280.33 T (vars { IntegInfo i; real val; }) 144 268.33 T (f) 144 256.33 T (iring_rules {) 150 256.33 T ( I -> i => }) 144 244.33 T (comp {) 144 232.33 T ( val = simp\050i.a, i.b, i.n\051; }) 144 220.33 T (routing_rules {) 144 208.33 T ( TRUE => S <- val; }) 144 196.33 T 0 12 Q 0.96 (The \336rst two stanzas provide names for \322ports\323 which are queues of data that enter and) 108 171 P 0.79 (leave the node. Each node uses its own local names for these ports so that nodes can be) 108 157 P 0.55 (reused in new contexts. This node will read data of type) 108 143 P 1 F 0.55 (IntegInfo) 385.36 143 P 0 F 0.55 ( \050the structure de\336ned) 433.36 143 P (above\051 from a port called) 108 129 T 1 F (I) 232.3 129 T 0 F ( and write real data onto a port called) 236.96 129 T 1 F (S) 418.58 129 T 0 F (.) 425.26 129 T 0.96 (Now brie\337y consider the annotation of arcs. All arc annotations are shown on Figure 6.) 108 103 P -0.02 (Their purpose is to bind an output port name to an input port name. It is apparent from the) 108 89 P 0.08 (graph that node) 108 75 P 1 F 0.08 (Split Interval) 185.89 75 P 0 F 0.08 ( places data onto output ports) 254.31 75 P 1 F 0.08 (I1) 398.77 75 P 0 F 0.08 ( and) 409.44 75 P 1 F 0.08 (I2) 432.92 75 P 0 F 0.08 (. Port) 443.59 75 P 1 F 0.08 (I1) 472.76 75 P 0 F 0.08 ( is bound to) 483.42 75 P 108 63 540 720 C 125.25 513 522.75 708 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 402 231 402 231 125 476.5 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/code_si.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: code_si.eps %%CreationDate: 3/20/94 %%BoundingBox: 0 0 402 231 %%Pages 1 %%DocumentFonts: Symbol %%DocumentNeededFonts: Symbol %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 231 lineto 402 231 lineto 402 0 lineto closepath clip gsave -9 239 translate 1 -1 scale newpath 9 8 moveto 411 8 lineto 411 239 lineto 9 239 lineto 9 8 lineto closepath 1 setgray eofill save 9 8 translate 402 99 scale 72 string /dataStr exch def 0 setgray 575 141 false [575 0 0 141 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20315 Hex Bytes imagemask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffff80fffffffffffffffffc07fffffffffffc07fffffffffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000100000000000000003ffffffff80fffffffffffffffffc07fffffffffffc07fffffffffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000100000000000000003ffffffff80fffffffffe3ffffffc07fffffff8f1fc07fffffffffffff80fffff9ffe03ffffe7ff80ffffffffffff80ffffffffe0000000000000000000000000000000000e00380383ffffff80e03fffffffbffdfffc07c3fffffefdfc07f1ffffffffbff80e23ffdffe0383fff7ff80e0ffefffffff80f87fffffe000000000000000000000000070e7cfc011004403ddffffff80edbfffffffbffdfffc07bbfffffefdfc07fbffffffffbff80f77ffdffe03ddfff7ff80f77fefffffff80f77fffffe00000000000000000000000108912244011004403ddc68f1f80eda8c3478fbc3838fc07bf8e8e3efdfc07fbf0c4633307f80f751e1c7e03ddc7871f80f771c133451f80f7e188c7e00000000000000000000000108912250011004403c3bb76ef80fdf7fd9b77bfddf77c078f777ddefdfc07fbff6eddbbbff80f766ddbbe03c3bb76ef80f0eeefbbbe6f80f1feddbbe00000000000000000000000108112270002004403dbbb760f80fdf7e1bb8fbe1df07c07e37f7ddefdfc07fbf86eddbbbff80f76eddbbe03db8376ef80f6e0efbbbeef80fc70dd83e00000000000000000000000108112250004004403ddbb76ff80fdf7ddbbf7bdddf7fc07fb7f7ddefdfc07fbb775ddbbbff80f76eddbbe03ddbf76ef80f76fefbbbeef80ff6eebbfe00000000000000000000000008912240008004403ddbb76ef80fdf7ddbb77bdddd77c07bb777ddefdfc07fbb771ddbbbbf80f26eddbbe03ddbb76ef80f76eeebbbeef80f76ee3bbe000000000000000000000001089122440110044038cc70f1f80f061e2198e062e38fc07878e1e38103c07f038bbe3c5c7f80f8c662c7e038cc78b1f80e331f1c50c6780f0f177c7e000000000000000000000001070e7cfc01f103803ffff7fff80fffffffffffffffffc07fffffffffffc07fffffbfffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000000000000000000003ffff7fff80fffffffffffffffffc07fffffffffffc07fffffbfffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000000000000000000003fffe3fff80fffffffffffffffffc07fffffffffffc07ffffe7fffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001ffffffffffffffffffffffc000000000001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe001000000000000001ffffffffffffffffffffffc000000000001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe001000000000000001ffffffffbffffdffffffffc000000000001ffffffffff7ffffffff01fffffffffc7ffe03ff3fffffff01ffffffffc0000000000ffffffffffff80fffff7ffe001000000000000001ffefffbfffffffffefffffc000000006001fffffffffffffffffff01ce7fffffff7c7e0388bfff7e3f01c47fff8fc0000001c00f8ffffffbfff80e07fffdfe0011f0000000000001ffefffbfffffffffefffffc01c000002001fffffffffffffffffff01e4ffffffff7bbe03ddbfff7ddf01eeffff77c07f0000400f77fffffbfff80f77fffdfe001098000000000001f1c187063e3ff1d1c1c78bc022000002001fffffe2e1c747ffffff01e4c346661f7fbe03d5a70e0fdf01eee311f7c0490000400f768e387071f80f5c44783e00108971c3ab9e7401eeeffbbfbddffde6efbb77c0225cf2e2c01ffffff57ef79bffffff01eafd9b77ef7f7e03d59bf77fbf01e0ddbbefc0493870400f7f7ddfbbeef80f1f5f7dfe000098822444012a11f1efc3bfbdfffdeeef8377c020200913211ffffff570f7bbffffff01eae1bb770f7efe03d5bb877f7f01eeddabdfc0084488408f7f7c1c3be0f80f5fbf7dfe0010f08224440f2a01feefbbbfbdfffdeeefbf77c026207912201ffffff56ef7bbffffff01eaddbb76ef7efe03c9bb777f7f01eeddabdfc0084488400f777dfbbbeff80f7f5f7dfe001080822444112a01eeeebbbbbddffdeeeebb77c022208912201ffffff56ef7bbffffff01eeddbb76ef7ffe03ebbb7777ff01eeddd7ffc0084488400f777ddbbbaef80f76ef7dde001080822444112a01f1f1c5c60e3ff04671c787c022208912201fffffe5314119ffffff01c462198b140efe03eb118b8f7f01c463d7dfc0084488400f8e1e3c5c71f80e04e41e3e0011e1e1c3cf0eeb11fffffffffffffffffffff7c01c7875e7711fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc03e3871f88ffffffffffff80ffffffffe000000000040000001fffffffffffffffffffff7c000000100001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe000000000040000001fffffffffff01fffffff8fc000000100001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe000000000380000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffe3fffffffdffffffdffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff7fffffffeffffffffdffffffdfffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff7fffffffeffffffffdffffffdfffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8e0e3c5461c1c7fe1ff82651e3831f1a3ff1d1ffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef377ddbbbfeefbbffeffdf766dddfdeecdffde6fffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef777c1bbbf0ef83ff0ffdf76edfdfdeeddffdeeffffffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffef777dfbbbeeefbffeeffdf76edfdfdeeddffdeefffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7775dbbbeeeebbfeeffdf76edddddeeddffdeefffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82338e3c30f171c7ff17f8788663e30718cff0467ffffffffffffffffffffffffffffffffbffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffff8fdffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdff0ffefff7ff83ff7ffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeeffefff7ffefff7ffffffff7fffffffffffffffffffffffffffffffffffffffffffffff8f1ffc7fe7fffffffe3f7ffffbfffffffffffffffffffffffffffffffffffffffdffffdfefa3ef1e0ffee8e0e3a2221f7fffffffffffffffffffffffffffffffffffffffffffffffefdfff7ff7ffffffffbffdfbfffffffffffffffffffffffffffffffffffffffffdff7fdfe3ddefdf7ffef377dddf77ef7fffffffffffffffffffffffffffffffffffffffffffffffefdfff7ff7ffffffffbffdfbfffffffffffffffffffffffffffffffffffffffffdffffdff8ddefdf7ffef777c1df770f7ffffffffffffffffffffffffffffffffffffefff470e8c3efdf1f7ff0c47fc68fbc783063a3c5fffffffffffffffffffffffffffffffffffdffffdffeddefdf7ffef777dfdfaeef7ffffffffffffffffffffffffffffffffffffffffbbf77fdefdeef7ff76effbb77bf7dfbfbcdbbfffffffffffffffffffffffffffffffffffdffffdfeeddefdf77fef7775ddf8eef7ffffffffffffffffffffffffffffffffffffffffbb877e1efde0f7ff76effc777bf7dfbfbddbbfffffffffffffffffffffffffffffffffffeffffbfe1c381078ff82338e387df140ffffffffffffffffffffffffffffffffffffefffbb777ddefdeff7ff775fffb77bf7dfbfbddbbfffffffffffffffffffffffffffffffffffeffffbfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb777ddefdeef7ff771ffbb77bf7ddbbbddbbffffffffffffffffffffffffffffffffffff7fff7fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff878a1e281031c0fe8fbffc70e041e3c608cc3ffffffffffffffffffffffffffffffffffffbffeffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffbffff7ffffffffffffbffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffbffff7ffffffffffffbffffffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff1ffffffffffffffffe7fffe3fffffffffffc7fffffffffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffefffffffffffc7ffffff9fffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7ffffffff7ffffffff7ffffffdffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7ffffffff7ffffffff7ffffffdffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff834f1ff8e8e0e3a2221f7ff0d1e1ffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf36effef377dddf77ef7fff66ddffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffdf760ffef777c1df770f7ff86eddffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf76fffef777dfdfaeef7ff76eddffffffffffffffffffffffffffffffffffffffffffffff9cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd76effef7775ddf8eef7ff76eddfffffffffffffffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2231ff82338e387df140ff88662fffffffffffffffffffffffffffffffffffffffffffff1ffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffefffffffffffffefffffffe7ffffffdffffffffffffffffffffffffffffffffffffffcffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffff7fffffffeffffffffdf7ffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffeffffffffdf7ffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8e0e3c5461c18e8f17f834f1ff471f1e3c78fffffffffffffffffffffffffffffe7fffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffef377ddbbbfeefef36effdf36effbbdeeddbb77ffffffffffffffffffffffffffff1ffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef777c1bbbf0efef76effdf760ffbbde0df838ffffffffffffffffffffffffffffcffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef777dfbbbeeefef76effdf76fffbbdefdfbff7ffffffffffffffffffffffffffe3ffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7775dbbbeeeeef76effdd76effbbdeeddbb77ffffffffffffffffffffffffff9ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82338e3c30f17182330ffe2231ff87071e3c78f7ffffffffffffffffffffffffe7fffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffefffffffffbfffffffffffffffffffffffffffffffffff1ffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffefffffffffbffffffffffffffffffffffffffffffffffcffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffff1fffffffff1fffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffff3fffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffc7ffffffffff8377ffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff9ffffffffffef77fffdfffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfe3ffffffffffffffffffffffffffffe3fdfffffffef77fffefffff7ffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9ffffffffffffffffffffffffffffffcfdfffffffefeffc1f7ffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe7fffffffffffffffffffffffffffffff3efffffffefdfffffbffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1ffffffffffffffffffffffffffffffffc6fffffffefbffc1f7ffff7ffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffff97ffffffef77fffefffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffe3ffffef8307fffdfff7c1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9cffffffffffffffffffffffffffffffffff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f7fffdffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffff831fffffffffc1ffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffefdffffdfffff7fffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffefdffffefffff7fffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffefdffc1f7ffff7ffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffefdfffffbffff7fffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffefdffc1f7ffff7fffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffefdffffefffff7ffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffef8307fffdfff7c1ffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffff %%EndData restore save 9 107 translate 402 99 scale 72 string /dataStr exch def 0 setgray 575 141 false [575 0 0 141 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20315 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffe3f1fffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffe3f1fffffffffffffffffffffffffffffffffffffffffffffffdffffdfe0ffdffffff11ffbeffffffffffffffffffffffffffffffffffffffffffffffffdffffdfe0ffdffffff11ffbeffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbffdffffffbbffbeffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbffdffffffbbffbeffffffffefffffffffffffffffffffffffffffffffffffffdffffdffba3838f17fbb0fbc1fffffffffffffffffffffffffffffffffffffffffffffffdffffdffba3838f17fbb0fbc1fffffffefffffffffffffffffffffffffffffffffffffffdff7fdffbcddf76eff83f7beffffffffffffffffffffffffffffffffffffffffffffffffdff7fdffbcddf76eff83f7beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddf06effbb87beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddf06effbb87beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddf7eeffbb77beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddf7eeffbb77beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddd76effbb77beffffffffffffffffffffffffffffffffffffffffffffffffdffffdffbdddd76effbb77beffffffffffffffffffffffffffffffffffffffffffffffffeffffbfe08ce38f0ff118a043fffffffffffffffffffffffffffffffffffffffffffffffeffffbfe08ce38f0ff118a043fffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffbfffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffe1fffffffff863ffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffddffff7ffff77bffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffdfffffbffff7fbfffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fdffffffc7ff07dffff1fbffffffffffffffffdfe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfdfffffff1ffffeffffc7bffffffffffffffffdf9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3efffffffdff07dfffff7bffffffffffffffffbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6ffffffddffffbffff77bffffffffffffffffb1fffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97ffff7c3ffff7ffdf0e0ffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9cffffffffffffffffffffffffffffffffff9cffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffe7f7fffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffffffffff1ffffc3fffffffff0ddfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffffffffcfffffbbfffeffffeeddfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffe3fffffbfffff7fffefddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff9ffffff8ffe0fbfffe3fbffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffffffffe7ffffffe3ffffdffff8f7ffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffffffffff1ffffffffbfe0fbffffeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffffffffcffffffffbbffff7fffeeddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffe3ffffffef87fffefffbe1c1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7fffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdff0ffffff1ff07fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeefffffedffb3fffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfef9917fefffbb463a383fffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff7fdfe3ddabff77fb3bfbcddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdff8ddabfe2ff87bfbdddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdffeddabfddffbfbfbdddffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeeddabfdcffbfbfbddddfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfe1e229fe37f0f0e08ce3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore save 9 206 translate 402 33 scale 72 string /dataStr exch def 0 setgray 575 48 false [575 0 0 48 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 6923 Hex Bytes imagemask fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore grestore showpage %%Trailer end %%EndDocument FMENDEPSF 125.75 513.5 522.25 707.5 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "11" 11 %%Page: "12" 12 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (12) 532 42.62 T 0 12 Q 0.28 (input port) 108 712 P 1 F 0.28 (I) 158.56 712 P 0 F 0.28 ( of the left) 163.23 712 P 1 F 0.28 (Integ Half) 217 712 P 0 F 0.28 ( node. Thus data) 269.61 712 P 1 F 0.28 (Split Interval) 353.05 712 P 0 F 0.28 ( places onto) 421.66 712 P 1 F 0.28 (I1) 482.82 712 P 0 F 0.28 ( is sent to) 493.49 712 P (the left) 108 698 T 1 F (Integ Half) 144.66 698 T 0 F (node and data placed into) 199.99 698 T 1 F (I2) 325.63 698 T 0 F ( is sent to the other) 336.3 698 T (.) 426.64 698 T 0.14 (Returning to the computation node annotation, the \322vars\323 stanza de\336nes variables that are) 108 672 P (local to the node and that its computation can read and modify) 108 658 T (.) 406.85 658 T 0.16 (The \322\336ring_rules\323 stanza is very important. It serves two purposes. First, it de\336nes condi-) 108 632 P 0.29 (tions under which the node is permitted to execute. Second, it describes which local vari-) 108 618 P 2.72 (ables will have data placed in them that have been removed from designated ports.) 108 604 P 0.27 (CODE's notation for \336ring rules is quite \337exible and also sometimes complicated relative) 108 590 P (to other features of the language. The rule \322I ->) 108 576 T 1 F (i) 338.36 576 T 0 F ( =>\323 is simplest case. It signi\336es that) 341.7 576 T (1.) 108 556 T (The node can \336re when there is data waiting on port) 121.75 556 T 1 F (I) 374.69 556 T 0 F (.) 379.36 556 T (2.) 108 536 T (When the node \336res, one \050structure in this case\051 is removed from) 121.75 536 T 1 F ( I) 433.01 536 T 0 F ( and placed in local) 440.68 536 T (variable) 121.75 522 T 1 F (i) 163.4 522 T 0 F (.) 166.73 522 T 0.84 (Thus, the) 108 496 P 1 F 0.84 (Integ Half) 157.34 496 P 0 F 0.84 ( nodes simply wait for an incoming value. When one appears, they) 210.51 496 P (\336re and produce an output.) 108 482 T 0.01 (The \322comp\323 stanza de\336nes what sequential computation will be performed when the node) 108 456 P -0.16 (\336res. The text is expressed in a language that is a subset of \322C\323 that includes calls to exter-) 108 442 P 0.78 (nally de\336ned sequential functions and procedures \050such as) 108 428 P 1 F 0.78 (simp) 396.88 428 P 0 F 0.78 ( which does the integra-) 421.56 428 P 2.82 (tion in this example\051. It is expected, but not required, that all signi\336cant sequential) 108 414 P (computations will be encapsulated in such external functions.) 108 400 T 2.14 (Finally) 108 374 P 2.14 (, the \322routing_rules\323 stanza determines what values will be placed onto output) 141.23 374 P 0.17 (ports. As with \336ring rules, the notation is \337exible and potentially complex, but this exam-) 108 360 P (ple is simple. The value of real variable) 108 346 T 1 F (val) 300.96 346 T 0 F ( is placed onto queue) 316.3 346 T 1 F (S) 420.61 346 T 0 F (.) 427.28 346 T 1 F (5.2 An Intr) 108 314 T (oductory Example: HeNCE) 167.78 314 T 0 F 0.88 (The equivalent HeNCE program looks exactly like the CODE graph in Figure 6, except) 108 288 P (for three points.) 108 274 T (1.) 108 254 T (HeNCE graphs are read from bottom to top \050this will be changed in a future release\051.) 121.75 254 T (2.) 108 234 T (HeNCE computation nodes are always named by the \050exactly\051 one sequential proce-) 121.75 234 T (dure they are required to call.) 121.75 220 T (3.) 108 200 T (HeNCE arcs take no annotation.) 121.75 200 T 1.18 (The HeNCE graph is shown in Figure 7. All node annotations are shown. In the actual) 108 174 P (HeNCE system, the annotations are in pop-up windows.) 108 160 T FMENDPAGE %%EndPage: "12" 12 %%Page: "13" 13 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (13) 532 42.62 T 0 12 Q (Figure 7. HeNCE Integration Program.) 237.22 524 T 0.05 ( Although the HeNCE graph looks like the CODE graph, the meaning of HeNCE graph is) 108 496 P -0.26 (very dif) 108 482 P -0.26 (ferent. Except for some features that have not been discussed, arcs in CODE repre-) 145.18 482 P 0.65 (sent data\337ow) 108 468 P 0.65 (. Arcs in HeNCE represent two dif) 171.53 468 P 0.65 (ferent concepts at the same time: control) 341.49 468 P (\337ow and variable name scope.) 108 454 T 1.03 (A HeNCE node is permitted to execute whenever all of its predecessors have executed.) 108 428 P -0.09 (This is the only rule that de\336nes when a node can run, and there is no implication that pre-) 108 414 P 1.14 (decessor nodes have sent any data. There are no explicit node \336ring rules as in CODE.) 108 400 P (HeNCE has special control \337ow nodes that can alter the succession of node executions.) 108 386 T -0.14 (HeNCE node computations read and write variables. If a node reads a variable, the system) 108 360 P 1.32 (de\336nes that the value it will get is that set by the nearest predecessor in the graph that) 108 346 P 0.1 (exports the variable. This will require an explanation and some background. Computation) 108 332 P (node annotations consist of three parts, two of which are optional.) 108 318 T (1.) 108 298 T (Declaration of input and input-output variables \050optional\051.) 121.75 298 T -0.17 (The values of input and input-output values are read from the nearest predecessor node) 121.75 280 P (that outputs that variable. The value of the variable can be changed. New values of) 121.75 266 T (input-output variables can be seen by successor nodes. New values of input variables) 121.75 252 T -0.12 (cannot. Input declarations contains an \322<\322and input-output declarations contain a \322<>\323) 121.75 238 P (token.) 121.75 224 T (2.) 108 204 T (Call to a sequential procedure \050required\051.) 121.75 204 T (The procedure may be written in either \322C\323 or Fortran. The call\325) 121.75 186 T (s actual parameters) 430.34 186 T (may be expressions. V) 121.75 172 T (ariables that appear in the expressions are inputs, input-outputs,) 229.06 172 T (or outputs from node.) 121.75 158 T (3.) 108 138 T (Declaration of output variables \050optional\051.) 121.75 138 T -0.49 (Output variables can be set by the node. V) 121.75 120 P -0.49 (alues are available to successor nodes. Output) 320.13 120 P (declarations contain a \322>\323 token.) 121.75 106 T 108 63 540 720 C 111.56 546 536.44 708 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K 90 450 9 9 325.44 572 A 90 450 9 9 323.44 688 A 90 450 9 9 385.44 632 A 90 450 9 9 253.44 633 A 3 10 Q (SetInputs) 256.44 569 T (simp) 348.44 631 T (simp) 266.44 632 T (PrintAns) 257.44 686 T (< double s1;) 347.44 694 T (< double s2;) 347.44 685.69 T (PrintAns\050s1, s2\051;) 347.44 677.38 T (SetInputs\050&a, &b, &mid, &n\051;) 348.44 585 T (> double a;) 348.44 576.69 T (> double b;) 348.44 568.38 T (> double mid;) 348.44 560.07 T (> int n;) 348.44 551.76 T (< double b;) 400 647 T (< double mid;) 400 638.69 T (< int n;) 400 630.38 T (s2 = simp\050mid, b, n\051;) 400 622.07 T (> double s2;) 400 613.76 T (< double a;) 121 637 T (< double mid;) 121 628.69 T (< int n;) 121 620.38 T (s1 = simp\050a, mid, n\051;) 121 612.07 T (> double s1;) 121 603.76 T 309.57 678.84 317.07 681.64 312.19 675.3 311.53 677.55 4 Y V 311.53 677.55 259.8 639.36 2 L N 334.12 674.91 329.8 681.64 337.03 678.22 334.97 677.09 4 Y V 334.98 677.09 379.07 638.36 2 L N 264.37 620.07 259.8 626.64 267.15 623.49 265.14 622.29 4 Y V 265.14 622.29 319.07 578.36 2 L N 372.08 621.76 379.07 625.64 375.2 618.64 374.2 620.77 4 Y V 374.2 620.77 331.8 578.36 2 L N 112.06 546.5 535.94 707.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "13" 13 %%Page: "14" 14 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (14) 532 42.62 T 0 12 Q 0.67 (Consider the annotation of node) 108 712 P 1 F 0.67 (SetInputs) 268.33 712 P 0 F 0.67 ( in Figure 7. It calls a \322C\323 routine called) 317.68 712 P 1 F 0.67 (Set-) 520.01 712 P -0.24 (Inputs) 108 698 P 0 F -0.24 ( which provides values for variables) 141.35 698 P 1 F -0.24 (a) 316.54 698 P 0 F -0.24 (,) 322.54 698 P 1 F -0.24 (b) 328.3 698 P 0 F -0.24 (,) 334.97 698 P 1 F -0.24 (mid) 340.73 698 P 0 F -0.24 (, and) 360.73 698 P 1 F -0.24 (n) 386.58 698 P 0 F -0.24 (. The variables are made avail-) 393.25 698 P (able to successor nodes because they appear in output declarations.) 108 684 T -0.13 (The two) 108 658 P 1 F -0.13 (simp) 150.41 658 P 0 F -0.13 ( nodes are very similar) 175.08 658 P -0.13 (, but one uses input declarations to read) 283.41 658 P 1 F -0.13 (a) 475.37 658 P 0 F -0.13 (,) 481.37 658 P 1 F -0.13 (mid) 487.25 658 P 0 F -0.13 (, and) 507.25 658 P 1 F -0.13 (n) 533.33 658 P 0 F 0.23 (from its nearest predecessor \050) 108 644 P 1 F 0.23 (SetInputs) 250.19 644 P 0 F 0.23 (\051 and the other reads) 299.54 644 P 1 F 0.23 (mid) 401.64 644 P 0 F 0.23 (,) 421.64 644 P 1 F 0.23 (b) 427.87 644 P 0 F 0.23 (, and) 434.54 644 P 1 F 0.23 (n) 461.32 644 P 0 F 0.23 (. The left) 467.99 644 P 1 F 0.23 (simp) 515.33 644 P 0 F 0.61 (node makes) 108 630 P 1 F 0.61 (s1) 169.2 630 P 0 F 0.61 ( available to its successors in the graph, and the write makes) 179.87 630 P 1 F 0.61 (s2) 479.41 630 P 0 F 0.61 ( available.) 490.08 630 P 0.31 (These variables hold the results of the integration. Subroutine) 108 616 P 1 F 0.31 (simp) 409.42 616 P 0 F 0.31 ( actually performs the) 434.09 616 P (integration. It is a \322C\323 procedure.) 108 602 T 0.88 (Node) 108 576 P 1 F 0.88 (PrintAns) 137.88 576 P 0 F 0.88 ( reads) 184.54 576 P 1 F 0.88 ( s1) 213.75 576 P 0 F 0.88 ( and) 228.3 576 P 1 F 0.88 (s2) 253.4 576 P 0 F 0.88 (. It calls \322C\323 procedure) 264.07 576 P 1 F 0.88 (PrintAns) 382.46 576 P 0 F 0.88 ( which sums them and) 429.13 576 P (prints their value which appears in the HeNCE console window when the program is run.) 108 562 T 1 F (5.3 Block T) 108 530 T (riangular Solver Example) 168.46 530 T 0 F 2.17 (W) 108 504 P 2.17 (e will use a somewhat more sophisticated example to introduce a few of the more) 118.37 504 P -0.2 (advanced facilities of CODE and HeNCE. The problem is to solve the system) 108 490 P 1 F -0.2 (Ax) 481.37 490 P 0 F -0.2 ( =) 496.03 490 P 1 F -0.2 (b) 508.4 490 P 0 F -0.2 ( for a) 515.08 490 P 1.12 (dense lower triangular matrix) 108 476 P 1 F 1.12 (A) 257.12 476 P 0 F 1.12 (. The algorithm to be used is quite simple and involves) 265.79 476 P 0 (dividing the matrix and the vector into blocks as shown in Figure 8. Each \322a\323 in the \336gure) 108 462 P 0.11 (represents a sub-matrix of) 108 448 P 1 F 0.11 ( A) 233.3 448 P 0 F 0.11 ( and each \322b\323 represents a sub-vector of) 245.08 448 P 1 F 0.11 (b) 440.57 448 P 0 F 0.11 (. Let the number of) 447.24 448 P (sub-blocks be) 108 434 T 1 F (N) 177.32 434 T 0 F (.) 185.99 434 T (Figure 8. Blocked Matrix and V) 241.39 229.33 T (ector) 394.04 229.33 T (.) 417.37 229.33 T (The algorithm replaces) 108 201.33 T 1 F (b) 221.64 201.33 T 0 F ( with the solution vector) 228.31 201.33 T 1 F (x) 347.98 201.33 T 0 F (. The case for) 353.98 201.33 T 1 F (N) 422.28 201.33 T 0 F ( = 4 is shown below) 430.94 201.33 T (.) 526.6 201.33 T 108 63 540 720 C 211.67 251.33 436.33 404 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (a) 220.17 372.67 T 0 9.6 Q (0,0) 225.49 369.67 T 216 256.77 360.23 399.67 R 0.5 H 2 Z N 216 399.67 360.23 256.77 2 L N 252 363.67 216 363.67 2 L N 288 327.67 216 327.67 2 L N 324 291.67 216 291.67 2 L N 252 363.67 252 257.17 2 L N 288 327.67 288 256.67 2 L N 324 291.67 324 256.67 2 L N 0 12 Q (a) 221.5 338.83 T 0 9.6 Q (1,0) 226.83 335.83 T 0 12 Q (a) 255.33 337.5 T 0 9.6 Q (1,1) 260.66 334.5 T 0 12 Q (a) 222.83 302.5 T 0 9.6 Q (2,0) 228.16 299.5 T 0 12 Q (a) 222.5 270.33 T 0 9.6 Q (3,0) 227.83 267.33 T 0 12 Q (a) 257.5 302 T 0 9.6 Q (2,1) 262.83 299 T 0 12 Q (a) 291.33 301.5 T 0 9.6 Q (2,2) 296.66 298.5 T 0 12 Q (a) 256.33 267.33 T 0 9.6 Q (3,1) 261.66 264.33 T 0 12 Q (a) 294.33 269.33 T 0 9.6 Q (3,2) 299.66 266.33 T 0 12 Q (a) 326.5 266.33 T 0 9.6 Q (3,3) 331.83 263.33 T 395.83 255.33 431.67 399.5 R N 395.75 363.67 431.5 363.67 2 L N 396 327.67 431.75 327.67 2 L N 395.75 291.67 431.5 291.67 2 L N 0 12 Q (b) 408.33 377.83 T 0 9.6 Q (0) 414.33 374.83 T 0 12 Q (b) 408.83 343.17 T 0 9.6 Q (1) 414.83 340.17 T 0 12 Q (b) 409.33 306 T 0 9.6 Q (2) 415.33 303 T 0 12 Q (b) 410.67 271.33 T 0 9.6 Q (3) 416.67 268.33 T 212.17 251.83 435.83 403.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C 108 167.58 171.18 191.21 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 4 12 Q 0 X 0 0 0 1 0 0 0 K (b) 108.12 175.33 T 0 9 Q (0) 114.58 171.13 T 4 12 Q (a) 137.84 175.33 T 0 9 Q (0) 144.29 171.13 T (0) 153.29 171.13 T 5 F (,) 148.79 171.13 T 0 F (1) 149.74 178.93 T (\320) 144.89 178.93 T 4 12 Q (b) 159.1 175.33 T 0 9 Q (0) 165.55 171.13 T 0 12 Q (=) 125.07 175.33 T 0 0 612 792 C 108 141.58 229.09 165.21 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 4 12 Q 0 X 0 0 0 1 0 0 0 K (b) 108.42 149.33 T 0 9 Q (1) 114.88 145.13 T 4 12 Q (a) 138.14 149.33 T 0 9 Q (1) 144.6 145.13 T (1) 153.59 145.13 T 5 F (,) 149.1 145.13 T 0 F (1) 150.04 152.93 T (\320) 145.2 152.93 T 4 12 Q (b) 166.55 149.33 T 0 9 Q (1) 173.01 145.13 T 4 12 Q (a) 189.5 149.33 T 0 9 Q (1) 195.96 145.13 T (0) 204.96 145.13 T 5 F (,) 200.46 145.13 T 4 12 Q (b) 210.16 149.33 T 0 9 Q (0) 216.62 145.13 T 0 12 Q (\320) 180.5 149.33 T 5 F (\050) 161.4 149.33 T (\051) 221.67 149.33 T 0 F (=) 125.38 149.33 T 0 0 612 792 C 108 115.58 273.31 139.21 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 4 12 Q 0 X 0 0 0 1 0 0 0 K (b) 108.72 123.33 T 0 9 Q (2) 115.18 119.13 T 4 12 Q (a) 138.44 123.33 T 0 9 Q (2) 144.9 119.13 T (2) 153.89 119.13 T 5 F (,) 149.4 119.13 T 0 F (1) 150.34 126.93 T (\320) 145.5 126.93 T 4 12 Q (b) 166.85 123.33 T 0 9 Q (2) 173.31 119.13 T 4 12 Q (a) 189.8 123.33 T 0 9 Q (2) 196.26 119.13 T (0) 205.26 119.13 T 5 F (,) 200.76 119.13 T 4 12 Q (b) 210.46 123.33 T 0 9 Q (0) 216.92 119.13 T 0 12 Q (\320) 180.8 123.33 T 4 F (a) 233.42 123.33 T 0 9 Q (2) 239.87 119.13 T (1) 248.87 119.13 T 5 F (,) 244.37 119.13 T 4 12 Q (b) 254.08 123.33 T 0 9 Q (1) 260.53 119.13 T 0 12 Q (\320) 224.42 123.33 T 5 F (\050) 161.7 123.33 T (\051) 265.58 123.33 T 0 F (=) 125.68 123.33 T 0 0 612 792 C 108 89.58 317.52 113.21 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 4 12 Q 0 X 0 0 0 1 0 0 0 K (b) 109.03 97.33 T 0 9 Q (3) 115.48 93.13 T 4 12 Q (a) 138.74 97.33 T 0 9 Q (3) 145.2 93.13 T (3) 154.2 93.13 T 5 F (,) 149.7 93.13 T 0 F (1) 150.64 100.93 T (\320) 145.8 100.93 T 4 12 Q (b) 167.15 97.33 T 0 9 Q (3) 173.61 93.13 T 4 12 Q (a) 190.1 97.33 T 0 9 Q (3) 196.56 93.13 T (0) 205.56 93.13 T 5 F (,) 201.06 93.13 T 4 12 Q (b) 210.76 97.33 T 0 9 Q (0) 217.22 93.13 T 0 12 Q (\320) 181.11 97.33 T 4 F (a) 233.72 97.33 T 0 9 Q (3) 240.17 93.13 T (1) 249.17 93.13 T 5 F (,) 244.67 93.13 T 4 12 Q (b) 254.38 97.33 T 0 9 Q (1) 260.83 93.13 T 0 12 Q (\320) 224.72 97.33 T 4 F (a) 277.33 97.33 T 0 9 Q (3) 283.79 93.13 T (2) 292.78 93.13 T 5 F (,) 288.29 93.13 T 4 12 Q (b) 297.99 97.33 T 0 9 Q (2) 304.45 93.13 T 0 12 Q (\320) 268.33 97.33 T 5 F (\050) 162.01 97.33 T (\051) 309.5 97.33 T 0 F (=) 125.98 97.33 T 0 0 612 792 C FMENDPAGE %%EndPage: "14" 14 %%Page: "15" 15 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (15) 532 42.62 T 0 12 Q 0.52 (Notice that once b) 108 712 P 0 9.6 Q 0.42 (j) 197.22 709 P 0 12 Q 0.52 ( has been computed, the operations b) 199.89 712 P 0 9.6 Q 0.42 (i) 380.67 709 P 0 12 Q 0.52 ( = b) 383.34 712 P 0 9.6 Q 0.42 (i) 403.15 709 P 0 12 Q 0.52 ( - a) 405.82 712 P 0 9.6 Q 0.42 (i,j) 422.2 709 P 0 12 Q 0.52 (b) 429.93 712 P 0 9.6 Q 0.42 (j) 435.93 709 P 0 12 Q 0.52 ( can be performed in) 438.6 712 P -0.31 (parallel for i = j+1 to N-1. Thus, the algorithm proceeds iteratively) 108 698 P -0.31 (, working on columns of) 423.59 698 P 0.08 (the blocked system one at a time from left to right. Let) 108 684 P 1 F 0.08 (Solve) 373.95 684 P 0 F 0.08 ( be a sequential function that) 401.28 684 P (solves this problem \050applied to a single block\051.) 108 670 T 3 10 Q (To process the jth column do) 144 651.33 T (Solve\050a) 156 639.33 T 3 8 Q (j,j) 198 636.83 T 3 10 Q (, b) 212.4 639.33 T 3 8 Q (j) 230.4 636.83 T 3 10 Q (\051;) 235.2 639.33 T (for each i from j+1 to N-1 do) 156 627.33 T (b) 174 615.33 T 3 8 Q (i) 180 612.83 T 3 10 Q ( = b) 184.8 615.33 T 3 8 Q (i) 208.8 612.83 T 3 10 Q ( - a) 213.6 615.33 T 3 8 Q (i,j) 237.6 612.83 T 3 10 Q ( * b) 252 615.33 T 3 8 Q (j) 276 612.83 T 3 10 Q (;) 280.8 615.33 T 0 12 Q 0.07 (Each of the iterations of the for loop can be done in parallel. Assuming the sub-blocks are) 108 590 P 0.04 (of adequate size, each iteration represents a fairly coarse grain computation\320 a multiplica-) 108 576 P 0.15 (tion of a matrix sub-block by a vector sub-block with the resulting vector subtracted from) 108 562 P 1.31 (another vector sub-block. For the remainder of this discussion assume that a procedure) 108 548 P (called) 108 534 T 1 F (BlkMult) 139.66 534 T 0 F ( performs this operation.) 183 534 T 1.16 (The parallelism in this algorithm stems from the ability to perform the) 108 508 P 1 F 1.16 (BlkMult) 461.85 508 P 0 F 1.16 ( opera-) 505.2 508 P -0.06 (tions \322beneath\323 the) 108 494 P 1 F -0.06 (Solve) 202.81 494 P 0 F -0.06 ( operation for a column in parallel. This is readily seen in a data-) 230.14 494 P 0.67 (\337ow graph for the algorithm as shown in Figure 9. The \322S\323 nodes are calls to) 108 480 P 1 F 0.67 (Solve) 491.67 480 P 0 F 0.67 ( and) 519 480 P -0.08 (the \322M\323 nodes are calls to) 108 466 P 1 F -0.08 (BlkMult) 235.52 466 P 0 F -0.08 (. In the next few sections we will show how to express) 278.86 466 P (this algorithm in CODE and in HeNCE.) 108 452 T (Figure 9. Data\337ow for Block T) 216.43 257 T (riangular Solver) 365.33 257 T (.) 442.32 257 T 1 F (5.4 The CODE Language) 108 227 T 0 F 1.43 (Before presenting the CODE block triangular solver) 108 201 P 1.43 (, we introduce all of the icons that) 366.7 201 P 0.06 (may appear in CODE graphs. They are shown in Figure 10. Many of the icons are used to) 108 187 P -0.14 (de\336ne the interface to a graph. CODE graphs can call other CODE graphs by means of the) 108 173 P 0.86 (Call icon shown. Arcs incident upon Call nodes are actual parameters of the call. These) 108 159 P -0.13 (arcs are bound to interface nodes in the called graph via a name binding that is an attribute) 108 145 P -0.04 (of the actual parameter arcs. This is similar to arcs binding port names between two nodes) 108 131 P 2.03 (as seen above. Interface nodes are required to have names that are unique within the) 108 117 P (graph.) 108 103 T 108 63 540 720 C 153.5 279 494.5 422 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (S) 229 404.91 T (0) 238 395.91 T (S) 291.33 370.12 T (S) 346 332.91 T (1) 299 365.51 T (2) 354 326.91 T (M) 290 297.71 T (S) 399 295.71 T (3) 407 289.71 T (M) 344 296.71 T (M) 229 296.71 T (M) 291 332.71 T (M) 229 332.71 T (M) 229 368.71 T (1,0) 241 364.71 T (2,0) 241 328.71 T (3,0) 241 292.71 T (2,1) 303 328.71 T (3,1) 303 292.71 T (3,2) 355 290.71 T (B) 183 403.8 T (B) 183 368.8 T (B) 185 331.8 T (B) 185 296.8 T (0) 192 400.8 T (1) 192 365.8 T (2) 194 328.8 T (3) 194 293.8 T (X) 446 404.8 T (X) 445 368.8 T (X) 446 332.8 T (X) 447 296.8 T (0) 456 400.8 T (1) 456 364.8 T (2) 458 329.8 T (3) 458 293.8 T 215.31 410.01 223 407.8 215.31 405.6 216.11 407.8 4 Y V 200 407.8 216.11 407.8 2 L 1 H 2 Z N 217.31 302.01 225 299.8 217.31 297.6 218.11 299.8 4 Y V 202 299.8 218.11 299.8 2 L N 218.31 338.01 226 335.8 218.31 333.6 219.11 335.8 4 Y V 203 335.8 219.11 335.8 2 L N 216.31 374.01 224 371.8 216.31 369.6 217.11 371.8 4 Y V 201 371.8 217.11 371.8 2 L N 431.31 338.01 439 335.8 431.31 333.6 432.11 335.8 4 Y V 365 335.8 432.11 335.8 2 L N 432.31 374.01 440 371.8 432.31 369.6 433.11 371.8 4 Y V 310 371.8 433.11 371.8 2 L N 431.31 410.01 439 407.8 431.31 405.6 432.11 407.8 4 Y V 248 407.8 432.11 407.8 2 L N 389.31 302.01 397 299.8 389.31 297.6 390.11 299.8 4 Y V 374 299.8 390.11 299.8 2 L N 334.31 302.01 342 299.8 334.31 297.6 335.11 299.8 4 Y V 319 299.8 335.11 299.8 2 L N 335.31 338.01 343 335.8 335.31 333.6 336.11 335.8 4 Y V 320 335.8 336.11 335.8 2 L N 278.31 302.01 286 299.8 278.31 297.6 279.11 299.8 4 Y V 263 299.8 279.11 299.8 2 L N 278.31 338.01 286 335.8 278.31 333.6 279.11 335.8 4 Y V 263 335.8 279.11 335.8 2 L N 278.31 374.01 286 371.8 278.31 369.6 279.11 371.8 4 Y V 263 371.8 279.11 371.8 2 L N 431.31 302.01 439 299.8 431.31 297.6 432.11 299.8 4 Y V 416 299.8 432.11 299.8 2 L N 235.21 387.49 233 379.8 230.79 387.49 233 386.69 4 Y V 233 398.8 233 386.69 2 L N 297.2 351.49 295 343.8 292.8 351.49 295 350.69 4 Y V 295 362.8 295 350.69 2 L N 351.2 315.49 349 307.8 346.8 315.49 349 314.69 4 Y V 349 326.8 349 314.69 2 L N 221.77 346.8 227.04 340.8 219.4 343.1 221.26 344.52 4 Y V 233 397.8 M 209.29 395.27 205.02 358.85 221.26 344.51 D N 286.45 315.25 289.36 307.8 282.94 312.58 285.18 313.28 4 Y V 295 363.8 M 282.93 354.93 264.05 336.7 278.08 320.8 D 280.36 318.21 282.88 315.84 285.18 313.28 D N 227.16 316.28 230 308.8 223.63 313.64 225.87 314.32 4 Y V 233 398.8 M 205.17 403 204.88 364.5 208.29 345.8 D 210.52 333.45 219 323.17 225.88 314.31 D N 154 279.5 494 421.5 R 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "15" 15 %%Page: "16" 16 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (16) 532 42.62 T 0 12 Q (Figure 10. Node Icons in CODE.) 251.72 565 T -0.28 (The small circle interface nodes bind incoming and outgoing parameters in a very straight-) 108 537 P 0.93 (forward way) 108 523 P 0.93 (. Consider an input. As Figure 1) 169.12 523 P 0.93 (1 shows, the arc entering the Call becomes) 328.22 523 P (associated with the arc leaving the interface node. In ef) 108 509 T (fect, the two arcs become one.) 372.37 509 T (Figure 1) 223.27 381 T (1. Formal-Actual Binding in CODE.) 263.15 381 T 1.24 (Creation parameters are also bound to an incoming arc. They extract exactly one value) 108 353 P 0.77 (from this arc at the time the called graph is instantiated at runtime. All nodes within the) 108 339 P 0.14 (called graph may use the creation parameter name as a constant. Its value comes from the) 108 325 P (arc.) 108 311 T 1.05 (The shared variable icon is used to declare variables that will be shared among a set of) 108 285 P 0.98 (nodes. Each node must declare whether it requires read-only or read-write access to the) 108 271 P (variable.) 108 257 T 1 F (CODE Block T) 108 229 T (riangular Solver) 185.12 229 T 0 F 0.36 (Many of these node types may be seen at work in Figure 12, a graph that implements the) 108 203 P -0.13 (block triangular solver algorithm. Notice that the matrix \050) 108 189 P 1 F -0.13 (a) 383.26 189 P 0 F -0.13 (\051, the size of the system \050) 389.26 189 P 1 F -0.13 (n) 508.8 189 P 0 F -0.13 (\051, the) 515.47 189 P 0.78 (size of the block system \050) 108 175 P 1 F 0.78 (N) 234.2 175 P 0 F 0.78 (\051, and the size of a block \050) 242.86 175 P 1 F 0.78 (blk) 372.93 175 P 0 F 0.78 (\051 are all passed to the graph as) 389.61 175 P (creation parameters. Their values are only read within the graph.) 108 161 T -0.15 (The known vector \050) 108 135 P 1 F -0.15 (b) 201.85 135 P 0 F -0.15 (\051 is passed into the graph by means of a data\337ow arc. It arrival causes) 208.53 135 P (node) 108 121 T 1 F (DIST) 134.33 121 T 0 F ( to \336re. The result vector \050) 162.34 121 T 1 F (x) 287.98 121 T 0 F (\051 is passed out of the graph on a data\337ow arc.) 293.98 121 T 0.88 (Node) 108 95 P 1 F 0.88 (DIST) 137.87 95 P 0 F 0.88 ( sends the appropriate segments of) 165.88 95 P 1 F 0.88 (b) 339.78 95 P 0 F 0.88 ( to the nodes that perform the) 346.46 95 P 1 F 0.88 (S) 496.92 95 P 0 F 0.88 ( and) 503.59 95 P 1 F 0.88 (M) 528.67 95 P 0 F 0.62 (operations of Figure 9. Node) 108 81 P 1 F 0.62 (GA) 252.42 81 P 0.62 (TH) 269.53 81 P 0 F 0.62 ( collects the segments of) 286.87 81 P 1 F 0.62 (x) 410.96 81 P 0 F 0.62 ( from the) 416.96 81 P 1 F 0.62 (S) 465.81 81 P 0 F 0.62 ( and) 472.48 81 P 1 F 0.62 (M) 497.05 81 P 0 F 0.62 ( nodes) 508.38 81 P (and combines them into the single vector) 108 67 T 1 F (x) 308.32 67 T 0 F (.) 314.32 67 T 108 63 540 720 C 176 587 472 708 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 290 144 290 144 179 563 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/code-icons.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: code-icons.eps %%CreationDate: 3/18/94 %%BoundingBox: 0 0 290 144 %%Pages 1 %%DocumentFonts: Symbol %%+Times-Roman %%DocumentNeededFonts: Symbol %%+Times-Roman %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 144 lineto 290 144 lineto 290 0 lineto closepath clip gsave -48 153 translate 1 -1 scale save 57 28 translate 22 32 scale 4 string /dataStr exch def 0 setgray 29 43 false [29 0 0 43 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 355 Hex Bytes imagemask fffffffefffffffffffdfffdfffdfffffffdffffffdddffeffedbffffff57ffffff8fffffffdffffffe03ffdff9fcffbff7ff7fffefffbfdfdfffdfdfbfffefffbfffefdf7ffff79f7ffff7ff7ffff7df7fdff7ff7ffff7ff7ffff7df7ffff7ffbfffefffbfffefdfdfffdfffefffbffff7ff7fdff9fcfffffe03ffffffdfffdfffdfffffffdffffffdddffdffedbffcfff57ffffff8fffdfffdfffffffffffffffffffdffffffffffffffff %%EndData restore save 50 93 translate 34 34 scale 6 string /dataStr exch def 0 setgray 45 45 false [45 0 0 45 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 551 Hex Bytes imagemask fffffffffffdfffffffffffdfffffffffffdfffffffffffdfffffbfffffffffffbfffffffffffbffffffffffbbbfffffffffdb7fffffffffeafffffffffff1fffffffffffbfffffffc00000003fffddfffffbbfffddfffffbbfdfddfffffbbfdfddfffffbbfdfddfffffbbf8fddfffffbbfffddfffffbbfffddfffffbbfafddfffffbbfffddfffffbbfffddfffffbbfcfddfffffbbf8fddfffffbbfffddfffffbbfefddfffffbbf8fddfffffbbfffddfffffbbf8fddfffffbbfcfddfffffbbfcfc00000003fcfffffbfffffffffffbfffffffffffbffffffffffbbbffffeffffdb7fffffffffeafffffffffff1fffff8fffffbfffff8fffffffffff8fffffffffff8fffffffffff8fffffffffff8 %%EndData restore save 201 31 translate 18 22 scale 3 string /dataStr exch def 0 setgray 24 29 false [24 0 0 29 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 185 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffff83ffff7dfffefefffdff7ffdff7ffdef7ffdff7ffdff7ffefeffff7dffff83ffffefffffefffffefffffefffffefffffefffff6dffffabffffc7ffffefffffffffffffff %%EndData restore save 201 63 translate 16 25 scale 3 string /dataStr exch def 0 setgray 21 33 false [21 0 0 33 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 209 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffdfffffdfffffdfffffdfffffdfffffdfffffdffffedbffff57ffff8fffffdfffff07fffefbfffdfdfffbfefffbfefffbdefffbfefffbfefffdfdfffefbffff07ffffffffffffffffffffffffffffffff %%EndData restore save 201 98 translate 17 16 scale 3 string /dataStr exch def 0 setgray 23 21 false [23 0 0 21 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 137 Hex Bytes imagemask fffffffffffffffffffffffffffffffffffffc007ffdff7ffdff7ffdff7ffdff7ffdef7ffdff7ffdff7ffdff7ffdff7ffc007fffffffffffffffffffffffff %%EndData restore save 48 61 translate 38 31 scale 7 string /dataStr exch def 0 setgray 51 41 false [51 0 0 41 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 585 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffbffffffffffff7bdfffffffffffbfbfffffffffffdb7fffffffffffeefffffffffffff1ffffffffffe00000ffffffffe7fbfcffffffffebfbfaffffffffedfbf6ffffffffeffbfefffffffdef7bdef7fffffeefbbbeefffffff6ffbfedfffffffafeafebfffffffcff1fe7ffffff480040025ffffffcff1fe7ffe1fffafeafebfffffff6ffbfedffffffeefbbbeefff1ffdef7bdef7ffffffeffbfeffffffffedfbf6ffffffffebfbfafffe4fffe7fbfcfffe4fffe00000fffe4ffffff1ffffffffffffeaffffffffffffdf7ffffe7fffffbbbffffe0fffff7bdffffe0ffffffffffffe4ffffffbfffffe4ffffffffffffe8ffffffffffffea %%EndData restore /Times-Roman findfont 12 scalefont setfont gsave 87 42 translate 1 -1 scale 0 0 moveto 0 setgray (Sequential )show grestore gsave 87 54 translate 1 -1 scale 0 0 moveto 0 setgray (Computation.)show grestore gsave 88 75 translate 1 -1 scale 0 0 moveto 0 setgray (Shared Variable )show grestore gsave 88 87 translate 1 -1 scale 0 0 moveto 0 setgray (Declaration.)show grestore gsave 87 108 translate 1 -1 scale 0 0 moveto 0 setgray (Call From One Graph )show grestore gsave 87 120 translate 1 -1 scale 0 0 moveto 0 setgray (to Another.)show grestore gsave 225 51 translate 1 -1 scale 0 0 moveto 0 setgray (Incoming Parameter.)show grestore gsave 223 82 translate 1 -1 scale 0 0 moveto 0 setgray (Outgoing Parameter.)show grestore gsave 225 105 translate 1 -1 scale 0 0 moveto 0 setgray (Creation (Read-Only) )show grestore gsave 225 117 translate 1 -1 scale 0 0 moveto 0 setgray (Broadcast Parameter.)show grestore newpath 51.5 27.5 moveto 332.5 27.5 lineto 332.5 126.5 lineto 51.5 126.5 lineto 51.5 27.5 lineto closepath 0 setgray 1 setlinewidth stroke newpath 51.5 9.5 moveto 332.5 9.5 lineto 332.5 27.5 lineto 51.5 27.5 lineto 51.5 9.5 lineto closepath 0 setgray 1 setlinewidth stroke gsave 82 22 translate 1 -1 scale 0 0 moveto 0 setgray (General Nodes)show grestore gsave 208 22 translate 1 -1 scale 0 0 moveto 0 setgray (Graph Interface Defintion)show grestore newpath 197.5 9.5 moveto 197.5 126.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 197.5 152.5 moveto 197.5 152.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap grestore showpage %%Trailer end %%EndDocument FMENDEPSF 108 63 540 720 C 0 0 612 792 C 108 63 540 720 C 212 403 436 479 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 225 409 252 424 R 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K N 228.25 424 228.25 409.5 2 L N 248.75 424 248.75 409.5 2 L N 240.21 432.19 238 424.5 235.79 432.19 238 431.39 4 Y V 238 431.39 238 453.25 2 L N 0 12 Q (.FromPort => ..X) 247 442 T 90 450 3.5 3.5 389.5 443.5 A 391.7 416.69 389.5 409 387.3 416.69 389.5 415.89 4 Y V 389.5 439.75 389.5 415.89 2 L N (X) 397 442 T (Calling Graph) 240 465 T (Called Graph) 359 464 T 433 457 214 457 2 L N 347 457 347 406 2 L N 212.5 403.5 435.5 478.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "16" 16 %%Page: "17" 17 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (17) 532 42.62 T 0 12 Q 0.3 (In this implementation, a single instance of node) 108 712 P 1 F 0.3 (Solve) 346.72 712 P 0 F 0.3 ( performs, one after another) 374.06 712 P 0.3 (, all of) 508.4 712 P 0.85 (the) 108 698 P 1 F 0.85 (S) 126.51 698 P 0 F 0.85 ( operations shown in Figure 9, and) 133.18 698 P 1 F 0.85 (N) 308.43 698 P 0 F 0.85 ( - 1 instances of node) 317.09 698 P 1 F 0.85 (Mult) 427.48 698 P 0 F 0.85 (perform the) 456.66 698 P 1 F 0.85 (M) 517.67 698 P 0 F 0.85 (\325) 529 698 P 0.85 (s.) 532.33 698 P 2.34 (The mechanism by which multiple instances of a node are created is interesting and) 108 684 P 0.9 (involves an interaction between the routing_rules of) 108 670 P 1 F 0.9 (Solve) 367.28 670 P 0 F 0.9 ( and the annotation of the arc) 394.61 670 P (from) 108 656 T 1 F (Solve) 134.33 656 T 0 F ( to) 161.66 656 T 1 F (Mult) 177 656 T 0 F (.) 202.33 656 T 1 F (Solve) 208.33 656 T 0 F (\325) 235.67 656 T (s annotation is shown below) 239 656 T (. It contains a line) 374.22 656 T 3 10 Q (TRUE => { B_TO_M[i+WhichBlock] <- copy\050b\051; : \050i N-WhichBlock\051 };) 144 637.33 T 0 12 Q (which places a copy of the vector b onto an output port with an index. The notation) 108 612 T 3 10 Q (: \050i N-WhichBlock\051) 144 593.33 T 0 12 Q 0.41 ( causes index variable) 108 568 P 1 F 0.41 (i) 218.3 568 P 0 F 0.41 ( to take on values from 0 to) 221.63 568 P 2 10 Q 0.83 (N) 359.6 568 P 3 F 0.83 (-) 365.6 568 P 2 F 0.83 (WhichBlock) 371.6 568 P 0 12 Q 0.41 ( -1. Thus, the index of) 431.6 568 P 0.67 (the output port takes on a range of values from) 108 554 P 1 F 0.67 (j) 341.95 554 P 0 F 0.67 (+1 to) 345.95 554 P 1 F 0.67 (N) 375.38 554 P 0 F 0.67 (-1, where) 384.04 554 P 1 F 0.67 (j) 433.69 554 P 0 F 0.67 ( is the number of the) 437.68 554 P (column being processed. The annotation of the arc from) 108 540 T 1 F (Solve) 379.94 540 T 0 F ( to) 407.28 540 T 1 F (Mult) 422.62 540 T 0 F ( is) 447.95 540 T 3 10 Q (.B_TO_M[i] => [i].B_FROM_S) 144 521.33 T 0 12 Q 0.36 (where) 108 496 P 1 F 0.36 (B_FROM_S) 140.67 496 P 0 F 0.36 ( is node) 204.01 496 P 1 F 0.36 (Mult) 245.41 496 P 0 F 0.36 (\325) 270.75 496 P 0.36 (s input port. This routing rule is binding an output port) 274.08 496 P 0.41 (name to an input port name as before, but now indices are involved as well. Suppose) 108 482 P 1 F 0.41 (i) 523.91 482 P 0 F 0.41 ( in) 527.25 482 P 0.48 (the arc annotation has value 7 \050because the expression) 108 468 P 1 F 0.48 (i) 375.29 468 P 0 F 0.48 (+) 378.62 468 P 1 F 0.48 (WhichBlock) 385.39 468 P 0 F 0.48 ( in the routing rule) 448.74 468 P 0.25 (happens to be 7\051. Then, the arc speci\336cation binds) 108 454 P 1 F 0.25 (Solve) 353.89 454 P 0 F 0.25 (\325) 381.23 454 P 0.25 (s output port with index 7 to the) 384.56 454 P 0.52 (input port) 108 440 P 1 F 0.52 (B_FROM_S) 159.04 440 P 0 F 0.52 ( of node) 222.38 440 P 1 F 0.52 (Mult) 266.26 440 P 0 F 0.52 ( with an index 7. Dif) 291.59 440 P 0.52 (ferent instances of nodes have) 393.3 440 P 0.59 (dif) 108 426 P 0.59 (ferent indices. Thus,) 121.12 426 P 1 F 0.59 (Solve) 223.87 426 P 0 F 0.59 (sends data to the appropriate instance of) 254.8 426 P 1 F 0.59 (Mult) 454.56 426 P 0 F 0.59 ( by using an) 479.89 426 P (index value in its routing rule. The arc annotation completes the binding.) 108 412 T 0.32 (Any number of node instances can be created in this way at runtime. The set of instances) 108 386 P 0.44 (that can be created is dynamic in that it is determined by the runtime values of variables.) 108 372 P 2.69 (This mechanism is quite powerful. It is possible for a node with a self loop arc to) 108 358 P (\322expand\323 into an arbitrary graph, each node of which is a dif) 108 344 T (ferent instance.) 399.04 344 T (Figure 12. CODE Graph for Block T) 178.44 82 T (riangular Solver \050DoBTS\051.) 355 82 T 108 63 540 720 C 131.75 104 516.25 314 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 385 221 385 221 131.5 93 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/bts-dobts.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: bts-dobts.eps %%CreationDate: 7/5/93 %%BoundingBox: 0 0 385 221 %%Pages 1 %%DocumentFonts: Symbol %%DocumentNeededFonts: Symbol %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 221 lineto 385 221 lineto 385 0 lineto closepath clip gsave 0 221 translate 1 -1 scale newpath 0 0 moveto 385 0 lineto 385 221 lineto 0 221 lineto 0 0 lineto closepath 1 setgray eofill save 385 95 scale 72 string /dataStr exch def 0 setgray 575 142 false [575 0 0 142 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20459 Hex Bytes imagemask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffff80fffffffffffffffffc07fffffffffffc07fffffffffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000100000000000000003ffffffff80fffffffffffffffffc07fffffffffffc07fffffffffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000100000000000000003ffffffff80fffffffffe3ffffffc07fffffff8f1fc07fffffffffffff80fffff9ffe03ffffe7ff80ffffffffffff80ffffffffe0000000000000000000000010000000000e00380383ffffff80e03fffffffbffdfffc07c3fffffefdfc07f1ffffffffbff80e23ffdffe0383fff7ff80e0ffefffffff80f87fffffe000000000000000000000001070e7cfc011004403ddffffff80edbfffffffbffdfffc07bbfffffefdfc07fbffffffffbff80f77ffdffe03ddfff7ff80f77fefffffff80f77fffffe00000000000000000000000108912244011004403ddc68f1f80eda8c3478fbc3838fc07bf8e8e3efdfc07fbf0c4633307f80f751e1c7e03ddc7871f80f771c133451f80f7e188c7e00000000000000000000000008912250011004403c3bb76ef80fdf7fd9b77bfddf77c078f777ddefdfc07fbff6eddbbbff80f766ddbbe03c3bb76ef80f0eeefbbbe6f80f1feddbbe00000000000000000000000108112270002004403dbbb760f80fdf7e1bb8fbe1df07c07e37f7ddefdfc07fbf86eddbbbff80f76eddbbe03db8376ef80f6e0efbbbeef80fc70dd83e00000000000000000000000008112250004004403ddbb76ff80fdf7ddbbf7bdddf7fc07fb7f7ddefdfc07fbb775ddbbbff80f76eddbbe03ddbf76ef80f76fefbbbeef80ff6eebbfe00000000000000000000000008912240008004403ddbb76ef80fdf7ddbb77bdddd77c07bb777ddefdfc07fbb771ddbbbbf80f26eddbbe03ddbb76ef80f76eeebbbeef80f76ee3bbe000000000000000000000000089122440110044038cc70f1f80f061e2198e062e38fc07878e1e38103c07f038bbe3c5c7f80f8c662c7e038cc78b1f80e331f1c50c6780f0f177c7e000000000000000000000000070e7cfc01f103803ffff7fff80fffffffffffffffffc07fffffffffffc07fffffbfffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000000000000000000003ffff7fff80fffffffffffffffffc07fffffffffffc07fffffbfffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe00000000000000000000000000000000000000003fffe3fff80fffffffffffffffffc07fffffffffffc07ffffe7fffffff80ffffffffe03ffffffff80ffffffffffff80ffffffffe000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001ffffffffffffffffffffffc000000000001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe001000000000000001ffffffffffffffffffffffc000000000001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe000000000000000001ffffffffcfffffffffffffc000000000001fffffffffffffffffff01fffffffffc7ffe03ff3fffffff01ffffffffc0000000000fffffffffe3f80fffff7ffe001000000000000001ffffffffefefffffffffffc000000006001fffff07fc180c3fffff01ce7fffffff7c7e0388bfff7e3f01c47fff8fc0000001c00e03fffffffbf80e07fffdfe0011f0000000000001ffffffffefefffffffffffc01c000002001fffffbbfeeb6bbfffff01e4ffffffff7bbe03ddbfff7ddf01eeffff77c07f0000400edbfffffffbf80f77fffdfe000098000000000001ffffffffe1c1c7ffffffffc022000002001fffffbb8eeb6bffffff01e4c346661f7fbe03d5a70e0fdf01eee311f7c0490000400eda8c3118fbf80f5c44783e00108971c3ab9e7401ffffffffeeefbbffffffffc0225cf2e2c01fffffbb761f78ffffff01eafd9b77ef7f7e03d59bf77fbf01e0ddbbefc0493870400fdf7fdbb77bf80f1f5f7dfe001098822444012a11ffffffffeeefc7ffffffffc020200913211fffffbb76ef7e3fffff01eae1bb770f7efe03d5bb877f7f01eeddabdfc0084488408fdf7e1bb07bf80f5fbf7dfe0010f08224440f2a01ffffffffeeeffbffffffffc026207912201fffffbb76ef7fbfffff01eaddbb76ef7efe03c9bb777f7f01eeddabdfc0084488400fdf7ddd77fbf80f7f5f7dfe001080822444112a01ffffffffeeeebbffffffffc022208912201fffffbb76ef7bbfffff01eeddbb76ef7ffe03ebbb7777ff01eeddd7ffc0084488400fdf7ddc777bf80f76ef7dde001080822444112a01ffffffffd1f1c7ffffffffc022208912201fffff078c1c187fffff01c462198b140efe03eb118b8f7f01c463d7dfc0084488400f061e2ef8e0780e04e41e3e0011e1e1c3cf0eeb11ffffffffffffffffffffffc01c7875e7711fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc03e3871f88ffffffffffff80ffffffffe001000000040000001ffffffffffffffffffffffc000000100001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe001000000040000001ffffffffffffffffffffffc000000100001fffffffffffffffffff01fffffffffffffe03ffffffffff01ffffffffc0000000000ffffffffffff80ffffffffe000000000380000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffc1fffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffe003fffffffffffffffffffffffffffffffffffffffefffffffffffffffffbefffffffffffffffffffffffffffffffffeffbffffffffffffffffffffffffffffffffffffffffffffeffbffffffffffffffdffffffff8fffffffffefffffffffffffffffffffff7f7ffc1ff8263ffffffffffffffffffffffeffbffffffffffffff3ffffffffffff7ffffffffffffffffeffbfffffffffffffffffffffff7ffffff7ffffffffeffffffffffffffffeffbffeeffef37ffffffffffffffffffffffeffbffffffffffffefbffffffffbffffffffffffffffffffeffbfffffffffffffffffffffff7ffffff7ffffffffeffffffffffffffffeffbffeeffef37ffffffffffffffffffffffeffbffe1ffffffffefbffffffffbffffffffffffffffffffeffbffd1ffffffffc71e0e3ff8e0ff170e0d18e23ffeffffffffffffffffef7bffe1ffef57ffffffffffffffffffffffef7bfffeffffffffc1a78ff8b87068c711ffffffffffffffef7bffe6ffffffffbbdedddff777ffabf77efefaffffffffffffffffffffeffbffeeffef57ffffffffffffffffffffffeffbfff0ffffffffef9b77fd5fbbf7f7d7ffffffffffffffeffbffeefff060ffc7dfbc1ff777ffab877efefdfffeffffffffffffffffeffbffeeffef67ffffffffffffffffffffffeffbffeefff8307fefbb07fd5c3bf7f7efffffffffffffffeffbffeefffffffffbdf7dfff777ffab777efefafffefffffffffffffffff7f7ffeeffef67ffffffffffffffffffffffeffbffeeffffffffefbb7ffd5bbbf7f7d7ffffffffffffffeffbffeeffffffffbbdeeddff777ffab7776fef77ffffffffffffffffffffbefffc1ff8237ffffffffffffffffffffffeffbfff17fffffffeebb77fd5bbbb7f7bbffffffffffffffeffbffc67fffffffc7060e3ff8e1ff298b8c38273ffffffffffffffffffffc1fffffffffffffffffffffffffffffffffe003fffffffffffff1118ff94c5c61c139ffffffffffffffe003fffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffe3fcfc7fffcfffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffeff7fffeffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffeff7fffeffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c7838ffe383fe1f7c78ecffc6231ffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeef7b777fdddffeef7bb76bffbb76effffffffffffffffffffffffffb6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183ff1f7ef07fdddffeef7bb7e7ffc7771ffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7df7ffdddffeef7bb7ebfffbafeffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeef7bb77fdddffeef7bb76dffbb8eefffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c1838ffe387fd1c0c78ce7fc7df1ffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffeffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffeffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe003fffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfc1c1c203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffcc7ffffffffffffffffffffffffffffffffffefffffffffffffffdffffdfeef7badbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffe6fffffffffffffffffffffffffffffffffffefffffffffffffffdffffdfeef7bedbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffe6fffffffffffffffffffffffffffffffffffffffffffffffffffdff7fdfeef78fdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7bffeafffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeef7e3dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffeafffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeef7fbdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffecfffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeef7bbdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffecfffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfc1c18707ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffc6fffffffffffffffffffffffffffffffffffefffffffffffffffeffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff700fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff00ffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff00ffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffff00ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffff00effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffff00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffef00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffff9fff00fffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffbffffffff1fffff9f8ffff9fffffffffffffffffffffffffffffff7ffffffffff7fffff00fffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffdfeffffdfffffffffffffffffffffffffffffff7ffffffffffffffffff00ffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffdfeffffdfffffffffffffffffffffffffffffff7ffffffffffffffffffff00ffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffff8e3c1c7ff1c1ff0ffc3ef8f1d9ffffffffffffffffffffffffffffff7ffffffffffffffffffffff0000000000000000000000000000fffffffffffffffffffffffffffffffffffff77bdbbbfeeeffff7fddef76ed7ffffffffffffffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffdffffffffffffefffffffffffffffffffffffffffffffe0c1ff8fbf783feeefff87fddef76fcfffffffffffffffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffeffffffffffffeffffffffffffffffffffffffffffffffffffff7befbffeeefff77fddef76fd7ffffffffffff %%EndData restore save 0 95 translate 385 95 scale 72 string /dataStr exch def 0 setgray 575 142 false [575 0 0 142 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20459 Hex Bytes imagemask ffffffffffffffffff7ffffffffffffffffffffff777ffffffffffff7fffffffffffefffffffffffffffffffffffffffffffffffff77bddbbfeeefff77fddef76edbffffffffffffffffffffffffffffff7ffffffffffffffffffffffb6fffffffffffffbfffffffffffefffffffffffffffffffffffffffffffffffff8e0c1c7ff1c3ff8bfa3818f19cffffffffffffffffffffffffffffff7ffffffffffffffffffffffd5fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffe3fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffff80fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffe7f3ffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffdffdffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffbffeffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffff7fff7fffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffeffffbfffffffffffffffffffffffefffffffffffffffffffffffffffffffe003fffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffeffffbfffff8fffffffffffffffffefffffffffffffffffffffffffffffffeffbffcfc73ffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffdffffdff0ffefffffffffffffffffefffffffffffffffffffffffffffffffeffbffeff7bffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffdffffdfeeffefffffffffffffffffefffffffffffffffffffffffffffffffeffbffeff7bffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffdffffdfefe3ee231fffffffffffffefffffffffffffffffffffffffffffffeffbffe1f7b3fffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffdff7fdfe3ddef76efffffffffffffefffffffffffffffffffffffffffffffef7bffeef7affffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffdffffdff8ddef760fffffffffffffefffffffffffffffffffffffffffffffeffbffeef79fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffdffffdffeddefaeffffffffffffffefffffffffffffffffffffffffffffffeffbffeef7afffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffdffffdfeeddef8eefffffffffffffefffffffffffffffffffffffffffffffeffbffeef7b7ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffeffffbfe1e381df1fffffffffffffefffffffffffffffffffffffffffffffeffbffd1c039ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffeffffbfffffffffffffffffffffffefffffffffffffffffffffffffffffffe003fffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffff7fff7fffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffbffeffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffdffdffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffe7f3ffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffff80fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777ffffffffffffffffffffff7fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6fffffffffffffffffffffff7fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffff777ffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffb6fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffd5fffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffe3fffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff00ffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7f0000ffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffff0000fffffffffffffbffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffff0000fffffffffdffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffff0000fffffdffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffff0000feffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffff0000effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffffffffffffeff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffffffffffff9ffefff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffffffffffff7ffefffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffff0000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffff777ffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffb6fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7ffffffffffffffffffffffd5fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffe3fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffc7ffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffabfffffffffffffffffff777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffff6dfffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff7fffffffffffffffffffffff7ffffffffffffffffffffffffeeefffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffeffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffff0fffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03fffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff01fffffbffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffe07fffdffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffff80ffdffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffff03effffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07fffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffe01ffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fe07ffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff80fffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03fffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffe077fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff87fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff777ffffffffffffffffffffffffeffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6fffffffffffffffffffffffffeffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffeffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffeffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffeffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffefffffffffffffffffffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffefffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffefffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffffffffffffffffefffffffffffffffffff7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffffffffffeffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffbfffff8fffffffffffffffffeffffffffffffffffffeffffbffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffdffffdfce7fefbfffffffffffffffeffffffffffffffffffdffffdff1c70023fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfe4ffefbfffffffffffffffeffffffffffffffffffdffffdfeef76d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfe499ef07ffffffffffffffeffffffffffffffffffdffffdfeeeb6d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff7fdfeaddefbfffffffffffffffeffffffffffffffffffdff7fdfefebef07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeaddefbfffffffffffffffeffffffffffffffffffdffffdfecc1ef77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffdfeaddefbfffffffffffffffeffffffffffffffffffdffffdfeeddef77fffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffdffffdfeeddefbbffffffffffffffeffffffffffffffffffdffffdfeeddef77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfc46281c7ffffffffffffffeffffffffffffffffffeffffbff1888223fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffbfffffffffffffffffffffffeffffffffffffffffffeffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7fffffffffffffffffffffffefffffffffffffffffff7fff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffeffffffffffffffffffffffffefffffffffffffffffffbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffdffffffffffffffffffffffffefffffffffffffffffffdffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3ffffffffffffffffffffffffefffffffffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffeffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffefffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffff777ffffffffffbfffffffffffffeffffffffffffffffffff777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6fffffffffffdfffffffffffffeffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffefffffffffffffeffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffff7ffffffffffffeffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000fffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore save 0 190 translate 385 31 scale 72 string /dataStr exch def 0 setgray 575 46 false [575 0 0 46 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 6635 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbeffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffc47fc62007fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbffeeffbb75b7fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbfff5ffbb75b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef7bfffbffbb77bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbfff5ffbb77bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffbfff5ffbb77bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffeeffbb27bffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbefffc47fc78e0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore grestore showpage %%Trailer end %%EndDocument FMENDEPSF 132.25 104.5 515.75 313.5 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "17" 17 %%Page: "18" 18 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (18) 532 42.62 T 0 12 Q 0.91 (Nodes can have from 0 to 7 indices. The zero case is a default of sorts since no indices) 108 712 P 1.12 (need exist in the program. The nodes in the integration example of Section) 108 698 P 1.12 (5.1 used no) 482.76 698 P 2.85 (indices. That program could be improved by dynamically replicating a \050now poorly) 108 684 P 0.67 (named\051 node) 108 670 P 1 F 0.67 (Integ Half) 174.66 670 P 0 F 0.67 (. The resulting program would exploit N-way parallelism where) 227.67 670 P (N is chosen at runtime instead of a \336xed two-way parallel structure.) 108 656 T 0.34 (The arc leaving) 108 630 P 1 F 0.34 (Mult) 186.65 630 P 0 F 0.34 ( implies an iteration. First) 211.98 630 P 1 F 0.34 (S) 340.33 630 P 0.34 (0) 347 628 P 0 F 0.34 ( is done and then) 353 630 P 1 F 0.34 (M) 439.01 630 P 0.34 (i,0) 450.34 627 P 0 F 0.34 ( is performed in) 462.67 630 P 0.24 (parallel for) 108 616 P 1 F 0.24 (i) 164.46 616 P 0 F 0.24 ( = 1..) 167.79 616 P 1 F 0.24 (N) 193.04 616 P 0 F 0.24 (-1. Next) 201.7 616 P 1 F 0.24 (S) 244.5 616 P 0.24 (1) 251.17 614 P 0 F 0.24 ( is done followed by) 257.17 616 P 1 F 0.24 (M) 359.36 616 P 0.24 (i,1) 370.68 613 P 0 F 0.24 ( in parallel for) 383.02 616 P 1 F 0.24 (i) 455.29 616 P 0 F 0.24 ( = 2..) 458.62 616 P 1 F 0.24 (N) 483.87 616 P 0 F 0.24 (-1, and so) 492.53 616 P 0.61 (on. Since the block system size is an input to the program, the number of) 108 602 P 1 F 0.61 (Mult) 470.12 602 P 0 F 0.61 ( nodes to) 495.45 602 P -0.09 (create is not determined until runtime. In addition,) 108 588 P 1 F -0.09 (N) 351.92 588 P 0 F -0.09 ( determines the number of times each) 360.58 588 P (node \336res so this is also not known until runtime.) 108 574 T 0.03 (Some of the nodes in graph) 108 548 P 1 F 0.03 (DoBTS) 242.81 548 P 0 F 0.03 ( have fairly sophisticated \336ring and routing rules. Per-) 280.15 548 P 0.64 (haps it is useful to examine node) 108 534 P 1 F 0.64 (Solve) 272.84 534 P 0 F 0.64 (\325) 300.17 534 P 0.64 (s speci\336cation. Its \336ring rules can be understood) 303.51 534 P 0.11 (by relating them to Figure 9.) 108 520 P 1 F 0.11 (Solve) 248.96 520 P 0 F 0.11 ( \336res the \336rst time in order to perform computation) 276.3 520 P 1 F 0.11 (S) 525.34 520 P 1 9.6 Q 0.09 0.19 (0) 532.01 517 B 0 12 Q 0.11 (.) 537 520 P -0.27 (This computation depends on receiving a block of vector) 108 506 P 1 F -0.27 (b) 381.9 506 P 0 F -0.27 ( from node) 388.57 506 P 1 F -0.27 (DIST) 443.43 506 P 0 F -0.27 (. Hence,) 470.55 506 P 1 F -0.27 (Solve) 512.66 506 P 0 F 0.12 (can \336re when it receives a sub-vector \050piece of a vector\051 on the arc from node) 108 492 P 1 F 0.12 (DIST) 485.08 492 P 0 F 0.12 ( to its) 513.09 492 P 1.45 (input port) 108 478 P 1 F 1.45 (B_FROM_DIST) 160.9 478 P 0 F 1.45 (.) 244.68 478 P 1 F 1.45 (Solve) 252.13 478 P 0 F 1.45 (\336res next repeatedly to perform computations) 283.91 478 P 1 F 1.45 (S) 514.55 478 P 1 9.6 Q 1.25 0.19 (1) 521.23 475 B 0 12 Q 1.45 ( to) 526.22 478 P 1 F 1.85 (S) 108 464 P 1 9.6 Q 1.6 0.19 (N-1) 114.67 461 B 0 12 Q 1.85 (. For this it must receive a sub-vector from one of the) 130.18 464 P 1 F 1.85 (Mult) 411.29 464 P 0 F 1.85 ( nodes on input port) 436.62 464 P 1 F -0.12 (B_FROM_M) 108 450 P 0 F -0.12 (. The node has a \336ring rule for each case. The node is permitted to \336re when) 175.99 450 P (it receives data from either source.) 108 436 T 0.79 (After) 108 410 P 1 F 0.79 (Solve) 137.11 410 P 0 F 0.79 ( \336res to perform) 164.45 410 P 1 F 0.79 (S) 248.27 410 P 1 9.6 Q 0.69 0.19 (k) 254.94 407 B 0 12 Q 0.79 (, it must send sub-vectors for) 260.47 410 P 1 F 0.79 (M) 407.55 410 P 1 9.6 Q 0.69 0.19 (j,k) 418.88 407 B 0 12 Q 0.79 ( for) 430.39 410 P 1 F 0.79 (j) 451.96 410 P 0 F 0.79 ( taking on values) 455.96 410 P 0.64 (from) 108 396 P 1 F 0.64 (k) 134.97 396 P 0 F 0.64 (+1 to) 141.64 396 P 1 F 0.64 (N) 171.02 396 P 0 F 0.64 (-1. It\325) 179.68 396 P 0.64 (s routing rules does just this. V) 206.99 396 P 0.64 (ariable) 358.49 396 P 1 F 0.64 (WhichBlock) 394.78 396 P 0 F 0.64 ( is a counter that) 458.13 396 P 0.68 (holds the value) 108 382 P 1 F 0.68 (k) 185.71 382 P 0 F 0.68 (+1. The routing rule also sends the portion of the solution vector) 192.38 382 P 1 F 0.68 (x) 512.98 382 P 0 F 0.68 ( just) 518.98 382 P (computed to node) 108 368 T 1 F (GA) 196.99 368 T (TH) 214.1 368 T 0 F (.) 231.44 368 T 1 F (Solve) 237.44 368 T 0 F (\325) 264.78 368 T (s speci\336cation follows.) 268.12 368 T 3 10 Q (input_ports { Vector B_FROM_DIST; Vector B_FROM_M; }) 144 349.33 T (output_ports { Vector B_TO_GATH; Vector B_TO_M; }) 144 337.33 T (vars { Vector b; int WhichBlock; }) 144 325.33 T (init_comp {) 144 313.33 T ( WhichBlock = 0;) 144 301.33 T (}) 144 289.33 T (f) 144 265.33 T (iring_rules {) 150 265.33 T ( B_FROM_M -> b => ||) 144 253.33 T ( B_FROM_DIST -> b =>) 144 241.33 T (}) 144 229.33 T (comp {) 144 205.33 T ( solveblock\050WhichBlock, a, b, blk\051;) 144 193.33 T ( WhichBlock = WhichBlock + 1;) 144 181.33 T (}) 144 169.33 T (routing_rules {) 144 145.33 T -0.5 ( TRUE => { B_TO_M[i+WhichBlock] <- copy\050b\051; : \050i N-WhichBlock\051 };) 144 133.33 P ( B_TO_GATH <- b;) 144 121.33 T (}) 144 109.33 T 0 12 Q 0.09 (This CODE program has been run on a 14 processor Sequent Symmetry) 108 84 P 0.09 (. W) 454.47 84 P 0.09 (ith a matrix of) 471.41 84 P -0.19 (size 420 x 420 it shows a speedup measured relative to a straightforward sequential imple-) 108 70 P FMENDPAGE %%EndPage: "18" 18 %%Page: "19" 19 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (19) 532 42.62 T 0 12 Q 0.44 (mentation of 3.5 with 14 processors. A parallel program that was hand-written using low) 108 712 P -0.13 (level parallel primitives shows a speedup of 3.7, so CODE compares well with it. The the-) 108 698 P (oretical maximum speedup of this algorithm is 4.9 with 14 processors.) 108 684 T 1 F (5.5 The HeNCE Language) 108 652 T 0 F 0.47 (Like CODE, the HeNCE language also support additional icons other than the circle that) 108 626 P 1.14 (represents a sequential computation. These new node types represent control structures.) 108 612 P 1.2 (HeNCE has no facility for hierarchical implementation, although there are plans to add) 108 598 P -0.28 (this ability to the language. For now) 108 584 P -0.28 (, HeNCE graphs cannot call other graphs so there is no) 279.2 584 P (need for interface nodes. Figure 13 show all of HeNCE\325) 108 570 T (s icons.) 376.61 570 T 0.08 (All of HeNCE's control \337ow icons work in pairs. One icon begins a construct and another) 108 544 P 0.36 (ends it.The subgraph that appears between the icons is acted upon. For example, the sub-) 108 530 P 1.35 (graph between a loop-begin and a loop-end node is executed repeatedly) 108 516 P 1.35 (, much like the) 464.62 516 P 0.77 (body of a \322C\323 for loop. The loop-begin is annotated with a statement to assign its index) 108 502 P 1.21 (variable an initial value, a termination condition expression, and a statement to give its) 108 488 P (index variable its next value.) 108 474 T 3 10 Q (\050variable = initial_value;) 144 455.33 T (termination_condition;) 150 443.33 T (variable = next_value\051;) 150 431.33 T 0 12 Q (Figure 13. Node Icons in HenCE.) 250.39 204 T -0.13 (Figure 14 shows a HeNCE loop and a static graph that its execution mimics. The loop-end) 108 176 P 0.06 (node \050and all other construct-ending nodes\051 requires no annotation. Notice that there is no) 108 162 P 0.05 (explicit arc back to the start of the loop as \337ow chart would have. HeNCE graphs are acy-) 108 148 P -0.22 (clic. The subgraphs in a HeNCE control construct can contain other control constructs, but) 108 134 P (they must be properly nested.) 108 120 T 0.77 (Conditional node pairs de\336ne an \322if-then\323 structure. The conditional-begin node annota-) 108 94 P 0.34 (tion contains an expression. If the expression evaluates to TRUE \050meaning non-zero, fol-) 108 80 P 108 63 540 720 C 161 226 487 402 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 326 176 326 176 161 225 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/hence-icons.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: hence-icons.eps %%CreationDate: 3/17/94 %%BoundingBox: 0 0 326 176 %%Pages 1 %%DocumentFonts: Symbol %%+Times-Roman %%DocumentNeededFonts: Symbol %%+Times-Roman %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 176 lineto 326 176 lineto 326 0 lineto closepath clip gsave -46 427 translate 1 -1 scale save 49 252 translate 24 22 scale 4 string /dataStr exch def 0 setgray 32 29 false [32 0 0 29 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 243 Hex Bytes imagemask fffffffffffffffffffffffffffffffffff80fffffe003ffffc7f1ffff9ffcffff1ffc7ffe7fff3ffe7fff3ffcffff9ffcffff9ffcffff9ffcffff9ffcffff9ffcffff9ffcffff9ffe7fff3ffe7fff3fff1ffc7fff9ffcffffc7f1ffffe003fffff80fffffffffffffffffffffffffffffffffff %%EndData restore save 46 276 translate 28 32 scale 5 string /dataStr exch def 0 setgray 37 43 false [37 0 0 43 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 441 Hex Bytes imagemask fffffffffffffffffffffffffffffffff0001ffeffc00007fcff87ffc3fcff9ffff3fcff1ffff1fcff3ffff9feff20fff9ffff01fff9ffff03fff9ffff07fff9ffff1ffff9ffff3ffff9ffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff3ffff9ffff3ffff1ffff3fffe1ffff3fffc1ffff3fff81ffff3fff09ffff3ffff9ffff1ffff1ffff9ffff3ffff87ffc3ffffc00007fffff0001fffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore save 50 311 translate 21 43 scale 4 string /dataStr exch def 0 setgray 28 57 false [28 0 0 57 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 467 Hex Bytes imagemask fffffffffffffffffffffffffffffffffffffffffff3ffffffe1ffffffe1fffffff3fffffffffffffffffff7fff3fffffff3fff3fff1fffffff9fff3fff8fffffffc7ff1fffe3fffffff1ff9ffff9ffffe7f9ff9fe7f9ffffe7f9ff9ff1e3fffff003ff9ffc0fffffffffff9fffffffffffffff9ffffffffff81fff9fe007ff7fe3c7ffffcff3ffffcff3ffffcff3fffffff3ffffffe3ffffffc7ffffff8fffffff1fffffff3ffffffe3ffffffe7ffffffe7ffffffffffffffffffffffe7ffffffc3ffffffc3ffffffe7fffffffffffffffffffdfffffffffffffff9fffffffffffffff1 %%EndData restore save 48 353 translate 22 39 scale 4 string /dataStr exch def 0 setgray 29 52 false [29 0 0 52 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 427 Hex Bytes imagemask fffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff8fffffff8fffffff27ffffff27fffffe73fffffe73ffbffcf9fffffcf9ffbff9fcfffff9fcff9ff3fe7ffff3fe7f9fe6033fffe0003f9fc0f81fffc7ff1f9fffffffffffffff9fffffffffffffff9fffffffffffffff9fc7ff1fffc0f81f9fe0003fffe6033ffff3fe7ffff3fe7ffff9fcfffff9fcfffffcf9fffffcf9fffffe73fffffe73ffffff27ffffff27ffffff8fffffff8fffffffdffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore save 47 394 translate 28 28 scale 5 string /dataStr exch def 0 setgray 37 37 false [37 0 0 37 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 381 Hex Bytes imagemask fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000ffff800000ffff9ffffcffef9ffffcffcf9ffffcffff9ffffcffff9ffffcffff9ffffcffcf9ffffcffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffffcffff9ffffcffff9ffffcffff9ffffcffff9ffffcffff9ffffcffff9ffffcffff800000ffff800000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore /Times-Roman findfont 12 scalefont setfont gsave 80 268 translate 1 -1 scale 0 0 moveto 0 setgray (Sequential Computation.)show grestore gsave 79 290 translate 1 -1 scale 0 0 moveto 0 setgray (Loop Begin and End - Enclosed subgraph is iterated over an )show grestore gsave 79 302 translate 1 -1 scale 0 0 moveto 0 setgray (index range such as i = 0 TO N.)show grestore gsave 78 330 translate 1 -1 scale 0 0 moveto 0 setgray (Conditional Begin and End - Enclosed subgraph is )show grestore gsave 78 342 translate 1 -1 scale 0 0 moveto 0 setgray (executed only if an expression evalutes to TRUE.)show grestore gsave 77 366 translate 1 -1 scale 0 0 moveto 0 setgray (Parallel Replication (Fan) Begin and End - Enclosed )show grestore gsave 77 378 translate 1 -1 scale 0 0 moveto 0 setgray (subgraph is replicated such that all copies execute in parallel. )show grestore gsave 77 390 translate 1 -1 scale 0 0 moveto 0 setgray (Copies are indexed as in i = 0 TO N. )show grestore gsave 77 408 translate 1 -1 scale 0 0 moveto 0 setgray (Pipeline Begin and End - Enclosed subgraph is replicated to )show grestore gsave 77 420 translate 1 -1 scale 0 0 moveto 0 setgray (form a pipeline with indexed stages.)show grestore newpath 47.5 251.5 moveto 371.5 251.5 lineto 371.5 425.5 lineto 47.5 425.5 lineto 47.5 251.5 lineto closepath 0 setgray 1 setlinewidth stroke newpath 47.5 273.5 moveto 371.5 273.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 47.5 310.5 moveto 371.5 310.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 47.5 353.5 moveto 371.5 353.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 47.5 394.5 moveto 371.5 394.5 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap grestore showpage %%Trailer end %%EndDocument FMENDEPSF 161.5 226.5 486.5 401.5 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "19" 19 %%Page: "20" 20 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (20) 532 42.62 T 0 12 Q 4.46 (lowing the C language convention\051, the subgraph between the pairs is executed.) 108 712 P (Otherwise, it is not. HeNCE does not contain an \322if-then-else\323 structure.) 108 698 T (Figure 14. HeNCE Loop and Fan Constructs.) 222.22 487 T 0.93 (Fan node pairs create parallel structures. They replicate the subgraph between them and) 108 459 P 1.26 (evaluate the replications in parallel. Figure 14 shows the ef) 108 445 P 1.26 (fect of a fan. The fan-begin) 402.42 445 P (node's annotation consists of an index statement.) 108 431 T 3 10 Q (IndexVar = StartValue TO EndValue;) 144 412.33 T 0 12 Q 0.5 (IndexV) 108 387 P 0.5 (ar takes on a dif) 142.66 387 P 0.5 (ferent value in each of the replicated subgraphs. In this way) 221.07 387 P 0.5 (, each) 511.52 387 P (replication has a unique index.) 108 373 T 1.57 (Pipe node pairs create a pipeline structure. The subgraph within the pipe is replicated,) 108 347 P -0.29 (somewhat like a Fan node, but the dependence structure dif) 108 333 P -0.29 (fers in a manner that is inspired) 390.44 333 P (by pipelines. Pipe constructs are rarely used.) 108 319 T 0.57 (HeNCE programs run on a collection of UNIX workstations on a common network. The) 108 293 P 0.58 (workstations need not all be of them same type or even made by the same manufacturer) 108 279 P 0.58 (.) 537 279 P 2.17 (The capabilities and speeds of such a heterogeneous collection of machines can very) 108 265 P 0.93 (widely) 108 251 P 0.93 (. HeNCE graphs are converted into programs which run under the PVM message) 139.88 251 P (passing library [Gei93]. PVM is designed to be used directly by programmers as well.) 108 237 T 0.47 (The names of all of the workstations must be listed in the window segment labeled \322V) 108 211 P 0.47 (ir-) 528.67 211 P 0.17 (tual Machine\323 \050see Figure 16\051. The programmer also lists estimates of the cost of running) 108 197 P 1.03 (each of the program\325) 108 183 P 1.03 (s sequential procedures on each of the machines. HeNCE uses this) 210.74 183 P (information to make intelligent choices about where to run nodes.) 108 169 T -0.22 (During execution, the utilization of the hosts in the virtual machine is displayed in the host) 108 143 P 0.74 (utilization strip chart at the bottom right of the window) 108 129 P 0.74 (. The horizontal axis is time, and) 378.23 129 P 0.21 (there is a horizontal bar for each host which is divided into segments with colors that sig-) 108 115 P 0.87 (nify the state of the host. Figure 15 shows a case in which total utilization is poor since) 108 101 P (only one processor is running most of the time.) 108 87 T 108 63 540 720 C 140.5 509 507.5 668 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 357 153 357 153 150.5 514 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/loop-fan.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: loop-fan.eps %%CreationDate: 3/22/94 %%BoundingBox: 0 0 357 153 %%Pages 1 %%DocumentFonts: Symbol %%+Times-Roman %%DocumentNeededFonts: Symbol %%+Times-Roman %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 153 lineto 357 153 lineto 357 0 lineto closepath clip gsave -33 196 translate 1 -1 scale newpath 36 94 moveto 47 94 lineto 48 95 lineto 48 95 lineto 49 96 lineto 49 97 lineto 50 97 lineto 50 103 lineto 49 103 lineto 49 98 lineto 48 97 lineto 48 97 lineto 48 96 lineto 47 96 lineto 46 95 lineto 37 95 lineto 36 96 lineto 35 96 lineto 35 97 lineto 35 97 lineto 34 98 lineto 34 99 lineto 35 100 lineto 35 99 lineto 38 99 lineto 36 102 lineto 35 102 lineto 33 104 lineto 33 97 lineto 34 97 lineto 34 96 lineto 35 95 lineto 35 95 lineto 36 94 lineto closepath 0 setgray eofill newpath 36 94 moveto 47 94 lineto 48 95 lineto 48 95 lineto 49 96 lineto 49 97 lineto 50 97 lineto 50 103 lineto 49 103 lineto 49 98 lineto 48 97 lineto 48 97 lineto 48 96 lineto 47 96 lineto 46 95 lineto 37 95 lineto 36 96 lineto 35 96 lineto 35 97 lineto 35 97 lineto 34 98 lineto 34 99 lineto 35 100 lineto 35 99 lineto 38 99 lineto 36 102 lineto 35 102 lineto 33 104 lineto 33 97 lineto 34 97 lineto 34 96 lineto 35 95 lineto 35 95 lineto 36 94 lineto closepath 0 setgray 1 setlinewidth stroke newpath 51 141 moveto 51 148 lineto 50 149 lineto 50 149 lineto 49 150 lineto 49 150 lineto 48 151 lineto 37 151 lineto 36 150 lineto 36 150 lineto 35 149 lineto 35 149 lineto 34 148 lineto 34 142 lineto 35 142 lineto 35 147 lineto 36 148 lineto 36 149 lineto 36 149 lineto 37 149 lineto 38 150 lineto 47 150 lineto 48 149 lineto 49 149 lineto 49 149 lineto 49 148 lineto 50 147 lineto 50 146 lineto 49 145 lineto 49 146 lineto 46 146 lineto 51 141 lineto closepath 0 setgray eofill newpath 51 141 moveto 51 148 lineto 50 149 lineto 50 149 lineto 49 150 lineto 49 150 lineto 48 151 lineto 37 151 lineto 36 150 lineto 36 150 lineto 35 149 lineto 35 149 lineto 34 148 lineto 34 142 lineto 35 142 lineto 35 147 lineto 36 148 lineto 36 149 lineto 36 149 lineto 37 149 lineto 38 150 lineto 47 150 lineto 48 149 lineto 49 149 lineto 49 149 lineto 49 148 lineto 50 147 lineto 50 146 lineto 49 145 lineto 49 146 lineto 46 146 lineto 51 141 lineto closepath 0 setgray 1 setlinewidth stroke newpath 42 123 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 42.5 149.5 moveto 42.5 133 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 45.64276 138.78552 moveto 42.5 132.5 lineto 39.35724 138.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 42.5 113.5 moveto 42.5 97 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 45.64276 102.78552 moveto 42.5 96.5 lineto 39.35724 102.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 42 174 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 42.5 164.5 moveto 42.5 153 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 45.64276 158.78552 moveto 42.5 152.5 lineto 39.35724 158.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 42.5 93.5 moveto 42.5 82 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 45.64276 87.78552 moveto 42.5 81.5 lineto 39.35724 87.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 42 72 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke /Times-Roman findfont 12 scalefont setfont gsave 40 126 translate 1 -1 scale 0 0 moveto 0 setgray (a)show grestore newpath 150 187 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 150.5 177.5 moveto 150.5 166 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 153.64276 171.78552 moveto 150.5 165.5 lineto 147.35724 171.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 150 156 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 150.5 146.5 moveto 150.5 135 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 153.64276 140.78552 moveto 150.5 134.5 lineto 147.35724 140.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 150 125 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 150.5 115.5 moveto 150.5 104 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 153.64276 109.78552 moveto 150.5 103.5 lineto 147.35724 109.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 150 94 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 150.5 84.5 moveto 150.5 73 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 153.64276 78.78552 moveto 150.5 72.5 lineto 147.35724 78.78552 lineto 1 setlinewidth strokepath 0 setgray fill newpath 150 63 8.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke gsave 148 98 translate 1 -1 scale 0 0 moveto 0 setgray (a)show grestore gsave 148 128 translate 1 -1 scale 0 0 moveto 0 setgray (a)show grestore gsave 148 159 translate 1 -1 scale 0 0 moveto 0 setgray (a)show grestore gsave 57 149 translate 1 -1 scale 0 0 moveto 0 setgray (\(i = 0;)show grestore gsave 57 161 translate 1 -1 scale 0 0 moveto 0 setgray ( i < 3;)show grestore gsave 57 173 translate 1 -1 scale 0 0 moveto 0 setgray ( i = i + 1\);)show grestore gsave 163 160 translate 1 -1 scale 0 0 moveto 0 setgray (i = 0)show grestore gsave 163 129 translate 1 -1 scale 0 0 moveto 0 setgray (i = 1)show grestore gsave 163 98 translate 1 -1 scale 0 0 moveto 0 setgray (i = 2)show grestore /Times-Roman findfont 36 scalefont setfont gsave 96 133 translate 1 -1 scale 0 0 moveto 0 setgray (=)show grestore /Times-Roman findfont 12 scalefont setfont gsave 55 56 translate 1 -1 scale 0 0 moveto 0 setgray (Loop Expansion)show grestore newpath 233 90 moveto 233 91 lineto 233 92 lineto 234 92 lineto 234 93 lineto 235 94 lineto 235 95 lineto 236 96 lineto 236 97 lineto 237 97 lineto 237 98 lineto 237 99 lineto 237 100 lineto 238 101 lineto 238 101 lineto 239 102 lineto 239 103 lineto 237 103 lineto 237 102 lineto 235 102 lineto 234 101 lineto 231 101 lineto 230 102 lineto 228 102 lineto 228 103 lineto 226 103 lineto 226 102 lineto 227 101 lineto 227 101 lineto 228 100 lineto 228 99 lineto 228 98 lineto 228 97 lineto 229 97 lineto 229 96 lineto 230 95 lineto 230 94 lineto 231 93 lineto 231 92 lineto 232 92 lineto 232 91 lineto 233 90 lineto closepath 0 setgray 1 setlinewidth stroke newpath 226 136 moveto 228 136 lineto 228 137 lineto 230 137 lineto 231 138 lineto 234 138 lineto 235 137 lineto 237 137 lineto 237 136 lineto 239 136 lineto 239 137 lineto 238 138 lineto 238 138 lineto 237 139 lineto 237 140 lineto 237 141 lineto 237 142 lineto 236 143 lineto 236 143 lineto 235 144 lineto 235 145 lineto 234 146 lineto 234 147 lineto 233 147 lineto 233 148 lineto 233 149 lineto 232 148 lineto 232 147 lineto 231 147 lineto 231 146 lineto 230 145 lineto 230 144 lineto 229 143 lineto 229 143 lineto 228 142 lineto 228 141 lineto 228 140 lineto 228 139 lineto 227 138 lineto 227 138 lineto 226 137 lineto 226 136 lineto closepath 0 setgray 1 setlinewidth stroke newpath 233 120 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 233.5 137.5 moveto 233.5 128 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 236.2142 132.78555 moveto 233.5 127.5 lineto 230.7858 132.78555 lineto 1 setlinewidth strokepath 0 setgray fill newpath 233.5 112.5 moveto 233.5 103 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 236.2142 107.78555 moveto 233.5 102.5 lineto 230.7858 107.78555 lineto 1 setlinewidth strokepath 0 setgray fill newpath 233.5 89.5 moveto 233.5 80 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 236.2142 84.78555 moveto 233.5 79.5 lineto 230.7858 84.78555 lineto 1 setlinewidth strokepath 0 setgray fill newpath 233.5 160.5 moveto 233.5 151 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 236.2142 155.78555 moveto 233.5 150.5 lineto 230.7858 155.78555 lineto 1 setlinewidth strokepath 0 setgray fill newpath 233 72 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 233 168 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 335 157 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 335 91 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 304 122 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 366 121 6.5 0 360 arc closepath 0 setgray 1 setlinewidth stroke newpath 308.5 117.5 moveto 329.14644 96.85356 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 327.68176 102.15674 moveto 329.5 96.5 lineto 323.84326 98.31824 lineto 1 setlinewidth strokepath 0 setgray fill newpath 361.5 116.5 moveto 340.85356 95.85356 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 346.15674 97.31824 moveto 340.5 95.5 lineto 342.31824 101.15674 lineto 1 setlinewidth strokepath 0 setgray fill newpath 330.5 152.5 moveto 309.82162 127.88287 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 314.97829 129.80156 moveto 309.5 127.5 lineto 310.82146 133.29332 lineto 1 setlinewidth strokepath 0 setgray fill newpath 340.5 152.5 moveto 361.18585 126.88896 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 360.29063 132.31709 moveto 361.5 126.5 lineto 356.0677 128.90651 lineto 1 setlinewidth strokepath 0 setgray fill gsave 323 128 translate 1 -1 scale 0 0 moveto 0 setgray (* * *)show grestore /Times-Roman findfont 36 scalefont setfont gsave 259 131 translate 1 -1 scale 0 0 moveto 0 setgray (=)show grestore /Times-Roman findfont 12 scalefont setfont gsave 261 58 translate 1 -1 scale 0 0 moveto 0 setgray (Fan Expansion)show grestore gsave 242 153 translate 1 -1 scale 0 0 moveto 0 setgray (i = 0 TO N)show grestore gsave 291 110 translate 1 -1 scale 0 0 moveto 0 setgray (i = 0)show grestore gsave 361 110 translate 1 -1 scale 0 0 moveto 0 setgray (i = N)show grestore grestore showpage %%Trailer end %%EndDocument FMENDEPSF 141 509.5 507 667.5 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "20" 20 %%Page: "21" 21 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (21) 532 42.62 T 0 12 Q (Figure 15. HeNCE Host Utilization Strip Chart.) 216.21 614 T 0.61 (HeNCE also changes the colors and shapes of the icons in the graph during execution to) 108 586 P 0.54 (animate the state of the computation as it runs. Furthermore, this information is captured) 108 572 P (in a trace \336le and can be replayed after the program\325) 108 558 T (s execution is complete.) 358.58 558 T 1 F (HeNCE Block T) 108 530 T (riangular Solver) 190.45 530 T 0 F 1.03 (The block triangular solver can also be expressed in HeNCE, and in some respects it is) 108 504 P 0 (simpler in HenCE than it is in CODE. The program is shown in Figure 16. This \336gure is a) 108 490 P 0.16 (screen dump which shows the entire HeNCE window as well as the segment in which the) 108 476 P (graph is drawn.) 108 462 T (Figure 16. HeNCE Block T) 202.43 115 T (riangular Solver Program.) 334.34 115 T -0.07 (Execution begins with node) 108 87 P 1 F -0.07 (GetSys) 244.38 87 P 0 F -0.07 ( running. This node declares the matrix) 280.39 87 P 1 F -0.07 (a) 471.21 87 P 0 F -0.07 ( and vector) 477.21 87 P 1 F -0.07 (b) 533.33 87 P 0 F 0.77 (as well as other variables needed. All are made available to all successor nodes.) 108 73 P 1 F 0.77 (GetSys) 504 73 P 108 63 540 720 C 134 636 514 708 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Host:) 144 662 T (betty) 183 667 T (wilma) 183 655 T 221 652 501 676 R 0.5 H 2 Z N 221 664 501 664 2 L N (0) 225 642 T (10 secs) 473 642 T 221 666 308 674 R V N 221.25 654 288 662 R 4 X V 0 X N 308.25 666 375 674 R 4 X V 0 X N 287 654 436 662 R V N 436 654 497 662 R 4 X V 0 X N 374.75 666 481.75 674 R V N 481.75 666 496.75 674 R 4 X V 0 X N 166.25 692 211 700 R 4 X V 0 X N 294.25 691 339 699 R V N (Idle) 146 693 T (Running) 251 692 T (Etc....) 376 692 T 408.25 692 453 700 R N 134.5 636.5 513.5 707.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C 108 63 540 720 C 115.25 137 532.75 432 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 420 294 420 294 114 138 FMBEGINEPSF %%BeginDocument: /a/ig/leather/homes/newton/visual_par_prog/Figures/bts_hence.epsf %!PS-Adobe-2.0 EPSF-1.2 %%Creator: SuperPaint %%Title: bts_hence.eps %%CreationDate: 3/20/94 %%BoundingBox: 0 0 420 294 %%Pages 1 %%DocumentFonts: Symbol %%+Times-Roman %%DocumentNeededFonts: Symbol %%+Times-Roman %%DocumentProcSets: BeachHead 1 0 %%DocumentSuppliedProcSets: BeachHead 1 0 %%BeginProcSet: BeachHead 1 0 % BeachHead - v1 Copyright 1991 Silicon Beach Software, inc. userdict begin/BeachHead 100 dict def BeachHead end begin /BeachHead_version 1 def/c 75 string def/oldmatrix 6 array def/newmatrix 6 array def/a{bind def}bind def/b{exch def}a /_doTexturePat false def/nulld{counttomark{null def}repeat pop}a mark/l/m/o/q/r/u/v/w/x/y/z/A /B/D/E/F/G/H/I/J/K/M/N/O/P/Q/R/S/T/V/W/X/Y/ba/ca/da/ea/fa/ga/ha/ia/ja/ka/la/ma/_strtxtmatrix nulld /d{0 1 74{c exch 0 put}for dup c cvs pop c}a/e{d 74 1 put}a/f{d 74 2 put}a/g{d 73 1 put}a /h{d 72 1 put}a/i{d 71 1 put}a/j{1 currentrgbcolor 1 index eq 3 1 roll eq and{currentgray sub}if setgray}a /k{/FontInfo 2 dict def FontInfo /FullName c dup length string copy put FontInfo/UnderlinePosition 100 l/FontInfo known{l/FontInfo get/UnderlinePosition known{pop l/FontInfo get/UnderlinePosition get }if}if put/m 1 string def/FontBBox[0 0 1 1]def/FontType 3 def/Encoding l/Encoding get def}a /n{/o 13 dict def o begin/l b k/_isSBShadowFont l/_isSBShadowFont known{l/_isSBShadowFont get} {false}ifelse def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show end}def}a/p{/o 16 dict def o begin/q b/r b/l b/FontMatrix[1 0 0 1 0 0]def k}a/s{exch begin m 0 3 -1 roll put l setfont m stringwidth FontMatrix 0 get dup 20 le{pop 1 index 0 ne{exch q add exch}if }{40 le{1 index 0 ne{exch q 2 div add exch}if}if}ifelse setcharwidth 0 0 moveto gsave}a /t{dup length 1 add dict/o b dup{1 index/FID ne 2 index/UniqueID ne and{o 3 1 roll put} {pop pop}ifelse}forall o begin/PaintType 2 def/StrokeWidth 12 def end/_ o definefont}a /findoutlinefont{userdict/BeachHead get begin e FontDirectory c known{pop c findfont} {findfont t .02 p/_isSBShadowFont false def/BuildChar{userdict/BeachHead get begin s j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a /findshadowfont{userdict/BeachHead get begin f FontDirectory c known{pop c findfont}{findfont t .05 p/_isSBShadowFont true def/BuildChar{userdict/BeachHead get begin s q dup neg rmoveto m show grestore gsave j m show grestore gsave r setfont m show grestore end end}def end c o definefont}ifelse end}a/addheavy{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get h pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def /BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth exch .02 add exch setcharwidth 0 0 moveto m show .04 0 moveto m show end}def end c o definefont}ifelse}if}if end}a /addoblique{userdict/BeachHead get begin dup/FontInfo known{dup/FontInfo get/FullName known {dup/FontInfo get/FullName get g pop FontDirectory c known{pop c findfont}{n/FontMatrix[1 0 .17 1 0 0]def end c o definefont}ifelse}if}if end}a/adduline{userdict/BeachHead get begin dup/FontInfo known {dup/FontInfo get/FullName known{dup/FontInfo get/FullName get i pop FontDirectory c known {pop c findfont}{n/FontMatrix[1 0 0 1 0 0]def/BuildChar{exch begin m 0 3 -1 roll put l setfont m stringwidth setcharwidth 0 0 moveto m show .05 setlinewidth 0 setlinecap FontInfo/UnderlinePosition get 1000 div dup 0 exch moveto 0 exch m stringwidth 3 -1 roll add 3 1 roll add exch lineto stroke end}def end c o definefont}ifelse}if}if end}a /EPSBegin{save userdict/BeachHead get begin/la b count/ma b userdict/showpage{}put end 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}a /EPSEnd{userdict/BeachHead get begin count ma sub dup 0 gt{{pop}repeat}{pop}ifelse la end restore}a /cimage{userdict/BeachHead get begin{{readstring}}{{readhexstring}}ifelse/u b/colorimage where {pop 4 index dup string/v b dup string/w b dup string/x b dup string/y b string/z b {currentfile v u pop}{currentfile w u pop}{currentfile x u pop}{currentfile y u pop currentfile z u pop pop}5 -1 roll{true 4 A}{true 4/colorimage load exec}ifelse}{4 index dup string/z b 4 mul string/B b{currentfile B u pop pop currentfile z u pop} exch{transimage}{/image load exec}ifelse}ifelse end}a/C{D{gsave E F 3 index idtransform translate G 1 4 index 4 index{H}/image load exec grestore/I 0 def/G 0 def/D false def}if}a /transimage{userdict/BeachHead get begin 2 index 8 ne{/image load exec}{4 index cvi string /H b/J 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 5 index 1 sub{/F b 0 1 6 index 1 sub {K J length ge{1 index dup type/stringtype ne{exec}if/J b/K 0 def}if J K get/K K 1 add def dup 255 eq{pop pop C}{H I 3 -1 roll put/I I 1 add def/G G 1 add def D not{/E b/G 1 def /D true def}{pop}ifelse}ifelse}for C}for 5{pop}repeat}ifelse end}a/L{D{gsave E F 8 index idtransform translate I 1 8 9 index{M}{N}{O}{P}true 4/colorimage load exec grestore/I 0 def /D false def}if}a/A{9 index cvi dup string/M b dup string/N b dup string/O b string/P b /Q 0 string def/K 0 def/D false def/I 0 def/G 0 def 0 1 10 index 1 sub{/F b 0 1 11 index 1 sub {K Q length ge{6 index exec/R b 5 index exec/S b 4 index exec/T b 3 index exec/Q b/K 0 def }if R K get S K get T K get Q K get/K K 1 add def dup 0 eq 2 index 0 eq and 3 index 0 eq and 4 index 0 eq and{5{pop}repeat L}{M I 6 -1 roll put N I 5 -1 roll put O I 4 -1 roll put P I 3 -1 roll put/I I 1 add def D not{/E b/D true def}{pop}ifelse}ifelse}for L}for 10{pop}repeat}a /bps 8 string def/bpm[8 0 0 8 0 0]def/bpp{bps}def /overlaybackpat{userdict/BeachHead get begin gsave setrgbcolor bps copy pop dup 0 get 8 div floor cvi 8 mul 1 index 2 get 8 div floor cvi 8 mul 2 index 1 get 8 div floor cvi 8 mul 8 4 index 3 get 8 div floor cvi 8 mul{2 index 8 3 index{1 index gsave translate 8 8 scale 8 8 false bpm/bpp load imagemask grestore}for pop}for pop pop pop grestore end}a /U{userdict/BeachHead get begin/V b/W b countdictstack save V 2 add 2 roll count V sub /X b /W load end{exec}stopped userdict/BeachHead get begin/Y b count X sub{pop}repeat Y 3 1 roll restore countdictstack exch sub{end}repeat end}a/Z( )def/aa{moveto{ba setfont Z end gsave 0 setgray stringwidth grestore userdict/BeachHead get begin rmoveto/ca load null ne{/da da 1 add def da ea length le{fa ea da get ca}if}{ax ay rmoveto fa ga eq{cx cy rmoveto}if}ifelse}stopped currentdict userdict/BeachHead get ne{userdict/BeachHead get begin}if}a /filltextpath{userdict/BeachHead get begin/ea b dup type dup/integertype eq exch/realtype eq or {/ay b/ax b/ga b/cy b/cx b/ca null def}{/ca b}ifelse/ha b/ia b ia{currentfont/_isSBShadowFont get {gsave 0 setgray/ca load null ne{/ca load ea kshow}{cx cy ga ax ay ea awidthshow}ifelse grestore}if}if gsave currentfont ia{begin r FontMatrix makefont l FontMatrix makefont end }{null exch}ifelse/ja b/ka b/ba currentfont def _doTexturePat{systemdict/makepattern known} {false}ifelse{matrix currentmatrix _strtxtmatrix null ne{_strtxtmatrix setmatrix}if 1 -1 scale txTrnsX txTrnsY translate settexturepat setmatrix/da 0 def ea{/fa b Z 0 fa put ja setfont currentpoint Z show aa{exit}if}forall}{10 setlinewidth/da 0 def currentpoint newpath 0 dup dup dup moveto lineto closepath moveto ea{/fa b Z 0 fa put currentpoint ja setfont count 1 add dup 1 roll Z true{charpath}stopped count count -1 roll sub{pop}repeat currentpoint{ha}0 U pop newpath 0 dup dup dup moveto lineto closepath moveto aa{exit}if}forall}ifelse grestore ka null ne{gsave 0 setgray/da 0 def ea{/fa b Z 0 fa put ka setfont currentpoint Z show aa{exit}if}forall grestore}if /_doTexturePat false def/_strtxtmatrix null def end}a end %%EndProcSet %%EndProlog %%BeginSetup userdict/BeachHead get begin %%EndSetup %%Page One 1 newpath 0 0 moveto 0 294 lineto 420 294 lineto 420 0 lineto closepath clip gsave -9 299 translate 1 -1 scale newpath 9 5 moveto 429 5 lineto 429 299 lineto 9 299 lineto 9 5 lineto closepath 1 setgray eofill save 9 5 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000f7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000000000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000000000000000000000000000000000000000000000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc7ffc3e3871e3fff1ffffffc7fff80fe03fffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc7ffc1e38f8e3fff1ffffffc7fff1c7e23fffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc7c3c0e30f8e3ffe0787f87c7e381c7c71fffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc701c4e31ffe3ffe0601e01c7e38fc7c71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fe3fffffff99fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff800718c4631ffe00ff1e31e31c7e38f8fc71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fcffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff80063cc6631ffe00ff1c78c78c7f11e0fc71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe498619111c309864ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc600c6231ffe3fff1c78c78c7f11c1fc71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe44ccc80cc99993227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc600c7230f8e3fff1c78c78c7f1187fc71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4cccc8cccf9993267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc63fc7838f8e3fff1c78c78c7f838ffc71fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4cccc9cccc1993267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff1fffff8fc718c783871e3fff1e31e31c7f831fe623fffff8f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4cccc9ccc99993267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000000000000000000000000000000000000000000000f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4cccc9ccc99913267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000000000000000000000000000000000000000000000f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4cce19cccc4c98667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000000000000000000000000000000000000000000000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffe7ffffffffffffffffffffffffffffffffffffffff7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffe7ffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffe7ffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff923e3f070f3fc7c792393f1f0f0fffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff889c9e46673f839388989e4e2667ffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce667ff3b399999cce67e67ffffffffffffffffffff7bfff73efffeffffffffffffffeffffffc7ffffffbffff7ffffff7fffffff3d6fffffffebf7fffeffffcfb01befbf7fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce607ff3f399999cce70e07ffffffffffffffffffff7bfff73efffefffc0fffffffffeffffffb7fff7ffbffff7fffff77ffffffefd6fffffffebf7fffeffffcfb7fbefbf7fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce67fff3f399999cce7c67fffffffffffffffffffff7bfff75efffefffdfffffffffffffffffbffff7ffbffff7fffff7fffffffefd6fffffffebf7fffeffffd7b7fbd7bf7fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce67fff3b399999cce7e67fffffffffffffffffffff7bfff76ee1e2e1fdfdf7761d28ed1e2df169861f8b878770e986170e8ff0c7fe8ffef68fff70f0eee1fdbb7fdd77f770df3bb0e98bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff999c9e46273f839399989e4e2627ffffffffffffffffffff7bfff76eccccccfdfdf774cce66ccccdfb677b7f333333666733766667e66ffe67fef667ff66666ddefdbb7fdd77f6e65f3ba66733ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff999e3f270f3fc7c799983f1f0f0fffffffffffffffffffff7bfff776dededefc1ff777edef6dedeffb6f7f7f7b7b7f7f6ffb76f6f7ef6ffef7fef6f7ff7f6febdffddb03dd77f5ef6ebbaf6f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff9ffffffffffffffffffffffffffff7bfff776dedec0ffeffb6e0def6dedeffb6f877f7b037f706f8376f6f7ef6ffef7fef6f7ff706fe7e1fddb7febaff3e06edb6f6f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff9ffffffffffffffffffffffffffff7bfff77adededfffeffb6cedef6dedeffb6ff37f7b7f7f676f3b76f6f7ef6ffef7fef6f7ff676febfcfdeb7febaff5eff6db6f6f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff9ffffffffffffffffffffffffffff7bfff77adededffdeffaadedef6dedeffb6ffb7f7b7f7b6f6f7b76f6f7ef6ffef7fef6f7ff6f6f6dfefdeb7febaff6eff5d56f6f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff77cccccccfdedfddccdef6deccdfb6f7b7f333333666f337666f7e66ffe67fe6667ff66666edefdf37ff7dff76679eee66f33ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff77ce1e2e1fe1dfdde25ef6dee2dfb6f879f8b8787712f89970ef7f0effe8fff168fff7130ef61fdf301f7dff7b0fbeef0ef8bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7fffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7fffffffffffffffffffffffe1ffffffffffffffffffffffffffffffffffc03feffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffccfffffffffffffff9ffffffe7fffffffffffffffffffff7bfff703ffb7f7fffffffdffffffffffffffdffcffff7ffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffccffffff3ffffffff9fcffffe7fffffffffffffffffffff7bfff779ffb7f7fffffdddffffffffffffffdffbffff6fffffffeffffffdfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffcfffffff3ffffffff9fcffffe7fffffffffffffffffffff7bfff77dfff7f7fffffddfffffffffffffffdffbffff6fffffffeffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffe0cc987c60e3c8799f83830ffe478723e3c3ffffffffffff7bfff77dbdb716fe1e1805a3c5fbda3fc3fc5c31877b43f0f0f0c3e99e18529cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc8cc133833c9c0799f89ce27fe233311c199ffffffffffff7bfff77dbdb666fdeccddd9999fbd99f99f9999b337b6fe6666f6fe66ccdceddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cccf333b39ccf33ff9cce7ffe7333399d99ffffffffffff7bfff703bdb6f7fdfdedddbdbdfbdbdffdfbdbdbfb7b6fefef6fefeeefeddeebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cccf033f39ccf33ff9ccf0ffe7303399f81ffffffffffff7bfff77dbdb6f7fe1c0dddbdbdfbdbdfc1fbd81b837b6fefef70efeeee0ddef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cccf3f3f39ccfb7ff9ccfc7fe733f399f9fffffffffffff7bfff77dbdb6f7ffcdfdddbdbdfbdbdf9dfbdbfb3b7b6fefef7e6feeeceddef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cccf3f3b39ccf87ff9ccfe7fe733f399d9fffffffffffff7bfff77dbdb6f7ffedfdddbdbdfbdbdfbdfbdbfb7b7b6fef6f7f6feeededdeebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc8ccf13832c9cfcf9f89ca27fe731339c189ffffffffffff7bfff77d99b666fdeccdddbd99f9999f99f9999b33336fe6666f6feeeccddeddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffe4ccf87c79e3cfcf9f93e70ffe738739e3c3ffffffffffff7bfff703c5b716fe1e1e65bdc5fc5a3fc4fc5c3b898b73f0f0f0f3eeee265e9cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffcfffffffffffffffffffffffffffffffff7bfff7fffffffffffffffffffdfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff9fffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffff99fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff1ffffffffc03ffffffffffffffffffffff7b5557ffffffffffffffffffc3fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7dfffffffdffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557bffbfffddffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7bffbfffdfffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b55577c30c3a05a3c5fa3bda67ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77bdb999dd9999f99bd99bffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffff9fffe7ffffffffffffffffffffffffffffffffff7b55577bfbfdbddbdbdfbdbdbbbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffff9fffe7f3ffffffffffffffffffffffffffffffff7aaab77c3bc1bddbdbdfbddbbbbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffff9fffe7f3ffffffffffffffffffffffffffffffff7b55577f9b9dbddbdbdfbddbbbbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffe2c9872791e7e0e0c3fe2c9fffffffffffffffffffffffff7aaab77fdbbdbddbdbdfbddbbbbffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc8c1331388e7e27389fc8c1fffffffffffffffffffffffff7b55577bdb99bddbd99f99e7bbb6deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9ccff3399cffe7339ff9ccffffffffffffffffffffffffff7aaab77c3cc4be5bdc5fa3e7bbb6deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9ccf83399cffe733c3f9ccffffffffffffffffffffffffff7b5557bfffffffffffdfbffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9ccf33399cffe733f1f9ccffffffffffffffffffffffffff7aaab7bffffffffff99fbffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9ccf33399cffe733f9f9ccffffffffffffffffffffffffff7b5557dffffffffffc3fbffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc8cf03139ce7e272899c8cffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffe0cf89079ce7e4f9c39e0cffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffcffff3fffffffffffffcfffffffffffffffffffffffffff7aaab7dbfffb7f7fffffffffdfffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff98ffff3ffffffffffff98fffffffffffffffffffffffffff7b5557bbfffb7f7fffffffffdffbffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc1ffff3ffffffffffffc1fffffffffffffffffffffffffff7aaab7bbffff7f7fffffffffdffbffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef %%EndData restore save 9 39 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask ffffffffffffffffffffffffffffffffffffffffffffffffff7b55577a3bdb717f0f0e99d1dc30c3efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7799bdb667e666666ccd99b99efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b55577bdbdb6f7efef6eededbdbbdefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77bdbdb6f7efef6eeded81b81efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b55577bdbdb6f7efef6eededbfbbfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77bdbdb6f7ef6f6eededbfbbfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b555779999b667e6666eeccd99b99efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77a3c5b717f0f0eeed1dc3cc3efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffcfffffffffffffffffffffffffffffffffffffffff7b5557bfffffffffffffffdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffcfffffffffffffffffffffffffffffffffffffffff7aaab7bfffffffffffffffdfffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffe3e3e1833fffffffffffffffffffffffffffffffffffffff7b5557dfffffffffffffffdfffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffc1c9c4cf3fffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9d9ccfcfffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9f9ce1cfffffffffffffffffffffffffffffffffffffffff7aaab7fffffffbfffffd7ffffefffffd7ffffffffffbfffffffffffdfffffffffafefff71efd9f7ffbffffffffffffbffffff5ffffffdffffffffffffffffe7bffffffffffffffffffffffffffffff7fffffebffffffbfffffffffffffffffffffffffefff9f9cf8cfffffffffffffffffffffffffffffffffffffffff7b5557fffffffbfffffd7fffeefffffd7ffffffffffbffffff7ffffdfffffff0fafefff4e6fd9f7e7bffffffdfffffaffffff5fdffffd8181f7c3fffffffddfbffffffffff7fffffffffffffffffff5fffffebfbffffb0303ef87fffffffffffffffffefff9d9cfccfffffffffffffffffffffffffffffffffffffffff7aaab7fffffffffffffb7fffeefffffb7ffffffffff7ffffff7ffffbffffffef76ffffedf6fdaf7d77ffffffdfffff6fffffedfdffffdbfbfc7bdfffffffddfbffffffffff7ffffffffffffffffffedfffffdbfbffffb7f7f8f7bfffffffffffffffffefffc1c9c4cb3fffffffffffffffffffffffffffffffffffffff7b55574bda3a3b478bfb70f0c28f0e9b47874cf0f0f68f0ddc18747b477b4cef768ed1edfefdb77b7699e1e1861d3f4299d1ed1861e1dbfbff7bdf8b4fff80fa3c3a3c3c3e14c3c3c3fffe1d33fffe8533a3da30c3c3b7f7fef7bf0e99ffffffffffffefffe3e3e1e73fffffffffffffffffffffffffffffffffffffff7aaab73bd9999b3333fb66666e66667b333333666f766665dd73333b337b337f7666ccee7efdb77b7666ccdedcccff6e66cceccdccccdbfbff7fbf333fffddf9999999999f73999999fffccccdfffedccd99d99b9999b7f7feff7e6666ffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b55577bdbdbdb7b7bf76f7f6ef6f6f77b7b776f6feef6f5dd77b7b77b7b7778eef6dedf9efdbb776eeefedfddedfeeeeededdeddeded8383f7f7f7b7fffddfbdbdbdbfbdf77fdbfbdfffdfdddfffdddddbdbbdbbdbdb0707efefefeeeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77bdbdbdb7b7bf760706ef606f77b7b776070eef606db77b7b77bb7777f6ef6dedfe6fdbb6f6eeee0e1dc0dfeeeeededdeddededfdfdf7eff7b7f80ddfbd81bdbf81f77c1bf81f80dfdddf80dddddbdbbdbbdbdbfbfbefdfefeeeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b55577bdbdbdb7b7bf76fe76ef6fef77b7b776ffe6ef6fedb77b7b77bb7777f6ef6dedff6fdbd602eeecefcddfdfeeeeededdeddededfdfdf7dff7b7fffddfbdbfbdbfbff779dbfbffffdfdddfffdddddbdbbdbbdbdbfbfbefbfefeeeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77bdbdbdb7b7bef6fef6ef6feef7b7b776fff5ef6feab77b7af7bb7776f5ef6debdf6fdbd7f5eeedefeddfdfdeeeedebdeddededbdbdf7bff7b7fffddfbdbfbdbdbff77bdbdbffffdedddfffbddddbd7bdbbdbdb7b7bef7fef6eeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557799bdbdb7b33ef66666ef666ef7b3377666f5ef667777337af33cf776f5e66debce77bbe7f5eeeccdedccdfdeeeeccbdedccccdbdbdf7bfb337fffddfbd99bd9999b77999999fffccdddfffbdddd997bdb9999b7b7bef7f666eeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77c5bdbdb7b8bef70f132f70eef7b877770f0def70f779877af47cf7770de8edebf1f87be7f5eeee261e61dfdf2eed1bdee61e1dc3c3f781b8b7fffe5fbdc3bdc3c3b97c4c3c3fffe1dddfffbe5dda37bdcc3c3b8787ef0370eeeffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557fffffffffffbffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffff33ffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffff33ffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffff87ffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffff833ffff9ffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9fffffffff333ffff9ffffffffffe7ffffffffffffffffff7aaab7dfffffffeffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9fffffffff3f3ffff9ffffffffffe7ffffffffffffffffff7b5557bfffffffeffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff04987c787e133879f91e1c8f8f0fc1261f1e1fffffffffff7aaab7bfffffffeffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9c1338333f333339f88ccc470667e704ce0ccfffffffffff7b55577a5ed1fe2e1d1e1f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cff33b33f33333ff9cccce67667e73fcceccfffffffffff7aaab779deccfccccccccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cf833f03f33303ff9cc0ce67e07e73e0cfc0fffffffffff7b55577bdedefdedededef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cf333f3ff3333fff9ccfce67e7fe73cccfcffffffffffff7aaab77bdedefdededec0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9cf333b3ff3333fff9ccfce6767fe73cccecffffffffffff7b55577bdedefdedededff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff94f038313f333139f9cc4ce70626653c0e0c4fffffffffff7aaab77bdedefdedededff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffccf89c787f333879f9ce1ce78f0e733e271e1fffffffffff7b55577bccdefccccdeccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab77be2defe2e1dee1f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557bffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7bffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557dffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9fffffffffffffffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9fffffffffffffffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9ffffffffffffffffffffffffffffffffffffffffffffff00aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9c391f167387c5c3cff1fffffffffffffffffffffffffff00b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff99988e4673339199cfe0fffffffffffffffffffffffffff00aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9f99cce673f33999ffcefffffffffffffffffffffffffff00b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9c19cce673833981ffcffffffffffffffffffffffffffff00aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce67333399fffcffffffffffffffffffffffffffff00b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9999cce67333399fffcefffffffffffffffffffffffffff00aaab4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9819ce4623039189cfe0fffffffffffffffffffffffffff00b55507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff9c49cf071389c1c3cff1ffffffffffffffffffffffffffff7aaab33fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffe7fffff9ffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffcc7ffff31ffffffffffffffffffffffffffffffffff7aaab7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffe0fffff83ffffffffffffffffffffffffffffffffff7b5557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7bfff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffff7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe73fe73c303fffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff813c9f3fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffef %%EndData restore save 9 73 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask f7ffffffffffffffffffffffffffffffffffffffffffffffffffe73fe33993ffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9c3c9f3fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe730e333f3ff2490c993fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9c998e3f0e193870cc3fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe7266533f3fe44064489fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9c998e3e64c89326499fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe0266533f03e647e4c99fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff8199843e7cc991e6499fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe7206633f3fe64f04c99fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9fdb953e7cc99c66481fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe727e633f3fe64e64c99fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9fc3913e7cc99e2649ffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe726673993fe44e64499fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9fe79b3e64c99326499fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffe730e73c303f24f10999fffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffff9fe79b3f0e199870cc3fffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffcffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe67ffcffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fffcffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000f00000003c00000001e00000000001fffffffffffffffffffffffffffffffffffffffffffffffd555555f5555557d555555f5555557d555555ef00000003c00000001e0000000003c00000001e000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbffffffefffffffbffffffefffffffbffffffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff7ffffffdfffffff7ffffffdef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbffffffefffffffbffffffefffffffbffffffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffff3cfdfffe33f7ffffffdffcc7ff7ffe3ffdef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbfe38ffeffc33ffbffffffefcc3fffbfe1fffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce7f9ffef7c027ffbdf03e4cfdef00fffffffdfffffffffffffffffffffffffffffffffffffffffffffffffc30fdfff833f7ffffffdffcc1ff7ffe0ffdef7c027ffbdf03e4cfdef81ff27cfbdf03ffffdef813c9f3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce7f9ffef7cfe7ffbdf3fe7cfdefe7fffffffdfffffffffffffffffffffffffffffffffffffffffffffffbf820ffeff133ffbfc01ffefcc8fffbfe47ffef7cfe7ffbdf3fe7cfdef9cffe7cfbdf39ffffdef9c3c9f3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce61927ef7cf261fbdf3f2487defe7243870fdfffffffffffffffffffffffffffffffffffffffffffffffff104fdffe333f7ffc01fdffccc7f7ffe63fdef7cf261fbdf3f2487def9c99264fbdf39324fdef9c998e3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce4c913ef7cf24cfbdf3e44cfdefe70193267dfffffffffffffffffffffffffffffffffffffffffffffffbe30cffefc733ffbfc01ffefcce3ffbfe71ffef7cf24cfbdf3e44cfdef9c99248fbdf393227def9c998e3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c04c933ef7c124cfbdf0264cfdefe71f93e67dffffffffffffffffffffffffffffffffffffffffffffffffe71cfdff8f33f7ffc01fdffccf1f7ffe78fdef7c124cfbdf0264cfdef819924cfbdf033267def8199843effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce40933ef7cf240fbdf3e64cfdefe73c13e07dfffffffffffffffffffffffffffffffffffffffffffffffbe30cffefc733ffbfc01ffefcce3ffbfe71ffef7cf240fbdf3e64cfdef9c9924cfbdf333267def9fdb953effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce4f933ef7cf24ffbdf3e64cfdefe73993e7fdfffffffffffffffffffffffffffffffffffffffffffffffff104fdffe333f7ffc01fdffccc7f7ffe63fdef7cf24ffbdf3e64cfdef9c9924cfbdf393267def9fc3913effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce4c913ef7cf24cfbdf3e44cbdefe73993267dfffffffffffffffffffffffffffffffffffffffffffffffbf820ffeff133ffbfc01ffefcc8fffbfe47ffef7cf24cfbdf3e44cbdef9c91248fbdf392267def9fe79b3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ce61927ef7cf261fbdf0324e7defe73c4870fdfffffffffffffffffffffffffffffffffffffffffffffffffc30fdfff833f7ffc01fdffcc1ff7ffe0ffdef7cf261fbdf0324e7def81c9264fbdf399267def9fe79b3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff3fef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbfe38ffeffc33ffbfc01ffefcc3fffbfe1fffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff3fef7ffffffbdfffffffdeffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffff3cfdfffe33f7ffffffdffcc7ff7ffe3ffdef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff3fef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbffffffefffffffbffffffefffffffbffffffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff7ffffffdfffffff7ffffffdef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffef7ffffffbdfffffffdeffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffbffffffefffffffbffffffefffffffbffffffef7ffffffbdfffffffdefffffffffbdfffffffdeffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000f00000003c00000001e00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff7ffffffdfffffff7ffffffdef00000003c00000001e0000000003c00000001e000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaabeaaaaaafaaaaaabeaaaaaafaaaaaabefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff000000007800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff0007f0007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001feff001ffc007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfeff00380e007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfeff006003007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfeff00e003807bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfeff018000c07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffefffffffffffffffe1fe70ffffffffffffffffffffffffe7ffffffffffffffffff9e4ffffe4ffffffffffffffc1dfeff018000c07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffefffffffffffffffccfe667fffffffffffffffffffffffe7ffffffffffffffffff9e4ffffe4ffffffffffffffccdfeff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffefffffffffffffff9ec423c98fffffffffffffffffff1c6498ffffffffffffffff8649499207fffffffffffffcc9feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffefffffffffffffff9f9270c927fffffffffffffffffe4924927fffffffffffffff924324924ffffffffffffffcc9feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffefffffffffffffff98827c498fffffffffffffffffff1924907fffffffffffffff924724924ffffffffffffffc19feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffefffffffffffffff9c9e6e49e7ffffffffffffffffffc926b3ffffffffffffffff924324924ffffffffffffffcf9feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffefffffffffffffffcc92666127fffffffffffffffffe4926327fffffffffffffff924924924ffffffffffffffcf9feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffefffffffffffffffe2c730f38fffffffffffffffffff1c6778ffffffffffffffff864c24ca67fffffffffffffcf9feff030000607bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffeffffffffffffffffffffff3feffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdfeff018000c07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffefffffffffffffffffffffe7feffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdfeff018000c07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffeffffffffffffffffffffffffeffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdfeff00e003807bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001feff006003007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001feff00380e007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff001ffc007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff0007f0007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3fffffffffffffffffffffe7fcfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553fffffffffffffffffffffe7fcfffffffffffffffffffffff8ffffffffffffffffffffffff8ffffffffffffffffffffffff8ffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3fffffffffffffffffffffe63cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553fffffffffffffffffffffe59cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3fffffffffffffffffffffe61cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553fffffffffffffffffffffe49cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3fffffffffffffffffffffe49cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553fffffffffffffffffffffe64cfffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffffffffffcffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffff8ffffffffffffffffffffffffeffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffff8ffffffffffffffffffffffffeffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdef %%EndData restore save 9 107 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask f7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffff8ffffffffffffffffffffffffeffffffffffffffffffffffffeffffffffffffffffffffffffefffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7f8000ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7c3ffe1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7cffff9f7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff78ffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffffcf7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7907ffcf7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff780fffcf7bfffffffffffffffffffffffffffffffffffffffffffffffffffcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff781fffcf7bfffffffffffffffffffffffffffffffffffffffffffffffff1fcffff9e0fcfe78fffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff783fffcf7bffffffffffffffffffffffffffffffffffffffffffffffffe4fcffff9e67ffe78fffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff78ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffe4fcffff9e650a43269c7fffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffffcf7bfffffffffffffffffffffffffffffffffffffffffffffffff1fcffff9e64492726493fffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7bffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4fcffff9e0cc927264c7fffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4fcffff9e7cc926024f3fffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4fe7fff3e7cc92672493fffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffff1fe7fff3e7cc932724c7fffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffef7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffff0f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79fffe0f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79fffc0f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79fff84f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff78ffff8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7cffff9f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7c3ffe1f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7f8000ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff000000007bfffffffffffffffffffffffffffffffffffffffffffffffffffe00003fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffc3ffe1fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe0fcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffcf8ffff8fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffcf9ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffff9f907ffcfffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff9f80fffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ffe3fff7bfffffffffffffffffffffffffffffffffffffffffffffffff3f81fffcfffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ffe3fff7bfffffffffffffffffffffffffffffffffffffffffffffffff3f83fffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ffc9fff7bfffffffffffffffffffffffffffffffffffffffffffffffff3f8ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ffc9fff7bfffffffffffffffffffffffffffffffffffffffffffffffffff9ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ff9cfff7bfffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7b5553ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ff9cfff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7aaab3ffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7ff3e7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff7ff3e7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eff7fe7f3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeff7fe7f3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdeff7fcff9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff7fcff9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdef %%EndData restore save 9 141 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask f7f980cff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff7f8000ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdeff7f03e07f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff7f1ffc7f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffe5555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffffffdeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabffffffffdeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001efffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7f1ffc7f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7f03e07f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffde1e1efffffdfe1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7f8000ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffddedeefffff1fdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7f980cff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffece5dedfefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fcff9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeeedfddfefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fcff9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef5dfbd1efc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fe7f3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffefbdf7ceefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fe7f3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffefbdefdeefc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff3e7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef5ddfdeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff3e7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeeeddfdeefffffdededededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff9cfff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffece5c0e1efffffdee1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff9cfff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffc9fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffc9fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffc9fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffc9fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffe3fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffe3fff7bfffffffffffffffffffffffffffffffffffffffffffffffff1fff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffe4fff3e7ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe7fff3e7ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffde1c0efffffdfe1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe1ffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffddefeefffff1fdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4ffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffece5defdefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4ffcff9ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeeedfdfdefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe4ffcff9ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef5dfbfbefc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bfffffffffffffffffffffffffffffffffffffffffffffffff1ff980cffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffefbdf7fbefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffefbdeff7efc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff03e07fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef5ddff7efffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeeeddfefefffffdededededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffece5c0efefffffdee1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffde1e1efffffdfe1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffddedeefffff1fdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffece5dedeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeeedfddeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef5dfbe1efc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7800000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffefbdf7deefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7800000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffefbdefdeefc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef5ddfdeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeeeddfdeefffffdededededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffece5c0e1efffffdee1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffde1e1efffffdfe1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffddedeefffff1fdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffece5dedeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeeedfddeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef5dfbdeefc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffefbdf7e0efffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffefbdeffeefc0ffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef5ddfdeefffffdfdedededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeeeddfdeefffffdededededededefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffece5c0e1efffffdee1e1e1e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffdffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef %%EndData restore save 9 175 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask f7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffc7fff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe0fcffff9e793ffff93fffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe7fcffff9e793ffff93fffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffe7fcffff9e192526481fffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffe1fcffff9e490c92493fffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bfffffffffffffffffffffffffffffffffffffffffffffffffcfcffff9e491c92493fffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffecfcffff9e490c92493fffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffe4fe7fff3e492492493fffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bfffffffffffffffffffffffffffffffffffffffffffffffff1fe7fff3e193093299fffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff79ffffcf7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7800000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7800000f7bffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffefb7effcfbe3c07fffffffffffdffffffffffffbffffbfffffffffff6fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef77effcfb9cdffffffffffffddffffffffffffb7fffbfffffffffff6fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef77effd7bbedffffffffffffdffffffffffffff7fffbfffffffffff6fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeef7ee1dbb7fdfff0ce61e1de85c3a3c3a7e19ca1878bf47874a67876befdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeef7eccdbb7fdffe66eccccdedd9999999fccddb73333f3333399b336befdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeef00deddb7fc0fef75dedfdeddbdbdbdbfdeebb77b7bf7b7b7bbbfb6ddfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeef7ec0ddb7fdffe07bc0dfdeddbdbd81bfc0f7b7037bf7b7b7bbb836ddfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeef7edfdeb7fdffeffbdfdfdeddbdbdbfbfdff7b77f7bf7b7b7bbb3b6edfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeef7edfdebbedffeff5dfdededdbdbdbfbfdfebb77f7bf7b7b7bbb7b6ebfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeef7eccdf39cdffe66eccccccdd99bd99bfccddb73333f7b337bbb336f3bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeef7ee1df3e3c07f0ce61e1e2e5c3bdc3bfe19cb9878bf7b877bbb896f7bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffef7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffef7ffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffefbffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffe1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffe1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff9fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff8fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffc7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef55569fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fffe3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaa0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffff1ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef555667ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffff9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fe7f9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fe7f9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffff03e07fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fe7f9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff1e3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffff980cffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ff003ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffcff9ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7ffc0fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffcff9ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffeffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef5556ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffcffe7f3ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef6aaaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffff8fff3e7ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef7ffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807feff000000007bfffffffffffffffffffffffffffffffffffffffffffffffff4fff3e7ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffecfff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffe07ff9cfffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeff807f4fffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffcfffc9fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeff807f4fffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffcfffc9fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff000000007bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ffc0fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ff003ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ff1e3ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fe7f9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef2aab3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fe7f9ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef35553ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fe7f9ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ffff9ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ffff1ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffe3ff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffc7ff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff8fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff9fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4f %%EndData restore save 9 209 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask f7fff1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ffe1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7ffe1fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff3fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fffffff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffaaaaaaaafbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff1fcffff9fffe7ffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffe4fcffff9fffe7ffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbfffffffffffffffffffffffffffffffffffffffffffffffffcfcffff9f1c6498ffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9e4924927fffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffcfcffff9f1924907fffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffcfcffff9fc926b3ffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffe4fe7fff3e4926327fffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff1fe7fff3f1c6778ffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffff9ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffff9ffff8fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbfffffffffffffffffffffffffffffffffffffffffffffffffff9ffff0fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bfffffffffffffffffffffffffffffffffffffffffffffffffff9fffe0fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff1f9fffc0fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffe4f9fff84fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4f %%EndData restore save 9 243 translate 420 34 scale 125 string /dataStr exch def 0 setgray 1000 81 false [1000 0 0 81 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 20261 Hex Bytes imagemask fffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffcf9ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffcf8ffff8fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff3fc3ffe1fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffe7fe00003fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffe0ff8000ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffe3fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffd5fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffeaaaaaabfbffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff555555557bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffffffe7fff3fffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffffffcffff9fffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9f87f9c3ffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff1fcffff9f33f999ffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9e7b108f263fffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9e7e49c3249fffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9e6209f1263fffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff9fcffff9e7279b9279fffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bfffffffffffffffffffffffffffffffffffffffffffffffff9fe7fff3f324999849fffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbfffffffffffffffffffffffffffffffffffffffffffffffff9fe7fff3f8b1cc3ce3fffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffff1ffc7fffffffcfffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffff9ffcffffffff9fffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffc7f1ffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bfffffffffffffffffffffffffffffffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4f %%EndData restore save 9 277 translate 420 22 scale 125 string /dataStr exch def 0 setgray 1000 52 false [1000 0 0 52 0 0 ] {currentfile dataStr readhexstring pop} %%BeginData: 13011 Hex Bytes imagemask f7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff3ffffffffffffffffffffffffffffffe7fffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff7fffffbfffffdfffffeffffff4ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef0000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffc71fce3ffffffffffffffffffffffffe38fe60fffffffffffffffffffffffff1c7cffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff924f8c9ffffffffffffffffffffffffc927c67ffffffffffffffffffffffffe493cff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff9249cc9ffffffffffffffffffffffffc924e67ffffffffffffffffffffffffe4924fffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff9249cc9ffffffffffffffffffffffffc924e61ffffffffffffffffffffffffe4924ff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff924fcc9ffffffffffffffffffffffffc927e7cffffffffffffffffffffffffe493cffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff924fcc9ffffffffffffffffffffffffc927e6cffffffffffffffffffffffffe493cff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffff9249cc9ffffffffffffffffffffffffc924e64ffffffffffffffffffffffffe4924ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffc719ce3ffffffffffffffffffffffffe38ce71fffffffffffffffffffffffff1c64ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fff803fffffffffffffffffffffffdffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fffbfbfffffffffffffffffffffff27fffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fffbfbffffffffffffffffffffffcf9fffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fffbfbffffffff9fffffffffffff3fe7ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3fffbfbffffffff1ffffffffffffcfff9ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3fffbfbffffffff9f8e38fffffffc1fc1ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ff83f83fffffff9f2492fffffffddfddffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ff9fff3fffffff9f8c13fffffffc1fc1ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffe00003ffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ffa7fcbfffffff9fe4f3ffffffffdfdfffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7e00003f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffb9f3bfffffff9f2492ffffffffdfdfffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcaaadef3ff9e4f3fffffff9f8e38ffffffffdfdfffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcd555ef3ffe7bcffffffffffffffffffffffdfdfffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff7ffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ef3fff9b3ffffffffffffffffffffffc01fffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7fff7fff780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffef3fffe0fffffffffffffffffffffffdfdfffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554ffffff7ffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffef3ffffbfffffffffffffffffffffffc01fffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7fff7fff795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554fffe00003ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7e00003f795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554ffffff7ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7fff7fff795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554ffffff7ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7fff7fff795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554ffffff7ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9fffe013ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8ff7fff7fff795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffef3ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffff55555555555555555555555555555555555554fffe00003ffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9ffffef3ffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7e00003f795555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ffffef3ffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff7ffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9ffffef3ffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff7fff7fff7bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffef000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffaaaaaaaaf80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffef000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %%EndData restore /Times-Roman findfont 12 scalefont setfont gsave 121 103 translate 1 -1 scale 0 0 moveto 0 setgray (Virtual Machine)show grestore gsave 37 111 translate 1 -1 scale 0 0 moveto 0 setgray (Graph)show grestore gsave 106 288 translate 1 -1 scale 0 0 moveto 0 setgray (Host Utilization)show grestore newpath 70.5 107.5 moveto 96.19627 141.10281 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 89.87154 138.47606 moveto 96.5 141.5 lineto 95.31856 134.31078 lineto 1 setlinewidth strokepath 0 setgray fill newpath 199.5 98.5 moveto 255.01299 111.38693 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 248.46321 113.38585 moveto 255.5 111.5 lineto 250.01375 106.70689 lineto 1 setlinewidth strokepath 0 setgray fill newpath 184.5 284.5 moveto 254.10681 229.80891 lineto 0 setgray currentlinecap 2 setlinecap 1 setlinewidth stroke setlinecap newpath 251.56308 236.1676 moveto 254.5 229.5 lineto 247.32675 230.77551 lineto 1 setlinewidth strokepath 0 setgray fill grestore showpage %%Trailer end %%EndDocument FMENDEPSF 115.75 137.5 532.25 431.5 R 1 H 0 Z 0 X 0 0 0 1 0 0 0 K N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "21" 21 %%Page: "22" 22 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (22) 532 42.62 T 0 12 Q -0.3 (gives them initial values. These variables are declared to be \322NEW\323 input-output variables) 108 712 P 0.15 (in order to have HeNCE allocate storage for them. If output-only variables were used, the) 108 698 P 0.26 (sequential subroutine would have to allocate storage for them. The resulting vector) 108 684 P 1 F 0.26 (x) 512.07 684 P 0 F 0.26 ( will) 518.07 684 P (be written into) 108 670 T 1 F (b) 181 670 T 0 F (.) 187.67 670 T 3 10 Q (-- annotation of node GetSys.) 144 651.33 T (NEW <> int N;) 144 639.33 T (-- Number of blocks in system.) 318 639.33 T (NEW <> double a[500][500];) 144 627.33 T (-- Matrix) 318 627.33 T (NEW <> double b[500];) 144 615.33 T (-- Vector) 318 615.33 T (NEW <> int blk;) 144 603.33 T (-- Number of elements in each block.) 318 603.33 T (NEW <> int n;) 144 591.33 T (-- Number of elements in matrix) 318 591.33 T 2 F (b) 510 591.33 T 3 F (.) 516 591.33 T (GetSys\050a, b, &n, &N, &blk\051;) 144 579.33 T 0 12 Q 1.36 (The annotation of the loop node is simply \322\050) 108 554 P 1 F 1.36 (j) 331.5 554 P 0 F 1.36 (=0;) 335.5 554 P 1 F 1.36 ( j) 351.6 554 P 0 F 1.36 (<) 359.95 554 P 1 F 1.36 (N) 366.72 554 P 0 F 1.36 (;) 375.38 554 P 1 F 1.36 ( j) 378.72 554 P 0 F 1.36 (=) 387.07 554 P 1 F 1.36 (j) 393.84 554 P 0 F 1.36 (+1\051;\323 which iterates the sub-) 397.84 554 P (graph between the loop-begin and loop-end node for every column of the blocked system.) 108 540 T 0.49 (The annotation of node) 108 514 P 1 F 0.49 (Solve) 224.62 514 P 0 F 0.49 ( makes use of a HeNCE default. All variables that are used) 251.96 514 P 0.44 (but not explicitly declared to be input, output, or input-output default to input-output sta-) 108 500 P 0.41 (tus. The call to sequential procedure) 108 486 P 1 F 0.41 (solve) 287.43 486 P 0 F 0.41 ( makes use of array index range expressions to) 312.76 486 P (pass just the required blocks of) 108 472 T 1 F (a) 259.98 472 T 0 F ( and) 265.98 472 T 1 F (b) 289.31 472 T 0 F ( to the routine.) 295.98 472 T 3 10 Q (-- annotation of node solve.) 144 453.33 T (solve\050a[j*blk:\050j+1\051*blk-1][j*blk:\050j+1\051*blk-1],) 144 441.33 T (b[j*blk:\050j+1\051*blk-1], blk\051;) 180 429.33 T 0 12 Q 0.42 (The fan-begin node has a simple annotation \322) 108 404 P 1 F 0.42 (i) 329.25 404 P 0 F 0.42 ( =) 332.59 404 P 1 F 0.42 (j) 346.2 404 P 0 F 0.42 (+1 T) 350.2 404 P 0.42 (O) 373.51 404 P 1 F 0.42 (N) 385.59 404 P 0 F 0.42 (-1;\323 that causes an instance of) 394.26 404 P 0.03 (the enclosed subgraph consisting only of the node) 108 390 P 1 F 0.03 (blkmult) 350.86 390 P 0 F 0.03 ( to be created for each value of) 391.54 390 P 1 F (i) 108 376 T 0 F ( in the stated range. W) 111.34 376 T (ithin each instance,) 218.83 376 T 1 F (i) 314.15 376 T 0 F ( takes on the appropriate value.) 317.48 376 T -0.11 (The instances of node) 108 350 P 1 F -0.11 (blkmult) 215.54 350 P 0 F -0.11 ( make use of index variable) 256.22 350 P 1 F -0.11 (i) 390.88 350 P 0 F -0.11 ( to select the blocks of) 394.21 350 P 1 F -0.11 (a) 504.22 350 P 0 F -0.11 ( and) 510.22 350 P 1 F -0.11 (b) 533.33 350 P 0 F -0.17 (that they must process using array index range expressions as before. The portion of) 108 336 P 1 F -0.17 (b) 512.5 336 P 0 F -0.17 ( that) 519.17 336 P (contains the solution of the last call to) 108 322 T 1 F (solve) 293.33 322 T 0 F ( is stored in) 318.66 322 T 1 F (b_up) 377.33 322 T 0 F (.) 403.34 322 T 3 10 Q (-- annotation of node blkmult.) 144 303.33 T (< double b_up[blk]=b[j*blk:\050j+1\051*blk-1];) 144 291.33 T (blkmult\050a[i*blk:\050i+1\051*blk-1][j*blk:\050j+1\051*blk-1],) 144 279.33 T (b[i*blk:\050i+1\051*blk-1], b_up, blk\051;) 192 267.33 T 0 12 Q 0.29 (The annotation of node) 108 242 P 1 F 0.29 (PrintAns) 223.82 242 P 0 F 0.29 ( also makes use of the default that variables that are not) 270.49 242 P 0.86 (otherwise declared are input-output. Notice that the node automatically gathers the indi-) 108 228 P (vidual blocks of) 108 214 T 1 F (b) 188.33 214 T 0 F ( that) 195 214 T 1 F (solve) 219 214 T 0 F ( wrote into one vector of length) 244.33 214 T 1 F (n) 398.64 214 T 0 F (.) 405.31 214 T 3 10 Q (-- annotation of node PrintAns.) 144 195.33 T (PrintAns\050b, n\051;) 144 183.33 T 1 12 Q (5.6 CODE and HeNCE Compar) 108 152 T (ed) 274.45 152 T 0 F -0.14 (One of the challenges in research in visual programming is evaluating new ideas. W) 108 126 P -0.14 (e have) 509.15 126 P 1.31 (found that it is necessary to actually implement systems and use them in programming) 108 112 P 1.67 (projects and in university programming classes in order to thoroughly understand new) 108 98 P 0.7 (ideas\325 merits and limits. Results are often subjective and context-dependent. Many ideas) 108 84 P -0.28 (have both virtues and limitations. For example, CODE\325) 108 70 P -0.28 (s \336ring rules are powerful but com-) 371.7 70 P FMENDPAGE %%EndPage: "22" 22 %%Page: "23" 23 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (23) 532 42.62 T 0 12 Q 0.61 (plicated. For some problems they are desirable and even necessary) 108 712 P 0.61 (, but they increase the) 432.6 712 P -0.21 (training time for new CODE users, and one of our chief goals has always been ease of use.) 108 698 P 1.11 (Implementing the various versions of HeNCE and CODE has allowed us to create ever) 108 672 P 0.66 (more ef) 108 658 P 0.66 (fective visual parallel programming environments. This section contrasts the two) 145.43 658 P 0.77 (languages and points out circumstances in which one model may be more ef) 108 644 P 0.77 (fective than) 482.92 644 P 1.55 (the other) 108 630 P 1.55 (. However) 151.21 630 P 1.55 (, an overall conclusion regarding the two languages is probably not) 202.26 630 P 0.05 (possible as each has strengths which stand out in dif) 108 616 P 0.05 (ferent circumstances. This conclusion) 358.55 616 P 1.45 (suggests that visual programming environments could bene\336t from supporting multiple) 108 602 P (representations, including textual ones.) 108 588 T (1.) 108 568 T (Node \336ring conditions are explicit and general in CODE.) 121.75 568 T 0.94 (Programmers must explicitly de\336ne the exact circumstances under which a computation) 108 542 P 0.03 (node is allowed to execute in CODE. The speci\336cation language is quite \337exible and gen-) 108 528 P 0.44 (eral, and \336ring conditions can depend on the internal state of the node. For example, it is) 108 514 P 0.48 (easy to de\336ne a node that non-deterministically mer) 108 500 P 0.48 (ges data from two streams in CODE.) 360.13 500 P (Such a computation is impossible to state in HeNCE.) 108 486 T 0.19 (It is tempting to say that HeNCE\325) 108 460 P 0.19 (s \336ring rules are \336xed. Nodes are permitted to \336re when) 269.81 460 P 0.34 (all predecessor nodes have \336red, but this is an oversimpli\336cation. Execution of a HeNCE) 108 446 P 0.53 (node is dictated also by the control \337ow constructs in which it is embedded just as is the) 108 432 P -0.09 (case with statements in conventional languages. Thus, HeNCE \336ring conditions are some-) 108 418 P (what less explicit.) 108 404 T 3.68 (CODE\325) 108 378 P 3.68 (s \336ring rules are explicit and general, but can get complicated and wordy) 144 378 P 3.68 (.) 537 378 P 0.03 (HeNCE\325) 108 364 P 0.03 (s \336ring rules are simple and concise, but are not always adequate to express algo-) 149.33 364 P 1.01 (rithms. They do appear to be adequate for many interesting numerical algorithms, how-) 108 350 P (ever) 108 336 T (.) 127.99 336 T (2.) 108 316 T (CODE is capable of expressing more dynamic graph topologies.) 121.75 316 T 0.09 (Both due to its powerful \336ring rules and its method of instantiating nodes, CODE is capa-) 108 290 P 0.46 (ble of expressing communications patterns that HeNCE cannot. For example, CODE can) 108 276 P 0.01 (accept an adjacency graph as input data and create a graph with the speci\336ed topology) 108 262 P 0.01 (. Of) 521.32 262 P 0.14 (course, such arbitrary expansions limit the extent to which CODE visually displays paral-) 108 248 P 0.36 (lel structure. The static display of programs whose structure is determined at runtime is a) 108 234 P (signi\336cant research goal.) 108 220 T (3.) 108 200 T (Explicit data\337ow increases the complexity of graphs.) 121.75 200 T 0.17 (CODE shows all data\337ow or common shared variable access via arcs. This is desirable in) 108 174 P 2.18 (that it shows more completely the communication patterns of programs, but data\337ow) 108 160 P -0.12 (graphs are often complex, and worse still they are often unstructured. Programs with com-) 108 146 P 0.59 (plex data\337ow can become a rat\325) 108 132 P 0.59 (s nest of arcs. This can be hard to understand and is also) 263.26 132 P (cumbersome since programmers must individually annotate all of the arcs.) 108 118 T 0.32 (HeNCE programs are related to \337ow charts of structured programs. They are concise and) 108 92 P -0.28 (orderly even when graphs become lar) 108 78 P -0.28 (ge. Data\337ow is implicit so less structural information) 286.65 78 P FMENDPAGE %%EndPage: "23" 23 %%Page: "24" 24 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (24) 532 42.62 T 0 12 Q 0.04 (is presented to the programmer) 108 712 P 0.04 (, but computational elements are still clear and well encap-) 257 712 P 0.23 (sulated and parallel structure is displayed. On the negative side, since data\337ow is implicit) 108 698 P -0.11 (it is possible for programmers to make errors in which the \322wrong\323 node is another node\325) 108 684 P -0.11 (s) 535.33 684 P (nearest predecessor for some variable.) 108 670 T (4.) 108 650 T (HeNCE lacks hierarchy) 121.75 650 T (.) 234.93 650 T 0.01 (Since HeNCE graphs cannot call other HeNCE graphs, hierarchical implementation is not) 108 624 P 0.02 (supported. Thus, the current implementation of HeNCE is ill-suited to lar) 108 610 P 0.02 (ge projects since) 459.98 610 P 1.37 (graph sizes become excessive. This shortcoming is not a necessary aspect of HeNCE\325) 108 596 P 1.37 (s) 535.33 596 P (model. A future version of HeNCE will allow graph calls.) 108 582 T (5.) 108 562 T (CODE\325) 121.75 562 T (s basic unit of reuse is the sequential computation.) 157.74 562 T 0.47 (CODE is designed with the idea that the sequential computation node is the basic unit of) 108 536 P 3.1 (component reuse. The CODE model supports libraries of computation nodes. Thus,) 108 522 P -0.12 (CODE computation nodes must be completely encapsulated. They must have well de\336ned) 108 508 P 1.95 (interfaces, and they must be completely de\336ned in isolation from other elements of a) 108 494 P (graph. This is the reason that CODE ports exist. They are a node\325) 108 480 T (s formal parameters.) 421.28 480 T 1.13 (Nodes in HeNCE to not satisfy this property due to the manner of their use of variable) 108 454 P -0.3 (names. If a programmer copies a node from one HeNCE program to another) 108 440 P -0.3 (, he or she will) 470.2 440 P -0.18 (likely have to edit the node when it is placed in its new context. For example, the new pro-) 108 426 P (gram may name some array) 108 412 T 1 F (A) 244.3 412 T 0 F ( while the old program called it) 252.96 412 T 1 F (B) 406.61 412 T 0 F (.) 414.61 412 T -0.11 (CODE allows name binding on arcs, thus bridging the name spaces of any two nodes. The) 108 386 P 0.01 (downside is that programmers) 108 372 P 4 F 0.01 (must) 256.01 372 P 0 F 0.01 ( specify name bindings on every arc. The CODE com-) 278.67 372 P 1.17 (putation node is somewhat analogous to a simple statement in a conventional program-) 108 358 P 1.9 (ming language like Fortran. It is cumbersome to be required to specify name binding) 108 344 P (between \322statements.\323) 108 330 T 0.36 (Both CODE and HeNCE \050with Call added to its model\051 support reuse on the graph level.) 108 304 P -0.28 (This is not cumbersome since graph calls are much less common\320 like subprogram calls in) 108 290 P (Fortran.) 108 276 T (6.) 108 256 T (CODE has ef) 121.75 256 T (\336cient mechanisms for blocked arrays.) 185.51 256 T 2.16 (Both CODE and HeNCE were designed for computations involving arrays and many) 108 230 P 0.55 (modern array algorithms are based on blocking as in the block triangular solver example) 108 216 P -0.17 (above. It was not discussed, but CODE supports mechanisms for blocked arrays which are) 108 202 P -0.13 (both ef) 108 188 P -0.13 (\336cient and reasonably simple. Programmers can use a 4 dimensional array to repre-) 141.31 188 P 0.06 (sent a blocked two dimensional array) 108 174 P 0.06 (. The array is a two dimensional array of two dimen-) 286.48 174 P 0.47 (sional arrays. HeNCE programmers can do this as well but for implementation reasons it) 108 160 P (is not as ef) 108 146 T (\336cient.) 159.44 146 T -0.12 (HeNCE\325) 108 120 P -0.12 (s mechanism for specifying blocks by index ranges \050as in the HeNCE block trian-) 149.33 120 P 0.52 (gular solver\051 is also not ef) 108 106 P 0.52 (\336cient and ar) 235.37 106 P 0.52 (guably not simple. As the expressions used in the) 298.85 106 P 1.38 (index ranges become complex, it becomes increasingly dif) 108 92 P 1.38 (\336cult for compilers to \336nd a) 398.75 92 P 0.16 (range\325) 108 78 P 0.16 (s \322meaning\323 and implement a partitioning operation directly rather than by element) 137.99 78 P FMENDPAGE %%EndPage: "24" 24 %%Page: "25" 25 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (25) 532 42.62 T 0 12 Q 1.31 (by element copying at runtime. The compiler cannot statically analyze data access pat-) 108 712 P 0.51 (terns. Also the expressions can become complex for programmers. Note that the HeNCE) 108 698 P 1.52 (block triangular solver assumes that the degree of parallelism \050size of the block array\051) 108 684 P 1.06 (evenly divides the size of the array) 108 670 P 1.06 (. If this were not the case, the necessary expressions) 280.87 670 P (would be much more complex.) 108 656 T 0.46 (One can summarize the dif) 108 630 P 0.46 (ferences between CODE and HeNCE by saying that CODE is) 238.92 630 P 1.23 (more capable and at least as ef) 108 616 P 1.23 (\336cient \050implementable\051 but HeNCE is more concise and) 261.77 616 P (simpler for beginning programmers.) 108 602 T 1 F (5.7 A Pr) 108 570 T (oposed Language) 153.11 570 T 0 F 0.65 (V) 108 544 P 0.65 (isual programming language designers must search for a point of compromise between) 115.94 544 P 0.01 (the extremes of ease of use and \337exibility) 108 530 P 0.01 (. This point is dependent on the problem domain) 306.92 530 P 0.15 (of interest. W) 108 516 P 0.15 (e tar) 172.99 516 P 0.15 (get computational science and hence have a bias towards numerical and) 193.91 516 P 3.14 (matrix-oriented algorithms. In this domain, the balance point probably lies between) 108 502 P 1.91 (CODE and HeNCE, especially since execution ef) 108 488 P 1.91 (\336ciency is also a major goal. Model) 356.87 488 P (expressiveness and ef) 108 474 T (fective implementation also tend to be competing goals.) 211.75 474 T -0.16 (Figure 17 shows the block triangular solver expressed in a language that is to be even sim-) 108 448 P 0.12 (pler to use than HeNCE without being much less capable. The model supports graph call-) 108 434 P 0.04 (ing and so has interface nodes as in CODE. Graphs show control \337ow and so are closer to) 108 420 P 1.87 (the HeNCE model. Shared variables accessible within a graph are de\336ned as separate) 108 406 P -0.23 (icons as in CODE, but arcs are not required to show that a computation node access a vari-) 108 392 P 2.2 (able. The unit of reuse is the graph since concise representations are required. As in) 108 378 P (HeNCE, arcs require no annotation.) 108 364 T 0.43 (There are two classes of computation nodes: replicated and non-replicated. Double circle) 108 338 P 0.03 (icons represent replicated nodes. Both are annotated by the set of variables for which read) 108 324 P (access is needed, the set for which write access is needed, and a sequential computation.) 108 310 T -0.3 (Array variable icons allow the direct de\336nition of partitions to support blocked algorithms.) 108 284 P 0.4 (Angle brackets \050as in \051 are used to access blocks, and square brackets \050as in) 108 270 P 0.9 ([expression]\051 access array elements. Blocks may overlap, but only one block \322owns\323 an) 108 256 P (element. W) 108 242 T (rites to overlap regions in block that do not own them are local only) 162.84 242 T (.) 487.69 242 T 0.63 (Finally \322:\323 is a size operator) 108 216 P 0.63 (. For example,) 245.46 216 P 1 F 0.63 (A:i) 319.67 216 P 0 F 0.63 ( returns the number of elements in the) 335.66 216 P 1 F 0.63 (ith) 526 216 P 0 F (dimension of) 108 202 T 1 F (A) 174 202 T 0 F (, counting from zero.) 182.66 202 T FMENDPAGE %%EndPage: "25" 25 %%Page: "26" 26 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (26) 532 42.62 T 0 12 Q (Figure 17. Block T) 189.94 376 T (riangular Solver in Proposed Language.) 280.85 376 T 0.06 (W) 108 348 P 0.06 (e believe that a simple model such as the one outlined above would be a valuable paral-) 118.37 348 P 1.95 (lel programming tool. Concerns that it is not adequately \337exible can be addressed by) 108 334 P 3.92 (designing environments in which many dif) 108 320 P 3.92 (ferent representations \050both parallel and) 333.04 320 P 0.37 (sequential\051 can co-exist. Beginning parallel programmers can begin with the most simple) 108 306 P 1.59 (representations and learn the more complex on an as needed basis. All representations) 108 292 P 0.34 (must provide a unit of reuse with a common semantics in order to interoperate. W) 108 278 P 0.34 (e adopt) 504.67 278 P 0.95 (the simple semantics of an atomic computation which accepts inputs and computes out-) 108 264 P (puts with no inter) 108 250 T (-unit interactions in between.) 192.1 250 T 1 16 Q (6.0 Debugging in the V) 108 209.33 T (isual pr) 267.42 209.33 T (ogramming Envir) 319.15 209.33 T (onment) 441.09 209.33 T 0 12 Q 1.19 (Both logical and performance debugging are important aspects of the parallel program-) 108 182 P -0.16 (ming processes. Performance debugging relates to understanding and improving the speed) 108 168 P 1.07 (of a program, and logical debugging relates to it correcting errors in the logic of a pro-) 108 154 P (gram. This section focuses primarily on logical debugging.) 108 140 T 1.27 (Debugging establishes the relationship between the program \050typically some small seg-) 108 114 P -0.1 (ment of a lar) 108 100 P -0.1 (ge program\051 and its execution. The entities involved in debugging include: \050i\051) 168.47 100 P 0.25 (the program, P) 108 86 P 0.25 (, \050ii\051 a speci\336cation of a program\325) 178.15 86 P 0.25 (s \050or a program segment\325) 340.59 86 P 0.25 (s\051 expected exe-) 461.55 86 P 0.08 (cution behavior \050which we call M for model of behavior\051, and \050iii\051 some representation of) 108 72 P 108 63 540 720 C 166.5 398 481.5 708 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 180.5 684 188.5 692 R 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K N 414.5 683 422.5 691 R N 180.5 657 188.5 665 R N 0 12 Q (start) 207.5 626 T 200.5 621 234.5 636 7.5 RR N 199.5 408 233.5 423 7.5 RR N (return) 202.5 413 T 208.5 584 199.5 593 208.5 602 226.5 602 235.5 593 226.5 584 6 Y N 227.29 595.6 225.76 587.75 222.9 595.22 225.16 594.61 4 Y V 209.42 590 M 207.95 600.32 221.08 600.56 225.16 594.63 D N 221.9 453.44 224.76 460.91 226.29 453.06 224.16 454.05 4 Y V 208.42 458.65 M 206.95 448.34 220.08 448.1 224.16 454.02 D N 208.5 447.25 199.5 456.25 208.5 465.25 226.5 465.25 235.5 456.25 226.5 447.25 6 Y N 90 450 12 12 217.5 550 A 90 450 12 12 217.5 500 A 90 450 9 9 217.5 500 A 3 10 Q (j = 0 to N-1;) 244.5 591 T (read: A as A;) 242.5 558 T (write: b as b;) 242.5 548 T (compute: Solve\050A, A:0, b\051;) 242.5 538 T (replicate: i = j+1 to N-1;) 237.5 515 T (read: A as A; b as b_up;) 237.5 505 T (write: b as b;) 237.5 495 T (compute: BlkMult\050A, A:0, A:1, b, b_up\051;) 237.5 485 T (double a[][];) 198.5 692 T (partition: block\050N\051, block\050N\051;) 198.5 682 T (double b[];) 197.5 665 T (partition: block\050N\051;) 197.5 655 T (int N;) 430.5 684 T 219.71 610.19 217.5 602.5 215.29 610.19 217.5 609.39 4 Y V 217.5 620 217.5 609.39 2 L N 219.21 570.69 217 563 214.79 570.69 217 569.89 4 Y V 217 583.5 217 569.89 2 L N 219.71 521.69 217.5 514 215.29 521.69 217.5 520.89 4 Y V 217.5 538 217.5 520.89 2 L N 219.71 473.69 217.5 466 215.29 473.69 217.5 472.89 4 Y V 217.5 488 217.5 472.89 2 L N 219.21 431.69 217 424 214.79 431.69 217 430.89 4 Y V 217 446.5 217 430.89 2 L N 167 398.5 481 707.5 R 1 H 0 Z N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "26" 26 %%Page: "27" 27 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (27) 532 42.62 T 0 12 Q 0.71 (the program\325) 108 712 P 0.71 (s actual execution behavior) 170.37 712 P 0.71 (, E. Debuggers for programs written in pure text) 303 712 P 0.79 (forms typically use a dif) 108 698 P 0.79 (ferent representation for each of these entities, and this imposes) 227.6 698 P 0.03 (much additional work on the programmer) 108 684 P 0.03 (. This is especially true since execution environ-) 307.81 684 P 0.07 (ments and representations are typically very dif) 108 670 P 0.07 (ferent across parallel architectures. Ideally) 336.14 670 P 0.26 (each of the entities P) 108 656 P 0.26 (, M, and E would be expressed in the same representation so that the) 207.69 656 P -0.28 (programmer would not have to understand and manipulate several dif) 108 642 P -0.28 (ferent notations. One) 439.57 642 P 0 (of the major bene\336ts of visual directed graph programming is that it supports the formula-) 108 628 P 0.05 (tion of parallel program debuggers in which all of the entities can be expressed in a single) 108 614 P 0.1 (notation. This simpli\336es the task of debugging not only because it allows the programmer) 108 600 P -0.29 (to think in terms of the program which is what he understands but also because it admits of) 108 586 P -0.2 (ready automation of the often tedious tasks of comparing expected and actual behaviors. It) 108 572 P 2.28 (also facilities identi\336cation of the logic faults in the program. Ef) 108 558 P 2.28 (forts are ongoing to) 438.85 558 P (implement such a debugger in the context of the CODE system [Hyd93].) 108 544 T 0.95 (The example which follows illustrates how the visual directed graph representation of a) 108 518 P 0.67 (program supports both the problem formulation and the analysis steps of parallel debug-) 108 504 P -0.12 (ging. As before, the program is a directed graph whose nodes are sites for the execution of) 108 490 P (atomic actions.) 108 476 T 1 11 Q ( De\336nition 1:) 108 450 T 0 12 Q 0.71 (An) 172.8 450 P 4 F 0.71 (action) 191.18 450 P 0 F 0.71 ( is an operation for which there exists a known input/output rela-) 221.18 450 P (tion for a given initial state. It is the atomic function of a node.) 126 436 T 0.17 (The execution of a program is the traversal of the graph starting with an assignment of an) 108 410 P 0.28 (initial state, until the execution of a \336nal state. T) 108 396 P 0.28 (raversal of the graph causes execution of) 342.4 396 P (actions at the nodes and generates a partially ordered set of action executions or events.) 108 382 T 1 11 Q ( De\336nition 2:) 108 356 T 0 12 Q (An) 171.87 356 T 4 F (Event) 189.53 356 T 0 F (is an execution of the action at a node of the program graph.) 219.85 356 T 1.67 (The partially ordered set of events of an execution de\336nes a directed acyclic graph of) 108 330 P -0.04 (events that corresponds to instantiations of the actions de\336ned at the nodes of the program) 108 316 P (graph structure.) 108 302 T 1 11 Q 0.01 ( De\336nition 3:) 108 276 P 4 12 Q 0.01 (Debugging) 171.9 276 P 0 F 0.01 ( is the process of identifying those actions of the program that are) 225.23 276 P (responsible for the failure of the program to meet its \336nal state speci\336cation.) 126 262 T 0.92 (Let us start with a program, P) 108 236 P 0.92 (, that has been observed to produce invalid \336nal states for) 254.51 236 P 0.01 (execution from one or more initial states. W) 108 222 P 0.01 (e use a version of the Block T) 319.06 222 P 0.01 (riangular Solver) 462.34 222 P 1.52 (for CODE \050Figure 12\051 to which we have deliberately introduced a sequencing error to) 108 208 P 0.34 (illustrate the various steps of the debugging process. W) 108 194 P 0.34 (e have incorrectly coded the array) 375.38 194 P (index of) 108 180 T 2 F (B_TO_M) 150.66 180 T 0 F ( in the routing rule for) 193.86 180 T 1 F (Solve) 303.18 180 T 0 F ( as) 330.52 180 T 3 10 Q (B_TO_M[i]) 144 161.33 T 0 12 Q (instead of) 108 136 T 3 10 Q (B_TO_M[i+WhichBlock].) 144 117.33 T 0 12 Q -0.17 (The execution of this bugged version starts with an initial state where N=5, and terminates) 108 92 P (with a segmentation fault. W) 108 78 T (e now follow the dif) 246.02 78 T (ferent steps of the debugging process:) 343.13 78 T FMENDPAGE %%EndPage: "27" 27 %%Page: "28" 28 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (28) 532 42.62 T 0 12 Q (1.) 108 712 T (Identify and select the portions of the program whose behavior is to be monitored.) 121.75 712 T 0.15 (This is a set of \322suspect\323 nodes or subgraphs. Note that it is typically impossible to moni-) 108 686 P 0.46 (tor the entire execution behavior of lar) 108 672 P 0.46 (ge complex programs \050which are actually the ones) 295.17 672 P 0.03 (that need debugging\051. The visual/graphical representation of P makes the selection of sus-) 108 658 P 0.26 (pect portions of the program easy) 108 644 P 0.26 (. In our example, we click on the) 269.5 644 P 1 F 0.26 (Solve) 432.22 644 P 0 F 0.26 ( and) 459.56 644 P 1 F 0.26 (Mult) 483.41 644 P 0 F 0.26 ( nodes) 508.74 644 P 1.52 (of the graph of Figure 12 to inform the debugger that they need to be monitored. The) 108 630 P 0.67 (debugger makes additional preparations to \336lter out event executions of other nodes like) 108 616 P 1 F -0.23 (Dist) 108 602 P 0 F -0.23 ( and) 128.66 602 P 1 F -0.23 (Gath) 151.54 602 P 0 F -0.23 (. This greatly helps in later steps as much of the irrelevant information is \336l-) 177.54 602 P (tered out.) 108 588 T (2.) 108 568 T (Specify the expected execution behavior of the set of nodes that are to be monitored.) 121.75 568 T 1.17 (The natural mode of representation of execution behavior for graphical programs is the) 108 542 P 0.38 (partially ordered set of events expected to be generated by the execution of the actions at) 108 528 P 2.55 (the nodes of the suspect subgraphs. Let us call this representation, M, for model of) 108 514 P -0.04 (expected execution behavior) 108 500 P -0.04 (. M is given as a partially ordered set of events. W) 244.55 500 P -0.04 (e can either) 484.77 500 P 0.66 (construct this set of events directly) 108 486 P 0.66 (, or construct a graph of actions whose execution will) 277.48 486 P -0.19 (generate the desired partially ordered sets of events. In this case, we specify M by drawing) 108 472 P 0.38 (a graph that is shown in Figure 18\050a\051. In the data-\337ow description of Figure 9, we expect) 108 458 P 1.91 (that the) 108 444 P 6 F 1.91 (i) 150.48 444 P 0 F 1.91 (-th execution of) 153.82 444 P 1 F 1.91 (Solve) 238.52 444 P 0 F 1.91 ( will be followed by the executions of) 265.86 444 P 1 F 1.91 (Mult) 465.77 444 P 0 F 1.91 ( instances) 491.1 444 P (whose node indices would range from) 108 430 T 6 F (j) 293.96 430 T 0 F ( =) 297.3 430 T 6 F (i) 310.07 430 T 0 F ( to) 313.4 430 T 6 F (N-1) 328.74 430 T 0 F (.) 347.4 430 T (Figure 18. \050a\051 Graph of M. \050b\051 Partial Order graph of E. \050c\051 Elaborated Graph of M.) 130.27 260.33 T (3.) 108 232.33 T (Capture the execution behavior of the selected portions of the program.) 121.75 232.33 T 0.29 (The execution behavior is a partially ordered sequence of events that actually occurred in) 108 206.33 P 1.55 (the execution. Let us call this partially ordered set of events E. The user obtains E by) 108 192.33 P 0.54 (selecting a set of program nodes with the mouse and then running the program. The sys-) 108 178.33 P 0.21 (tem then automatically records all of the necessary events and orderings. The selection of) 108 164.33 P 1 F -0.25 (Mult) 108 150.33 P 0 F -0.25 ( and) 133.33 150.33 P 1 F -0.25 (Solve) 156.17 150.33 P 0 F -0.25 ( nodes in step 1 produced such an annotation. As a result, the actual execu-) 183.51 150.33 P 0.9 (tion behavior observed by the debugger as shown in Figure 18\050b\051 contains event execu-) 108 136.33 P 1.89 (tions of only the selected nodes. In the \336gure, event) 108 122.33 P 6 F 1.89 (s) 377.56 122.33 P 6 9.6 Q 1.51 (i) 382.23 119.33 P 0 12 Q 1.89 (indicates the) 389.79 122.33 P 6 F 1.89 (i) 456.89 122.33 P 0 F 1.89 (-th execution of) 460.23 122.33 P 1 F 1.81 (Solve) 108 108.33 P 0 F 1.81 (,) 135.34 108.33 P 1.81 (and) 143.15 108.33 P 1.81 (event) 165.29 108.33 P 6 F 1.81 (m) 196.09 108.33 P 6 9.6 Q 1.45 (j) 205.42 113.13 P 1.45 (i) 208.09 105.33 P 0 12 Q 1.81 (indicates the) 214.61 108.33 P 6 F 1.81 (i) 281.55 108.33 P 0 F 1.81 (-th execution of that instance of) 284.89 108.33 P 1 F 1.81 (Mult) 451.06 108.33 P 0 F 1.81 ( whose node) 476.39 108.33 P (index is) 108 94.33 T 6 F ( j) 145.67 94.33 T 0 F (.) 152 94.33 T 108 63 540 720 C 115.67 282.33 532.33 400 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 155.48 339.86 153.82 334.09 152.17 339.86 153.82 339.26 4 Y 0 X 0 0 0 1 0 0 0 K V 153.82 368.75 153.82 339.26 2 L 0.5 H 2 Z N 1 10 Q (Solve) 146.61 380.98 T 6 F ( \050s\051) 169.39 380.98 T 1 F (Mult) 144.38 313.91 T 6 F ( \050m\051) 165.49 313.91 T 164.77 367.11 160.15 370.93 166.1 370.14 164.88 368.87 4 Y V 159.33 330 188.44 337.42 189.36 358.22 164.88 368.87 4 L N 150.99 368.75 155.99 373.01 2.13 RR 0.3 H N 152.67 329.33 157.66 333.59 2.13 RR N 1 F (\050a\051) 151.57 295.24 T (\050b\051) 267.29 294.58 T (\050c\051) 494.51 295.91 T 0 8 Q (Segmentation) 341.07 305.8 T (fault) 341.74 294.47 T 315.72 350.4 309.99 348.62 313.91 353.17 314.31 351.45 4 Y V 338 366.99 314.31 351.45 2 L N 332.8 331.7 336.85 327.29 331.07 328.88 332.45 329.98 4 Y V 308.64 344.55 332.45 329.98 2 L N 6 10 Q (m) 286.6 322.49 T 6 8 Q (2) 294.38 326.49 T (2) 298.38 319.99 T 6 10 Q (s) 317.96 346.67 T 6 8 Q (2) 321.85 344.17 T 309.7 330.25 307.81 324.56 306.39 330.39 308.02 329.72 4 Y V 308.64 344.55 308.02 329.72 2 L N 6 10 Q (m) 344.2 321.98 T 6 8 Q (1) 351.98 325.98 T (2) 355.98 319.48 T 6 10 Q (s) 316.28 293.88 T 6 8 Q (3) 320.17 291.38 T 312.12 375.6 310.47 369.83 308.81 375.6 310.47 375 4 Y V 310.47 389.95 310.47 375 2 L N 278.73 369.98 272.92 368.49 277.06 372.83 277.38 371.1 4 Y V 309.52 389.95 277.38 371.1 2 L N 333.1 376.12 336.59 371.24 331.05 373.53 332.55 374.45 4 Y V 312.19 390.62 332.55 374.45 2 L N 6 10 Q (m) 248.52 362.15 T 6 8 Q (3) 256.3 366.15 T (1) 260.3 359.65 T 6 10 Q (m) 344.77 365.6 T 6 8 Q (1) 352.55 369.6 T (1) 356.11 363.1 T 6 10 Q (m) 288.82 364.15 T 6 8 Q (2) 296.6 368.15 T (1) 300.6 361.65 T 6 10 Q (s) 318.02 394.76 T 6 8 Q (1) 321.91 392.26 T 310.19 302.44 308.69 296.63 306.89 302.36 308.55 301.8 4 Y V 308.06 320.52 308.56 301.8 2 L N 306.78 344.55 310.49 347.85 1.65 RR N 306.84 293.33 310.55 296.63 1.65 RR N 336.14 366.99 339.85 370.29 1.65 RR N 308.12 391.44 311.83 394.73 1.65 RR N 271.07 365.19 274.78 368.49 1.65 RR N 307.54 366.84 311.25 370.14 1.65 RR N 334.88 323.22 338.59 326.52 1.65 RR N 305.96 321.26 309.67 324.56 1.65 RR N 448.34 333.85 446.69 328.08 445.03 333.85 446.69 333.24 4 Y V 446.69 363.89 446.69 333.24 2 L N 6 10 Q (s) 454.1 374.13 T (m) 471.7 312.39 T 6 8 Q (1) 479.48 316.39 T 449.36 357.97 448.86 363.95 452.45 359.15 450.69 359.12 4 Y V 450.2 325.14 452.8 332.57 452.89 353.36 450.7 359.12 4 L N 417.23 326.48 422.22 330.75 2.13 RR N 454.98 364.34 450.18 367.95 456.16 367.43 455.01 366.1 4 Y V 477.52 329.95 479.21 335.9 479.55 356.7 455.01 366.1 4 L N 473.5 334.94 475.52 329.29 470.81 333.01 472.51 333.48 4 Y V 450.19 364.62 472.51 333.48 2 L N 425.36 334.58 420.85 330.62 422.58 336.36 423.64 334.97 4 Y V 443.52 365.95 423.65 334.96 2 L N 6 10 Q (m) 441.7 311.06 T 6 8 Q (2) 449.48 315.06 T 6 10 Q (m) 413.04 310.39 T 6 8 Q (3) 420.82 314.39 T 444.56 323.81 449.55 328.08 2.13 RR N 474.86 326.35 479.85 330.62 2.13 RR N 444.86 364.35 449.85 368.62 2.13 RR N 338.31 312.84 337.07 306.97 335.02 312.6 336.71 312.12 4 Y 11 X V 335.97 322.55 336.71 312.12 2 L N 116.17 282.83 531.83 399.5 R 1 H 0 Z 0 X N 108 63 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "28" 28 %%Page: "29" 29 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (29) 532 42.62 T 0 12 Q (4.) 108 712 T (Map E to M to determine the locations where the actual and expected events \336rst) 121.75 712 T (diver) 121.75 698 T (ge.) 146.19 698 T -0.25 (The mapping of E to M can be done automatically since they are speci\336ed in the same rep-) 108 672 P 0.6 (resentation. The result is identi\336cation of event sequences in E that do not correspond to) 108 658 P 0.69 (the allowed set de\336ned in M. In Figure 18\050b\051, we note that the events) 108 644 P 6 F 0.69 (m) 452.32 644 P 6 9.6 Q 0.55 (1) 461.65 648.8 P 0.55 (1) 465.92 641 P 0 12 Q 0.69 (,) 470.72 644 P 6 F 0.69 (m) 477.42 644 P 6 9.6 Q 0.55 (2) 486.75 648.8 P 0.55 (1) 491.55 641 P 0 12 Q 0.69 ( and) 496.35 644 P 6 F 0.69 (m) 521.06 644 P 6 9.6 Q 0.55 (3) 530.4 648.8 P 0.55 (1) 535.2 641 P 0 12 Q 0.96 (follow event) 108 630 P 6 F 0.96 (s) 173.24 630 P 6 9.6 Q 0.76 (1) 177.9 627 P 0 12 Q 0.96 (. W) 182.7 630 P 0.96 (e, however) 200.03 630 P 0.96 (, expected that events) 253.15 630 P 6 F 0.96 (m) 363.28 630 P 6 9.6 Q 0.76 (j) 372.61 634.8 P 0.76 (i) 375.28 627 P 0 12 Q 0.96 ( that follow event) 377.95 630 P 6 F 0.96 (s) 469.1 630 P 6 9.6 Q 0.76 (i) 473.76 627 P 0 12 Q 0.96 (, would have) 476.43 630 P 0.22 (node indices that range from) 108 616 P 6 F 0.22 (j) 249.4 616 P 0 F 0.22 ( =) 252.73 616 P 6 F 0.22 (i) 265.94 616 P 0 F 0.22 ( to) 269.27 616 P 6 F 0.22 (N-1) 285.05 616 P 0 F 0.22 (. As N = 5 and there is no event) 303.7 616 P 6 F 0.22 (m) 460.96 616 P 6 9.6 Q 0.17 (4) 470.3 620.8 P 0.17 (1) 475.1 613 P 0 12 Q 0.22 (, this detects) 479.9 616 P 1.57 (the occurrence of an unexpected behavior) 108 602 P 1.57 (. Moreover) 315.42 602 P 1.57 (, the mapping of E to M gives an) 369.82 602 P 0.85 (elaborated graph of M as shown in Figure 18\050c\051. This is a run-time structure that shows) 108 588 P 0.26 (dynamically created instances of nodes. The elaborated graph is obtained from the partial) 108 574 P 0.87 (order graph of E in Figure 18\050b\051 by folding back the later executions of a node, to their) 108 560 P -0 (\336rst execution. Figure 18\050c\051 shows three dynamically created instances of node) 108 546 P 1 F -0 (Mult) 491.2 546 P 0 F -0 (;) 516.53 546 P 6 F -0 (m) 522.86 546 P 6 9.6 Q -0 (1) 532.2 550.8 P 0 12 Q -0 (,) 537 546 P 6 F (m) 108 532 T 6 9.6 Q (2) 117.34 536.8 T 0 12 Q ( and) 122.14 532 T 6 F (m) 145.46 532 T 6 9.6 Q (3) 154.8 536.8 T 0 12 Q (. Note that we expected four instances.) 159.6 532 T (5.) 108 512 T (Map the elaborated graph of M back to P to de\336ne corrective action.) 121.75 512 T 0.03 (Since the elaborated graph of M contains instances of the nodes of P) 108 486 P 0.03 (, the mapping is auto-) 435.57 486 P 0.13 (matic, and guides us towards the of) 108 472 P 0.13 (fending action in P) 278.2 472 P 0.13 (. The mapping from Figure 18\050c\051 to) 368.25 472 P 0.24 (Figure 12, helps in ascertaining the cause of the unexpected number of instances of Mult.) 108 458 P 0.36 (As explained in Section) 108 444 P 0.36 (5.4, the creation of multiple instances of) 226.4 444 P 1 F 0.36 (Mult) 425.21 444 P 0 F 0.36 ( is tied to the indi-) 450.54 444 P 0.03 (ces of the output port speci\336ed in the routing rule of) 108 430 P 1 F 0.03 (Solve) 361.31 430 P 0 F 0.03 (. Output port) 388.65 430 P 2 F 0.07 (B_TO_M) 453.41 430 P 0 F 0.03 ( of) 496.61 430 P 1 F 0.03 (Solve) 512.66 430 P 0 F 1.58 (connects to) 108 416 P 1 F 1.58 (Mult) 168.48 416 P 0 F 1.58 ( and the data placed on its indices is responsible for creating various) 193.81 416 P -0.16 (instances of) 108 402 P 1 F -0.16 (Mult) 167.66 402 P 0 F -0.16 (. The mapping, therefore, guides us to the incorrect coding in the routing) 193 402 P (rule of) 108 388 T 1 F (Solve) 142.66 388 T 0 F (.) 169.99 388 T 0.36 (There are various points that should be noted in the above process. A programmer would) 108 362 P 1.79 (often cycle through these steps a number of times before identifying the bug. In each) 108 348 P (cycle, the programmer will progressively come closer to the of) 108 334 T (fending piece of code.) 409.06 334 T -0.19 (The use of actions, instead of events, in the representation of M greatly helps the debugger) 108 308 P -0.25 (in \336ltering out of the irrelevant information. This restricts the execution history displays of) 108 294 P 1.4 (E to only the events that are of interest to the user) 108 280 P 1.4 (. This \336ltering greatly simpli\336es the) 361.01 280 P 0.46 (checking of M that can either be done visually by the user with the help of the execution) 108 266 P 0.81 (displays provided by the debugger) 108 252 P 0.81 (, or can be done automatically by the model checking) 276.08 252 P (facility of the debugger) 108 238 T (.) 219.65 238 T 0.39 (An Animation facility provided by the debugger is simply a visualization of the mapping) 108 212 P 0.27 (of E to M. The elaborated graph acts as an underlying structure for animation and greatly) 108 198 P (helps in animation.) 108 184 T 1.19 (Thus, a visual programming environment provides a consistent graphical representation) 108 158 P 0.84 (for all the dif) 108 144 P 0.84 (ferent entities used in the debugging process and simpli\336es the design of a) 173.29 144 P 0.37 (concurrent debugger that coherently relates the various steps of the debugging process. It) 108 130 P 0.03 (also provides a uni\336ed framework for supporting dif) 108 116 P 0.03 (ferent concurrent debugging facilities) 359.62 116 P (like execution history displays, animation, and model checking facilities.) 108 102 T FMENDPAGE %%EndPage: "29" 29 %%Page: "30" 30 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (30) 532 42.62 T 1 16 Q (7.0 Related W) 108 709.33 T (ork) 207.55 709.33 T 0 12 Q 2.76 (There has been much work on visual programming languages and environments for) 108 682 P 1.7 (sequential systems. Prograph [TGS92] and PICT [Gli84] are substantial examples. W) 108 668 P 1.7 (e) 534.67 668 P (will focus on visual parallel programming languages.) 108 654 T 1 F (7.1 Older Systems and Pr) 108 622 T (oposals) 241.12 622 T 0 F 0.34 ( CODE and HeNCE are certainly not the \336rst systems to be designed for visual program-) 108 596 P 1.64 (ming of parallel systems via graphs that show parallel structure. This sections surveys) 108 582 P (some of the earlier attempts.) 108 568 T 2.52 (Karp and Miller [Kar66] proposed a graph-based model of parallel computation that) 108 542 P 1.58 (includes non-\336xed \336ring conditions. The model also permits proof of determinacy and) 108 528 P 1.42 (useful theorems on computation terminations and bounding the size of queues on arcs.) 108 514 P -0.05 (The model is capable of expressing some interesting numerical algorithms, but is not \337ex-) 108 500 P (ible enough for general use.) 108 486 T 0.91 (There have been several proposals for visual data\337ow oriented programming languages.) 108 460 P 0.89 (Adams\325) 108 446 P 0.89 (s model [Ada68] is an early example. Computations are deterministic. There are) 145.33 446 P 1.03 (sophisticated techniques for mapping inputs to outputs, as \336ring and routing rules do in) 108 432 P 0.87 (CODE. Ackerman [Ack82] provides a general discussion of early ideas in data\337ow lan-) 108 418 P -0.2 (guages. Keller and Y) 108 404 P -0.2 (en [Kel81] discuss directed graph programming and Davis and Keller) 207.51 404 P 1.01 ([Dav82] present a data\337ow language with special purpose nodes for non-standard \336ring) 108 390 P (rules and discuss graph composition.) 108 376 T 2 F (\245) 108 356 T 0 F (CODE 1.x) 121.75 356 T 0.37 (J.C. Browne has been investigating computation graph systems for many years. The gen-) 108 330 P 1.24 (eral advantages of such systems and the outline of a model of parallel computation are) 108 316 P 0.04 (presented in [Bro85], and Browne and his students also developed several earlier versions) 108 302 P 0.44 (of CODE [Bro89, Jai91]. These form the intellectual basis for the current version but are) 108 288 P 0.07 (much less capable. CODE 1.2 served as the basis for experiments in reuse within the con-) 108 274 P (text of a graph model [Lee89, Bro90].) 108 260 T 2 F (\245) 108 240 T 0 F (Schedule) 121.75 240 T 1.37 (Schedule [Don86] is a visual computation graph oriented system that facilitates calling) 108 214 P 3.14 (separate sequential routines. Ideas from it in\337uenced later systems including Phred,) 108 200 P (HeNCE, and some versions of CODE.) 108 186 T 2 F (\245) 108 166 T 0 F (Phred) 121.75 166 T -0.11 (Phred [Beg91b] is a graphical system that greatly expands on the semantics of schedule. It) 108 140 P -0.25 (uses graph grammars in its language de\336nition and special nodes for \336ring rules, computa-) 108 126 P 0.03 (tions, and some runtime determined computation structures. Programs consist of a combi-) 108 112 P (nation of control \337ow and data\337ow graphs. Phred heavily in\337uenced HeNCE.) 108 98 T 2 F (\245) 108 78 T 0 F (Neptune) 121.75 78 T FMENDPAGE %%EndPage: "30" 30 %%Page: "31" 31 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (31) 532 42.62 T 0 12 Q -0.23 (Neptune [T) 108 712 P -0.23 (ra90] is a computation graph based graphical programming environment that is) 162.34 712 P (similar in most respects to older versions of CODE.) 108 698 T 2 F (\245) 108 678 T 0 F (Poker) 121.75 678 T 0.67 (Poker [Sny85] is noteworthy as an early graphical parallel programming environment. It) 108 652 P -0.03 (is, however) 108 638 P -0.03 (, a fairly distant relative of CODE and HeNCE. It graphical displays lattices of) 162.81 638 P -0.07 (virtual processing elements and allows these nodes to be annotated with a sequential algo-) 108 624 P (rithm.) 108 610 T 2 F (\245) 108 590 T 0 F (Paragraph) 121.75 590 T 0.01 (Paragraph [Bai91] is a very interesting model of parallel programming in which computa-) 108 564 P 0.46 (tion graphs are expressed by productions in a graph grammar) 108 550 P 0.46 (, thus allowing dynamically) 405.28 550 P (structured graphs.) 108 536 T 1 F (7.2 Recent Systems) 108 504 T 0 F 1.16 (There are some more recent systems that are similar to CODE, many of which are still) 108 478 P 2.53 (under active development. Some are primarily general purpose parallel programming) 108 464 P (environments. Other mostly serve as platforms for research in scheduling.) 108 450 T 2 F (\245) 108 430 T 0 F (Paralex) 121.75 430 T 0.17 (Paralex [Bab92] is a graphical programming environment with a model similar in expres-) 108 404 P 0.69 (sive power to earlier versions of CODE. However) 108 390 P 0.69 (, it incorporates sophisticated facilities) 352.27 390 P 0.05 (for fault tolerance and dynamic load balancing on tar) 108 376 P 0.05 (get architectures such as networks of) 362.79 376 P (workstations.) 108 362 T 2 F (\245) 108 342 T 0 F (PPSE) 121.75 342 T 1.47 (The Parallel Programming Support Environment \050PPSE\051 [Lew90] is an ambitious inte-) 108 316 P 1.25 (grated environment for the development of parallel programs. It consists of many tools) 108 302 P 0.41 (beginning with a data\337ow computation graph based graphical programming environment) 108 288 P -0.18 (called Parallax [Lew93]. The Parallax language includes hierarchy) 108 274 P -0.18 (, data\337ow \050with named\051) 425.89 274 P (ports, and variable storage nodes.) 108 260 T 0.8 (At this time, \336ring guards are not yet implemented. This greatly reduces the expressive-) 108 234 P 0.68 (ness of its model of computation. For now) 108 220 P 0.68 (, PPSE\325) 315.28 220 P 0.68 (s primary role appears to be as a basis) 352.64 220 P (for research in scheduling.) 108 206 T 0.41 (Other tools in PPSE include a graphical tar) 108 180 P 0.41 (get machine description system, task analysis,) 316.97 180 P 1.5 (mapping, and scheduling tools, a code generator that tar) 108 166 P 1.5 (gets the STRAND language, a) 388.37 166 P (simulator) 108 152 T (, and various performance and schedule visualization tools.) 152.86 152 T 2 F (\245) 108 132 T 0 F (VERDI) 121.75 132 T 0 (VERDI is a visual language used to develop distributed programs in Raddle [Gra90]. Pro-) 108 106 P 0.84 (grams consist of a set of graphs. Control \337ow in a graph is represented by the \337ow of a) 108 92 P 0.23 (token through it. Data may be attached to the token. Communication and synchronization) 108 78 P FMENDPAGE %%EndPage: "31" 31 %%Page: "32" 32 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (32) 532 42.62 T 0 12 Q -0.08 (are carried out by means of an N-party interaction facility in which tokens must arrive at a) 108 712 P 0.36 (box \050with a common label\051 in each of the interacting graphs. The language supports non-) 108 698 P 0 (determinism since tokens can \337ow to varying sets of boxes, each of which would enable a) 108 684 P 2.2 (dif) 108 670 P 2.2 (ferent N-party interaction. The system non-deterministically chooses. The language) 121.12 670 P (supports indexed replication, somewhat like HeNCE\325) 108 656 T (s.) 363.97 656 T 2 F (\245) 108 636 T 0 F (D) 121.75 636 T 0 9.6 Q (2) 130.41 640.8 T 0 12 Q (R) 135.21 636 T 2.57 (D) 108 610 P 0 9.6 Q 2.06 (2) 116.66 614.8 P 0 12 Q 2.57 (R \050Dynamic Data\337ow Representation\051 [Ros93] is a recent model that bears much) 121.46 610 P 1.23 (resemblance to HeNCE. However) 108 596 P 1.23 (, it appears to have an orientation towards scheduling) 274.51 596 P (research. It has been implemented on a multi-transputer system called DAMP [Bau91].) 108 582 T 0.5 (As with older versions of HeNCE, the language has both a textual and a graphical repre-) 108 556 P 0.07 (sentation. There are special constructs for loops, parallel fork-join constructs, and alterna-) 108 542 P 0.46 (tives \050n-way if\051. The model is dynamic since the width of a fork-join, and the loop count) 108 528 P 0.76 (of a loop are runtime parameters. There is no hierarchy and no concept of general \336ring) 108 514 P (rule guards.) 108 500 T 0.09 (Simple data\337ow nodes wait for data on all input before \336ring and produce data on all out-) 108 474 P (puts when \336ring is complete. Functions that nodes run are stored in separate \336les.) 108 460 T 2 F (\245) 108 440 T 0 F (ALEX) 121.75 440 T 2.87 (ALEX [Koz90] is an interesting functional visual parallel programming language in) 108 414 P 1.32 (which the focus is on drawing pictures of data, typically arrays. For example, a matrix) 108 400 P 0.78 (multiply program is created by drawing two rectangles that represent input matrices and) 108 386 P -0.05 (then drawing a representative row within one and a column within another) 108 372 P -0.05 (. In conjunction) 464.43 372 P -0.05 (with library routines for multiplication and addition, the diagram is then extended to show) 108 358 P (how to form the resulting matrix from the rows and columns of the input matrices.) 108 344 T 2 F (\245) 108 324 T 0 F (PFG) 121.75 324 T 1.34 (PFG is a graphical parallel programming language whose formal operational semantics) 108 298 P 0.53 (are described by HG [Sto90]. Like HeNCE, it uses special icons to create constructs that) 108 284 P 1.91 (control node execution. It has facilities for parallel branching \050generalized conditional) 108 270 P 0.25 (branching\051 and non-deterministic branching. PFG is billed as an \322assembly language\323 for) 108 256 P (higher level visual parallel programming languages.) 108 242 T 1 16 Q (8.0 Obtaining HeNCE and C) 108 201.33 T 0 12 Q 2.26 (HeNCE and the PVM package it tar) 108 174 P 2.26 (gets are available in source and binary form via) 293.98 174 P 1.06 (xnetlib or by anonymous ftp to Internet host netlib2.cs.utk.edu. Both HeNCE and PVM) 108 160 P -0.16 (run under X windows on a wide variety of UNIX workstations. Questions on HeNCE may) 108 146 P (be emailed to hence@cs.utk.edu.) 108 132 T 1.4 (CODE is available by anonymous ftp to pompadour) 108 106 P 1.4 (.csres.utexas.edu. Only binaries for) 366.82 106 P 1.79 (Sun 4 workstations are available. Questions may be emailed to newton@cs.utk.edu or) 108 92 P (browne@cs.utexas.edu.) 108 78 T FMENDPAGE %%EndPage: "32" 32 %%Page: "33" 33 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (33) 532 42.62 T 1 16 Q (9.0 Conclusion) 108 709.33 T 0 12 Q 0.19 (Dif) 108 682 P 0.19 (\336culty of programming is a major impediment to the wider acceptance of coarse-grain) 123.78 682 P 3.27 (MIMD parallel computer systems. V) 108 668 P 3.27 (isual parallel programming languages based on) 297.34 668 P 0.06 (directed graphs have many attractive properties that can help to lessen this problem, espe-) 108 654 P 1.44 (cially in some application domains. Directed graphs naturally capture the multi-dimen-) 108 640 P 1.24 (sional structure of parallel program behaviors. If a semantics is adopted in which basic) 108 626 P 0.1 (nodes represent atomic sequential computations, this view supports a programming meth-) 108 612 P 0.45 (odology that emphasizes the creation of parallel programs by the composition of sequen-) 108 598 P 1.84 (tial elements. This separates the concerns of creating sequential sub-computations and) 108 584 P (creating parallel structures.) 108 570 T 3.01 (A visual programming environment based on directed graphs helps programmers to) 108 544 P -0.12 (understand the lar) 108 530 P -0.12 (ge-scale structure of their programs and this is vital for performance in a) 193.52 530 P -0.1 (way that is not the case for sequential programs. Programmers must understand the granu-) 108 516 P 0.52 (larity of their computations as well as having a general idea of the frequency with which) 108 502 P 1.15 (dif) 108 488 P 1.15 (ferent segments of there program run and interact with other segments. Furthermore,) 121.12 488 P -0.27 (programmers must understand data partitioning and placement since data locality is neces-) 108 474 P 1.15 (sary for speed on modern parallel architectures. Debugging of parallel programs is also) 108 460 P 2.02 (dif) 108 446 P 2.02 (\336cult due to the complexity of the interactions between program elements that can) 121.12 446 P 0.22 (arise. A visual directed graph framework allows all of these program aspects to be under-) 108 432 P 0.27 (stood in a common high-level representation that presents programmers with abstractions) 108 418 P (that are well suited to the various phases of the programming process.) 108 404 T 0.64 (CODE 2.0 and HeNCE 2.0 are implemented visual programming languages that demon-) 108 378 P 0.82 (strate many of these advantages. It is only through constructing CODE and HeNCE and) 108 364 P 0.03 (using them that we have been able to evaluate these bene\336ts and to continue the evolution) 108 350 P -0.33 (towards better visual parallel programming abstractions) 108 336 P -0.33 (. Although based on the same idea,) 373.99 336 P -0.12 (the two languages dif) 108 322 P -0.12 (fer signi\336cantly in detail, and their relative strengths and weaknesses) 210.42 322 P 1.3 (are illuminating. HeNCE\325) 108 308 P 1.3 (s method of de\336ning data interrelationships among nodes and) 234.27 308 P 0.57 (node \336ring conditions is simple and concise but less expressive than CODE\325) 108 294 P 0.57 (s. CODE on) 480.54 294 P 0.62 (the other hand, tends to be more wordy and harder to learn. Also complete simultaneous) 108 280 P (display of all data\337ow relationships tends to yield complex unstructured graphs.) 108 266 T 0.18 (W) 108 240 P 0.18 (e believe that an environment which allows multiple graphical and textual relationships) 118.37 240 P 0.83 (to co-exist is most desirable. Since programmers will then be able to choose representa-) 108 226 P 0.67 (tions that are most appropriate to a given situation. Also beginning programmers will be) 108 212 P 0.44 (able to use simpler tools. The key to such an environment is the selection of Call seman-) 108 198 P 0.73 (tics that apply to all representations. The semantics of sequential subroutines serve well.) 108 184 P 1.28 (Components can be viewed as atomic in that they map inputs to outputs with no inter) 108 170 P 1.28 (-) 536 170 P (component interactions in between.) 108 156 T 1 16 Q (10.0 Refer) 108 115.33 T (ences) 181.9 115.33 T 0 12 Q ([Ack82]) 108 88 T 0.29 (W) 162 88 P 0.29 (. B. Ackerman, \322Data Flow Languages\323,) 172.22 88 P 4 F 0.29 (Computer) 371.89 88 P 0 F 0.29 (, V) 419.41 88 P 0.29 (ol. 15. pp.15-25, Feb.,) 432.81 88 P (1982.) 162 74 T FMENDPAGE %%EndPage: "33" 33 %%Page: "34" 34 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (34) 532 42.62 T 0 12 Q ([Ada68]) 108 712 T 1.12 (D. A. Adams, \322A Model for Parallel Compilations\323,) 162 712 P 4 F 1.12 (Parallel Pr) 424.23 712 P 1.12 (ocessor Sys-) 479.23 712 P 1.56 (tems, T) 162 698 P 1.56 (echnologies and Applications) 197.12 698 P 0 F 1.56 (, pp. 31) 342.23 698 P 1.56 (1-334, Spartan/MacMillan, New) 380.91 698 P (Y) 162 684 T (ork, 1968.) 169.46 684 T ([Bab92]) 108 658 T 0.56 (\205. Babaoglu, \322Paralex: An Environment for Parallel Programming in Distrib-) 162 658 P (uted Systems,\323 Proc. ACM Int. Conf. on Supercomputing, July) 162 644 T (, 1992.) 464.22 644 T ([Bai91]) 108 618 T 0.99 (D .A. Bailey) 162 618 P 0.99 (, et al., \322ParaGraph: Graph Editor Support for Parallel Program-) 223.85 618 P 2.91 (ming Environments,\323 International Journal of Parallel Programming, Apr) 162 604 P 2.91 (.,) 534 604 P (1991.) 162 590 T ([Bau91]) 108 564 T 2.07 (A. Bauch, R. Braam, and E. Maehle, \322DAMP: A Dynamic Recon\336gurable) 162 564 P 2.19 (Multiprocessor System with a Distributed Switching Network\323, Distributed) 162 550 P 0.89 (Memory Computing, Lecture Notes in Computer Sciences, ed. A. Bode, V) 162 536 P 0.89 (ol.) 527.66 536 P (487, Springer) 162 522 T (-V) 227.09 522 T (erlag, pp. 495-504, 1991.) 238.42 522 T ([Beg91a]) 108 496 T 1.4 (A. Beguelin, J. J. Dongarra, G. A. Geist, R. Manchek, and V) 162 496 P 1.4 (. S. Sunderam,) 466.86 496 P 0.07 (\322Graphical development tools for network-based concurrent supercomputing,\323) 162 482 P (Proceedings of Supercomputing 91, pages 435--444, Albuquerque, 1991.) 162 468 T ([Beg91b]) 108 442 T -0.14 (A. Beguelin and G. Nutt, \322Collected Papers on Phred,\323 Dept. of Computer Sci-) 162 442 P (ence, Univ) 162 428 T (. of Colorado, CU-CS-51) 213.2 428 T (1-91, Jan., 1991.) 333.76 428 T ([Bro85]) 108 402 T 1.04 (J. C. Browne, \322Formulation and Programming of Parallel Computers: a Uni-) 162 402 P (\336ed Approach\323, Proc. Intl. Conf. Par) 162 388 T (. Proc., 1985, pp. 624-631.) 337.64 388 T ([Bro89]) 108 362 T -0.41 (J. C. Browne, M. Azam, and S. Sobek, \322CODE: A Uni\336ed Approach to Parallel) 162 362 P (Programming,\323 IEEE Software, July) 162 348 T (, 1989, p. 1) 336.86 348 T (1.) 390.42 348 T ([Bro90]) 108 322 T 0.07 (J. C. Browne, J. W) 162 322 P 0.07 (erth, and T) 251.98 322 P 0.07 (. J. Lee, \322Experimental Evaluation of a Reusabil-) 303.55 322 P 1.51 (ity Oriented Parallel Programming Environment,\323 IEEE T) 162 308 P 1.51 (rans. Soft. Engin.,) 450.31 308 P (V) 162 294 T (ol. 16, No. 2, 1990.) 169.12 294 T ([Dav82]) 108 268 T 0.88 (A. L. Davis and R. M. Keller) 162 268 P 0.88 (, \322Data Flow Program Graphs\323,) 306.78 268 P 4 F 0.88 (Computer) 466.15 268 P 0 F 0.88 (, V) 513.67 268 P 0.88 (ol.) 527.66 268 P (15., pp.26-41, Feb., 1982.) 162 254 T ([Don86]) 108 228 T 0.97 (J. J. Dongarra and D. C. Sorenson,) 162 228 P 0.97 (\322SCHEDULE: Tools for Developing and) 338.13 228 P 1.47 (Analyzing Parallel Fortran Programs,) 162 214 P 1.47 (\323 Ar) 346.38 214 P 1.47 (gonne National Laboratory MCSD) 368.62 214 P (T) 162 200 T (echnical Memorandum No) 168.49 200 T 4 F (. 86) 297.13 200 T 0 F (, Nov) 315.13 200 T (., 1986.) 341.02 200 T ([Eig91]) 108 174 T 0.34 (R. Eigenmann, and W) 162 174 P 0.34 (. Blume, \322An Ef) 268.22 174 P 0.34 (fectiveness Study of Parallelizing Com-) 347.34 174 P (piler T) 162 160 T (echniques,\323 Proc. Intl. Conf. Par) 193.49 160 T (. Proc., 1991, pp. II 17-25.) 348.8 160 T ([Gei93]) 108 134 T 0.49 ( G. A. Geist, A. Beguelin, J. Dongarra, W) 162 134 P 0.49 (. Jiang, R. Manchek, and V) 365.79 134 P 0.49 (. S. Sun-) 497.68 134 P 3.35 (deram, \322PVM 3 User) 162 120 P 3.35 (\325) 274.47 120 P 3.35 (s Guide and Reference Manual,\323 T) 277.81 120 P 3.35 (echnical Report) 461 120 P (ORNL/TM-12187, Oak Ridge National Laboratory) 162 106 T (, 1993.) 407.52 106 T FMENDPAGE %%EndPage: "34" 34 %%Page: "35" 35 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (35) 532 42.62 T 0 12 Q ([Gli84]) 108 712 T 1.23 (E. P) 162 712 P 1.23 (. Glinert and S. L. T) 181.9 712 P 1.23 (animoto, \322PICT) 283.85 712 P 1.23 (: An Interactive Graphical Program-) 361.14 712 P (ming Environment,\323 IEEE Computer) 162 698 T (, V) 340.18 698 T (ol. 17, No. 1) 353.29 698 T (1, Nov) 412.85 698 T (., 1984.) 444.73 698 T ([Gra90]) 108 672 T 0.54 (M. Graf, \322Building a V) 162 672 P 0.54 (isual Designer) 275.41 672 P 0.54 (\325) 345.38 672 P 0.54 (s Environment\323, in) 348.71 672 P 518.05 670.69 444.32 670.69 2 L V 0.59 H 0 Z N 0.54 (Principles of V) 444.32 672 P 540 670.69 517.33 670.69 2 L V N 0.54 (isual) 517.33 672 P 273.54 656.69 162 656.69 2 L V N 2.53 (Programming Systems) 162 658 P 2.53 (, S.-K. Chang, ed., Prentice Hall, Englewood Clif) 273.54 658 P 2.53 (fs,) 528.34 658 P (New Jersey) 162 644 T (, 1990.) 216.86 644 T ([Hir91]) 108 618 T 4.68 (S. Hiranandani, K. Kennedy) 162 618 P 4.68 (, and C.-W) 311.23 618 P 4.68 (. T) 372.14 618 P 4.68 (seng, \322Compiler Support for) 389.31 618 P 1.79 (Machine-Independent Parallel Programming in Fortran D,\323 Rice University) 162 604 P 1.79 (,) 537 604 P (CRPC-TR91) 162 590 T (132, 1991.) 223.57 590 T ([Hyd93]) 108 564 T 0.87 (S. I. Hyder) 162 564 P 0.87 (, J. F) 215.91 564 P 0.87 (. W) 240.02 564 P 0.87 (erth, and J. C. Browne, \322A Uni\336ed Model for Concurrent) 257.25 564 P -0.33 (Debugging,\323 Proc. International Conference on Parallel Processing, July 1993.) 162 550 P ([Jai91]) 108 524 T 0.3 (R. Jain, J. W) 162 524 P 0.3 (erth, and J. C. Browne, \322An Experimental Study of the Ef) 223.27 524 P 0.3 (fective-) 503.35 524 P 1.43 (ness of High Level Parallel Programming,\323 Proc. 5th SIAM Conf. Par) 162 510 P 1.43 (. Pro-) 511.91 510 P (cessing, 1991.) 162 496 T ([Kar66]) 108 470 T -0.22 (R .M. Karp and R. E. Miller) 162 470 P -0.22 (, \322Properties of a Model for Parallel Computations:) 295.54 470 P 0.46 (determinacy) 162 456 P 0.46 (, T) 220.54 456 P 0.46 (ermination, and Queueing\323, SIAM J. Appl. Math., V) 233.48 456 P 0.46 (ol. 14, No.) 488.09 456 P (6, Nov) 162 442 T (. 1966.) 193.88 442 T ([Kel81]) 108 416 T 0.32 (R. M. Keller) 162 416 P 0.32 (, and W) 222.83 416 P 0.32 (.-C. J. Y) 260.02 416 P 0.32 (en, \322A Graphical Approach to Software Develop-) 299.8 416 P 1.6 (ment using Function Graphs\323, IEEE COMPCON 81, Feb. 23-26, San Fran-) 162 402 P (cisco, 1981.) 162 388 T ([Koz90]) 108 362 T 1.85 (D. Kozen, et al., \322ALEX\320 An Alexical Programming Language\323, in) 162 362 P 518.05 360.69 509.39 360.69 2 L V N 1.85 (V) 509.39 362 P 540 360.69 517.33 360.69 2 L V N 1.85 (isual) 517.33 362 P 298.03 346.69 162 346.69 2 L V N -0.31 (Languages and Applications) 162 348 P -0.31 (, T) 298.03 348 P -0.31 (. Ichikawa, E. Jungert, and R .R. Korfhage, eds.,) 310.17 348 P (Plenum Press, New Y) 162 334 T (ork, 1990.) 266.12 334 T ([Lau90]) 108 308 T 0.35 (R. Lauwereins, et al., \322GRAPE: A CASE T) 162 308 P 0.35 (ool for Digital Signal Parallel Pro-) 372.59 308 P (cessing,\323 IEEE ASSP Magazine, Apr) 162 294 T (. 1990.) 340.64 294 T ([Lew90]) 108 268 T 0.4 (T) 162 268 P 0.4 (. G. Lewis and W) 168.44 268 P 0.4 (. Rudd,) 253.58 268 P 0.4 (\322Architecture of the Parallel Programming Support) 292.38 268 P -0.24 (Environment,\323) 162 254 P -0.24 (Proc. CompCon\32590, San Francisco, CA, Feb. 26 - Mar 2., 1990.) 235.75 254 P ([Lew93]) 108 228 T 0.83 (T) 162 228 P 0.83 (. Lewis and H. El-Rewini, \322Parallax: A T) 168.44 228 P 0.83 (ool For Parallel Program Schedul-) 372.04 228 P (ing\323, IEEE Parallel and Distributed T) 162 214 T (echnology) 341.14 214 T (, pp. 62-72, May 1993.) 390.35 214 T ([New92]) 108 188 T 0.31 (P) 162 188 P 0.31 (. Newton and J.C. Browne,) 167.34 188 P 0.31 (\322The CODE 2.0 Graphical Parallel Programming) 301.85 188 P (Language,\323 Pr) 162 174 T (oc. ACM Int. Conf. on Supercomputing, July) 231.31 174 T (, 1992.) 447.86 174 T ([New93]) 108 148 T 0.04 (P) 162 148 P 0.04 (. Newton, \322A Graphical Retar) 167.34 148 P 0.04 (getable Parallel Programming Environment and) 310.55 148 P 0.85 (Its Ef) 162 134 P 0.85 (\336cient Implementation\323, T) 188.96 134 P 0.85 (echnical Report TR93-28, Dept. of Computer) 317.47 134 P (Sciences, Univ) 162 120 T (. of T) 233.21 120 T (exas at Austin, 1993.) 258.7 120 T ([Pat90]) 108 94 T 0.12 (David A. Patterson and John L. Hennessy) 162 94 P 0.12 (,) 362.57 94 P 540 92.69 368.68 92.69 2 L V N 0.12 (Computer Architecture: a Quantita-) 368.68 94 P 230.32 78.69 162 78.69 2 L V N (tive Approach) 162 80 T (, Mor) 230.32 80 T (gan Kaufmann, San Mateo, CA, 1990.) 256.76 80 T FMENDPAGE %%EndPage: "35" 35 %%Page: "36" 36 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 108 54 540 54 2 L 0.25 H 2 Z 0 X 0 0 0 1 0 0 0 K N 0 8 Q (V) 108 42.62 T (isual Programming and Parallel Computing) 113.3 42.62 T (36) 532 42.62 T 0 12 Q ([Ros93]) 108 712 T 2.31 (J. Rost, \322D) 162 712 P 0 9.6 Q 1.84 (2) 219.28 716.8 P 0 12 Q 2.31 (R: A Dynamic Data\337ow Representation for T) 224.08 712 P 2.31 (ask Scheduling\323,) 456.37 712 P (ACM SIGPLAN Notices, V) 162 698 T (ol. 28., No. 8, August, 1993.) 295.78 698 T ([Sny85]) 108 672 T -0.35 (L. Synder) 162 672 P -0.35 (, \322Poker 3.1: A Programmer) 208.49 672 P -0.35 (\325) 342.83 672 P -0.35 (s Reference Guide\323, Dept. of Comp. Sci.) 346.17 672 P (T) 162 658 T (echnical Report TR-85-09-03, University of W) 168.49 658 T (ashington, Seattle, W) 393.49 658 T (A.) 494.82 658 T ([Sto90]) 108 632 T 1.72 (P) 162 632 P 1.72 (. D. Stotts, \322Graphical Operational Semantics for V) 167.34 632 P 1.72 (isual Parallel Program-) 425.92 632 P 0.98 (ming\323, in) 162 618 P 220.96 616.69 212.3 616.69 2 L V 0.59 H 0 Z N 0.98 (V) 212.3 618 P 332.83 616.69 220.24 616.69 2 L V N 0.98 (isual Languages and V) 220.24 618 P 424.75 616.69 332.11 616.69 2 L V N 0.98 (isual Programming) 332.11 618 P 0.98 (, S.-K. Chang, ed., Ple-) 424.75 618 P (num Press, New Y) 162 604 T (ork, 1990.) 250.79 604 T ([TGS92]) 108 578 T 2.22 (TGS Systems Limited,) 162 578 P 373.84 576.69 281.33 576.69 2 L V N 2.22 (Prograph Referenc) 281.33 578 P 379.17 576.69 373.84 576.69 2 L V N 2.22 (e) 373.84 578 P 2.22 (, Halifax, Nova Scotia, Canada,) 379.17 578 P (1992.) 162 564 T ([T) 108 538 T (ra90]) 118.91 538 T 0.17 (B. T) 162 538 P 0.17 (raversat, \322NEPTUNE: The Application of Course-Grain Data Flow Meth-) 183.08 538 P 0.63 (ods to Scienti\336c Parallel Programming\323, Ph.D. dissertation, The Florida State) 162 524 P (University) 162 510 T (, 1990.) 211.88 510 T ([Y) 108 484 T (an91]) 119.46 484 T 0.2 (T) 162 484 P 0.2 (. Y) 168.44 484 P 0.2 (ang and A. Gerasoulis, \322A Fast Static Scheduling Algorithm for DAGs on) 182.11 484 P 1.84 (an Unbounded Number of Processors\323, Proceedings of Supercomputing 91,) 162 470 P (pages 633\320642, Albuquerque, 1991.) 162 456 T FMENDPAGE %%EndPage: "36" 36 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 36 %%DocumentFonts: Times-Roman %%+ Times-Bold %%+ Courier-Bold %%+ Courier %%+ Times-Italic %%+ Symbol %%+ Times-BoldItalic %%EOF .