summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/dvips
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-03-18 21:07:01 +0000
committerKarl Berry <karl@freefriends.org>2021-03-18 21:07:01 +0000
commit2c572a90204988d4f79b4ceb70ae43b5041a0cea (patch)
tree6d72cc4b8c64a0fd592b095eab3441a5547c9ef5 /Master/texmf-dist/dvips
parentda2d18f4878f6cf27add82fac726c7050507c9b8 (diff)
gastex (18mar21)
git-svn-id: svn://tug.org/texlive/trunk@58505 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/dvips')
-rw-r--r--Master/texmf-dist/dvips/gastex/gastex.pro285
1 files changed, 143 insertions, 142 deletions
diff --git a/Master/texmf-dist/dvips/gastex/gastex.pro b/Master/texmf-dist/dvips/gastex/gastex.pro
index e2ae122440e..672c184c723 100644
--- a/Master/texmf-dist/dvips/gastex/gastex.pro
+++ b/Master/texmf-dist/dvips/gastex/gastex.pro
@@ -10,153 +10,154 @@ sub dup mul !xp !x0 sub dup mul add sqrt 2 div def } { /!xp !x1 !x0
!x1 sub !d2 mul !d0 div add def /!yp !y1 !y0 !y1 sub !d2 mul !d0 div
add def /!d !yp !y2 sub dup mul !xp !x2 sub dup mul add sqrt 2 div
def } ifelse } { /!d 0 def } ifelse !d !r lt { /!r !d def } if !x1
-!y1 !x2 !y2 !r arct } def /!psarrow { gsave 2 copy translate 3 -1 roll
-sub neg /!y exch def sub /!x exch def !x 0 eq !y 0 eq and {/!x 1 def}
-if !y !x atan rotate /L2 exch def /L1 exch def /ang exch def /dist
-exch def /nb exch def 1 1 nb { pop L2 0 eq { newpath L1 ang cos mul
-L1 ang sin mul 2 copy moveto 0 0 lineto neg lineto stroke } { newpath
-0 0 moveto L1 ang cos mul L1 ang sin mul 2 copy lineto L2 0 lineto
-neg lineto closepath fill } ifelse dist 0 translate } for grestore
-} def /!psvect { /y exch def /x exch def newpath 0 0 moveto x y lineto
-stroke 0 0 x y !psarrow x y 0 0 !psarrow } def /!pslines { /ra exch
-def /n exch def /yn exch def /xn exch def /yn_1 exch def /xn_1 exch
-def /x xn def /y yn def /xx xn_1 def /yy yn_1 def newpath xn yn moveto
-3 1 n { pop /x xx def /y yy def /yy exch def /xx exch def x y xx yy
-ra !smartarct } for xx yy lineto stroke xn_1 yn_1 xn yn !psarrow x
-y xx yy !psarrow } def /!psrectpath { /y1 exch def /x1 exch def /y0
-exch def /x0 exch def newpath x0 y0 moveto x1 y0 lineto x1 y1 lineto
-x0 y1 lineto closepath } def /!pscirclepath { newpath 0 360 arc closepath
-} def /!psovalpath { /rmax exch dup 0.1 le { pop 0.1 } if def /H exch
-2 div dup 0.1 le { pop 0.1 } if def /W exch 2 div dup 0.1 le { pop
-0.1 } if def /y exch def /x exch def H W le { /R H def }{ /R W def
-} ifelse rmax R le { /R rmax def } if newpath x y H add moveto x W
-add y H add x W add y R arct x W add y H sub x y H sub R arct x W sub
-y H sub x W sub y R arct x W sub y H add x y H add R arct closepath
-} def /!pspolygonpath { /ra exch def /n exch def dup n 2 mul 1 add
-1 roll 1 index n 2 mul 2 add 1 roll n 2 mul 1 sub index n 2 mul 1 sub
-index /yy exch def /xx exch def /y exch def /x exch def newpath xx
-x add 2 div yy y add 2 div moveto 1 1 n { pop /yy exch def /xx exch
-def x y x xx add 2 div y yy add 2 div ra !smartarct /x xx def /y yy
-def } for closepath } def /!psrpolygonpath { /rd exch def /ra exch
-def /a exch def /r exch def /n exch def /y exch def /x exch def /b
-360 n div def /c b def x y translate a rotate rd 0 ne { r rd b 2 div
-cos div sub r div dup scale } if /x1 r b cos mul def /y1 r b sin mul
-def newpath r x1 add 2 div y1 2 div moveto 1 1 n { pop /c c b add def
-/x2 r c cos mul def /y2 r c sin mul def x1 y1 x1 x2 add 2 div y1 y2
-add 2 div ra !smartarct /x1 x2 def /y1 y2 def } for closepath rd 0
-ne { r r rd b 2 div cos div sub div dup scale } if a neg rotate x neg
-y neg translate } def /!psccurvepath { /n exch def n 2 mul 1 sub index
+!y1 !x2 !y2 !r arct } def /!psarrow { gsave [] 0 setdash 2 copy translate
+3 -1 roll sub neg /!y exch def sub /!x exch def !x 0 eq !y 0 eq and
+{/!x 1 def} if !y !x atan rotate /L2 exch def /L1 exch def /ang exch
+def /dist exch def /nb exch def 1 1 nb { pop L2 0 eq { newpath L1 ang
+cos mul L1 ang sin mul 2 copy moveto 0 0 lineto neg lineto stroke }
+{ newpath 0 0 moveto L1 ang cos mul L1 ang sin mul 2 copy lineto L2
+0 lineto neg lineto closepath fill } ifelse dist 0 translate } for
+grestore } def /!psvect { /y exch def /x exch def newpath 0 0 moveto
+x y lineto stroke 0 0 x y !psarrow x y 0 0 !psarrow } def /!pslines
+{ /ra exch def /n exch def /yn exch def /xn exch def /yn_1 exch def
+/xn_1 exch def /x xn def /y yn def /xx xn_1 def /yy yn_1 def newpath
+xn yn moveto 3 1 n { pop /x xx def /y yy def /yy exch def /xx exch
+def x y xx yy ra !smartarct } for xx yy lineto stroke xn_1 yn_1 xn
+yn !psarrow x y xx yy !psarrow } def /!psrectpath { /y1 exch def /x1
+exch def /y0 exch def /x0 exch def newpath x0 y0 moveto x1 y0 lineto
+x1 y1 lineto x0 y1 lineto closepath } def /!pscirclepath { newpath
+0 360 arc closepath } def /!psovalpath { /rmax exch dup 0.1 le { pop
+0.1 } if def /H exch 2 div dup 0.1 le { pop 0.1 } if def /W exch 2
+div dup 0.1 le { pop 0.1 } if def /y exch def /x exch def H W le {
+/R H def }{ /R W def } ifelse rmax R le { /R rmax def } if newpath
+x y H add moveto x W add y H add x W add y R arct x W add y H sub x
+y H sub R arct x W sub y H sub x W sub y R arct x W sub y H add x y
+H add R arct closepath } def /!pspolygonpath { /ra exch def /n exch
+def dup n 2 mul 1 add 1 roll 1 index n 2 mul 2 add 1 roll n 2 mul 1
+sub index n 2 mul 1 sub index /yy exch def /xx exch def /y exch def
+/x exch def newpath xx x add 2 div yy y add 2 div moveto 1 1 n { pop
+/yy exch def /xx exch def x y x xx add 2 div y yy add 2 div ra !smartarct
+/x xx def /y yy def } for closepath } def /!psrpolygonpath { /rd exch
+def /ra exch def /a exch def /r exch def /n exch def /y exch def /x
+exch def /b 360 n div def /c b def x y translate a rotate rd 0 ne {
+r rd b 2 div cos div sub r div dup scale } if /x1 r b cos mul def /y1
+r b sin mul def newpath r x1 add 2 div y1 2 div moveto 1 1 n { pop
+/c c b add def /x2 r c cos mul def /y2 r c sin mul def x1 y1 x1 x2
+add 2 div y1 y2 add 2 div ra !smartarct /x1 x2 def /y1 y2 def } for
+closepath rd 0 ne { r r rd b 2 div cos div sub div dup scale } if a
+neg rotate x neg y neg translate } def /!psccurvepath { /n exch def
n 2 mul 1 sub index n 2 mul 1 sub index n 2 mul 1 sub index n 2 mul
-4 add array astore /coef exch def /alpha 3.5 def /px0 coef n 2 mul
-2 sub get def /py0 coef n 2 mul 1 sub get def /px1 coef 0 get def /py1
-coef 1 get def /px2 coef 2 get def /py2 coef 3 get def /d0 px1 px0
-sub dup mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul
-py1 py2 sub dup mul add sqrt def /ppx d2 d0 div px0 px1 sub mul px1
+1 sub index n 2 mul 4 add array astore /coef exch def /alpha 3.5 def
+/px0 coef n 2 mul 2 sub get def /py0 coef n 2 mul 1 sub get def /px1
+coef 0 get def /py1 coef 1 get def /px2 coef 2 get def /py2 coef 3
+get def /d0 px1 px0 sub dup mul py1 py0 sub dup mul add sqrt def /d2
+px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /ppx d2 d0 div
+px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add
+def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2
+d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy
+sub mul alpha div py1 add def newpath px1 py1 moveto 4 2 n 2 mul 2
+add { /i exch def /px0 px1 def /px1 px2 def /px2 coef i get def /py0
+py1 def /py1 py2 def /py2 coef i 1 add get def /d0 d2 def /d2 px1 px2
+sub dup mul py1 py2 sub dup mul add sqrt def /ppx d0 d2 div px2 px1
+sub mul px1 add def /ppy d0 d2 div py2 py1 sub mul py1 add def /d1
+ppx px0 sub dup mul ppy py0 sub dup mul add sqrt def /rx d0 d1 div
+px0 ppx sub mul alpha div px1 add def /ry d0 d1 div py0 ppy sub mul
+alpha div py1 add def qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0
+px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add def
+/d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2 d1
+div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy sub
+mul alpha div py1 add def } for closepath } def /!pscurve { /n exch
+def n 2 mul array astore /coef exch def /alpha 3.5 def /px1 coef 0
+get def /py1 coef 1 get def /px2 coef 2 get def /py2 coef 3 get def
+/d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /qx px1 def
+/qy py1 def newpath px1 py1 moveto 4 2 n 2 mul 2 sub { /i exch def
+/px0 px1 def /px1 px2 def /px2 coef i get def /py0 py1 def /py1 py2
+def /py2 coef i 1 add get def /d0 d2 def /d2 px1 px2 sub dup mul py1
+py2 sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add
+def /ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup
+mul ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul
+alpha div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add
+def qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0 px1 sub mul px1
add def /ppy d2 d0 div py0 py1 sub mul py1 add def /d1 ppx px2 sub
dup mul ppy py2 sub dup mul add sqrt def /qx d2 d1 div px2 ppx sub
mul alpha div px1 add def /qy d2 d1 div py2 ppy sub mul alpha div py1
-add def newpath px1 py1 moveto 4 2 n 2 mul 2 add { /i exch def /px0
-px1 def /px1 px2 def /px2 coef i get def /py0 py1 def /py1 py2 def
-/py2 coef i 1 add get def /d0 d2 def /d2 px1 px2 sub dup mul py1 py2
-sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def
-/ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul
-ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha
-div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def
-qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0 px1 sub mul px1 add
+add def } for /px1 coef n 2 mul 2 sub get def /py1 coef n 2 mul 1 sub
+get def /rx px1 def /ry py1 def qx qy rx ry px1 py1 curveto stroke
+/px0 coef n 2 mul 6 sub get def /py0 coef n 2 mul 5 sub get def /px1
+coef n 2 mul 4 sub get def /py1 coef n 2 mul 3 sub get def /px2 coef
+n 2 mul 2 sub get def /py2 coef n 2 mul 1 sub get def /d0 px1 px0 sub
+dup mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1
+py2 sub dup mul add sqrt def /ppx d2 d0 div px0 px1 sub mul px1 add
def /ppy d2 d0 div py0 py1 sub mul py1 add def /d1 ppx px2 sub dup
mul ppy py2 sub dup mul add sqrt def /qx d2 d1 div px2 ppx sub mul
alpha div px1 add def /qy d2 d1 div py2 ppy sub mul alpha div py1 add
-def } for closepath } def /!pscurve { /n exch def n 2 mul array astore
-/coef exch def /alpha 3.5 def /px1 coef 0 get def /py1 coef 1 get def
-/px2 coef 2 get def /py2 coef 3 get def /d2 px1 px2 sub dup mul py1
-py2 sub dup mul add sqrt def /qx px1 def /qy py1 def newpath px1 py1
-moveto 4 2 n 2 mul 2 sub { /i exch def /px0 px1 def /px1 px2 def /px2
-coef i get def /py0 py1 def /py1 py2 def /py2 coef i 1 add get def
-/d0 d2 def /d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def
-/ppx d0 d2 div px2 px1 sub mul px1 add def /ppy d0 d2 div py2 py1 sub
-mul py1 add def /d1 ppx px0 sub dup mul ppy py0 sub dup mul add sqrt
-def /rx d0 d1 div px0 ppx sub mul alpha div px1 add def /ry d0 d1 div
-py0 ppy sub mul alpha div py1 add def qx qy rx ry px1 py1 curveto /ppx
-d2 d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul
-py1 add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def
-/qx d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2
-ppy sub mul alpha div py1 add def } for /px1 coef n 2 mul 2 sub get
-def /py1 coef n 2 mul 1 sub get def /rx px1 def /ry py1 def qx qy rx
-ry px1 py1 curveto stroke /px0 coef n 2 mul 6 sub get def /py0 coef
-n 2 mul 5 sub get def /px1 coef n 2 mul 4 sub get def /py1 coef n 2
-mul 3 sub get def /px2 coef n 2 mul 2 sub get def /py2 coef n 2 mul
-1 sub get def /d0 px1 px0 sub dup mul py1 py0 sub dup mul add sqrt
-def /d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /ppx d2
-d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1
-add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx
-d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy
-sub mul alpha div py1 add def px1 py1 qx qy px2 py2 px2 py2 !ps_cbezier_arrow
-/px0 coef 0 get def /py0 coef 1 get def /px1 coef 2 get def /py1 coef
-3 get def /px2 coef 4 get def /py2 coef 5 get def /d0 px1 px0 sub dup
-mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1 py2
-sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def
-/ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul
-ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha
-div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def
-px1 py1 rx ry px0 py0 px0 py0 !ps_cbezier_arrow } def /!ps_cbezier
-{ /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def
-/x1 exch def /y0 exch def /x0 exch def newpath x0 y0 moveto x1 y1 x2
-y2 x3 y3 curveto stroke x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier_arrow x3
-y3 x2 y2 x1 y1 x0 y0 !ps_cbezier_arrow } def /!ps_cbezier_arrow { /y3
-exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch
-def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub add def
-/xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def /ya y1
-y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3 mul def
-/yc y1 y0 sub 3 mul def /L2 exch def /L1 exch def /ang exch def /dist
-exch def /nb exch def L2 0 le { /L L1 ang cos mul 2 div def } { /L
-L2 def } ifelse /t4 1 def 1 1 nb { pop /x4 t4 !calculx def /y4 t4 !calculy
-def L 0 le { /dx t4 !calculdx def /dy t4 !calculdy def dx dup mul dy
-dup mul add sqrt dup 0 eq { /dx 1 def /dy 0 def pop 1 } if L1 exch
-div dup dx neg mul /xx exch def dy neg mul /yy exch def } { /t1 0 def
-/t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx x4 sub
-dup mul t !calculy y4 sub dup mul add sqrt L ge { /t1 t def } { /t2
-t def } ifelse } for /x6 t !calculx def /y6 t !calculy def L1 L div
-dup x6 x4 sub mul /xx exch def y6 y4 sub mul /yy exch def } ifelse
-/x5 x4 xx ang cos mul add yy ang sin mul sub def /y5 y4 xx ang sin
-mul add yy ang cos mul add def /x7 x4 xx ang cos mul add yy ang sin
-mul add def /y7 y4 xx ang sin mul sub yy ang cos mul add def L2 0 le
-{ newpath x5 y5 moveto x4 y4 lineto x7 y7 lineto stroke } { newpath
-x4 y4 moveto x5 y5 lineto x6 y6 lineto x7 y7 lineto closepath fill
-} ifelse /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def
-t !calculx x4 sub dup mul t !calculy y4 sub dup mul add sqrt dist ge
-{ /t1 t def } { /t2 t def } ifelse } for /t4 t def } for } def /!ps_qbezier
-{ /y3 exch def /x3 exch def /yy exch def /xx exch def /y0 exch def
-/x0 exch def /x1 xx 2 mul x0 add 3 div def /y1 yy 2 mul y0 add 3 div
-def /x2 xx 2 mul x3 add 3 div def /y2 yy 2 mul y3 add 3 div def x0
-y0 x1 y1 x2 y2 x3 y3 !ps_cbezier } def /!max 10 def /!ps_r_cbezier
-{ /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def
-/x1 exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub
-add def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def
-/ya y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3
-mul def /yc y1 y0 sub 3 mul def /t1 0 def /t2 1 def 0 1 !max { pop
-/t t1 t2 add 2 div def t !calculx t !calculy path!a inufill { /t1 t
-def } { /t2 t def } ifelse } for /ta t def /t1 0 def /t2 1 def 0 1
-!max { pop /t t1 t2 add 2 div def t !calculx t !calculy path!b inufill
-{ /t2 t def } { /t1 t def } ifelse } for /tb t def ta !calculx ta !calculy
-ta !calculdx 3 div tb ta sub mul ta !calculx add ta !calculdy 3 div
-tb ta sub mul ta !calculy add tb !calculdx 3 div ta tb sub mul tb !calculx
-add tb !calculdy 3 div ta tb sub mul tb !calculy add tb !calculx tb
-!calculy !ps_cbezier } def /!calculx { dup dup xa mul xb add mul xc
-add mul x0 add } def /!calculy { dup dup ya mul yb add mul yc add mul
-y0 add } def /!calculdx { dup 3 xa mul mul 2 xb mul add mul xc add
-} def /!calculdy { dup 3 ya mul mul 2 yb mul add mul yc add } def /!node_mark
-{ /ma exch def /ml exch def /y exch def /x exch def /x1 x def /y1 y
-def /x2 x 500 ma cos mul add def /y2 y 500 ma sin mul add def 0 1 !max
-{ pop /x x1 x2 add 2 div def /y y1 y2 add 2 div def x y path!a inufill
-{ /x1 x def /y1 y def } { /x2 x def /y2 y def } ifelse } for /x1 x
-def /y1 y def /x2 x ml ma cos mul add def /y2 y ml ma sin mul add def
-newpath x1 y1 moveto x2 y2 lineto stroke x2 y2 x1 y1 !psarrow x1 y1
-x2 y2 !psarrow } def /!sign {dup 0 lt {pop -1} {0 eq {0} {1} ifelse}
-ifelse} def /!pslatexline { /L exch def /b exch def /a exch def a 0
-eq {0 L b !sign mul} {L a !sign mul dup b mul a div} ifelse newpath
-0 0 moveto lineto stroke } def /!pslatexvector { /L exch def /b exch
-def /a exch def a 0 eq {0 L b !sign mul} {L a !sign mul dup b mul a
-div} ifelse !psvect } def /!pscircle { 2 div newpath 0 0 3 2 roll 0
-360 arc stroke } def /!psdisk { 2 div newpath 0 0 3 2 roll 0 360 arc
-fill } def
+def px1 py1 qx qy px2 py2 px2 py2 !ps_cbezier_arrow /px0 coef 0 get
+def /py0 coef 1 get def /px1 coef 2 get def /py1 coef 3 get def /px2
+coef 4 get def /py2 coef 5 get def /d0 px1 px0 sub dup mul py1 py0
+sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1 py2 sub dup mul
+add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def /ppy d0 d2
+div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul ppy py0 sub
+dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha div px1 add
+def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def px1 py1 rx
+ry px0 py0 px0 py0 !ps_cbezier_arrow } def /!ps_cbezier { /y3 exch
+def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def
+/y0 exch def /x0 exch def newpath x0 y0 moveto x1 y1 x2 y2 x3 y3 curveto
+stroke x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier_arrow x3 y3 x2 y2 x1 y1
+x0 y0 !ps_cbezier_arrow } def /!ps_cbezier_arrow { gsave [] 0 setdash
+/y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1
+exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub add
+def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def /ya
+y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3 mul
+def /yc y1 y0 sub 3 mul def /L2 exch def /L1 exch def /ang exch def
+/dist exch def /nb exch def L2 0 le { /L L1 ang cos mul 2 div def }
+{ /L L2 def } ifelse /t4 1 def 1 1 nb { pop /x4 t4 !calculx def /y4
+t4 !calculy def L 0 le { /dx t4 !calculdx def /dy t4 !calculdy def
+dx dup mul dy dup mul add sqrt dup 0 eq { /dx 1 def /dy 0 def pop 1
+} if L1 exch div dup dx neg mul /xx exch def dy neg mul /yy exch def
+} { /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx
+x4 sub dup mul t !calculy y4 sub dup mul add sqrt L ge { /t1 t def
+} { /t2 t def } ifelse } for /x6 t !calculx def /y6 t !calculy def
+L1 L div dup x6 x4 sub mul /xx exch def y6 y4 sub mul /yy exch def
+} ifelse /x5 x4 xx ang cos mul add yy ang sin mul sub def /y5 y4 xx
+ang sin mul add yy ang cos mul add def /x7 x4 xx ang cos mul add yy
+ang sin mul add def /y7 y4 xx ang sin mul sub yy ang cos mul add def
+L2 0 le { newpath x5 y5 moveto x4 y4 lineto x7 y7 lineto stroke } {
+newpath x4 y4 moveto x5 y5 lineto x6 y6 lineto x7 y7 lineto closepath
+fill } ifelse /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div
+def t !calculx x4 sub dup mul t !calculy y4 sub dup mul add sqrt dist
+ge { /t1 t def } { /t2 t def } ifelse } for /t4 t def } for grestore
+} def /!ps_qbezier { /y3 exch def /x3 exch def /yy exch def /xx exch
+def /y0 exch def /x0 exch def /x1 xx 2 mul x0 add 3 div def /y1 yy
+2 mul y0 add 3 div def /x2 xx 2 mul x3 add 3 div def /y2 yy 2 mul y3
+add 3 div def x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier } def /!max 10 def
+/!ps_r_cbezier { /y3 exch def /x3 exch def /y2 exch def /x2 exch def
+/y1 exch def /x1 exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3
+mul x3 x0 sub add def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1
+x0 sub 3 mul def /ya y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub
+y1 sub y2 add 3 mul def /yc y1 y0 sub 3 mul def /t1 0 def /t2 1 def
+0 1 !max { pop /t t1 t2 add 2 div def t !calculx t !calculy path!a
+inufill { /t1 t def } { /t2 t def } ifelse } for /ta t def /t1 0 def
+/t2 1 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx t !calculy
+path!b inufill { /t2 t def } { /t1 t def } ifelse } for /tb t def ta
+!calculx ta !calculy ta !calculdx 3 div tb ta sub mul ta !calculx add
+ta !calculdy 3 div tb ta sub mul ta !calculy add tb !calculdx 3 div
+ta tb sub mul tb !calculx add tb !calculdy 3 div ta tb sub mul tb !calculy
+add tb !calculx tb !calculy !ps_cbezier } def /!calculx { dup dup xa
+mul xb add mul xc add mul x0 add } def /!calculy { dup dup ya mul yb
+add mul yc add mul y0 add } def /!calculdx { dup 3 xa mul mul 2 xb
+mul add mul xc add } def /!calculdy { dup 3 ya mul mul 2 yb mul add
+mul yc add } def /!node_mark { /ma exch def /ml exch def /y exch def
+/x exch def /x1 x def /y1 y def /x2 x 500 ma cos mul add def /y2 y
+500 ma sin mul add def 0 1 !max { pop /x x1 x2 add 2 div def /y y1
+y2 add 2 div def x y path!a inufill { /x1 x def /y1 y def } { /x2 x
+def /y2 y def } ifelse } for /x1 x def /y1 y def /x2 x ml ma cos mul
+add def /y2 y ml ma sin mul add def newpath x1 y1 moveto x2 y2 lineto
+stroke x2 y2 x1 y1 !psarrow x1 y1 x2 y2 !psarrow } def /!sign {dup
+0 lt {pop -1} {0 eq {0} {1} ifelse} ifelse} def /!pslatexline { /L
+exch def /b exch def /a exch def a 0 eq {0 L b !sign mul} {L a !sign
+mul dup b mul a div} ifelse newpath 0 0 moveto lineto stroke } def
+/!pslatexvector { /L exch def /b exch def /a exch def a 0 eq {0 L b
+!sign mul} {L a !sign mul dup b mul a div} ifelse !psvect } def /!pscircle
+{ 2 div newpath 0 0 3 2 roll 0 360 arc stroke } def /!psdisk { 2 div
+newpath 0 0 3 2 roll 0 360 arc fill } def
end \ No newline at end of file