%!PS-Adobe-2.0
%%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software
%%Title: test2.dvi
%%CreationDate: Sun Dec 23 19:43:59 2012
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 185 185
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: C:\texlive\2011\bin\win32\dvips.exe -o test2.ps
%+ test2.dvi
%DVIPSParameters: dpi=600
%DVIPSSource:  TeX output 2012.12.23:1943
%%BeginProcSet: tex.pro 0 0
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3
def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90
rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0
N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop
false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{
BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat
{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch
round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0
rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B
/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}
B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p
-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{
0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end

%%EndProcSet
%%BeginProcSet: pstricks.pro 0 0
% $Id: pstricks.pro 714 2012-10-16 14:28:29Z herbert $
%
%% PostScript prologue for pstricks.tex.
%% Version 1.15, 2012/10/16
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%
%
% Define the follwing gs-functions if not known, eg when using distiller
%
systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
systemdict /.setblendmode known not {/.setblendmode { pop } def } if
systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
%
/tx@Dict 200 dict def                           % the main PSTricks dictionary
tx@Dict begin
/ADict 25 dict def                              % The arrow dictionaray
/CM { matrix currentmatrix } bind def
/SLW /setlinewidth load def
/CLW /currentlinewidth load def
/CP /currentpoint load def
/ED { exch def } bind def
/L /lineto load def
/T /translate load def
/TMatrix { } def
/RAngle { 0 } def
/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def  % return 0 for negative arguments
/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
/ATAN1 {neg -1 atan 180 sub } def               % atan(x) (only one parameter)
/Div { dup 0 eq { pop } { div } ifelse } def    % control the division
/tan { dup cos abs 1.e-10 lt
 { pop 1.e10 }                                 % return 1.e10 as infinit
 { dup sin exch cos div } ifelse               % default sin/cos
} def
/Tan { dup sin exch cos Div } def               % sin(x)/cos(x) x in degrees
/Acos {dup dup mul neg 1 add dup 0 lt {         % arc cos, returns 0 when negative root
 pop pop 0 }{ sqrt exch atan} ifelse } def
/NET { neg exch neg exch T } def                % change coordinate system to the negative one
/Pyth { dup mul exch dup mul add sqrt } def     % Pythagoras, expects 2 parameter
/Pyth2 {                                        % Pythagoras, xA yA xB yB
 3 -1 roll             % xA xB yB yA
 sub                   % xA xB yB-yA
 3 1 roll              % yB-yA xA xB
 sub                   % yB-yA xA-xB
 Pyth } def
/PtoC { 2 copy cos mul 3 1 roll sin mul } def   % Polar to Cartesian
/Rand { rand 4294967295 div } def               % a real random number
%----------------- hv added 20050516 ---------------
/PiDiv2 1.57079632680 def
/Pi 3.14159265359 def
/TwoPi 6.28318530718 def
/Euler 2.71828182846 def
%/e Euler bind def
%
/RadtoDeg { 180 mul Pi div } bind def           % convert from radian to degrees
/DegtoRad { Pi mul 180 div } bind def           % viceversa
%----------------- hv end---------------------------
/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
%
/PathLength {
 flattenpath /z 0 def
 { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
 { /y ED /x ED PathLength@ }
 {}
 { /y y2 def /x x2 def PathLength@ }
 /pathforall load stopped { pop pop pop pop } if
 z
} def
%
/STP { .996264 dup scale } def                  % BP/PT scaling
/STV { SDict begin normalscale end STP  } def   %
%
/DashLine {
   dup 0 gt
   { /a .5 def PathLength exch div }
   { pop /a 1 def PathLength } ifelse
   /b ED % pattern should fit evenly in b
   dup /X ED % pattern array
   0 get /y ED % length of first black segment
   /z 0 X {add} forall def % length of the full pattern
   %% Computation of the scaling factor as described by van Zandt:
   b a .5 sub 2 mul y mul sub z Div round
   z mul a .5 sub 2 mul y mul add b exch Div
   %%%% scaling factor on stack.
   /z ED %% now, z is the scaling factor
   false % for the length test below
   X { z mul } forall X astore %% modification TN 04-08-07
   %%% Checking whether at least one dash in X has positive length:
   {0 gt or} forall
   { X 1 a sub y mul }
   { [ 1 0 ] 0 }
   ifelse
   setdash stroke
} def
%
/DotLine {
 /b PathLength def
 /a ED /z ED /y CLW def
 /z y z add def
 a 0 gt {
   /b b a div def
 }{
   a 0 eq {
     /b b y sub def
   }{ a -3 eq {
     /b b y add def } if
   } ifelse
 } ifelse
 [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
 a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
 setdash 1 setlinecap stroke
} def
%
/SymbolLine {   % on stack [ x y x y ...
 counttomark                                   % number of elements
 2 div cvi /n ED                               % n pairs
 /YA ED /XA ED                                 % the start point
 n 1 sub {
   /YB ED /XB ED
   /XLength XB XA sub def
   /YLength YB YA sub def
   /PAngle YLength XLength Atan def
   /XYLength XLength YLength Pyth def

   %% for negative SymStep we calculate the distance
   SymStep 0 lt
     { %XYLength SymStep div abs cvi
       /nSym SymStep abs cvi def }
     { /nSym XYLength SymStep div cvi def }
   ifelse
   0.5 setflat
   /Shift Symbol stringwidth pop 2 div def
   /deltaX XLength nSym div def
   /deltaY YLength nSym div def
   curveticks
     { XA YA moveto }
     { XA Shift sub YA Shift sub moveto }
   ifelse
   nSym {
     gsave
     curveticks
       { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED
         currentpoint translate rotAngle rotate
         0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
         SymbolLinewidth setlinewidth stroke
       }
       {
         rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
         Symbol show
       }
     ifelse
     grestore
     deltaX deltaY rmoveto
   } repeat
   /YA YB def /XA XB def
 } repeat
 curveticks
   { XA YA moveto }
   { XA Shift sub YA Shift sub moveto }
 ifelse
 gsave
 curveticks
   { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED
     XA YA translate rotAngle rotate
     0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
     SymbolLinewidth setlinewidth stroke
   }
   {
     rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
     Symbol show
   }
 ifelse
 grestore
 pop                           % delete the mark symbol
} def
%
/LineFill { % hv ------------ patch 7 -------------
 gsave
 abs /hatchWidthInc ED
 abs /hatchSepInc ED
 abs CLW add /a ED
 a 0 dtransform round exch round exch
 2 copy idtransform
 exch Atan rotate
 idtransform pop /a ED
 .25 .25 itransform pathbbox
 /y2 ED
 a Div ceiling cvi /x2 ED /y1 ED
 a Div cvi /x1 ED /y2 y2 y1 sub def
 clipType   % must be defined in pstricks.tex: clip -- eoclip
 newpath
 2 setlinecap
 systemdict
 /setstrokeadjust known { true setstrokeadjust } if
 x2 x1 sub 1 add {
   x1 a mul y1 moveto 0 y2 rlineto stroke
   /x1 x1 1 add
     hatchWidthInc 0 gt { CLW add } if
   def
   hatchSepInc 0 gt hatchWidthInc 0 gt or {
     /a a hatchSepInc add def
     CLW hatchWidthInc add SLW
   } if
 } repeat
 grestore
 pop pop } def
%
/DotFill {%      on stack: dot radius
 /dotRadius ED
 abs CLW add /a ED
 a 0 dtransform round exch round exch
 2 copy idtransform
 exch Atan rotate
 idtransform pop /a ED
 .25 .25 itransform
 pathbbox % llx lly urx ury of smallest bounding box
 /y2 ED /x2 ED /y1 ED /x1 ED
 y2 y1 sub a div 2 add cvi /Ny ED
 x2 x1 sub a div 2 add cvi /Nx ED
 clipType   % must be defined in pstricks.tex: clip -- eoclip
 newpath
 /yA y1 dotRadius add CLW add def
 /xA0 x1 dotRadius add CLW add def
 Ny {
    /xA xA0 def
    Nx {
      newpath
      xA yA dotRadius 0 360 arc
      SolidDot { gsave fill grestore } if
      stroke
      xA a add /xA ED
    } repeat
    yA a add /yA ED
 } repeat
 grestore
} def
%
/PenroseFill {%  on stack: scaling factor
 /Scale ED
%  1 exch div round /penroseFactor ED
%  a 0 dtransform round exch round exch
%  2 copy idtransform
%  exch Atan rotate
%  idtransform pop /a ED
%  .25 .25 itransform pathbbox
%  /y2 ED
%  a Div ceiling cvi /x2 ED /y1 ED
%  a Div cvi /x1 ED /y2 y2 y1 sub def
 clip
 newpath
gsave
 220 150 translate
 Scale dup scale
 systemdict /setstrokeadjust known { true setstrokeadjust } if
 /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
{ Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
 [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
 i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
 mul j l + S rmoveto}F i L j L stroke }F}F}F}F
 grestore
%  pop pop
} def
%
/PenroseFillA {%  on stack: scaling factor, border color, kite color, dart color
 /Scale ED
 Scale dup scale
 /border_colour ED
 /kite_colour ED
 /dart_colour ED
 clip

 newpath
 gsave
 100 100 translate
 6
 Scale 1 lt { 1 Scale dup add div mul cvi } if %%%%   Number of iterations
 10                                    %%%%   Long side length in millimeters
 /border_width { L 0.06 mul }def               %%%%   Choose the scalefactor for the borders
 /L exch 25.4 div 72 mul def           %%%%   Conversion: mm -> inches -> points
 /f{-1 5 sqrt add 2 div}bind def               %%%%   The reciprocal of the golden ratio
 /l{L f mul}bind def                   %%%%   Short side length l = L*f
 /Ll{L l add}bind def                  %%%%   Ll =  L + l
 /c{36 cos L mul}bind def              %%%%   c  =  L*cos(36)
 /s{36 sin L mul}bind def              %%%%   s  =  L*sin(36)
 /draw_tile { 0 0 moveto c s lineto 0 lineto gsave closepath gsave fill grestore
            0 setlinewidth stroke grestore border_colour stroke } bind def
 /half_kite { dup dup 0 gt{ 1 sub gsave f f neg scale -36 rotate half_dart
                          Ll 0 translate 144 rotate kite grestore }
                        { kite_colour L draw_tile }ifelse
            pop } bind def
 /half_dart { dup dup 0 gt{ 1 sub gsave f f scale half_kite
                          -144 rotate Ll neg 0 translate half_dart grestore }
                        { dart_colour l draw_tile }ifelse
            pop } bind def
 /kite{ gsave half_kite 1 -1 scale half_kite grestore }bind def
 border_width setlinewidth  1 setlinejoin  1 setlinecap
%  450 0 translate
 dup f exch neg exp dup scale
 5 {kite 72 rotate } repeat stroke
 grestore
} def
%
%
/TruchetFill { %         on stack: scaling factor
 10 dict begin
 dup dup scale
 1 exch div round /penroseFactor ED
 a 0 dtransform round exch round exch
 2 copy idtransform
 exch Atan rotate
 idtransform pop /a ED
 .25 .25 itransform pathbbox
 /y2 ED
 a Div ceiling cvi /x2 ED /y1 ED
 a Div cvi /x1 ED /y2 y2 y1 sub def
 clip
 newpath
 systemdict
 /setstrokeadjust known { true setstrokeadjust } if
 /ma a neg def
 /ha a 2 div def
 /mha ha neg def
 /tile {
   rand dup 2 idiv 2 mul eq { 90 rotate } if
   mha mha moveto ha mha lineto
   ha ha lineto mha ha lineto
%    closepath .1 setlinewidth stroke
   contents
 } def
 /contents{
   0 ha moveto ha 0 lineto
   0 mha moveto mha 0 lineto
%    1 setlinewidth stroke
 } def
 /dotiling {
   f ma mul a f a mul {
     /i exch def
     f ma mul a f a mul {
       /j exch def
       gsave i j translate
       tile stroke grestore
     } for
   } for
 } def
%
 /f 3 def
 5 srand dotiling
 end % local user dict
} def
%
/BeginArrow {
 ADict begin                   % hold it local, for end see EndArrow
 /@mtrx CM def
 gsave
 2 copy T
 2 index sub neg exch
 3 index sub exch Atan
 rotate newpath
} def
%
/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
%
/Arrow {
 CLW mul add dup
 2 div /w ED
 mul dup /h ED
 mul /a ED
 { 0 h T 1 -1 scale } if
 w neg h moveto
 0 0 L w h L w neg a neg rlineto
 gsave fill grestore
} def
%
/ArrowD { % the sides are drawn as curves (hv 20071211)
 CLW mul add dup
 2 div /w ED
 mul dup /h ED
 mul /Inset ED
 { 0 h T 1 -1 scale } if % changes the direction
% we use y=w/h^2 * x^2 as equation for the control points
% for the coordinates the arrow is seen from top to bottom
% the bottom (tip) is (0;0)
 w neg h moveto % lower left of >
 w 9 div 4 mul neg h 3 div 2 mul
 w 9 div neg       h 3 div
 0 0 curveto    % tip of >
 w 9 div        h 3 div
 w 9 div 4 mul  h 3 div 2 mul
 w h curveto % upper left of >
 w neg Inset neg rlineto % move to x=0 and inset
 gsave fill grestore
} def
%
/Tbar {
 CLW mul add /z ED
 z -2 div CLW 2 div moveto
 z 0 rlineto stroke
 0 CLW moveto
} def
%
/Bracket {
 CLW mul add dup CLW sub 2 div
 /x ED mul CLW add /y ED /z CLW 2 div def
 x neg y moveto
 x neg CLW 2 div L x CLW 2 div L x y L stroke
 0 CLW moveto
} def
%
/RoundBracket {
 CLW mul add dup 2 div
 /x ED mul /y ED /mtrx CM def
 0 CLW 2 div T x y mul 0 ne { x y scale } if
 1 1 moveto
 .85 .5 .35 0 0 0 curveto
 -.35 0 -.85 .5 -1 1 curveto
 mtrx setmatrix stroke 0 CLW moveto
} def
%
/SD { 0 360 arc fill } def
%
/EndDot { % DS is the dot size
 { /z DS def } { /z 0 def } ifelse     % outer or inner dimen
 /b ED                                 % the color definition
 0 z DS SD
 b { 0 z DS CLW sub SD } if
 0 DS z add CLW 4 div sub
 moveto
} def
%
/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
 /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
 load } if ] cvx newpath 3 1 roll T exec } def
%
/NArray { % holds the coordinates and on top of stack the showpoints boolean
 /showpoints ED
 counttomark 2 div dup cvi /n ED       % n 2 div on stack
 n eq not { exch pop } if              % even numbers of points? delete one
 ] aload /Points ED
 showpoints not { Points aload pop } if
%    { ] aload /Points ED }
%    { n 2 mul 1 add -1 roll pop } ifelse       % delete the mark symbol
} def
%
/Line {
 NArray n 0 eq not
   { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
     n { Lineto } repeat
     CP 4 2 roll ArrowB L pop pop
   } if
} def
%
/LineToYAxis {
 /Ox ED                % Save the x origin value
 NArray            % all x-y pairs on stack
 n { 2 copy moveto % go to current point
   Ox exch Lineto   % line to y-axis
   pop             % delete old x-value
 } repeat
} def
%
/LineToXAxis{
 /Oy ED                % Save the y origin value
 NArray                % all x-y pairs on stack
 n 0 eq not
   { n 1 eq { 0 0 /n 2 def } if
     ArrowA
     /n n 2 sub def
     CP 2 copy moveto pop Oy Lineto
     n { 2 copy moveto pop Oy Lineto } repeat
     CP
     4 2 roll
     ArrowB
     2 copy moveto pop Oy
     L
     pop pop } if
} def
%
/Arcto {
 /a [ 6 -2 roll ] cvx def
 a r
 /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
 a
} def
%
/CheckClosed {
 dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
 and { pop pop /n n 1 sub def } if
} def
%
/Polygon {
 NArray n 2 eq { 0 0 /n 3 def } if
 n 3 lt
   { n { pop pop } repeat }
   { n 3 gt { CheckClosed } if
     n 2 mul -2 roll
     /y0 ED /x0 ED /y1 ED /x1 ED
     x1 y1
     /x1 x0 x1 add 2 div def
     /y1 y0 y1 add 2 div def
     x1 y1 moveto
     /n n 2 sub def
     n { Lineto } repeat
     x1 y1 x0 y0 6 4 roll Lineto
     Lineto pop pop closepath } ifelse
} def
%
/SymbolPolygon {   % on stack [ x y x y ...
 counttomark                                   % number of elements
 2 add /m ED
 2 copy m 2 roll                               % copy last two
 m 2 div cvi /n ED                             % n pairs
 /YA ED /XA ED                                 % the start point
 n 1 sub {
   /YB ED /XB ED
   /XLength XB XA sub def
   /YLength YB YA sub def
   /PAngle YLength XLength Atan def
   /XYLength XLength YLength Pyth def
   /nSym XYLength SymStep Div cvi def
   /Shift Symbol stringwidth pop 2 Div def
   /deltaX XLength nSym Div def
   /deltaY YLength nSym Div def
   XA Shift sub YA Shift sub moveto
   nSym {
     gsave rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if
     Symbol show
     grestore
     deltaX deltaY rmoveto
   } repeat
%    XB Shift sub YB Shift sub moveto Symbol show
   /YA YB def /XA XB def
 } repeat
 pop   % delete the mark symbol
} def
%
/Diamond {
 /mtrx CM def
 T rotate
 /h ED
 /w ED
 dup 0 eq { pop } { CLW mul neg
   /d ED
   /a w h Atan def
   /h d a sin Div h add def
   /w d a cos Div w add def } ifelse
 mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
 /ArrowA { moveto } def
 /ArrowB { } def
 false Line
 closepath mtrx setmatrix } def
%
/Triangle {
 /mtrx CM def
 translate
 rotate /h ED 2 div /w ED
 dup CLW mul /d ED
 /h h d w h Atan sin Div sub def
 /w w d h w Atan 2 div dup cos exch sin Div mul sub def
 mark
 0 d w neg d 0 h w d 0 d
 /ArrowA { moveto } def
 /ArrowB { } def
 false
 Line
 closepath
 mtrx
% DG/SR modification begin - Jun.  1, 1998 - Patch 3 (from Michael Vulis)
% setmatrix } def
 setmatrix pop
} def
% DG/SR modification end
%
/CCA {
 /y ED /x ED
 2 copy y sub /dy1 ED
 x sub /dx1 ED
 /l1 dx1 dy1 Pyth def
} def
%
/CC {
 /l0 l1 def
 /x1 x dx sub def
 /y1 y dy sub def
 /dx0 dx1 def
 /dy0 dy1 def
 CCA
 /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
 /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
 /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
 /x2 x l0 dx mul m mul sub def
 /y2 y l0 dy mul m mul sub def
 /dx l1 dx mul m mul neg def
 /dy l1 dy mul m mul neg def
} def
%
/IC {
 /c c 1 add def
 c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
 /a a 2 mul 3 div 45 cos b exp div def
 CCA
 /dx 0 def
 /dy 0 def
} def
%
/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
/NC { CC x1 y1 x2 y2 x y curveto } def
/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
/NAC { x2 y2 x y curveto CC x1 y1 } def
/EAC { x2 y2 x y ArrowB curveto pop pop } def
%
/OpenCurve {
 NArray n 3 lt
   { n { pop pop } repeat }
   { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
} def
%
/CurvePath {
 %% for negative SymStep we calculate the distance
 SymStep 0 lt { gsave PathLength SymStep div abs /SymStep ED grestore } if
 0.5 setflat
 flattenpath /z 0 def /z0 0 def
 { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
   x1 Shift sub y1 Shift sub moveto
   gsave
   curveticks
     { x1 y1 translate startAngle rotate
       0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
       SymbolLinewidth setlinewidth stroke
     }
     { startAngle rotate Symbol show }
   ifelse
   grestore /z0 z def }
 { /y ED /x ED PathLength@ z z0 sub SymStep ge {
     x Shift sub y Shift sub moveto
     gsave
     curveticks
       { y yOld sub x xOld sub Atan 180 sub CorrAngle sub /rotAngle ED
         x y translate rotAngle rotate
         0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
         SymbolLinewidth setlinewidth stroke
       }
       {
         rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if
         Symbol show
       }
     ifelse
     grestore /z0 z def } if
   /yOld y def /xOld x def }
 {} %% the lineto part
 { /y y2 def /x x2 def PathLength@
   x Shift sub y Shift sub moveto
   gsave
   curveticks
     { y yOld sub x xOld sub Atan 180 sub /rotAngle ED
       x y translate rotAngle rotate
       0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
       SymbolLinewidth setlinewidth stroke
     }
     {
       x Shift sub y Shift sub moveto
       rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if
       Symbol show
     }
   ifelse
   grestore
 }
 pathforall
%  curveticks
%   { gsave
%     x y translate rotAngle rotate
%     0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto
%     SymbolLinewidth setlinewidth stroke grestore
%   } if
 z
} def
%
/OpenSymbolCurve {
 OpenCurve
 0.1 setflat
 /Shift Symbol stringwidth pop 2 div def
 CurvePath
} def
%
/AltCurve {
 { false NArray n 2 mul 2 roll
   [ n 2 mul 3 sub 1 roll ] aload
   /Points ED
   n 2 mul -2 roll }
 { false NArray } ifelse
 n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
} def
%
/AltOpenSymbolCurve {
 AltCurve
 0.1 setflat
 /Shift Symbol stringwidth pop 2 div def
 CurvePath
} def
%
/ClosedCurve {
 NArray n 3 lt
   { n { pop pop } repeat }
   { n 3 gt { CheckClosed } if
     6 copy n 2 mul 6 add 6 roll
     IC CC x y moveto n { NC } repeat
     closepath pop pop
   } ifelse
} def
%
/ClosedSymbolCurve {
 ClosedCurve
 0.1 setflat
 /Shift Symbol stringwidth pop 2 div def
 CurvePath
} def
%
/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def
%
/FontDot {
 DS 2 mul dup
 matrix scale matrix concatmatrix exch matrix
 rotate matrix concatmatrix exch
 findfont exch makefont setfont
} def
%
/Rect {
 x1 y1 y2 add 2 div moveto
 x1 y2 lineto
 x2 y2 lineto
 x2 y1 lineto
 x1 y1 lineto
 closepath
} def
%
/OvalFrame {
 x1 x2 eq y1 y2 eq or
   { pop pop x1 y1 moveto x2 y2 L }
   { y1 y2 sub abs x1 x2 sub abs 2 copy gt
     { exch pop } { pop } ifelse
     2 div exch { dup 3 1 roll mul exch } if
     2 copy lt { pop } { exch pop } ifelse
     /b ED
     x1 y1 y2 add 2 div moveto
     x1 y2 x2 y2 b arcto
     x2 y2 x2 y1 b arcto
     x2 y1 x1 y1 b arcto
     x1 y1 x1 y2 b arcto
     16 { pop } repeat
     closepath
   } ifelse
} def
%
/Frame {
 CLW mul /a ED
 3 -1 roll
 2 copy gt { exch } if
 a sub /y2 ED
 a add /y1 ED
 2 copy gt { exch } if
 a sub /x2 ED
 a add /x1 ED
 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse
} def
%
/BezierNArray {
 /f ED
 counttomark 2 div dup cvi /n ED
 n eq not { exch pop } if
 n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
 f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
} def
%
/OpenBezier {
 BezierNArray
 n 1 eq
   { pop pop }
   { ArrowA n 4 sub 3 idiv
     { 6 2 roll 4 2 roll curveto } repeat
     6 2 roll 4 2 roll ArrowB curveto } ifelse
} def
%
/OpenSymbolBezier {
 OpenBezier
 0.1 setflat
 /Shift Symbol stringwidth pop 2 div def
 CurvePath
} def
%
/ClosedBezier {
 BezierNArray
 n 1 eq
   { pop pop }
   { moveto n 1 sub 3 idiv
     { 6 2 roll 4 2 roll curveto } repeat
     closepath } ifelse
} def
%
/ClosedSymbolBezier {
 /f ED                          % save showpoints value
 2 copy /yEnd ED /xEnd ED
 counttomark -2 roll 2 copy /yStart ED /xStart ED
 counttomark 2 roll
 f
 ClosedBezier
 0.1 setflat
 /Shift Symbol stringwidth pop 2 div def
 CurvePath
 [ xEnd yEnd xStart yStart SymbolLine
} def
%
/BezierShowPoints {
 gsave
 Points aload length 2 div cvi /n ED
 moveto
 n 1 sub { lineto } repeat
 CLW 2 div SLW [ 4 4 ] 0 setdash stroke
 grestore
} def
%
/Parab {
 /y0 ED /x0 ED /y1 ED /x1 ED
 /dx x0 x1 sub 3 div def
 /dy y0 y1 sub 3 div def
 x0 dx sub y0 dy add x1 y1 ArrowA
 x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
 curveto
 /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
} def
%
/Parab1 { % 1 end  |  0 SP
 /ySP ED /xSP ED /y1 ED /x1 ED
 /dx xSP x1 sub 3 div def
 /dy ySP y1 sub 3 div def
 newpath x1 y1 moveto xSP y1 lineto xSP ySP lineto
                      x1 ySP lineto closepath clip
 currentpoint
 newpath moveto
 xSP dx sub ySP dy add x1 y1 ArrowA
 xSP dx add ySP dy add xSP 2 mul x1 sub y1 ArrowB
 curveto
 /Points [ x1 y1 xSP ySP xSP 2 mul x1 sub y1 ] def
} def
%
/Grid {
 newpath
 /a 4 string def
 /b ED %                               psk@gridlabels in pt
 /c ED %                               { \pst@usecolor\psgridlabelcolor }
 /n ED %                               psk@griddots
 cvi dup 1 lt { pop 1 } if
 /s ED %                               \psk@subgriddiv
 s div dup 0 eq { pop 1 } if
 /dy ED s div dup 0 eq { pop 1 } if %  \pst@number\psyunit abs
 /dx ED dy div round dy mul %          \pst@number\psxunit abs
 /y0 ED dx div round dx mul
 /x0 ED dy div round cvi
 /y2 ED dx div round cvi
 /x2 ED dy div round cvi
 /y1 ED dx div round cvi
 /x1 ED
 /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
 /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
 b 0 gt {
   /z1 b 4 div CLW 2 div add def
%    /Helvetica findfont b scalefont setfont
   /b b .95 mul CLW 2 div add def } if
 systemdict /setstrokeadjust known
   { true setstrokeadjust /t { } def }
   { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
      exch itransform } bind def } ifelse
 gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
 /i x1 def
 /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
 /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
 x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
 { i dx mul dup y0 moveto
   b 0 gt
     { gsave c i a cvs dup stringwidth pop
       /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
       h 0 gt {b neg}{z1} ifelse
       rmoveto show grestore } if
   dup t f moveto
   g t L stroke
   /i i w add def
 } repeat
 grestore
 gsave
 n 0 gt
 % DG/SR modification begin - Nov. 7, 1997 - Patch 1
 %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
   { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
 % DG/SR modification end
   { 2 setlinecap } ifelse
 /i y1 def
 /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
 /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
 y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
 { newpath i dy mul dup x0 exch moveto
   b 0 gt { gsave c i a cvs dup stringwidth pop
     /z2 ED
     w 0 gt {z1 z2 add neg} {z1} ifelse
     h 0 gt {z1} {b neg} ifelse
     rmoveto show grestore } if
   dup f exch t moveto
   g exch t L stroke
   /i i h add def
 } repeat
 grestore
} def
%
/ArcArrow {
 /d ED /b ED /a ED
 gsave
 newpath 0 -1000 moveto clip
 newpath
 0 1 0 0 b
 grestore
 c mul
 /e ED
 pop pop pop r a e d PtoC y add exch x add
 exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
 mul neg d
} def
%
/Ellipse {
 /rotAngle ED
 /mtrx CM def
 T
 rotAngle rotate
 scale 0 0 1 5 3 roll arc
 mtrx setmatrix
} def
%
/ArcAdjust { %%%% Vincent Guirardel
% given a target length (targetLength) and an initial angle (angle0) [in the stack],
% let  M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
% This computes an angle t such that (x0,y0) is at distance
% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
% contrary to TvZ's code.
% To achieve, this, one iterates the following process: start with some angle t,
% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
%
% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
% the value of d = add/sub is used to know on which side we have to move.
% It is only used in the initialisation of the angle before the iteration.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Input stack:  1: target length 2: initial angle
% variables used : rx, ry, d (=add/sub)
%
 /targetLength ED /angle0 ED
 /x0 rx angle0 cos mul def
 /y0 ry angle0 sin mul def
% we are looking for an angle t such that (x0,y0) is at distance targetLength
% from the point M(t)=(rx*cos(t),ry*sin(t)))
%initialisation of angle (using 1st order approx = TvZ's code)
 targetLength 57.2958 mul
 angle0 sin rx mul dup mul
 angle0 cos ry mul dup mul
 add sqrt div
% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
% (if the ellipse is very curved at the point where we draw the arrow, %
% the value can be much more than 360 degrees !)
% this should avoid going on the wrong side (more than 180 degrees) or go near
% a bad attractive point (at 180 degrees)
 dup 90 ge { pop 90 } if
 angle0 exch d % add or sub
% maximum number of times to iterate the iterative procedure:
% iterative procedure: takes an angle t on top of stack, computes a
% better angle (and put it on top of stack)
 30 { dup
% compute distance D between (x0,y0) and M(t)
   dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
% if D almost equals targetLength, we stop
   dup targetLength sub abs 1e-5 le { pop exit } if
% stack now contains D t
% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
   exch dup cos rx mul x0 sub  exch sin ry mul y0 sub
% stack contains:  y(t)-y0, x(t)-x0, d
   2 index Div targetLength mul y0 add ry Div exch
   2 index Div targetLength mul x0 add rx Div
% stack contains x(t')/rx , y(t')/ry , d
% now compute t', and remove D from stack
   atan exch pop
 } repeat
% we don't look at what happened... in particular, if targetLength is greater
% than the diameter of the ellipse...
% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
% to give back the result as a an angle relative to angle0 we could add the following line:
% angle0 sub 0 exch d
%
% begin bug fix 2006-01-11
% we want to adjust the new angle t' by a multiple of 360 so that  | t'-angle0 | <= 180
%(we don't want to make the ellipse turn more or less than it should)...
dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
% end bug fix
} def
%
/EllipticArcArrow {
 /d ED      % is add or sub
 /b ED      % arrow procedure
 /a1 ED     % angle
 gsave
 newpath
 0 -1000 moveto
 clip                  % Set clippath far from arrow.
 newpath
 0 1 0 0 b             % Draw arrow to determine length.
 grestore
% Length of arrow is on top of stack. Next 3 numbers are junk.
%
 a1 exch ArcAdjust   % Angular position of base of arrow.
 /a2 ED
 pop pop pop
 a2 cos rx mul xOrig add % hv 2007-08-29   x->xOrig
 a2 sin ry mul yOrig add % hv 2007-08-29   y->yOrig
 a1 cos rx mul xOrig add %
 a1 sin ry mul yOrig add %
% Now arrow tip coor and base coor are on stack.
 b pop pop pop pop       % Draw arrow, and discard coordinates.
 a2 CLW 8 div
% change value of d (test it by looking if  `` 1 1 d '' gives 2 or not )
 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
 ArcAdjust
% resets original value of d
 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse  % Adjust angle to give overlap.
} def
%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
%
/Rot { CP CP translate 3 -1 roll neg rotate NET  } def
%
/RotBegin {
 tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
 /TMatrix [ TMatrix CM ] cvx def
 /a ED
 a Rot /RAngle [ RAngle dup a add ] cvx def
} def
%
/RotEnd {
 /TMatrix [ TMatrix setmatrix ] cvx def
 /RAngle [ RAngle pop ] cvx def
} def
%
/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
%
/Uput {
 /a ED
 add 2 div /h ED 2
 div /w ED
 /s a sin def
 /c a cos def
 /b s abs c abs 2 copy gt dup
   /q ED
   { pop } { exch pop } ifelse def
 /w1 c b div w mul def
 /h1 s b div h mul def
 q { w1 abs w sub dup c mul abs }{ h1 abs h sub dup s mul abs } ifelse
} def
%
/UUput {
 /z ED
 abs /y ED
 /x ED
 q { x s div c mul abs y gt }{ x c div s mul abs y gt } ifelse
   { x x mul y y mul sub z z mul add sqrt z add }
   { q { x s div } { x c div } ifelse abs
   } ifelse
 a PtoC
 h1 add exch
 w1 add exch
} def
%
/BeginOL {
 dup (all) eq exch TheOL eq or
   { IfVisible not { Visible /IfVisible true def } if }
   { IfVisible { Invisible /IfVisible false def } if } ifelse
} def
%
/InitOL {
 /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
 /Visible { CP OLUnit idtransform T moveto } def
 /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def
 /BOL { BeginOL } def
 /IfVisible true def
} def
%
end
%-----------------------------------------------------------------------------%
%
% END pstricks.pro

%%EndProcSet
%%BeginProcSet: pst-algparser.pro 0 0
% $Id: pst-algparser.pro 594 2011-10-31 18:13:18Z herbert $
%%
%% PostScript prologue for PSTricks algorithm parser
%% Version 0.04, 2011/10/21
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
%%-----------------------------------------------------------------------------%
%
/AlgParser { tx@AlgToPs begin AlgToPs end } def  % Dominique Rodriguez
%
/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
%
% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.13
%
% 09/2011 DR factorial with ! added
%
% E->T|E+T
% T->FS|T*FS
% FS -> F | +FS | -FS
% F->P|F^SF|P!
% P->(E)|literal
% literal->number|var|var[E]|func(params)
% params->E|E,param
% number->TOBEFINISHED
%
%% E expression, T term, SF signed factor, F factor, P power
%
%% parser
%
%% str
%
%% C->E<condition_operators>E
%% STR index -> STR index+lenExpr
/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp  } def
%
%% analyze Expression List (separator , or | )
%% STR index -> STR index+lenExpr
%% /AnalyzeListOfE {
%%   { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
%%     NextNonBlankChar dup 0 eq { pop exit } if
%%     dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
%%     pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
%%   AnalyzeListOfEPostHook
%% } def
/AnalyzeListOfE {
 /NotFirst false def
 { NextNonBlankChar pop AnalyzeExpr
   NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
   dup Strlen eq { exit } if NextNonBlankChar
   dup 44 ne 1 index 124 ne and
   { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
   if  pop 1 add } loop
 AnalyzeListOfEPostHook
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% E->T|E+T
%% STR index -> STR index+lenExpr
/AnalyzeExpr {
 AnalyzePreHook AnalyzeTerm IsEndingExpr
 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
 { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
 ifelse
 AnalyzePostHook
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% T->FS|T*FS
%% STR index
/AnalyzeTerm {
 AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
 { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
 ifelse
 AnalyzePostHook
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FS -> F | +FS | -FS
%% STR index
/AnalyzeSignedFactor {
 AnalyzePreHook 2 copy get dup IsUnaryOp
 { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
 { pop AnalyzeFactor }
 ifelse AnalyzePostHook
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% F->P|F^P|P!
%% STR index
/AnalyzeFactor {
 AnalyzePreHook AnalyzePower IsEndingFactor
 { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
 { { dup 33 eq%% is there a ! DR 09/2011
     { pop 1 add NextNonBlankChar pop EvalFactorial }
     { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower }
     ifelse
     IsEndingFactor { pop exit } if } loop }
 ifelse  AnalyzePostHook
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% P->(E)|literal
%% STR index
/AnalyzePower {
 %% depending of first char either a number, or a literal
 2 copy get dup 40 eq%%an open par
 { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
 { AnalyzeLiteral }
 ifelse
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% STR index STR[index] -> STR index
%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% recognize + or -
%% chr -> T/F
/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a number can contain only : 0123456789.
%% chr -> T/F
/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% STR index -> STR index number
%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
%% STR index -> STR index' number
/ReadNumber {
 exch dup 3 -1 roll dup 3 1 roll
 %%read mantissa
 { 1 add  2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
 dup 101 eq exch 69 eq or
 %%% there is a "e" or "E" -> read exponant
 { 1 add 2 copy get dup IsUnaryOp
   { pop 1 add 2 copy get } if
   { IsNumber not { exit } if 1 add 2 copy get } loop }
 if
 dup 4 1 roll
 3 -1 roll exch 1 index sub getinterval
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a number can contain only : 0123456789.
%% chr -> T/F
/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% STR index -> STR index number
%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
%% STR index -> STR index' number
/ReadCondOp {
 NextNonBlankChar 1 index 4 1 roll
 { IsCondOp not { exit } if 1 add  2 copy get } loop
 2 copy 5 -1 roll
 exch 1 index sub getinterval 3 1 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a literal can contain only : 0123456789.
%% chr -> T/F
/IsLiteral {%
 dup 48 ge exch dup  57 le 3 -1 roll and exch
 dup 65 ge exch dup  90 le 3 -1 roll and 3 -1 roll or exch
 dup 97 ge exch     122 le and or } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
%% STR index -> literal STR index' nextchr
/ReadLiteral {
 exch dup 3 -1 roll dup 3 1 roll
 %%read literal core
 { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% expr is ended by end of str or a clpar
%% STR index -> STR index STR[index] T/F
/IsEndingExpr {%
 2 copy dup Strlen eq
 %% if end of str is reached -> end !
 { pop pop 0 true }
 %% ending chr -> clpar, comma, |, <, >, =, !,
 {get dup  dup  41 eq
      exch dup 124 eq
      exch dup  93 eq
      exch dup  44 eq
      exch dup  30 eq
      exch dup  60 ge exch 62 le and or or or or or}
 ifelse } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% expr is ended by end of str or a +-
%% STR index -> STR index STR[index] T/F
/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% expr is ended by end of str or */
%% STR index -> STR index STR[index] T/F
/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% expr is ended by end of str or ^
%% STR index -> STR index STR[index] T/F
/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% STR index -> STR index STR[index]
/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
%%%%%%%%%%%%%%%%%%%%%%%%
%% DEBUG
/BRK {false} def
/BRKtrue {/BRK true def} def
/BRKStop {BRK {BRKtoto} if } def
/BRKEvalStop {BRK exch if } def
/BRKBRK2true {BRK {BRK2true} if } def
/BRK2 {false} def
/BRK2true {/BRK2 true def} def
/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
end
%
%-------------------------------------------------------------------------------%
%
/tx@AlgToPs 12 dict def tx@AlgToPs begin
%
%% algExpr -> PSVector
/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
/Strlen 0 def
/EvalListOfExpr {} def%
/EvalNumber {%
   ReadNumber  cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
   exch 1 add array astore def NextNonBlankChar pop } def
/EvalAddSub {%
 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
} def
/EvalMulDiv {%
 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
} def
/EvalPower {%
 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
 pop /exp cvx exch 1 add array astore def
} def
/EvalFactorial {% DR 09/2011
 /ExpressionVector ExpressionVector aload length
 /fact cvx exch 1 add array astore def
} def
/EvalLiteral {%
 ReadLiteral
 dup 40 eq%%% there is an open par -> function call
 { pop 2 index
   dup (Sum) eq { EvalSum }
   { dup (IfTE) eq { EvalCond }
     { dup (Derive) eq { pop EvalDerive }
       { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
         /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
         exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
 { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
   dup 91 eq%%% there is an open bracket -> vector element
   { pop 1 add NextNonBlankChar pop AnalyzeExpr
     /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
   { pop NextNonBlankChar pop }
   ifelse}
 ifelse
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% the derive function : Derive(n,f(x))
%% firstparindex lastparindex ->
/EvalDerive {
 %% manage the function descripiton
 1 add ReadNumber 3 1 roll NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
 1 add NextNonBlankChar pop
 3 -1 roll cvi
 dup 0 eq
 { pop AnalyzeExpr 3 -1 roll pop 1 add }
 { 1 sub 3 1 roll (x)  exch tx@Derive begin DeriveIndexed end 4 -1 roll
   { (x) tx@Derive begin Derive end } repeat
   ExpressionVector exch /ExpressionVector [] def
   AlgToPs aload length
   /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll  /l2 exch def /l1 exch def
   l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
   1 index length /Strlen exch def } ifelse
} def
/EvalSum {%
 pop 1 add NextNonBlankChar pop
 %% read the variable name
 ReadLiteral pop NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
 %% read the initial value
 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
 %% read the increment value
 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
 %% read the limit value
 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
 /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
 5 -1 roll 4 add array astore def
 %% keep ExpressionVector for later and create a new one for internal Sum computation
 ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
 1 add NextNonBlankChar pop AnalyzeExpr
 %% add each term
 /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
 /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
 array astore def 3 -1 roll pop 1 add
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Convert to radians if trigo function call
%% (name) ->
/TrigoFunc {
 dup (cos) eq 1 index (sin) eq or exch (tan) eq or
 { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
   array astore def
 } if
} def
/EvalCond {%
 pop 1 add AnalyzeCond NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
 ExpressionVector 3 1 roll /ExpressionVector [] def
 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
 NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
 1 add AnalyzeExpr
 NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
 ExpressionVector
 /ExpressionVector 6 -1 roll aload length dup
 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
 1 add 3 -1 roll pop
} def
%% CondOp STR index
/EvalCondOp {%
 3 -1 roll
 dup (=) eq  { /eq } {%
 dup (<) eq  { /lt } {%
 dup (>) eq  { /gt } {%
 dup (>=) eq { /ge } {%
 dup (<=) eq { /ge } {%
 dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
 ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
 cvx exch pop
 /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
/EvalUnaryOp {
 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% H O O K S
/AnalyzePreHook {} bind def
/PreEvalHook {} bind def
/AnalyzeListOfEPostHook {} bind def
/AnalyzePostHook {} def
/RollOp { 3 1 roll } bind def
end   %tx@CoreAnalyzerDict
%
%--------------------------------------------------------------------%
%
/tx@Derive 41 dict def tx@Derive begin
%%increase ^^ for each function added
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% algExpr variable -> PSVector
/Derive {%
 10240 string 3 1 roll 0 3 1 roll
 /Variable exch def
 tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
} def
/Strlen 0 def
/InitParser { dup length /Strlen exch def 0 } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% algExpr variable index -> PSVector
/DeriveIndexed {%
 3 1 roll 10240 string 3 1 roll 0 3 1 roll
 /Variable exch def
 tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u,v)'=-(u',v')
/EvalListOfExpr {%
 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
          2 copy 7 -1 roll dup length 4 1 roll putinterval add
 6 -2 roll pop pop
 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (-u)'=-(u')
/EvalUnaryOp {
 4 -2 roll 4 index (0) eq
 { (0) StrConcat 7 -1 roll pop }
 { 7 -1 roll 45 eq
   { AddSub AddOpPar true } { false } ifelse
   3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
 2 copy pop 0 6 2 roll GetIntervalNewStr
 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (number)'=0
/EvalNumber { ReadNumber (0) 6 2 roll } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u+v)'=u'+v'
/EvalAddSub {%
 7 index dup (0) eq
 { pop true }%% du=0 nothing added
 { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
 ifelse
 5 index dup (0) eq
 { pop { (0) } { 4 -2 roll 2 copy pop 0  6 2 roll GetIntervalNewStr } ifelse }%%dv=0
 { exch
   { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
   { 5 -2 roll 7 index 43 eq%%something yet added
     { AddAdd false } { AddSub AddOpPar true } ifelse }
   ifelse 11 1 roll
   3 -1 roll StrConcat 10 -1 roll { AddClPar } if
   2 copy pop 0 6 2 roll GetIntervalNewStr }
 ifelse
 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u*v)' or (u/v)'
/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u*v)'=u'*v+u*v'
/EvalMul {%
 4 -2 roll 7 index dup (0) eq
 { pop false }%%du=0
 { (1) eq%%du=1
   { false }
   { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
   3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
   true }%%du!=0
 ifelse
 5 1 roll 5 index (0) eq
 { 5 -1 roll not { (0) StrConcat } if }%%dv=0
 { 5 -1 roll { AddAdd } if
   4 index (1) eq
   { 8 index StrConcat }
   { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
   ifelse
 }%%dv!=0
 ifelse
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u/v)'=(u'*v-u*v')/v^2
/EvalDiv {%
 4 -2 roll
 4 index (0) eq%%dv=0 -> u'/v
 { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
 { 7 index dup (0) eq
   { pop }%%du=0
   { (1) eq%%du=1
     { false }
     { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
     3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
   ifelse
     AddSub
     4 index (1) eq
     { 8 index StrConcat }
     { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
     ifelse
   %}%%dv!=0
   2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
   AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
 ifelse
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% str1 index str2 -> str1 index
/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
/EvalPower {%
 4 -2 roll 7 index (0) eq
 {%%if du=0 then (u^v)'=v'ln(u)u^v
   4 index (0) eq
   { (0) StrConcat }%%if dv=0 then (u^v)'=0
   { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
     8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
     AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
 }
 {%%du!=0
   4 index (0) eq
   {%%if dv=0 then (u^v)'=vu'u^(v-1)
     5 index dup IsStrNumber
     { dup (0) eq
       { StrConcat }
       { dup dup (1) eq exch (1.0) eq or
         { StrConcat  }
         { StrConcat
           7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
           { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
           (*\() StrConcat 8 index StrConcat (\)) StrConcat
           5 index  dup dup (2) eq exch (2.0) eq or
           { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
     { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
       5 index StrConcat (-1\)) StrConcat } ifelse
   }
   {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
     7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
     AddOpPar 5 index StrConcat (\)*\() StrConcat
     8 index StrConcat (\)^\() StrConcat
     5 index StrConcat (-1\)+\() StrConcat
     4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
     8 index StrConcat (\)^\() StrConcat
     5 index StrConcat (\)*ln\() StrConcat
     8 index StrConcat AddClPar
   } ifelse
 } ifelse
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% No derivative for factorial ! only cst => null derivative
/EvalFactorial {% DR 09/2011
 4 index (0) eq
 { (0) mark 8 -2 roll  cleartomark 2 index 7 index dup 4 index exch sub getinterval exch 6 2 roll }
 { DERIVATIVE_ENGINE_ERROR_no_variable_in_factorial } ifelse
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% str -> true/false
/IsStrNumber {%
 true exch
 { dup 48 lt exch dup 57 gt 3 -1 roll or
   exch dup 46 ne%%.
   exch dup 43 ne%%+
   exch 45 ne%%-
   and and and { pop false } if } forall
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% literal switch -> func call, vector, variables
/EvalLiteral {%
 ReadLiteral dup 40 eq%%% there is an open par -> function call
 { pop (EvalFunc_             ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
 { dup 91 eq%%% there is an open bracket -> vector element
   { DERIVATIVE_ENGINE_ERROR_vector_not_yet_implemented }
   { pop EvalVariable }
   ifelse }
 ifelse
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% first last parpos Expr[first:parpos-1] ->
/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (f(u))'=u'f'(u)
/EvalFunc {
 4 2 roll 4 index (1) ne
 { AddOpPar 4 index StrConcat (\)*) StrConcat } if
 (Eval             ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Func derivative -> Eval<func>
/EvalFunc_sin {%
 PreCommonFunc
 { (cos\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_cos {%
 PreCommonFunc
 { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_tan {%
 PreCommonFunc
 {  dup 0 eq { (1) StrConcat } { 1 sub } ifelse  (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
 PostCommonFunc } def
/EvalFunc_asin {%
 PreCommonFunc
 { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_acos {%
 PreCommonFunc
 { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_atg {%
 PreCommonFunc
 { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_ln {%
 PreCommonFunc
 {  dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_exp {%
 PreCommonFunc
 {  (exp\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_EXP {%
 PreCommonFunc
 {  (EXP\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_sqrt {%
 PreCommonFunc
 { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_Fact {%
 PreCommonFunc { DERIVATIVE_ENGINE_ERROR_no_variable_expression_in_Fact } if
 PostCommonFunc } def
/EvalFunc_sh {%
 PreCommonFunc
 { (ch\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_ch {%
 PreCommonFunc
 { (sh\() StrConcat 5 index StrConcat AddClPar } if
 PostCommonFunc } def
/EvalFunc_th {%
 PreCommonFunc
 {  dup 0 eq { (1) StrConcat } { 1 sub } ifelse  (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
 PostCommonFunc } def
/EvalFunc_Argsh {%
 PreCommonFunc
 { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_Argch {%
 PreCommonFunc
 { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
 PostCommonFunc } def
/EvalFunc_Argth {%
 PreCommonFunc
 { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
 PostCommonFunc } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/PreCommonFunc {
 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
 4 2 roll 4 index (0) eq
 { (0) StrConcat false }
 { 4 index (1)  ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
} def
/PostCommonFunc {
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
/EvalFunc_Derive {%
 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
 exch 6 2 roll } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% literal switch -> func call, vector, variables
/EvalFunc_Sum {%
 1 add NextNonBlankChar pop
 %% read the variable name
 ReadLiteral pop 3 -1 roll pop NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
 %% read the initial value
 1 add NextNonBlankChar pop ReadNumber pop
 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
 %% read the increment value
 1 add NextNonBlankChar pop ReadNumber pop
 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
 %% read the limit value
 1 add NextNonBlankChar pop ReadNumber pop
 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
 4 index StrConcat AddClPar
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% literal switch -> func call, vector, variables
/EvalFunc_IfTE {%
 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
 NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
 1 add NextNonBlankChar pop dup 5 1 roll
 AnalyzeExpr NextNonBlankChar
 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
 1 add NextNonBlankChar pop
 AnalyzeExpr 1 add NextNonBlankChar pop
 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
 2 copy pop 0 6 2 roll GetIntervalNewStr
 mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% advance in str until a comma is found (no error detection!)
%% str index -> str index'
/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Convert to radians if trigo function call
%% (name) ->
/TrigoFunc {
 dup (cos) eq 1 index (sin) eq or exch (tan) eq or
 { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
   array astore def
 } if
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% No derivative for condition....
/EvalCondOp { 3 -1 roll pop } bind def
/PutIntervalOneAdd {putinterval 1 add} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add open parenthesis in string at the given index
%% str index -> str index+1
/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add close parenthesis in string at the given index
%% str index -> str index+1
/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add 0 in string at the given index
%% str index -> str index+1
/AddZero {2 copy (0) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add open parenthesis in string at the given index
%% str index -> str index+1
/AddMul {2 copy (*) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add open parenthesis in string at the given index
%% str index -> str index+1
/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add a plus sign in string at the given index
%% str index -> str index+1
/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add a minus sign in string at the given index
%% str index -> str index+1
/AddSub {2 copy (-) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Add a pipe sign in string at the given index
%% str index -> str index+1
/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% H O O K S
/AnalyzePreHook { dup 5 1 roll } bind def
/PreEvalHook {} def
/AnalyzePostHook { 7 -1 roll pop } bind def
/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
/RollOp { 5 1 roll } bind def
end%%%tx@CoreAnalyzerDict
/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% NEW FUNC
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
%% x -> theta
/asin {%
 dup abs 1 gt { EQDFasinrangeerror  } if
 dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
} def
%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
%% x -> theta
/acos {%
 dup abs 1 gt { EQDFacosrangeerror  } if
 dup dup mul 1 exch sub sqrt exch atan DegtoRad
} def
%% function arctangent in radians
%% x -> theta
/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
%% HYPERBOLIC FUNCTIONS
/sh { dup Ex exch neg Ex sub 2 div } def
/ch { dup Ex exch neg Ex add 2 div } def
/th { dup sh exch ch div } def
/Argsh { dup dup mul 1 add sqrt add ln } def
/Argch { dup dup mul 1 sub sqrt add ln } def
/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
%% modified exponential funtion for 0
%% x n -> x^n
/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
%% modified exponential funtion for 0
%% x -> e^x
/Ex { Euler exch exp } bind def
%%
%% factorial function
%% n -> n!
/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
/fact { Fact } bind def
/! { Fact } bind def
end
%
% END pst-algparser.pro

%%EndProcSet
%%BeginProcSet: pst-tools.pro 0 0
% $Id: pst-tools.pro 713 2012-10-16 14:25:00Z herbert $
%
%% PostScript tools prologue for pstricks.tex.
%% Version 0.03, 2012/10/16
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%
%
/Pi2 1.57079632679489661925640 def
/factorial { % n on stack, returns n!
 dup 0 eq { 1 }{
   dup 1 gt { dup 1 sub factorial mul } if }
 ifelse } def
%
/MoverN { % m n on stack, returns the binomial coefficient m over n
 2 dict begin
 /n exch def /m exch def
 n 0 eq { 1 }{
   m n eq { 1 }{
     m factorial n factorial m n sub factorial mul div } ifelse } ifelse
 end
} def
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% subroutines for complex numbers, given as an array [a b]
% which is a+bi = Real+i Imag
%
/cxadd {                % [a1 b1] [a2 b2] = [a1+a2 b1+b2]
 dup 0 get             % [a1 b1] [a2 b2] a2
 3 -1 roll             % [a2 b2] a2 [a1 b1]
 dup 0 get             % [a2 b2] a2 [a1 b1] a1
 3 -1 roll             % [a2 b2] [a1 b1] a1 a2
 add                   % [a2 b2] [a1 b1] a1+a2
 3 1 roll              % a1+a2 [a2 b2] [a1 b1]
 1 get                 % a1+a2 [a2 b2] b1
 exch 1 get            % a1+a2 b1 b2
 add 2 array astore
} def
%
/cxneg {                % [a b]
 dup 1 get             % [a b] b
 exch 0 get            % b a
 neg exch neg          % -a -b
 2 array astore
} def
%
/cxsub { cxneg cxadd } def  % same as negative addition
%
% [a1 b1][a2 b2] = [a1a2-b1b2 a1b2+b1a2] = [a3 b3]
/cxmul {                % [a1 b1] [a2 b2]
 dup 0 get             % [a1 b1] [a2 b2] a2
 exch 1 get            % [a1 b1] a2 b2
 3 -1 roll             % a2 b2 [a1 b1]
 dup 0 get             % a2 b2 [a1 b1] a1
 exch 1 get            % a2 b2 a1 b1
 dup                   % a2 b2 a1 b1 b1
 5 -1 roll dup         % b2 a1 b1 b1 a2 a2
 3 1 roll mul          % b2 a1 b1 a2 b1a2
 5 -2 roll dup         % b1 a2 b1a2 b2 a1 a1
 3 -1 roll dup         % b1 a2 b1a2 a1 a1 b2 b2
 3 1 roll mul          % b1 a2 b1a2 a1 b2 a1b2
 4 -1 roll add         % b1 a2 a1 b2 b3
 4 2 roll mul          % b1 b2 b3 a1a2
 4 2 roll mul sub      % b3 a3
 exch 2 array astore
} def
%
% [a b]^2 = [a^2-b^2 2ab] = [a2 b2]
/cxsqr {                % [a b]   square root
 dup 0 get exch 1 get  % a b
 dup dup mul           % a b b^2
 3 -1 roll             % b b^2 a
 dup dup mul           % b b^2 a a^2
 3 -1 roll sub         % b a a2
 3 1 roll mul 2 mul    % a2 b2
 2 array astore
} def
%
/cxsqrt {               % [a b]
%  dup cxnorm sqrt /r exch def
%  cxarg 2 div RadtoDeg dup cos r mul exch sin r mul cxmake2
 cxlog                 % log[a b]
 2 cxrdiv              % log[a b]/2
 aload pop exch        % b a
 2.781 exch exp        % b exp(a)
 exch cxconv exch      % [Re +iIm] exp(a)
 cxrmul                %
} def
%
/cxarg {                % [a b]
 aload pop             % a b
 exch atan             % arctan b/a
 DegtoRad              % arg(z)=atan(b/a)
} def
%
% log[a b] = [a^2-b^2 2ab] = [a2 b2]
/cxlog {                % [a b]
 dup                   % [a b][a b]
 cxnorm                % [a b] |z|
 log                   % [a b] log|z|
 exch                  % log|z|[a b]
 cxarg                 % log|z| Theta
 cxmake2               % [log|z| Theta]
} def
%
% square of magnitude of complex number
/cxnorm2 {              % [a b]
 dup 0 get exch 1 get  % a b
 dup mul                       % a b^2
 exch dup mul add      % a^2+b^2
} def
%
/cxnorm {               % [a b]
 cxnorm2 sqrt
} def
%
/cxconj {               % conjugent complex
 dup 0 get exch 1 get  % a b
 neg 2 array astore    % [a -b]
} def
%
/cxre { 0 get } def     % real value
/cxim { 1 get } def     % imag value
%
% 1/[a b] = ([a -b]/(a^2+b^2)
/cxrecip {              % [a b]
 dup cxnorm2 exch      % n2 [a b]
 dup 0 get exch 1 get  % n2 a b
 3 -1 roll             % a b n2
 dup                   % a b n2 n2
 4 -1 roll exch div    % b n2 a/n2
 3 1 roll div          % a/n2 b/n2
 neg 2 array astore
} def
%
/cxmake1 { 0 2 array astore } def % make a complex number, real given
/cxmake2 { 2 array astore } def   % dito, both given
%
/cxdiv { cxrecip cxmul } def
%
% multiplikation by a real number
/cxrmul {               % [a b] r
 exch aload pop        % r a b
 3 -1 roll dup         % a b r r
 3 1 roll mul          % a r b*r
 3 1 roll mul          % b*r a*r
 exch 2 array astore   % [a*r b*r]
} def
%
% division by a real number
/cxrdiv {               % [a b] r
 1 exch div            % [a b] 1/r
 cxrmul
} def
%
% exp(i theta) = cos(theta)+i sin(theta) polar<->cartesian
/cxconv {               % theta
 RadtoDeg dup sin exch cos cxmake2
} def

%%%%% ### bubblesort ###
%% syntax : array bubblesort --> array2 trie par ordre croissant
%% code de Bill Casselman
%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
/bubblesort { % on stack must be an array [ ... ]
4 dict begin
  /a exch def
  /n a length 1 sub def
  n 0 gt {
     % at this point only the n+1 items in the bottom of a remain to
     % the sorted largest item in that blocks is to be moved up into
     % position n
     n {
        0 1 n 1 sub {
           /i exch def
           a i get a i 1 add get gt {
              % if a[i] > a[i+1] swap a[i] and a[i+1]
              a i 1 add
              a i get
              a i a i 1 add get
              % set new a[i] = old a[i+1]
              put
              % set new a[i+1] = old a[i]
              put
           } if
        } for
        /n n 1 sub def
     } repeat
  } if
  a % return the sorted array
end
} def
%
/concatstringarray{  %  [(a) (b) ... (z)] --> (ab...z)  20100422
 0 1 index { length add } forall
 string
 0 3 2 roll
 { 3 copy putinterval length add }forall
 pop
} bind def
%
/dot2comma {% on stack a string (...)
 2 dict begin
 /Output exch def
 0 1 Output length 1 sub {
   /Index exch def
   Output Index get 46 eq { Output Index 44 put } if
 } for
 Output
 end
} def
%
/rightTrim {
 dup
 length 1 sub -1 0 {
   /i exch def dup i get 32 ne { exit } if
 } for
 0 i 1 add getinterval
 dup length string copy
} bind def

/psStringwidth /stringwidth load def
/psShow /show load def

%/stringwidth{ rightTrim psStringwidth } bind def

%/show { rightTrim psShow } bind def
%-----------------------------------------------------------------------------%
% END pst-tools.pro

%%EndProcSet
%%BeginProcSet: pst-dots.pro 0 0
% $Id: pst-dots.pro 130 2009-08-27 08:55:03Z herbert $
%
%% PostScript prologue for pstricks.tex.
%% Version 2.02,  2009/06/16
%%
%% For distribution, see pstricks.tex.
%%
%% Timothy Van Zandt <[email protected]>
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
%% Modified by Etienne Riga  - Dec. 16, 1999
%% Modified by Etienne Riga  - 2005/01/01 (er)
%% to add /Diamond, /SolidDiamond and /BoldDiamond
%% Modified by Herbert Voss (hv) - 2008/04/17
%
10 dict dup begin                       % hold local
 /FontType 3 def
 /FontMatrix [.001 0 0 .001 0 0] def
%  /FontBBox [-571.5 -742.5 571.5 742.5] def % changed to next line 20060616 hv
 /FontBBox [-1000 -1000 1000 1000] def  % See end of file in /BuildGlyph
 /Encoding 256 array def
 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
 Encoding                                 % replace with given dot names
   dup (b) 0 get /Bullet put              % get the numerical position of b in ASCII
%                                          % and save /Bullet at this place in Encoding
   dup (c) 0 get /Circle put
   dup (C) 0 get /BoldCircle put       % 67
   dup (u) 0 get /SolidTriangle put
   dup (t) 0 get /Triangle put
   dup (T) 0 get /BoldTriangle put
   dup (r) 0 get /SolidSquare put
   dup (s) 0 get /Square put
   dup (S) 0 get /BoldSquare put
   dup (q) 0 get /SolidPentagon put
   dup (p) 0 get /Pentagon put
   dup (P) 0 get /BoldPentagon put
%%%
   dup (k) 0 get /Asterisk put
   dup (K) 0 get /BoldAsterisk put
   dup (J) 0 get /SolidAsterisk put
   dup (h) 0 get /Hexagon put
   dup (H) 0 get /BoldHexagon put
   dup (G) 0 get /SolidHexagon put
   dup (f) 0 get /Octogon put          % 2008-04-18 hv
   dup (F) 0 get /BoldOctogon put      % 2008-04-18 hv
   dup (g) 0 get /SolidOctogon put     % 2008-04-18 hv
   dup (a) 0 get /Add put
   dup (A) 0 get /BoldAdd put          % 65
   dup (x) 0 get /Mul put
   dup (X) 0 get /BoldMul put
   dup (m) 0 get /Oplus put
   dup (M) 0 get /BOplus put
   dup (e) 0 get /SolidOplus put
   dup (n) 0 get /Otimes put
   dup (N) 0 get /BOtimes put
   dup (E) 0 get /SolidOtimes put
   dup (i) 0 get /Bar put
   dup (I) 0 get /BoldBar put
   dup (l) 0 get /SolidDiamond put
   dup (d) 0 get /Diamond put
       (D) 0 get /BoldDiamond put
%%%
/CharProcs 47 dict def
CharProcs begin
 /CirclePath {0 0 500 0 360 arc closepath} def
 /Bullet {CirclePath fill} def
 /Circle {CirclePath .9 .9 scale CirclePath eofill} def
 /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
 /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
 /SolidTriangle {TrianglePath fill} def
 /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
 /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
 /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
 /SolidSquare {SquarePath fill} def
 /Square {SquarePath .89 .89 scale SquarePath eofill} def
 /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
 /PentagonPath {
   -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
   0 574.7 lineto -546.6 177.6 lineto closepath
 } def
 /SolidPentagon {PentagonPath fill} def
 /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
 /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
%-------------- hv begin 2004/07/25   from: er 2003/03/24
 /HexagonPath {
   0 550 moveto -476 275 lineto -476 -275 lineto
   0 -550 lineto 476 -275 lineto 476 275 lineto closepath
 } def
 /SolidHexagon {HexagonPath fill} def
 /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
 /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
%                                       2008-04-18 hv
 /OctogonPath {
    550 dup 22.5 tan mul dup neg dup add /xMove exch def
    exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
 /SolidOctogon { OctogonPath fill                             } def
 /Octogon {      OctogonPath .89 .89 scale OctogonPath eofill } def
 /BoldOctogon {  OctogonPath .79 .79 scale OctogonPath eofill } def
%
 /AsteriskPath {
   20 0 moveto 10 250 180 500 0 500 curveto
   -180 500 -10 250 -20 0 curveto closepath
 } def
 /Asterisk {
   AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
   60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
 } def
%
 /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
 /BoldAsteriskPath {
   50 30 cos 100 mul moveto  Basterp
   60 rotate Basterp 60 rotate Basterp
   60 rotate Basterp 60 rotate Basterp
   60 rotate Basterp closepath
 } def
 /BoldAsterisk {BoldAsteriskPath fill} def
 /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
 /CrossPath {
   40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
   -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
   40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
 } def
 /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
   -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
   80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
 } def
 /Add {CrossPath fill} def
 /Mul {45 rotate CrossPath fill} def
 /BoldAdd {BoldCrossPath fill} def
 /BoldMul {45 rotate BoldCrossPath fill} def
 /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
 /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
 /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
 /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
 /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
 /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
 /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
 /Bar {BarPath fill} def
 /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
 /BoldBar {BoldBarPath fill} def
 /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
 /SolidDiamond {DiamondPath fill} def
 /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
 /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
%%%
 /.notdef { } def
end
%
/BuildGlyph {
 exch
 begin
%  Metrics 1 index get exec 0
   0 0
%      BBoxes 3 index get exec
   -1000 -1000 1000 1000
%     -571.5 -742.5 571.5 742.5
   setcachedevice
   CharProcs begin load exec end
 end
} def
%
/BuildChar {
 1 index /Encoding get exch get
 1 index /BuildGlyph get exec
} bind def
%
end
/PSTricksDotFont exch definefont pop
%
%% end

%%EndProcSet
%%BeginProcSet: pst-node.pro 0 0
% $Id: pst-node.pro 707 2012-09-21 14:17:30Z herbert $
%%
%% PostScript prologue for pst-node.tex.
%% Version 1.14, 2012/09/18.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%
tx@Dict begin                   % from main pstricks dict
/T /translate load def
/CP /currentpoint load def
/startGlobal { true setglobal globaldict begin } bind def
/endGlobal { end false setglobal } bind def
end
/tx@NodeDict 400 dict def tx@NodeDict begin
/NewNode { % on stack: { x y } boolean N@name type InitXnode
 gsave
 NodeScale                     % a bugfix for xelatex, it's empty for dvips
 /next exch def                % { x y } boolean N@name type
 dict dup                      % { x y } boolean N@name dict dict
 3 1 roll def                  % { x y } boolean dict N@name dict def
 exch { dup 3 1 roll def } if  % { x y } dict boolean
 begin                         % { x y } dict begin
 tx@Dict begin
   STV CP T exec               % set scaling
 end
 /NodeMtrx CM def              % save CM
 next                          % InitXNode
 end
 grestore
} def
%
/InitPnode {
 /Y ED /X ED
 /NodePos { NodeSep Cos mul NodeSep Sin mul } def
} def
%
/InitCnode {
 /r ED /Y ED /X ED
 /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
} def
%
/GetRnodePos {
 Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
 Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
 dx Sin mul abs dy
 Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
} def
%
/InitRnode {
 /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
 /NodePos { GetRnodePos } def
} def
%
/DiaNodePos {
 w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
 Cos mul exch Sin mul
} def
%
/TriNodePos {
 Sin s lt
   { d NodeSep sub dup Cos mul Sin Div exch }
   { w h mul w Sin mul h Cos abs mul add Div
     NodeSep add dup Cos mul exch Sin mul
   } ifelse
} def
%
/InitTriNode {
 sub 2 div exch
 2 div exch
 2 copy T
 2 copy 4 index index /d ED
 pop pop pop pop
 -90 mul rotate
 /NodeMtrx CM def
 /X 0 def /Y 0 def
 d sub abs neg /d ED
 d add /h ED
 2 div h mul h d sub Div /w ED
 /s d w Atan sin def
 /NodePos { TriNodePos } def
} def
%
/OvalNodePos {
 /ww w NodeSep add def
 /hh h NodeSep add def
 Sin ww mul Cos hh mul Atan dup cos ww mul exch sin hh mul
} def
%
/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
%
/XYPos {
 dup sin exch cos Do
 /Cos ED /Sin ED /Dist ED
 Cos 0 gt
   { Dist Dist Sin mul Cos div }
   { Cos 0 lt
     { Dist neg Dist Sin mul Cos div neg }
     { 0 Dist Sin mul } ifelse
   } ifelse
 Do
} def
%
/GetEdge {
 dup 0 eq
   { pop begin 1 0 NodeMtrx dtransform
     CM idtransform
     exch atan sub
     dup
     sin /Sin ED
     cos /Cos ED
     /NodeSep ED
     NodePos NodeMtrx dtransform CM idtransform end }
   { 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse
} def
%
/AddOffset {
 1 index 0 eq
   { pop pop }
   { 2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse
} def
%
/GetEdgeA {
 NodeSepA AngleA NodeA NodeSepTypeA GetEdge
 OffsetA AngleA AddOffset
 yA add /yA1 ED
 xA add /xA1 ED
} def
%
/GetEdgeB {
 NodeSepB AngleB NodeB NodeSepTypeB GetEdge
 OffsetB AngleB AddOffset
 yB add /yB1 ED
 xB add /xB1 ED
} def
%
/GetArmA {
 ArmTypeA 0 eq
   { /xA2 ArmA AngleA cos mul xA1 add def
     /yA2 ArmA AngleA sin mul yA1 add def }
   { ArmTypeA 1 eq {{exch}} {{}} ifelse
     /Do ED
     ArmA AngleA XYPos OffsetA AngleA AddOffset
     yA add /yA2 ED
     xA add /xA2 ED } ifelse
} def
%
/GetArmB {
 ArmTypeB 0 eq
   { /xB2 ArmB AngleB cos mul xB1 add def
     /yB2 ArmB AngleB sin mul yB1 add def }
   { ArmTypeB 1 eq {{exch}} {{}} ifelse
     /Do ED
     ArmB AngleB XYPos OffsetB AngleB AddOffset
     yB add /yB2 ED
     xB add /xB2 ED } ifelse
} def
%
/InitNC {
 /b ED /a ED % second and first node
 /NodeSepTypeB ED /NodeSepTypeA ED
 /NodeSepB ED /NodeSepA ED
 /OffsetB ED /OffsetA ED
 tx@NodeDict a known tx@NodeDict b known and dup {
   /NodeA a load def
   /NodeB b load def
   NodeA GetCenter /yA ED /xA ED
   NodeB GetCenter /yB ED /xB ED } if
} def
%
/LPutLine {
 4 copy
 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED
 1 t sub mul
 3 1 roll 1 t sub mul
 4 1 roll t mul add /Y ED
 t mul add /X ED
} def
%
/LPutLines {
 mark LPutVar counttomark 2 div 1 sub /n ED
%  t floor dup n gt
 t floor dup n ge              % to allow npos<= hv 2008-08-14
 { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse
 cvi 2 mul { pop } repeat
 LPutLine
 cleartomark
} def
%
/BezierMidpoint {
 /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t ED
 /cx x1 x0 sub 3 mul def
 /cy y1 y0 sub 3 mul def
 /bx x2 x1 sub 3 mul cx sub def
 /by y2 y1 sub 3 mul cy sub def
 /ax x3 x0 sub cx sub bx sub def
 /ay y3 y0 sub cy sub by sub def
 ax t 3 exp mul bx t t mul mul add
 cx t mul add x0 add ay t 3 exp mul
 by t t mul mul add cy t mul add
 y0 add 3 ay t t mul mul mul 2
 by t mul mul add cy add 3 ax t t mul mul mul
 2 bx t mul mul add cx add atan /NAngle ED
 /Y ED /X ED
} def
%
/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
} def
/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
/NAngle yyB yyA sub xxB xxA sub Atan def } def
/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd  } def
/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
} def
/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
} def
/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
/NAngle yyB yyA sub xxB xxA sub Atan def } def
/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd  } def
/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
VPosEnd  } def
/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
def grestore exec /LPutVar /SaveLPutVar load def } def
/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
LPutVar VPutLine } def LPutVar } def
%
/NCLine {
 NCCoor
 tx@Dict begin
 ArrowA CP 4 2 roll
 ArrowB
 lineto pop pop
 end
} def
%
/NCLines {
 false NArray
 n 0 eq
   { NCLine }
   { 2 copy yA sub exch xA sub Atan /AngleA ED
     n 2 mul dup index exch index yB sub exch xB sub
     Atan /AngleB ED
     GetEdgeA GetEdgeB
     /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1 yA1 ] cvx def
     mark LPutVar
     tx@Dict begin false Line end
     /LPutPos { LPutLines } def
     /HPutPos { HPutLines } def
     /VPutPos { VPutLines } def
   } ifelse
} def
%
/NCCurve {
 GetEdgeA
 GetEdgeB
 xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
%
/NCAngles {
 GetEdgeA GetEdgeB GetArmA GetArmB
 /mtrx AngleA matrix rotate def
 xA2 yA2 mtrx transform pop
 xB2 yB2 mtrx transform exch pop
 mtrx itransform
 /y0 ED /x0 ED
 mark ArmB 0 ne { xB1 yB1 } if
 xB2 yB2 x0 y0 xA2 yA2
 ArmA 0 ne { xA1 yA1 } if
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def } def
%
/NCAngle {
 GetEdgeA GetEdgeB GetArmB
 /mtrx AngleA matrix rotate def
 xB2 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
 /y0 ED /x0 ED
 mark
 ArmB 0 ne { xB1 yB1 } if
 xB2 yB2 x0 y0 xA1 yA1
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def
} def
%
/NCBar {
 GetEdgeA GetEdgeB GetArmA GetArmB
 /mtrx AngleA matrix rotate def
 xA2 yA2 mtrx itransform pop
 xB2 yB2 mtrx itransform pop
 sub dup 0 mtrx transform
 3 -1 roll 0 gt
   { /yB2 exch yB2 add def /xB2 exch xB2 add def }
   { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse
 mark
 ArmB 0 ne { xB1 yB1 } if
 xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def
} def
%
/NCDiag {
 /lineAngle ED
 GetEdgeA GetEdgeB GetArmA GetArmB mark
 lineAngle abs 0 gt {
   /xTemp xA2 10 add def
   /yTemp yA2 lineAngle dup sin exch cos div 10 mul add def
   /dY1 yTemp yA2 sub def
   /dX1 xTemp xA2 sub def
   /dY2 yB2 yB1 sub def
   /dX2 xB2 xB1 sub def
   dX1 abs 0.01 lt {
     /m2 dY2 dX2 div def
     /xB2 xA2 def
     /yB2 xA2 xB1 sub m2 mul yB1 add def
   }{
     dX2 abs 0.01 lt {
       /m1 dY1 dX1 div def
       /xB2 xB1 def
       /yB2 xB1 xA2 sub m1 mul yA2 add def
     }{%
       /m1 dY1 dX1 div def
       /m2 dY2 dX2 div def
       /xB2 m1 xA2 mul m2 xB1 mul sub yA2 sub yB1 add m1 m2 sub div def
       /yB2 xB2 xA2 sub m1 mul yA2 add def
     } ifelse
   } ifelse
 } if
 ArmB 0 ne { xB1 yB1 } if
 xB2 yB2 xA2 yA2
 ArmA 0 ne { xA1 yA1 } if
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def
%
%  GetEdgeA GetEdgeB GetArmA GetArmB mark
%  ArmB 0 ne { xB1 yB1 } if
%  xB2 yB2 xA2 yA2
%  ArmA 0 ne { xA1 yA1 } if
%  tx@Dict begin false Line end
%  /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def
%  /LPutPos { LPutLines } def
%  /HPutPos { HPutLines } def
%  /VPutPos { VPutLines } def
} def
%
/NCDiagg {
 /lineAngle ED
 GetEdgeA GetArmA
 lineAngle abs 0 gt
   { lineAngle }
   { yB yA2 sub xB xA2 sub Atan 180 add } ifelse
 /AngleB ED
 GetEdgeB mark
 lineAngle abs 0 gt {
   /dY2 yA2 yA1 sub def
   /dX2 xA2 xA1 sub def
   lineAngle abs 90 eq {
     /m2 dY2 dX2 div def
     /yA2 xB xA2 sub m2 mul yA2 add def
     /xA2 xB def
   }{
     /m1 lineAngle dup sin exch cos div def % tan alpha
     dX2 abs 0.01 lt {
       /yA2 xA1 xB sub m1 mul yB add def
       /xA2 xA1 def
     }{%
       /m2 dY2 dX2 div def
       /xA2 m1 xB mul m2 xA2 mul sub yA2 add yB sub m1 m2 sub div def
       /yA2 xA2 xB sub m1 mul yB add def
     } ifelse
   } ifelse
 } if
 xB1 yB1 xA2 yA2
 ArmA 0 ne { xA1 yA1 } if
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def
%
%  GetEdgeA GetArmA
%  yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
%  GetEdgeB
%  mark
%  xB1 yB1 xA2 yA2
%  ArmA 0 ne { xA1 yA1 } if
%  tx@Dict begin false Line end
%  /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def
%  /LPutPos { LPutLines } def
%  /HPutPos { HPutLines } def
%  /VPutPos { VPutLines } def
} def
%
/NCLoop {
 GetEdgeA GetEdgeB GetArmA GetArmB
 /mtrx AngleA matrix rotate def
 xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED
 /xB3 xB2 yB2 mtrx transform pop def
 xB3 yA3 mtrx itransform /yB3 ED /xB3 ED
 xA3 yA3 mtrx itransform /yA3 ED /xA3 ED
 mark ArmB 0 ne { xB1 yB1 } if
 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if
 tx@Dict begin false Line end
 /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { HPutLines } def
 /VPutPos { VPutLines } def
} def
%
% DG/SR modification begin - May 9, 1997 - Patch 1
%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
%
/NCCircle {
 NodeSepA 0 NodeA 0 GetEdge pop
 2 div dup 2 exp r r mul sub abs sqrt
 atan 2 mul /a ED
 r AngleA 90 add PtoC yA add exch xA add
 exch 2 copy
 /LPutVar [ 4 2 roll r AngleA ] cvx def
 /LPutPos {
   LPutVar t 360 mul add dup 5 1 roll 90 sub PtoC
   3 -1 roll add
   /Y ED add /X ED /NAngle ED
% DG/SR modification end
 } def
 /HPutPos { LPutPos } def
 /VPutPos { LPutPos } def
 r AngleA 90 sub a add AngleA 270 add a sub
 tx@Dict begin
 /angleB ED /angleA ED /r ED
 /c 57.2957 r Div def
 /y ED /x ED
} def
%
/NCBox {
 /d ED /h ED
 /AngleB yB yA sub xB xA sub Atan def
 /AngleA AngleB 180 add def
 GetEdgeA GetEdgeB
 /dx d AngleB sin mul def
 /dy d AngleB cos mul neg def
 /hx h AngleB sin mul neg def
 /hy h AngleB cos mul def
 /LPutVar [
   xA1 hx add yA1 hy add xB1 hx add yB1 hy add
   xB1 dx add yB1 dy add xA1 dx add yA1 dy add ] cvx def
 /LPutPos { LPutLines } def
 /HPutPos { xB yB xA yA LPutLine } def
 /VPutPos { HPutPos } def
 mark
 LPutVar tx@Dict begin false Polygon end
} def
%
/NCArcBox {
 /l ED neg /d ED /h ED /a ED
 /AngleA yB yA sub xB xA sub Atan def
 /AngleB AngleA 180 add def
 /tA AngleA a sub 90 add def
 /tB tA a 2 mul add def
 /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
 /x0 xA r tA cos mul add def
 /y0 yA r tA sin mul add def
 /c 57.2958 r div def
 /AngleA AngleA a sub 180 add def
 /AngleB AngleB a add 180 add def
 GetEdgeA GetEdgeB
 /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul sub def
 /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def
 l 0 eq {
   x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn
 }{
   x0 y0 translate
   /tA AngleA l c mul add def
   /tB AngleB l c mul sub def
   0 0 r h add tA tB arc r h add
   AngleB PtoC r d add
   AngleB PtoC 2 copy
   6 2 roll l arcto 4 { pop } repeat
   r d add tB PtoC l arcto 4 { pop } repeat
   0 0 r d add tB tA arcn r d add
   AngleA PtoC r h add
   AngleA PtoC 2 copy 6 2 roll
   l arcto 4 { pop } repeat
   r h add tA PtoC l arcto 4 { pop } repeat
 } ifelse
 closepath
 /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def
 /LPutPos {
   LPutVar /d ED /h ED
   /AngleB ED /AngleA ED
   /r ED /y0 ED /x0 ED
   t 1 le {
     r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC
   }{t 2 lt {
       /NAngle AngleB 180 add def r 2 t sub
       h mul t 1 sub d mul add add AngleB PtoC
     }{
       t 3 lt {
         r d add AngleB 3 t sub mul AngleA 2 t sub
         mul add dup 90 sub /NAngle ED PtoC
       }{
         /NAngle AngleA 180 add def
         r 4 t sub d mul t 3 sub h mul add add AngleA PtoC
       } ifelse
     } ifelse
   } ifelse
   y0 add /Y ED x0 add /X ED
 } def
 /HPutPos { LPutPos } def
 /VPutPos { LPutPos } def
} def
%
/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
%
/LPutCoor {
 NAngle
 tx@Dict begin /NAngle ED end
 gsave
 CM STV
 CP Y sub neg exch X sub neg exch moveto
 setmatrix CP
 grestore
} def
%
/LPut {
 tx@NodeDict /LPutPos known
   { LPutPos } { CP /Y ED /X ED /NAngle 0 def } ifelse
 LPutCoor
} def
%
/HPutAdjust {
 Sin Cos mul 0 eq
   { 0 }
   { d Cos mul Sin div flag not { neg } if
     h Cos mul Sin div flag { neg } if
     2 copy gt { pop } { exch pop } ifelse
   } ifelse
 s add flag { r add neg }{ l add } ifelse
 X add /X ED
} def
%
/VPutAdjust {
 Sin Cos mul
 0 eq
   { 0 }
   { l Sin mul Cos div flag { neg } if
     r Sin mul Cos div flag not { neg } if
     2 copy gt { pop } { exch pop } ifelse
   } ifelse
 s add flag { d add } { h add neg } ifelse
 Y add /Y ED
} def
%
%
end
%
% END pst-node.pro

%%EndProcSet
%%BeginProcSet: pst-grad.pro 0 0
%!
% PostScript prologue for pst-grad.tex.
% Version 1.05, 2006/11/04
% prepared by Herbert Voss
% For copying restrictions, see pstricks.tex.
%
% For the PSTricks gradient fillstyle.%
% Based on some EPS files by [email protected] (W. R. Lee).%
% Syntax:% D.G. modification begin - Apr.  9, %1998
%%%%%% R0 G0 B0 R1 G1 B1 NumLines MidPoint Angle GradientFill
%   ifGradientCircle GradientScale %GradientPosX GradientPosY
%     R0 G0 B0 R1 G1 B1 NumLines MidPoint %Angle GradientFill
% D.G. modification end
%
/tx@GradientDict 40 dict def
tx@GradientDict begin
/GradientFill {
/ifCMYK exch def   % do we have rgb or cmyk? hv 1.06
rotate
/MidPoint ED
/NumLines ED
ifCMYK {
   /LastBlack ED       % 1.06
   /LastYellow ED      % 1.06
   /LastMagenta ED     % 1.06
   /LastCyan ED        % 1.06
   /FirstBlack ED      % 1.06
   /FirstYellow ED     % 1.06
   /FirstMagenta ED    % 1.06
   /FirstCyan ED       % 1.06
}{ /LastBlue ED
   /LastGreen ED
   /LastRed ED
   /FirstBlue ED
   /FirstGreen ED
   /FirstRed ED
} ifelse
/GradientPosY ED
/GradientPosX ED
/GradientScale ED
/ifGradientCircle ED
% This avoids gaps due to rounding errors:
clip
pathbbox           %leave llx,lly,urx,ury on stack
4 copy /ury ED /urx ED /lly ED /llx ED
/y ED /x ED
ifGradientCircle
  { 0 GradientPosX eq { 0 GradientPosX eq {2 copy translate} if } if }
  {2 copy translate} ifelse
y sub neg /y ED
x sub neg /x ED  % This avoids gaps due to rounding errors:
ifCMYK {                               % 1.06
   LastCyan FirstCyan add 2 div        % 1.06
   LastMagenta FirstMagenta add 2 div  % 1.06
   LastYellow FirstYellow add 2 div    % 1.06
   LastBlack FirstBlack add 2 div      % 1.06
   setcmykcolor                        % 1.06
 }{
   LastRed FirstRed add 2 div
   LastGreen FirstGreen add 2 div
   LastBlue FirstBlue add 2 div
   setrgbcolor
 } ifelse
ifGradientCircle
  { /YSizePerLine y NumLines div def
    /CurrentY y 2 div def
    /MidLine NumLines 2 div 1 MidPoint sub mul abs cvi def
  }{
    fill
    /YSizePerLine y NumLines div def
    /CurrentY 0 def
    /MidLine NumLines 1 MidPoint sub mul abs cvi def
  } ifelse
MidLine NumLines 2 sub gt
  { /MidLine NumLines def }
  { MidLine 2 lt { /MidLine 0 def } if } ifelse
MidLine 0 gt {
 ifCMYK {
   /Cyan FirstCyan def
   /Magenta FirstMagenta def
   /Yellow FirstYellow def
   /Black FirstBlack def
   /CyanIncrement LastCyan FirstCyan sub MidLine 1 sub div def
   /MagentaIncrement LastMagenta FirstMagenta sub MidLine 1 sub div def
   /YellowIncrement LastYellow FirstYellow sub MidLine 1 sub div def
   /BlackIncrement LastBlack FirstBlack sub MidLine 1 sub div def
 }{
   /Red FirstRed def
   /Green FirstGreen def
   /Blue FirstBlue def
   /RedIncrement LastRed FirstRed sub MidLine 1 sub div def
   /GreenIncrement LastGreen FirstGreen sub MidLine 1 sub div def
   /BlueIncrement LastBlue FirstBlue sub MidLine 1 sub div def
 } ifelse
 MidLine { GradientLoop } repeat
} if
MidLine NumLines lt {
 ifCMYK {
   /Cyan LastCyan def
   /Magenta LastMagenta def
   /Yellow LastYellow def
   /Black LastBlack def
   /CyanIncrement FirstCyan LastCyan sub NumLines MidLine sub 1 sub div def
   /MagentaIncrement FirstMagenta LastMagenta sub NumLines MidLine sub 1 sub div def
   /YellowIncrement FirstYellow LastYellow sub NumLines MidLine sub 1 sub div def
   /BlackIncrement FirstBlack LastBlack sub NumLines MidLine sub 1 sub div def
 }{
   /Red LastRed def
   /Green LastGreen def
   /Blue LastBlue def
   /RedIncrement FirstRed LastRed sub NumLines MidLine sub 1 sub div def
   /GreenIncrement FirstGreen LastGreen sub NumLines MidLine sub 1 sub div def
   /BlueIncrement FirstBlue LastBlue sub NumLines MidLine sub 1 sub div def
 } ifelse
 NumLines MidLine sub { GradientLoop } repeat
} if
} def/GradientLoop {
% D.G. modification begin - Jul. 23, 1997 / Apr.  9, 1998
 ifGradientCircle
  {CurrentY 0 gt {
% The default center used is the center of the bounding box of the object
     0 GradientPosX eq        {0 GradientPosX eq
          {/GradientPosX urx llx sub 2 div def
           /GradientPosY ury lly sub 2 div def} if} if
     GradientPosX GradientPosY CurrentY GradientScale mul 0 360 arc
     ifCMYK { Cyan Magenta Yellow Black setcmykcolor }
          { Red Green Blue setrgbcolor } ifelse
     fill
     /CurrentY CurrentY YSizePerLine sub def
     ifCMYK {
       /Cyan Cyan CyanIncrement add def
       /Magenta Magenta MagentaIncrement add def
       /Yellow Yellow YellowIncrement add def
       /Black Black BlackIncrement add def
     }{
       /Blue Blue BlueIncrement add def
       /Green Green GreenIncrement add def
       /Red Red RedIncrement add def
     } ifelse
 } if }   { 0 CurrentY moveto    x 0 rlineto
   0 YSizePerLine rlineto    x neg 0 rlineto    closepath
     ifCMYK { Cyan Magenta Yellow Black setcmykcolor }
          { Red Green Blue setrgbcolor } ifelse
     fill
     /CurrentY CurrentY YSizePerLine add def
     ifCMYK {
       /Cyan Cyan CyanIncrement add def
       /Magenta Magenta MagentaIncrement add def
       /Yellow Yellow YellowIncrement add def
       /Black Black BlackIncrement add def
     }{
       /Blue Blue BlueIncrement add def
       /Green Green GreenIncrement add def
       /Red Red RedIncrement add def
     } ifelse
     } ifelse% D.G. modification end
   }def
%
/GradientFillHSB { %    hv 2006-11-04
 rotate
 /MidPoint ED
 /NumLines ED
 /LastBrightness ED
 /LastSaturation ED
 /LastHue ED
 /FirstBrightness ED
 /FirstSaturation ED
 /FirstHue ED
 % This avoids gaps due to rounding errors:
 clip
 pathbbox           %leave llx,lly,urx,ury on stack
 /y ED /x ED
 2 copy translate
 y sub neg /y ED
 x sub neg /x ED
 % This avoids gaps due to rounding errors:
 LastHue FirstHue add 2 div
 LastSaturation FirstSaturation add 2 div
 LastBrightness FirstBrightness add 2 div
 sethsbcolor
 fill
 /YSizePerLine y NumLines div def
 /CurrentY 0 def
 /MidLine NumLines 1 MidPoint sub mul abs cvi def
 MidLine NumLines 2 sub gt
 { /MidLine NumLines def }
 { MidLine 2 lt { /MidLine 0 def } if }
 ifelse
 MidLine 0 gt
 {
   /Hue FirstHue def
   /Saturation FirstSaturation def
   /Brightness FirstBrightness def
   /HueIncrement LastHue FirstHue sub MidLine 1 sub div def
   /SaturationIncrement LastSaturation FirstSaturation sub MidLine 1 sub
                        div def
   /BrightnessIncrement LastBrightness FirstBrightness sub MidLine 1 sub
                        div def
   MidLine { GradientLoopHSB } repeat
 } if
 MidLine NumLines lt
 {
   /Hue LastHue def
   /Saturation LastSaturation def
   /Brightness LastBrightness def
   /HueIncrement FirstHue LastHue sub NumLines MidLine sub 1 sub div def
   /SaturationIncrement FirstSaturation LastSaturation sub
                        NumLines MidLine sub 1 sub div def
   /BrightnessIncrement FirstBrightness LastBrightness sub
                        NumLines MidLine sub 1 sub div def
   NumLines MidLine sub { GradientLoopHSB } repeat
 } if
} def
/GradientLoopHSB {
 0 CurrentY moveto
 x 0 rlineto
 0 YSizePerLine rlineto
 x neg 0 rlineto
 closepath
 Hue Saturation Brightness sethsbcolor fill
 /CurrentY CurrentY YSizePerLine add def
 /Brightness Brightness BrightnessIncrement add def
 /Saturation Saturation SaturationIncrement add def
 /Hue Hue HueIncrement add def
} def
%
end
%
% END pst-grad.pro

%%EndProcSet
%%BeginProcSet: pst-coil.pro 0 0
%!ps
% PostScript prologue for pst-coil.tex.
% Version 1.06, 2011/09/18
% For distribution, see pstricks.tex.
%
/tx@CoilDict 40 dict def tx@CoilDict begin
/CoilLoop {
 /t ED
 t sin AspectSin mul t 180 div AspectCos mul add t cos lineto } def
/Coil {
 /Inc ED
 dup sin /AspectSin ED
 cos /AspectCos ED
 /ArmB ED
 /ArmA ED
 /h ED /w ED /y1 ED /x1 ED /y0 ED /x0 ED
 x0 y0 translate y1 y0 sub x1 x0 sub 2 copy Pyth
 /TotalLength ED
 Atan rotate
 /BeginAngle ArmA AspectCos Div w h mul Div 360 mul def
 /EndAngle TotalLength ArmB sub AspectCos Div
   w h mul Div 360 mul def
 1 0 0 0 ArrowA ArmA 0 lineto
 /mtrx CM def
 w h mul 2 Div w 2 Div scale BeginAngle Inc
 EndAngle { CoilLoop } for
 EndAngle CoilLoop mtrx setmatrix TotalLength ArmB sub 0 lineto CP
% DG/SR modification begin - Jun.  2, 1998 - Patch 1 (from Michael Vulis)
% TotalLength 0 ArrowB lineto } def
 TotalLength 0 ArrowB lineto
 pop pop pop pop } def
% DG/SR modification end
%
/Sin {
 /Func ED
 /PointsPerPeriod ED
 /ArmB ED
 /ArmA ED
 /Amplitude ED
 /roundValue ED
 /relativePeriod ED
 /Periods ED
 /y1 ED /x1 ED /y0 ED /x0 ED
 x0 y0 translate y1 y0 sub x1 x0 sub 2 copy Pyth
 dup /TotalLength ED
 ArmA sub ArmB sub /SinLength ED
 Atan rotate
 1 0 0 0 ArrowA ArmA 0 lineto
 /mtrx CM def
 relativePeriod
   {}
   { SinLength Periods div
     roundValue dup 0 eq { pop cvi } { 1 eq { round } if } ifelse
     /Periods ED } ifelse
 /dxStep SinLength 360 div def         % the default step for x pos
 /xStep 360 PointsPerPeriod div def    % the step for the for loop
 1 xStep 360 {                         % PointsPerPeriod times
   dup dxStep mul ArmA add exch        % x pos and value for the func
   Periods mul Func Amplitude mul lineto
 } for
 mtrx setmatrix TotalLength ArmB sub 0 lineto CP
 TotalLength 0 ArrowB lineto
 pop pop pop pop
} def
%
/AltCoil {
 /Inc ED
 dup sin /AspectSin ED
 cos /AspectCos ED /h ED /w ED /EndAngle ED /BeginAngle ED
 /mtrx CM def
 w h mul 2 Div w 2 Div scale BeginAngle sin AspectSin mul
 BeginAngle 180 div AspectCos mul add BeginAngle cos
 /lineto load stopped { moveto } if
 BeginAngle Inc EndAngle { CoilLoop } for
 EndAngle CoilLoop mtrx setmatrix } def
/ZigZag { 15 dict begin
 /ArmB ED /ArmA ED
 2 div /w ED
 w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED
 x1 y1 translate y0 y1 sub x0 x1 sub 2 copy Pyth
 /TotalLength ED
 Atan rotate TotalLength ArmA sub ArmB sub dup h div cvi /n ED n h mul
 sub 2 div dup ArmA add
 /ArmA ED ArmB add
 /ArmB ED
 /x ArmB h 2 div add def
 mark 0 0 ArmB 0
 n { x w /w w neg def /x x h add def } repeat
 TotalLength ArmA sub 0 TotalLength 0
 end } def
%
/ZigZagCirc { % x0 y0 x1 y1 bow h w ArmA ArmB on stack
 /bow ED
 /ArmB ED /ArmA ED
 2 div /w ED
 w mul /h ED /y1 ED /x1 ED /y0 ED /x0 ED
 x1 y1 translate %
 y0 y1 sub x0 x1 sub 2 copy Pyth 2 div
 /HalfLength ED
 Atan /ang ED %angle of A relative to B
 %rotate % so end B is origin and BA is horizontal, A to right
 /theta bow abs HalfLength Atan 2 mul def %halfangular sector for arc
 /theta2 theta 2 mul def % full arc
 %/psi ang 90 sub theta sub def % angle of B from center if bow>0
 /rho HalfLength theta sin div def % radius of circle
 bow 0 gt { /direc 1 def /thetaB ang 90 sub theta sub def } % travel B to A in pos drn
 { /direc -1 def /thetaB ang 90 add theta add def } ifelse % travel B to A in neg drn
 %thetaB=angle from center to B
 rho thetaB 180 add PtoC translate % origin now at center
 /h h rho div RadtoDeg def
 /ArmA ArmA rho div RadtoDeg def /ArmB ArmB rho div RadtoDeg def
 theta2 ArmA sub ArmB sub dup h div cvi /n ED n h mul
 %HalfLength 2 mul ArmA sub ArmB sub dup h div cvi /n ED n h mul
 sub 2 div dup ArmA add
 /ArmA ED ArmB add /ArmB ED
 /h h direc mul def % h is now angle increment for half-period
 /rhoo rho w add def /rhoi rho w sub def % outer and inner radii
 /arg thetaB ArmB direc mul add def % argument for 2nd point
%  thetaB = direc = bow = HalfLength = theta = rho = arg = h = n =
 mark rho thetaB  PtoC  rho arg PtoC /arg arg h 2 div add def
 n { w 0 gt { rhoo }{ rhoi } ifelse arg PtoC /w w neg def /arg arg h add def } repeat
 rho thetaB theta2 ArmA sub direc mul add  PtoC rho thetaB theta2 direc mul add PtoC
 } def
%
end
% END pst-coil.pro

%%EndProcSet
%%BeginProcSet: pst-text.pro 0 0
%!
% PostScript header file pst-text.pro
% Version 1.0, 2005-11-29 (hv)
% For distribution, see pstricks.tex.

/tx@TextPathDict 40 dict def
tx@TextPathDict begin

% Syntax:  <dist> PathPosition -
% Function: Searches for position of currentpath distance <dist> from
%           beginning. Sets (X,Y)=position, and Angle=tangent.
/PathPosition
{ /targetdist exch def
 /pathdist 0 def
 /continue true def
 /X { newx } def /Y { newy } def /Angle 0 def
 gsave
   flattenpath
   { movetoproc }  { linetoproc } { } { firstx firsty linetoproc }
   /pathforall load stopped { pop pop pop pop /X 0 def /Y 0 def } if
 grestore
} def

/movetoproc { continue { @movetoproc } { pop pop } ifelse } def

/@movetoproc
{ /newy exch def /newx exch def
 /firstx newx def /firsty newy def
} def

/linetoproc { continue { @linetoproc } { pop pop } ifelse } def

/@linetoproc {
 /oldx newx def /oldy newy def
 /newy exch def /newx exch def
 /dx newx oldx sub def
 /dy newy oldy sub def
 /dist dx dup mul dy dup mul add sqrt def
 /pathdist pathdist dist add def
 pathdist targetdist ge
 { pathdist targetdist sub dist div dup
   dy mul neg newy add /Y exch def
   dx mul neg newx add /X exch def
   /Angle dy dx atan def
   /continue false def
 } if
} def

/TextPathShow {
 /String exch def
 /CharCount 0 def
% hv begin 2005-11-29   1.00
%   String length
%   { String CharCount 1 getinterval ShowChar
%     /CharCount CharCount 1 add def
  /CharSize 1 def
  currentfont /FontType get 0 eq
  { currentfont /FMapType get dup 2 eq exch dup 5 eq exch 9 eq or or
    { /CharSize 2 def} if
  } if
  String length CharSize idiv
  { String CharCount CharSize getinterval ShowChar
    /CharCount CharCount CharSize add def
% hv end 2005-11-29   1.00
 } repeat
} def

% Syntax: <pathlength> <position> InitTextPath -
/InitTextPath
{ gsave
   currentpoint /Y exch def /X exch def
   exch X Hoffset sub sub mul
   Voffset Hoffset sub add
   neg X add /Hoffset exch def
   /Voffset Y def
 grestore
} def

/Transform
{ PathPosition
 dup
 Angle cos mul Y add exch
 Angle sin mul neg X add exch
 translate
 Angle rotate
} def

/ShowChar {
 /Char exch def
 gsave
   Char end stringwidth
   tx@TextPathDict begin
   2 div /Sy exch def 2 div /Sx exch def

%%%  MV 10-09-99 00:36
   /sc?currentpoint where {pop sc?currentpoint} {currentpoint} ifelse
%   currentpoint

   Voffset sub Sy add exch
   Hoffset sub Sx add
   Transform
   Sx neg Sy neg moveto
   Char end tx@TextPathSavedShow
   tx@TextPathDict begin
 grestore
 Sx 2 mul Sy 2 mul rmoveto
} def
%
end
% END pst-text.pro

%%EndProcSet
%%BeginProcSet: pst-3d.pro 0 0
%% $Id: pst-3d.pro 247 2010-01-04 22:45:42Z herbert $
% PostScript prologue for pst-3d.tex.
% Version 0.01, 2010/01/01
%
/tx@3Ddict 300 dict def
tx@3Ddict begin
%
/SetMatrixThreeD {
 dup sin /e ED cos /f ED
 /p3 ED /p2 ED /p1 ED
 p1 0 eq
 { /a 0 def /b p2 0 le { 1 } { -1 } ifelse def
   p3 p2 abs
 }
 { p2 0 eq
   { /a p1 0 lt { -1 } { 1 } ifelse def /b 0 def
     p3 p1 abs
   }
   { p1 dup mul p2 dup mul add sqrt dup
     p1 exch div /a ED
     p2 exch div neg /b ED
     p3 p1 a div
   }
   ifelse
 }
 ifelse
 atan dup sin /c ED cos /d ED
 /Matrix3D
 [
   b f mul c a mul e mul sub
   a f mul c b mul e mul add
   d e mul
   b e mul neg c a mul f mul sub
   a e mul neg c b mul f mul add
   d f mul
 ] def
} def
%
/ProjThreeD {
 /z ED /y ED /x ED
 Matrix3D aload pop
 z mul exch y mul add exch x mul add
 4 1 roll
 z mul exch y mul add exch x mul add
 exch
} def
%
/SetMatrixEmbed {
 SetMatrixThreeD
 Matrix3D aload pop
 /z3 ED /z2 ED /z1 ED /x3 ED /x2 ED /x1 ED
 SetMatrixThreeD
 [
 Matrix3D aload pop
 z3 mul exch z2 mul add exch z1 mul add 4 1 roll
 z3 mul exch z2 mul add exch z1 mul add
 Matrix3D aload pop
 x3 mul exch x2 mul add exch x1 mul add 4 1 roll
 x3 mul exch x2 mul add exch x1 mul add
 3 -1 roll 3 -1 roll 4 -1 roll 8 -3 roll 3 copy
 x3 mul exch x2 mul add exch x1 mul add 4 1 roll
 z3 mul exch z2 mul add exch z1 mul add
 ]
 concat
} def
%
/TMSave {
 tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
 /TMatrix [ TMatrix CM ] cvx def
} def
%
/TMRestore { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
%
/TMChange {
 TMSave
 /cp [ currentpoint ] cvx def % ??? Check this later.
 CM
 CP T STV
 CM matrix invertmatrix    % Inv(M')
 matrix concatmatrix       % M Inv(M')
 exch exec
 concat cp moveto
} def
%
end % of tx@3Ddict
%%
%% End of file `pst-3d.pro'.

%%EndProcSet
%%BeginProcSet: pst-math.pro 0 0
%                           -*- Mode: Postscript -*-
% pst-math.pro --- PostScript header file pst-math.pro
%
% Author          : Christophe JORSSEN
% Author          : Herbert Voß <[email protected]>
% Created the     : Sat 20 March 2004
% Last Mod        : $Date: 2010/10/02 $
% Version         : 0.62 $
%
/PI 3.14159265359 def
/ENeperian 2.71828182846 def
%
/DegToRad {PI mul 180 div} bind def
/RadToDeg {180 mul PI div} bind def
%
/COS {RadToDeg cos} bind def
/SIN {RadToDeg sin} bind def
/TAN {dup SIN exch COS Div} bind def
/tan {dup sin exch cos Div} bind def
/ATAN {neg -1 atan 180 sub DegToRad} bind def
/ACOS {dup dup mul neg 1 add sqrt exch atan DegToRad} bind def
/acos {dup dup mul neg 1 add sqrt exch atan} bind def
/ASIN {neg dup dup mul neg 1 add sqrt neg atan 180 sub DegToRad} bind def
/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def
%
/EXP {ENeperian exch exp} bind def
%
/COSH {dup EXP exch neg EXP add 2 div} bind def
/SINH {dup EXP exch neg EXP sub 2 div} bind def
/TANH {dup SINH exch COSH div} bind def
/ACOSH {dup dup mul 1 sub sqrt add ln} bind def
/ASINH {dup dup mul 1 add sqrt add ln} bind def
/ATANH {dup 1 add exch neg 1 add Div ln 2 div} bind def
%
%/SINC {dup SIN exch Div} bind def
/SINC { dup 0 eq { pop 1 } { dup SIN exch div } ifelse } bind def

/GAUSS {dup mul 2 mul dup 4 -2 roll sub dup mul exch div neg EXP exch PI mul sqrt div} bind def
%
/GAMMA { 2 dict begin                           % hv 2007-08-30
 /z exch def
 1.000000000190015                             % p(0)
 0 1 5 {                                       % on stack is 0 1 2 3 4 5
   dup                                         % n-1 n-1
   [ 76.18009172947146
    -86.50532032941677
     24.0140982483091
     -1.231739572450155
      0.1208650973866179E-2
     -0.5395239384953E-5      ] exch get exch  % p(n) n-1
     1 add z add div                           % p(n)/(z+n)
     add                                       % build the sum
   } for
   Pi 2 mul sqrt z div mul
   z 5.5 add z 0.5 add exp mul ENeperian z 5.5 add neg exp mul
 end } bind def
%
/GAMMALN {dup dup dup 5.5 add dup ln 3 -1 roll .5 add mul sub neg 1.000000000190015
   0 1 5 {
   [76.18009172947146 -86.50532032941677 24.0140982483091 -1.231739572450155
   .1208650973866179E-2 -.5395239384953E-5 2.5066282746310005] exch get
   4 -1 roll 1 add dup 5 1 roll div add} for
   4 -1 roll div 2.5066282746310005 mul ln add exch pop} bind def
/BETA {2 copy add GAMMALN neg exch GAMMALN 3 -1 roll GAMMALN EXP} bind def
%
/HORNER {aload length
   dup 2 add -1 roll
   exch 1 sub {
       dup 4 1 roll
       mul add exch
   } repeat
   pop
} bind def
%
/BESSEL_J0 {dup abs 8 lt {
   dup mul dup [57568490574 -13362590354 651619640.7 -11214424.18 77392.33017 -184.9052456] HORNER
   exch [57568490411 1029532985 9494680.718 59272.64853 267.8532712 1] HORNER
   Div}
   {abs dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
   [1 -1.098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
   3 index COS mul
   exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
   4 -1 roll SIN mul 3 -1 roll mul neg add mul}
   ifelse} bind def
%
/BESSEL_Y0 {dup 8 lt {
   dup dup mul dup [-2957821389 7062834065 -512359803.6 10879881.29 -86327.92757 228.4622733] HORNER
   exch [40076544269 745249964.8 7189466.438 47447.26470 226.1030244 1] HORNER
   Div exch dup ln exch BESSEL_J0 .636619772 mul mul add}
   {dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
   [1 -.1098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
   3 index SIN mul
   exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
   4 -1 roll COS mul 3 -1 roll mul add mul}
   ifelse} bind def
%
/BESSEL_J1 {dup abs 8 lt {
   dup dup mul dup 3 -2 roll [72362614232 -7895059235 242396853.1 -2972611.439 15704.48260 -30.16036606] HORNER mul
   exch [144725228442 2300535178 18583304.74 99447.43394 376.9991397 1] HORNER
   Div}
   {dup abs dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
   [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
   3 index COS mul
   exch [.04687499995 6.2002690873E-3 .8449199096E-5 -.88228987E-6 .105787412E-6] HORNER
   4 -1 roll SIN mul 3 -1 roll mul neg add mul exch dup abs Div mul}
   ifelse} bind def
%
/BESSEL_Y1 {dup 8 lt {
   dup dup dup mul dup [-.4900604943E13 .1275274390E13 -.5153428139E11 .7349264551E9 -.4237922726E7 .8511937935E4] HORNER
   exch [.2499580570E14 .4244419664E12 .3733650367E10 .2245904002E8 .1020426050E6 .3549632885E3 1] HORNER
   Div mul exch dup dup ln exch BESSEL_J1 mul exch 1 exch div sub .636619772 mul add}
   {dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
   [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
   3 index SIN mul
   exch [.04687499995 -.2002690873E-3 .8449199096E-5 6.88228987E-6 .105787412E-6] HORNER
   4 -1 roll COS mul 3 -1 roll mul add mul}
   ifelse} bind def
%
% En cours...
/BESSEL_Yn {dup 0 eq {pop BESSEL_Y0}{dup 1 eq {pop BESSEL_Y1}{
   exch dup BESSEL_Y0 exch dup BESSEL_Y1 exch 2 exch Div {
       mul 3 -1 roll mul 2 index sub pstack} for
   } ifelse } ifelse } bind def
%
/SIMPSON { 1 dict begin  %% on stack a b var f ierr  Dominik Rodriguez
 3 index 5 index sub                                % compute h
 1                                                  % a b var f ierr h n
 4 index 7 index def 3 index exec                   % a b var f ierr h n f(a)
 5 index 7 index def 4 index exec add               % a b var f ierr h n f(a)+f(b)
 5 index 8 index 4 index 2 div add def 4 index exec % a b var f ierr h n f(a)+f(b) f(a+h/2)
 exch 1 index 4 mul add 0  % a b var f ierr h n old=f(a+h/2) Estim=f(a)+f(b)+4f(a+h/2) NbLoop
   {                                                % a b var f ierr h n old Estim NbLoop
     5 -1 roll 2 div dup 6 1 roll              % h<-h/2
     5 -1 roll 2 mul 5 1 roll                  % n<-2n
                                               % a b var f ierr h n old Estim NbLoop h
     2 div 10 index add 0                      % a b var f ierr h n old Estim NbLoop a+h/2 Cumul
     5 index {
       1 index 10 index exch def 8 index exec add exch 6 index add exch
     } repeat                                  % a b var f ierr h n old Estim NbLoop a+nh/2 Cumul
     exch pop                                  % a b var f ierr h n old Estim NbLoop New
     2 index 1 index 4 mul 6 -1 roll 2 mul sub sub % a b var f ierr h n Estim NbLoop New Diff
     4 -1 roll 2 mul 1 index sub 4 1 roll          % a b var f ierr h n Estim NbLoop New Diff
     exch 4 1 roll                             % a b var f ierr h n old Estim NbLoop Diff
     5 index 6 div mul abs 6 index lt { exit } if
     1 add dup 9 eq { exit } if
 } loop                                        % a b var f ierr h n old Estim NbLoop
 exch 5 -1 roll 6 div mul mark 10 2 roll cleartomark
end
} def
% ------------------------------------ math stuff ----------------------------------
%
% Matrix A in arrays of rows A[[row1][row2]...]
% with [row1]=[a11 a12 ... b1]
% returns on stack solution vector X=[x1 x2 ... xn]
/SolveLinEqSystem {                             % on stack matrix M=[A,b] (A*x=b)
 10 dict begin                                 % hold all ocal
   /A exch def
   /Rows A length def                          % Rows = number of rows
   /Cols A 0 get length def                    % Cols = number of columns
   /Index [ 0 1 Rows 1 sub { } for ] def       % Index = [0 1 2 ... Rows-1]
   /col 0 def
   /row  0 def
   /PR Rows array def                          % PR[c] = pivot row for row row
 {                                             % starts the loop, find pivot entry in row r
   col Cols ge row  Rows ge or { exit } if     % col < Cols and row < Rows else exit
   /pRow row def                               % pRow = pivot row
   /max A row  get col get abs def             % get A[row[col]], first A[0,0]
   row 1 add 1 Rows 1 sub {                    % starts for loop 1 1 Rows-1
     /j exch def                               % index counter
     /x A j get col get abs def                % get A[j[r]]
     x max gt {                                % x>max, then save position
       /pRow j def
       /max x def
     } if
   } for                                       % now we have the row with biggest A[0,1]
                                               % with pRow = the pivot row
   max 0 gt {                                  % swap entries pRow and row  in i
     /tmp Index row  get def
     Index row  Index pRow get put
     Index pRow tmp put                        % and columns pRow and row  in A
     /tmp A row get def
     A row  A pRow get put
     A pRow tmp put                            % pivot
     /row0  A row  get def                     % the pivoting row
     /p0 row0  col get def                     % the pivot value
     row 1 add 1 Rows 1 sub {                  % start for loop
       /j exch def
       /c1 A j get def
       /p c1 col get p0 div def
       c1 col p put                            % subtract (p1/p0)*row[i] from row[j]
       col 1 add 1 Cols 1 sub {                % start for loop
         /i exch def
         c1 dup i exch                         % c1 i c1
         i get row0 i get p mul sub put
       } for
     } for
     PR row col put
     /col col 1 add def
     /row row 1 add def
   }{                                          % all zero entries
     /row row 1 add def                        % continue loop with same row
   } ifelse
 } loop
 /X A def                                      % solution vector
 A Rows 1 sub get dup
 Cols 1 sub get exch
 Cols 2 sub get div
 X Rows 1 sub 3 -1 roll put                    % X[n]
 Rows 2 sub -1 0 {                             % for loop to calculate X[i]
   /xi exch def                                % current index
   A xi get                                    % i-th row
   /Axi exch def
   /sum 0 def
   Cols 2 sub -1 xi 1 add {
     /n exch def
     /sum sum Axi n get X n get mul add def
   } for
   Axi Cols 1 sub get                          % b=Axi[Cols-1]
   sum sub                                     % b-sum
   Axi xi get div                              % b-sum / Axi[xi]
   X xi 3 -1 roll put                          % X[xi]
 } for
 X
 end
} def
%
/c@_0 2.515517 def
/c@_1 0.802853 def
/c@_2 0.010328 def
/d@_1 1.432788 def
/d@_2 0.189269 def
/d@_3 0.001308 def
/norminv {
 5 dict begin
 neg 1 add 1 exch div ln 2 mul sqrt
 /t exch def
 /t2 t dup mul def
 /t3 t2 t mul def
 c@_0 c@_1 t mul add c@_2 t2 mul add 1 d@_1 t mul add
 d@_2 t2 mul add d@_3 t3 mul add div neg t add
 end
} def
%end{norminv Michael Sharpe}
%
%
% END pst-math.pro

%%EndProcSet
%%BeginProcSet: pstricks-add.pro 0 0
%% $Id: pstricks-add.pro 692 2012-06-04 06:47:40Z herbert $
%%
% PostScript prologue for pstricks-add.tex.
%
% Version 0.23, 2009/12/17
%
/tx@addDict 410 dict def tx@addDict begin
%%
realtime srand % set random generator
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/GTriangle {
 gsave
 /mtrx CM def
 /colorA ED /colorB ED /colorC ED      % save the colors
 /yA ED /xA ED                         % save the origin
 xA yA translate
 rotate                                % \psk@gangle
 /yB ED /xB ED /yC ED /xC ED           % save other coordinates
 /ds [                % save data in a array
    0 0 0 colorA aload pop             % fd x y xr xg xb
    0 xB xA sub yB yA sub colorB aload pop
    0 xC xA sub yC yA sub colorC aload pop
%     1 xC xB add yB colorA aload pop   % for use with 4 points ABCD
 ] def
 newpath
 <<
 /ShadingType 4           % single Gouraud
 /ColorSpace [ /DeviceRGB ]
 /DataSource ds
 >>
 shfill
 closepath
 mtrx
 setmatrix grestore} def
%
/RGBtoCMYK {    % on stack r g b -> C M Y K
 3 dict begin
 /Blue ED /Green ED /Red ED
 1 Red sub     % Cyan
 1 Green sub   % Magenta
 1 Blue sub    % Yellow
 0             % Black
 end
} def
%
/CMYKtoGRAY { % on stack c m y k -> gray
 exch 0.11 mul add
 exch 0.59 mul add
 exch 0.3 mul add
 dup 1 gt { pop 1 }  if
 neg 1 add
} def
%
/RGBtoGRAY { % on stack r g b -> gray
 0.11 mul
 exch 0.59 mul add
 exch 0.3 mul add
} def
%
/HSBtoGRAY {
 6 dict begin
 /b exch def
 /s exch def 6 mul dup cvi dup
 /i exch def sub
 /f exch def
 /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
 F i get { s mul neg 1 add b mul} forall
 0.11 mul
 exch 0.59 mul add
 exch 0.3 mul add
 end
} def
%
%% convertisseur longueur d'onde ->R,G,B       Manuel Luque
%% lambda max=780 nanometres
%% lambda min=380 nanometres
%% adaptation de :
%% http://www.physics.sfasu.edu/astro/color.html
%% www.efg2.com/lab
%
/Gamma 0.8 def
/calculateRGB {
 lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
 lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
 lambda 380 ge {lambda 439 le {
   /R {lambda 440 sub neg 440 380 sub div} def
   /Red R factor mul Gamma exp def
   /G 0 def
   /Green G factor mul Gamma exp def
   /B 1 def
   /Blue B factor mul Gamma exp def} if
 } if
 lambda 440 ge { lambda 489 le {
   /G {lambda 440 sub 490 440 sub div} def
   /Green G factor mul Gamma exp def
   /R 0 def /Red 0 def
   /B 1 def
   /Blue B factor mul Gamma exp def } if
 } if
 lambda 490 ge {lambda 509 le {
   /B {lambda 510 sub neg 510 490 sub div} def
   /Blue B factor mul Gamma exp def
   /R 0 def /Red 0 def
   /G 1 def
   /Green G factor mul Gamma exp def } if
 } if
 lambda 510 ge {lambda 579 le {
   /R {lambda 510 sub 580 510 sub div } def
   /Red R factor mul Gamma exp def
   /Blue 0 def
   /G 1 def
   /Green G factor mul Gamma exp def } if
 } if
 lambda 580 ge {lambda 644 le {
   /G {lambda 645 sub neg 645 580 sub div } def
   /Green G factor mul Gamma exp def
   /Blue 0 def
   /R 1 def
   /Red R factor mul Gamma exp def } if
 } if
 lambda 645 ge { lambda 780 le {
   /Red 1 factor mul Gamma exp def
   /Blue 0 def
   /Green 0 def } if
 } if
} def
%
/factor {
 lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
 lambda 420 ge {lambda 700 le { 1 } if } if
 lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
} def
%
/wavelengthToRGB { % the wavelength in nm must be on top of the stack
 cvi /lambda exch def % no floating point here
 calculateRGB
} def %  now the colors are saved in Red Green Blue
%
/wavelengthToGRAY { % the wavelength in nm must be on top of the stack
 cvi /lambda exch def % no floating point here
 calculateRGB
 Red Green Blue RGBtoGRAY
} def %  now the gray color is on the stack
%
/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
 cvi /lambda exch def % no floating point here
 gsave
 calculateRGB Red Green Blue RGBtoCMYK
 /Black ED /Yellow ED /Magenta ED /Cyan ED
 grestore
} def %  now the colors are saved in Cyan Magenta Yellow Black
%
/axfill {
   8 dict begin
   /xw exch def /nl exch def
   /C1 exch def /y1 exch def/x1 exch def
   /C0 exch def /y0 exch def/x0 exch def
   <<  /ShadingType 2
       /ColorSpace /DeviceRGB
       /Coords [ x0 y0 x1 y1 ]
       /EmulatorHints [ xw 2 div dup ]
       /Function <<
           /FunctionType 2
           /Domain [0 1]
           /C0 C0
           /C1 C1
           /N      1
       >>
   >> shfill
   end
} bind def
%
%/amplHand {.8} def
%/dtHand 2 def
/varHand { rand sin amplHand mul add } def
/MovetoByHand { moveto } def
%/MovetoByHand { /y0 ED /x0 ED x0 y0 moveto } def
/LinetoByHand { 4 dict begin
 /y1 ED /x1 ED
 currentpoint /y0 ED /x0 ED
 x0 x1 sub dup mul y0 y1 sub dup mul add sqrt /dEnd ED
 0 dtHand dEnd { dup
   x1 x0 sub mul dEnd div x0 add varHand exch
   y1 y0 sub mul dEnd div y0 add varHand lineto
 } for
%  /x0 x1 def /y0 y1 def
 end
} def
%
end
%
% END pstricks-add.pro

%%EndProcSet
%%BeginProcSet: pst-eucl.pro 0 0
%!
% PostScript prologue for pst-eucl.tex.
% Version 1.01 2012/09/21
% For distribution, see pstricks.tex.
%
/tx@EcldDict 40 dict def tx@EcldDict begin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Pi
/Pi 3.14159265359 def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% e
/E 2.718281828459045 def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x -> true (if |x| < 1E-6)
/ZeroEq { abs 1E-6 lt } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x1 y1 x2 y2 -> a b c (ax-by+c=0 with a^2+b^2=1)
/EqDr {
 4 copy 3 -1 roll sub 7 1 roll exch sub 5 1 roll 4 -1 roll
 mul 3 1 roll mul exch sub
 2 index dup mul 2 index dup mul add sqrt
 4 -1 roll 1 index div exch
 4 -1 roll 1 index div exch
 4 -1 roll 1 index div exch pop
} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% orthogonal projection of M1 onto (OM2)
%% x1 y1 x2 y2 -> x3 y3
/Project {
 2 copy dup mul exch dup mul add 5 1 roll 2 copy 5 -1 roll mul exch
 5 -1 roll mul add 4 -1 roll div dup 4 -1 roll mul exch 3 -1 roll mul
} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a b c (ax2+bx+c=0) -> x1 y1
/SolvTrin {
 /c exch def /b exch def /a exch def
 b dup mul a c mul 4 mul sub dup 0 lt
 { pop 0 0 } %% no solutions
 {sqrt dup b neg add a 2 mul div exch b add neg 2 a mul div }
 ifelse } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x1 y1 x2 y2 -> Dist
/ABDist { 3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x1 y1 x2 y2 -> x2-x1  y2-y1
/ABVect { 3 -1 roll exch sub 3 1 roll sub exch } bind def
%/ABVect { 3 -1 roll sub 3 1 roll exch sub exch } bind def  %% wrong version
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x1 y1 x2 y2 x3 y3 x4 y4 -> x y
/InterLines {
 EqDr /D1c exch def /D1b exch def /D1a exch def
 EqDr /D2c exch def /D2b exch def /D2a exch def
 D1a D2b mul D1b D2a mul sub dup ZeroEq
%   { pop pop pop 0 0 } %% parallel lines  % --- hv 20110714
  { pop 0 0 } %% parallel lines             --- hv 20110714
  {
   /Det exch def
   D1b D2c mul D1c D2b mul sub Det div
   D1a D2c mul D2a D1c mul sub Det div
  } ifelse  } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% a b c R -> x1 y1 x2 y2
/InterLineCircle {
 /CR exch def /Dc exch def neg /Db exch def /Da exch def
 ABVect /Vy exch def /Vx exch def
 %% Dc==0 then O belong to the line
 %% First project O on the line -> M (-ca;-cb)
 %% l'abscisse de M sur (OM) divis�e par R donne le cosinus
 %Dc neg dup Db mul exch Da mul 2 copy 0 0
 %ABDist dup CR gt { pop pop pop 0 0 0 0 }
 %{ ZeroEq { pop pop Db Da } if Atan /alpha exch def
 Dc abs CR gt { 0 0 0 0 }
 { Db neg Da neg Atan /alpha exch def
 Dc CR div dup dup mul 1 exch sub sqrt exch Atan /beta exch def
 alpha beta add dup cos CR mul exch sin CR mul
 alpha beta sub dup cos CR mul exch sin CR mul
 4 copy ABVect Vy mul 0 le exch Vx mul 0 le and
 { 4 2 roll } if } ifelse
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% R R' OO' -> x1 y1 x2 y2
/InterCircles {
 /OOP exch def /CRP exch def /CR exch def
 OOP dup mul CRP dup mul sub CR dup mul add OOP div 2 div
 dup dup mul CR dup mul exch sub dup
 0 lt { pop pop 0 0 0 0 } { sqrt 2 copy neg } ifelse
} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x y theta -> x' y' (rotation of theta)
/Rotate {
 dup sin /sintheta exch def cos /costheta exch def /y exch def /x exch def
 x costheta mul y sintheta mul sub
 y costheta mul x sintheta mul add
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% N -> x y
/GetNode {
 tx@NodeDict begin
   tx@NodeDict 1 index known { load GetCenter } { pop 0 0 } ifelse
 end
} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x -> ch(x)
/ch { dup Ex exch neg Ex add 2 div } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x -> sh(x)
/sh { dup Ex exch neg Ex sub 2 div } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x -> e^(x)
/Ex { E exch exp } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% x f g -> x y n
/NewtonSolving {
 /g exch def /f exch def 0
 { %%% STACK: x0 n
   1 add exch %% one more loop
   dup ZeroEq
   { dup 0.0005 add fgeval
     1 index 0.0005 sub fgeval sub .001 div }
   { dup 1.0005 mul fgeval
     1 index 0.9995 mul fgeval sub .001 2 index mul div } ifelse  %%% STACK: n x0 fg'(x0)
   %%% compute x1=x0-fg(x0)/fg'(x0)
   1 index fgeval exch div dup 4 1 roll sub exch %% stack: dx x0 n
   3 -1 roll ZeroEq              %% exit if root found
   1 index 100 eq or { exit } if %% or looping for more than 100 times
 } loop
 dup 100 lt { exch dup /x exch def f } { pop 0 0 } ifelse
 3 -1 roll
} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/fgeval { /x exch def f g sub } bind def
end
% END ps-euclide.pro

%%EndProcSet
%%BeginProcSet: pst-slpe.pro 0 0
%%
%% This is file `pst-slpe.pro',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pst-slpe.dtx  (with options: `prolog')
%%
%% IMPORTANT NOTICE:
%%
%% For the copyright see the source file.
%%
%% Any modified versions of this file must be renamed
%% with new filenames distinct from pst-slpe.pro.
%%
%% For distribution of the original source see the terms
%% for copying and modification in the file pst-slpe.dtx.
%%
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
/tx@PstSlopeDict 60 dict def tx@PstSlopeDict begin
/Opacity 1 def % preset, no transparency
/Opacity++ { Opacity dOpacity add /Opacity ED } def
/max {2 copy lt {exch} if pop} bind def
/Iterate {
 1 sub /NumSegs ED
 dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
 setrgbcolor currenthsbcolor
 /ThisB ED
 /ThisS ED
 /ThisH ED
 /ThisPt ED
 Opacity .setopacityalpha
 gsave
 fill
 grestore
 NumSegs {
   dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
   setrgbcolor currenthsbcolor
   /NextB ED
   /NextS ED
   /NextH ED
   /NextPt ED
   ThisPt NextPt sub ThisPt div NumSteps mul cvi /SegSteps exch def
   /NumSteps NumSteps SegSteps sub def
   SegSteps 0 eq not {
     ThisS 0 eq {/ThisH NextH def} if
     NextS 0 eq {/NextH ThisH def} if
     ThisH NextH sub 0.5 gt
       {/NextH NextH 1.0 add def}
       { NextH ThisH sub 0.5 ge {/ThisH ThisH 1.0 add def} if }
     ifelse
     /B ThisB def
     /S ThisS def
     /H ThisH def
     /BInc NextB ThisB sub SegSteps div def
     /SInc NextS ThisS sub SegSteps div def
     /HInc NextH ThisH sub SegSteps div def
     SegSteps {
       H dup 1. gt {1. sub} if S B sethsbcolor
       currentrgbcolor
       sqrt 3 1 roll sqrt 3 1 roll sqrt 3 1 roll
       setrgbcolor
       DrawStep
       /H H HInc add def
       /S S SInc add def
       /B B BInc add def
     } bind repeat
     /ThisH NextH def
     /ThisS NextS def
     /ThisB NextB def
     /ThisPt NextPt def
   } if
 } bind repeat
} def
/PatchRadius {
 Radius 0 eq {
   /UpdRR { dup mul exch dup mul add RR max /RR ED } bind def
   gsave
   flattenpath
   /RR 0 def
   {UpdRR} {UpdRR} {} {} pathforall
   grestore
   /Radius RR sqrt def
 } if
} def
/SlopesFill {
 /Fading ED % do we have fading?
 Fading {
   /FadingEnd ED % the last opacity value
   dup /FadingStart ED % the first opacity value
   /Opacity ED % the opacity start value
 } if
 gsave
 180 add rotate
 /NumSteps ED
 Fading { /dOpacity FadingEnd FadingStart sub NumSteps div def } if
 clip
 pathbbox
 /h ED /w ED
 2 copy translate
 h sub neg /h ED
 w sub neg /w ED
 /XInc w NumSteps div def
 /DrawStep {
   Fading { % do we have a fading?
     Opacity .setopacityalpha  % set opacity value
     Opacity++ % increase opacity
   } if
   0 0 XInc h rectfill
   XInc 0 translate
 } bind def
 Iterate
 grestore
} def
/CcSlopesFill {
 /Fading ED % do we have fading?
 Fading {
   /FadingEnd ED % the last opacity value
   dup /FadingStart ED % the first opacity value
   /Opacity ED % the opacity start value
 } if
 gsave
 /Radius ED
 /CenterY ED
 /CenterX ED
 /NumSteps ED
 Fading { /dOpacity FadingEnd FadingStart sub NumSteps div def } if
 clip
 pathbbox
 /h ED /w ED
 2 copy translate
 h sub neg /h ED
 w sub neg /w ED
 w CenterX mul h CenterY mul translate
 PatchRadius
 /RadPerStep Radius NumSteps div neg def
 /Rad Radius def
 /DrawStep {
   Fading { % do we have a fading?
     Opacity .setopacityalpha  % set opacity value
     Opacity++ % increase opacity
   } if
   0 0 Rad 0 360 arc
   closepath fill
   /Rad Rad RadPerStep add def
 } bind def
 Iterate
 grestore
} def
/RadSlopesFill {
 /Fading ED % do we have fading?
 Fading {
   /FadingEnd ED % the last opacity value
   dup /FadingStart ED % the first opacity value
   /Opacity ED % the opacity start value
 } if
 gsave
 rotate
 /Radius ED
 /CenterY ED
 /CenterX ED
 /NumSteps ED
 Fading { /dOpacity FadingEnd FadingStart sub NumSteps div def } if
 clip
 pathbbox
 /h ED /w ED
 2 copy translate
 h sub neg /h ED
 w sub neg /w ED
 w CenterX mul h CenterY mul translate
 PatchRadius
 /AngleIncrement 360 NumSteps div neg def
 /dY AngleIncrement sin AngleIncrement cos div Radius mul def
 /DrawStep {
   Fading { % do we have a fading?
     Opacity .setopacityalpha  % set opacity value
     Opacity++ % increase opacity
   } if
   0 0 moveto
   Radius 0 rlineto
   0 dY rlineto
   closepath fill
   AngleIncrement rotate
 } bind def
 Iterate
 grestore
} def
end

%%EndProcSet
%%BeginProcSet: special.pro 0 0
%!
TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
{userdict/md get type/dicttype eq{userdict begin md length 10 add md
maxlength ge{/md md dup length 20 add dict copy def}if end md begin
/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
save N userdict maxlength dict begin/magscale true def normalscale
currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
savematrix setmatrix}N end

%%EndProcSet
%%BeginProcSet: color.pro 0 0
%!
TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end

%%EndProcSet
TeXDict begin @defspecial

systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get
put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict
/cleartomark get put}ifelse

/DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution
mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup
dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder
{1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx
pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly
exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx
exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips
exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx
exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF
HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder
sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint
exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def

@fedspecial end TeXDict begin
12120418 12120418 1000 600 600 (test2.dvi)
@start end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
% dvips-unknown
statusdict /setpageparams known { hsize vsize 0 1 statusdict begin {
setpageparams } stopped end } { true } ifelse { statusdict /setpage known
{ hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
end
%%EndSetup
%%Page: 1 1
TeXDict begin 1 0 bop 0 0 a
SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator
(LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark
end
0 0 a 0 0 a
SDict begin /product where{pop product(Distiller)search{pop pop pop
version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
grestore}if}{pop}ifelse}{pop}ifelse}if end
0 0 a -608 -608
a
SDict begin H.S end
-608 -608 a -608 -608 a
SDict begin H.R end
-608 -608 a -608 -608 a
SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end
-608
-608 a 0 TeXcolorgray Black -600 -600 a
tx@Dict begin  gsave STV CP T /ps@rot 0 def grestore  end
-600 -600 a -600
-600 a
tx@Dict begin  gsave STV CP T /ps@refangle 0.  def grestore  end
-600 -600 a 0 TeXcolorgray -600 -600 a
tx@Dict begin  gsave STV CP T /ps@rot 0 def grestore  end
-600 -600
a -600 -600 a
mark /_objdef {@anim@ocgs} /type/array /OBJ pdfmark mark /_objdef
{@anim@offocgs} /type/array /OBJ pdfmark mark {Catalog} << /OCProperties
<< /OCGs {@anim@ocgs} /D <</BaseState/ON /OFF {@anim@offocgs}>> >>
>> /PUT pdfmark
-600 -600 a -600 -600 a
mark /_objdef {@anim@fields} /type/array /OBJ pdfmark mark {Catalog}
<< /AcroForm <</Fields {@anim@fields}>> >> /PUT pdfmark
-600 -600 a -600
-600 a
SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark
end
-600 -600 a -600 -600 a
SDict begin [ {Catalog}<<>> /PUT pdfmark end
-600 -600 a -600 -600
a
SDict begin H.S end
-600 -600 a -600 -600 a
SDict begin 12 H.A end
-600 -600 a -600 -600 a
SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end
-600
-600 a -600 -600 a
{Resolution 1200 gt VResolution 1200 gt or product (Ghostscript) search
{pop pop pop true}{pop false}ifelse and {(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n@@    Warning: DVI resolution greater than 1200 dpi!     @@\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n@@                                                       @@\n@@ Animations may be distorted or invisible.             @@\n@@ Dvips should be called either without option `-Ppdf': @@\n@@                                                       @@\n@@   dvips test2\n@@                                                       @@\n@@ or with a different resolution setting:               @@\n@@                                                       @@\n@@   dvips -Ppdf -D1200 test2\n@@                                                       @@\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n)
print} if} ?pdfmark
-600 -600 a 0 TeXcolorgray 0 TeXcolorgray
-541 817 a @beginspecial @setspecial
 tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
/ArrowInside { } def  3.0 SLW 0 0 1  setrgbcolor   /Lineto /lineto
load def 0  setlinejoin false pop 0 56.90549 14.22636 135. 85.35823
85.35823 Diamond  gsave 0 0 1  setrgbcolor  1. .setopacityalpha  fill
grestore gsave 3.0 SLW 0 0 1  setrgbcolor  1. .setopacityalpha   0
setlinejoin 0  setlinecap stroke  grestore end

@endspecial @beginspecial
@setspecial
 tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
/ArrowInside { } def  3.0 SLW 0 0 1  setrgbcolor   /Lineto /lineto
load def 0  setlinejoin false pop 0 56.90549 14.22636 45. 85.35823
85.35823 Diamond  gsave 0 0 1  setrgbcolor  1. .setopacityalpha  fill
grestore gsave 3.0 SLW 0 0 1  setrgbcolor  1. .setopacityalpha   0
setlinejoin 0  setlinecap stroke  grestore end

@endspecial 0 TeXcolorgray 0 TeXcolorgray
eop end
%%Trailer

userdict /end-hook known{end-hook}if
%%EOF