summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/examples
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
committerKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
commitbab45528d65eaafe68a705dbb2a57075c7b7cbd8 (patch)
tree10b4ae2b5195c8dede153ab89359ec00f55f325f /Build/source/utils/asymptote/examples
parent8643d90372e9c31e0f461c15c596b60a545bd7d3 (diff)
asymptote 1.72 sources (not integrated into build yet)
git-svn-id: svn://tug.org/texlive/trunk@13110 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/examples')
-rw-r--r--Build/source/utils/asymptote/examples/.cvsignore2
-rw-r--r--Build/source/utils/asymptote/examples/100d.views3
-rw-r--r--Build/source/utils/asymptote/examples/BezierPatch.asy14
-rw-r--r--Build/source/utils/asymptote/examples/BezierSurface.asy38
-rw-r--r--Build/source/utils/asymptote/examples/Coons.asy6
-rw-r--r--Build/source/utils/asymptote/examples/Gouraud.asy18
-rw-r--r--Build/source/utils/asymptote/examples/Gouraudcontour.asy31
-rw-r--r--Build/source/utils/asymptote/examples/Klein.asy19
-rw-r--r--Build/source/utils/asymptote/examples/Pythagoras.asy22
-rw-r--r--Build/source/utils/asymptote/examples/PythagoreanTree.asy20
-rw-r--r--Build/source/utils/asymptote/examples/RiemannSurface.asy13
-rw-r--r--Build/source/utils/asymptote/examples/RiemannSurfaceRoot.asy17
-rw-r--r--Build/source/utils/asymptote/examples/Sierpinski.asy17
-rw-r--r--Build/source/utils/asymptote/examples/advection.asy87
-rw-r--r--Build/source/utils/asymptote/examples/alignbox.asy9
-rw-r--r--Build/source/utils/asymptote/examples/alignedaxis.asy107
-rw-r--r--Build/source/utils/asymptote/examples/animations/cube.asy46
-rw-r--r--Build/source/utils/asymptote/examples/animations/dice.u3dbin0 -> 160672 bytes
-rw-r--r--Build/source/utils/asymptote/examples/animations/earthmoon.asy77
-rw-r--r--Build/source/utils/asymptote/examples/animations/embeddedmovie.asy24
-rw-r--r--Build/source/utils/asymptote/examples/animations/embeddedu3d.asy6
-rw-r--r--Build/source/utils/asymptote/examples/animations/externalmovie.asy17
-rw-r--r--Build/source/utils/asymptote/examples/animations/heatequation.asy76
-rw-r--r--Build/source/utils/asymptote/examples/animations/inlinemovie.tex51
-rw-r--r--Build/source/utils/asymptote/examples/animations/inlinemovie3.tex41
-rw-r--r--Build/source/utils/asymptote/examples/animations/pdfmovie.asy20
-rw-r--r--Build/source/utils/asymptote/examples/animations/slidemovies.asy47
-rw-r--r--Build/source/utils/asymptote/examples/animations/sphere.asy44
-rw-r--r--Build/source/utils/asymptote/examples/animations/torusanimation.asy41
-rw-r--r--Build/source/utils/asymptote/examples/animations/wavepacket.asy85
-rw-r--r--Build/source/utils/asymptote/examples/animations/wheel.asy53
-rw-r--r--Build/source/utils/asymptote/examples/annotation.asy13
-rw-r--r--Build/source/utils/asymptote/examples/arrows3.asy20
-rw-r--r--Build/source/utils/asymptote/examples/buildcycle.asy22
-rw-r--r--Build/source/utils/asymptote/examples/cardioid.asy15
-rw-r--r--Build/source/utils/asymptote/examples/centroidfg.asy38
-rw-r--r--Build/source/utils/asymptote/examples/cheese.asy12
-rw-r--r--Build/source/utils/asymptote/examples/circles.asy33
-rw-r--r--Build/source/utils/asymptote/examples/coag.asy16
-rw-r--r--Build/source/utils/asymptote/examples/colorplanes.asy22
-rw-r--r--Build/source/utils/asymptote/examples/condor.asy32
-rw-r--r--Build/source/utils/asymptote/examples/cones.asy16
-rw-r--r--Build/source/utils/asymptote/examples/conicurv.asy49
-rw-r--r--Build/source/utils/asymptote/examples/controlsystem.asy39
-rw-r--r--Build/source/utils/asymptote/examples/cos2theta.asy15
-rw-r--r--Build/source/utils/asymptote/examples/cosaddition.asy26
-rw-r--r--Build/source/utils/asymptote/examples/cpkcolors.asy259
-rw-r--r--Build/source/utils/asymptote/examples/curvedlabel.asy4
-rw-r--r--Build/source/utils/asymptote/examples/curvedlabel3.asy17
-rw-r--r--Build/source/utils/asymptote/examples/cyclohexane.asy73
-rw-r--r--Build/source/utils/asymptote/examples/cylinder.asy7
-rw-r--r--Build/source/utils/asymptote/examples/delu.asy29
-rw-r--r--Build/source/utils/asymptote/examples/dimension.asy23
-rw-r--r--Build/source/utils/asymptote/examples/dragon.asy66
-rw-r--r--Build/source/utils/asymptote/examples/electromagnetic.asy47
-rw-r--r--Build/source/utils/asymptote/examples/elevation.asy15
-rw-r--r--Build/source/utils/asymptote/examples/epix.asy14
-rw-r--r--Build/source/utils/asymptote/examples/equilateral.asy12
-rw-r--r--Build/source/utils/asymptote/examples/equilchord.asy21
-rw-r--r--Build/source/utils/asymptote/examples/extrudedcontour.asy22
-rw-r--r--Build/source/utils/asymptote/examples/fano.asy28
-rw-r--r--Build/source/utils/asymptote/examples/fermi.asy40
-rw-r--r--Build/source/utils/asymptote/examples/filesurface.asy34
-rw-r--r--Build/source/utils/asymptote/examples/filesurface.dat12
-rw-r--r--Build/source/utils/asymptote/examples/fillcontour.asy29
-rw-r--r--Build/source/utils/asymptote/examples/fin.asy152
-rw-r--r--Build/source/utils/asymptote/examples/fjortoft.asy27
-rw-r--r--Build/source/utils/asymptote/examples/floatingdisk.asy24
-rw-r--r--Build/source/utils/asymptote/examples/floor.asy28
-rw-r--r--Build/source/utils/asymptote/examples/fractaltree.asy27
-rw-r--r--Build/source/utils/asymptote/examples/functionshading.asy31
-rw-r--r--Build/source/utils/asymptote/examples/galleon.asy14
-rw-r--r--Build/source/utils/asymptote/examples/gamma.asy24
-rw-r--r--Build/source/utils/asymptote/examples/gamma3.asy29
-rw-r--r--Build/source/utils/asymptote/examples/grid.asy7
-rw-r--r--Build/source/utils/asymptote/examples/hierarchy.asy9
-rw-r--r--Build/source/utils/asymptote/examples/hyperboloid.asy8
-rw-r--r--Build/source/utils/asymptote/examples/hyperboloidsilhouette.asy9
-rw-r--r--Build/source/utils/asymptote/examples/imagehistogram.asy47
-rw-r--r--Build/source/utils/asymptote/examples/impact.asy28
-rw-r--r--Build/source/utils/asymptote/examples/integraltest.asy38
-rw-r--r--Build/source/utils/asymptote/examples/interpolate1.asy213
-rw-r--r--Build/source/utils/asymptote/examples/jump.asy14
-rw-r--r--Build/source/utils/asymptote/examples/label3.asy7
-rw-r--r--Build/source/utils/asymptote/examples/label3ribbon.asy6
-rw-r--r--Build/source/utils/asymptote/examples/label3solid.asy6
-rw-r--r--Build/source/utils/asymptote/examples/labelbox.asy11
-rw-r--r--Build/source/utils/asymptote/examples/laserlattice.asy44
-rw-r--r--Build/source/utils/asymptote/examples/latticeshading.asy7
-rw-r--r--Build/source/utils/asymptote/examples/lever.asy23
-rw-r--r--Build/source/utils/asymptote/examples/limit.asy28
-rw-r--r--Build/source/utils/asymptote/examples/lines.asy10
-rw-r--r--Build/source/utils/asymptote/examples/log.asy14
-rw-r--r--Build/source/utils/asymptote/examples/logdown.asy13
-rw-r--r--Build/source/utils/asymptote/examples/logo3.asy33
-rw-r--r--Build/source/utils/asymptote/examples/lowint.asy11
-rw-r--r--Build/source/utils/asymptote/examples/lowupint.asy31
-rw-r--r--Build/source/utils/asymptote/examples/magnetic.asy17
-rw-r--r--Build/source/utils/asymptote/examples/markregular.asy26
-rw-r--r--Build/source/utils/asymptote/examples/mosaic.asy165
-rw-r--r--Build/source/utils/asymptote/examples/mosquito.asy82
-rw-r--r--Build/source/utils/asymptote/examples/near_earth.asy56
-rw-r--r--Build/source/utils/asymptote/examples/oneoverx.asy17
-rw-r--r--Build/source/utils/asymptote/examples/orthocenter.asy41
-rw-r--r--Build/source/utils/asymptote/examples/parametricelevation.asy10
-rw-r--r--Build/source/utils/asymptote/examples/parametricsurface.asy22
-rw-r--r--Build/source/utils/asymptote/examples/partialsurface.asy29
-rw-r--r--Build/source/utils/asymptote/examples/pdb.asy157
-rw-r--r--Build/source/utils/asymptote/examples/phase.asy18
-rw-r--r--Build/source/utils/asymptote/examples/piicon.eps1135
-rw-r--r--Build/source/utils/asymptote/examples/pipeintersection.asy13
-rw-r--r--Build/source/utils/asymptote/examples/planeproject.asy18
-rw-r--r--Build/source/utils/asymptote/examples/polararea.asy38
-rw-r--r--Build/source/utils/asymptote/examples/polarcircle.asy30
-rw-r--r--Build/source/utils/asymptote/examples/poster.asy32
-rw-r--r--Build/source/utils/asymptote/examples/progrid.asy1
-rw-r--r--Build/source/utils/asymptote/examples/projectelevation.asy18
-rw-r--r--Build/source/utils/asymptote/examples/projectrevolution.asy15
-rw-r--r--Build/source/utils/asymptote/examples/rainbow.asy12
-rw-r--r--Build/source/utils/asymptote/examples/randompath3.asy3
-rw-r--r--Build/source/utils/asymptote/examples/ring.asy5
-rw-r--r--Build/source/utils/asymptote/examples/roundpath.asy32
-rw-r--r--Build/source/utils/asymptote/examples/sacone.asy23
-rw-r--r--Build/source/utils/asymptote/examples/sacone3D.asy13
-rw-r--r--Build/source/utils/asymptote/examples/sacylinder.asy26
-rw-r--r--Build/source/utils/asymptote/examples/sacylinder3D.asy14
-rw-r--r--Build/source/utils/asymptote/examples/shade.asy4
-rw-r--r--Build/source/utils/asymptote/examples/shadestroke.asy5
-rw-r--r--Build/source/utils/asymptote/examples/shellmethod.asy39
-rw-r--r--Build/source/utils/asymptote/examples/shellsqrtx01.asy34
-rw-r--r--Build/source/utils/asymptote/examples/sin1x.asy16
-rw-r--r--Build/source/utils/asymptote/examples/sinc.asy19
-rw-r--r--Build/source/utils/asymptote/examples/sinxlex.asy24
-rw-r--r--Build/source/utils/asymptote/examples/slidedemo.asy118
-rw-r--r--Build/source/utils/asymptote/examples/slidedemo_.bbl13
-rw-r--r--Build/source/utils/asymptote/examples/slidemovies.asy46
-rw-r--r--Build/source/utils/asymptote/examples/smoothelevation.asy24
-rw-r--r--Build/source/utils/asymptote/examples/sphere.asy6
-rw-r--r--Build/source/utils/asymptote/examples/spheresilhouette.asy9
-rw-r--r--Build/source/utils/asymptote/examples/sphereskeleton.asy9
-rw-r--r--Build/source/utils/asymptote/examples/sphericalharmonic.asy12
-rw-r--r--Build/source/utils/asymptote/examples/spiral.asy12
-rw-r--r--Build/source/utils/asymptote/examples/spline.asy25
-rw-r--r--Build/source/utils/asymptote/examples/spring.asy33
-rw-r--r--Build/source/utils/asymptote/examples/spring0.asy4
-rw-r--r--Build/source/utils/asymptote/examples/spring2.asy4
-rw-r--r--Build/source/utils/asymptote/examples/sqrtx01.asy25
-rw-r--r--Build/source/utils/asymptote/examples/sqrtx01y1.asy24
-rw-r--r--Build/source/utils/asymptote/examples/star.asy13
-rw-r--r--Build/source/utils/asymptote/examples/stroke3.asy2
-rw-r--r--Build/source/utils/asymptote/examples/strokepath.asy17
-rw-r--r--Build/source/utils/asymptote/examples/strokeshade.asy4
-rw-r--r--Build/source/utils/asymptote/examples/tanh.asy13
-rw-r--r--Build/source/utils/asymptote/examples/teapot.asy202
-rw-r--r--Build/source/utils/asymptote/examples/tensor.asy8
-rw-r--r--Build/source/utils/asymptote/examples/thermodynamics.asy131
-rw-r--r--Build/source/utils/asymptote/examples/torus.asy7
-rw-r--r--Build/source/utils/asymptote/examples/transparency.asy9
-rw-r--r--Build/source/utils/asymptote/examples/treetest.asy22
-rw-r--r--Build/source/utils/asymptote/examples/trefoilknot.asy23
-rw-r--r--Build/source/utils/asymptote/examples/triads.asy52
-rw-r--r--Build/source/utils/asymptote/examples/triangle.asy12
-rw-r--r--Build/source/utils/asymptote/examples/triceratops.asy9
-rw-r--r--Build/source/utils/asymptote/examples/tvgen.asy1314
-rw-r--r--Build/source/utils/asymptote/examples/twistedtubes.asy28
-rw-r--r--Build/source/utils/asymptote/examples/unitcircle.asy14
-rw-r--r--Build/source/utils/asymptote/examples/upint.asy13
-rw-r--r--Build/source/utils/asymptote/examples/vectorfield3.asy26
-rw-r--r--Build/source/utils/asymptote/examples/venn.asy37
-rw-r--r--Build/source/utils/asymptote/examples/vertexshading.asy10
-rw-r--r--Build/source/utils/asymptote/examples/washermethod.asy36
-rw-r--r--Build/source/utils/asymptote/examples/wedge.asy21
-rw-r--r--Build/source/utils/asymptote/examples/workcone.asy40
-rw-r--r--Build/source/utils/asymptote/examples/xsin1x.asy10
-rw-r--r--Build/source/utils/asymptote/examples/xxsq01.asy30
-rw-r--r--Build/source/utils/asymptote/examples/xxsq01x-1.asy34
-rw-r--r--Build/source/utils/asymptote/examples/xxsq01y.asy32
-rw-r--r--Build/source/utils/asymptote/examples/yingyang.asy7
178 files changed, 7893 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/examples/.cvsignore b/Build/source/utils/asymptote/examples/.cvsignore
new file mode 100644
index 00000000000..359703608e5
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/.cvsignore
@@ -0,0 +1,2 @@
+*.eps
+*.gif
diff --git a/Build/source/utils/asymptote/examples/100d.views b/Build/source/utils/asymptote/examples/100d.views
new file mode 100644
index 00000000000..b3a1be12936
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/100d.views
@@ -0,0 +1,3 @@
+{0 0 -14.425469398498535}{0 0 1}{14.425469398498535}{}{27.905145957890003}
+{0.3336401879787445 -0.0024074832908809185 -14.015975952148438}{-0.7636404037475586 -0.17614173889160156 0.6211501359939575}{15.868016873340485}{-58.88738872302071}{27.905145957890003}
+[Arbitrary Label]{0.3336401879787445 -0.0024074832908809185 -14.015975952148438}{-0.8299760222434998 0.19688645005226135 -0.5218961238861084}{15.868016035928465}{-94.62674045286937}{27.905145957890003}
diff --git a/Build/source/utils/asymptote/examples/BezierPatch.asy b/Build/source/utils/asymptote/examples/BezierPatch.asy
new file mode 100644
index 00000000000..0e6b477eb13
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/BezierPatch.asy
@@ -0,0 +1,14 @@
+import three;
+
+size(10cm);
+currentlight=(0,0,1);
+
+surface s=surface(patch(new triple[][] {
+ {(0,0,0),(1,0,0),(1,0,0),(2,0,0)},
+ {(0,1,0),(1,0,1),(1,0,1),(2,1,0)},
+ {(0,1,0),(1,0,-1),(1,0,-1),(2,1,0)},
+ {(0,2,0),(1,2,0),(1,2,0),(2,2,0)}}));
+
+draw(s,yellow);
+draw(s.s[0].vequals(0.5),squarecap+2bp+blue,currentlight);
+draw(s.s[0].uequals(0.5),squarecap+2bp+red,currentlight);
diff --git a/Build/source/utils/asymptote/examples/BezierSurface.asy b/Build/source/utils/asymptote/examples/BezierSurface.asy
new file mode 100644
index 00000000000..65410deebca
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/BezierSurface.asy
@@ -0,0 +1,38 @@
+import three;
+
+string viewpoint="{-24.132780075073242 7.2992024421691895 7.695427417755127}{0.8244762420654297 -0.563306450843811 0.0540805421769619}{35.62141440580922}{17.392748820528627}{}";
+
+//viewpoint=getstring("viewpoint",viewpoint);
+currentprojection=perspective(viewpoint);
+
+currentlight=adobe;
+
+triple[][][] P={{
+ {(-1.6,0,1.875),(-1.6,-0.3,1.875),(-1.5,-0.3,2.1),(-1.5,0,2.1)},
+ {(-2.3,0,1.875),(-2.3,-0.3,1.875),(-2.5,-0.3,2.1),(-2.5,0,2.1)},
+ {(-2.7,0,1.875),(-2.7,-0.3,1.875),(-3,-0.3,2.1),(-3,0,2.1)},
+ {(-2.7,0,1.65),(-2.7,-0.3,1.65),(-3,-0.3,1.65),(-3,0,1.65)}
+ },{
+ {(-2.7,0,1.65),(-2.7,-0.3,1.65),(-3,-0.3,1.65),(-3,0,1.65)},
+ {(-2.7,0,1.425),(-2.7,-0.3,1.425),(-3,-0.3,1.2),(-3,0,1.2)},
+ {(-2.5,0,0.975),(-2.5,-0.3,0.975),(-2.65,-0.3,0.7275),(-2.65,0,0.7275)},
+ {(-2,0,0.75),(-2,-0.3,0.75),(-1.9,-0.3,0.45),(-1.9,0,0.45)}
+ },{
+ {(-2.7,0,1.65),(-2.7,0.3,1.65),(-3,0.3,1.65),(-3,0,1.65)},
+ {(-2.7,0,1.875),(-2.7,0.3,1.875),(-3,0.3,2.1),(-3,0,2.1)},
+ {(-2.3,0,1.875),(-2.3,0.3,1.875),(-2.5,0.3,2.1),(-2.5,0,2.1)},
+ {(-1.6,0,1.875),(-1.6,0.3,1.875),(-1.5,0.3,2.1),(-1.5,0,2.1)}
+ },{
+ {(-2,0,0.75),(-2,0.3,0.75),(-1.9,0.3,0.45),(-1.9,0,0.45)},
+ {(-2.5,0,0.975),(-2.5,0.3,0.975),(-2.65,0.3,0.7275),(-2.65,0,0.7275)},
+ {(-2.7,0,1.425),(-2.7,0.3,1.425),(-3,0.3,1.2),(-3,0,1.2)},
+ {(-2.7,0,1.65),(-2.7,0.3,1.65),(-3,0.3,1.65),(-3,0,1.65)}
+ }};
+
+picture pic;
+size(pic,15cm);
+size3(pic,10cm);
+draw(pic,surface(P),blue);
+
+add(embed("label",pic),(0,0),N);
+label(cameralink("label"),(0,0),10S,fontsize(24pt));
diff --git a/Build/source/utils/asymptote/examples/Coons.asy b/Build/source/utils/asymptote/examples/Coons.asy
new file mode 100644
index 00000000000..9f59d152575
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Coons.asy
@@ -0,0 +1,6 @@
+size(200);
+
+pen[] p={red,green,blue,magenta};
+path g=(0,0){dir(45)}..(1,0)..(1,1)..(0,1)..cycle;
+tensorshade(g,p);
+dot(g);
diff --git a/Build/source/utils/asymptote/examples/Gouraud.asy b/Build/source/utils/asymptote/examples/Gouraud.asy
new file mode 100644
index 00000000000..d49813e5e66
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Gouraud.asy
@@ -0,0 +1,18 @@
+size(200);
+
+pen[] p={red,green,blue,magenta};
+pair[] z={(-1,0),(0,0),(0,1),(1,0)};
+int[] edges={0,0,0,1};
+gouraudshade(z[0]--z[2]--z[3]--cycle,p,z,edges);
+
+draw(z[0]--z[1]--z[2]--cycle);
+draw(z[1]--z[3]--z[2],dashed);
+
+dot(Label,z[0],W);
+dot(Label,z[1],S);
+dot(Label,z[2],N);
+dot(Label,z[3],E);
+
+label("0",z[0]--z[1],S,red);
+label("1",z[1]--z[2],E,red);
+label("2",z[2]--z[0],NW,red);
diff --git a/Build/source/utils/asymptote/examples/Gouraudcontour.asy b/Build/source/utils/asymptote/examples/Gouraudcontour.asy
new file mode 100644
index 00000000000..1cf788869a2
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Gouraudcontour.asy
@@ -0,0 +1,31 @@
+import graph;
+import palette;
+import contour;
+
+size(200);
+
+int n=100;
+
+real[] x=new real[n];
+real[] y=new real[n];
+real[] f=new real[n];
+
+real F(real a, real b) {return a^2+b^2;}
+
+real r() {return 1.1*(rand()/randMax*2-1);}
+
+for(int i=0; i < n; ++i) {
+ x[i]=r();
+ y[i]=r();
+ f[i]=F(x[i],y[i]);
+}
+
+pen Tickpen=black;
+pen tickpen=gray+0.5*linewidth(currentpen);
+pen[] Palette=BWRainbow();
+
+bounds range=image(x,y,f,Range(0,2),Palette);
+draw(contour(pairs(x,y),f,new real[]{0.25,0.5,1},operator ..));
+
+palette("$f(x,y)$",range,point(NW)+(0,0.5),point(NE)+(0,0.8),Top,Palette,
+ PaletteTicks(Tickpen,tickpen));
diff --git a/Build/source/utils/asymptote/examples/Klein.asy b/Build/source/utils/asymptote/examples/Klein.asy
new file mode 100644
index 00000000000..ba3bccd87e9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Klein.asy
@@ -0,0 +1,19 @@
+import graph3;
+
+size(200,0);
+currentprojection=perspective(40,-100,40);
+
+// From http://local.wasp.uwa.edu.au/~pbourke/surfaces_curves/klein/
+triple f(pair t) {
+ real u=t.x;
+ real v=t.y;
+ real r=4*(1-cos(u)/2);
+ real x=6*cos(u)*(1+sin(u))+(u < pi ? r*cos(u)*cos(v) : r*cos(v+pi));
+ real y=16*sin(u)+(u < pi ? r*sin(u)*cos(v) : 0);
+ real z=r*sin(v);
+ return (x,y,z);
+}
+
+pen p=rgb(0.2,0.5,0.7);
+
+draw(surface(f,(0,0),(2pi,2pi),60,60),lightgray,meshpen=p);
diff --git a/Build/source/utils/asymptote/examples/Pythagoras.asy b/Build/source/utils/asymptote/examples/Pythagoras.asy
new file mode 100644
index 00000000000..f4ea68fe432
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Pythagoras.asy
@@ -0,0 +1,22 @@
+size(0,150);
+import geometry;
+
+real a=3;
+real b=4;
+real c=hypot(a,b);
+
+pair z1=(0,b);
+pair z2=(a,0);
+pair z3=(a+b,0);
+perpendicular(z1,NE,z1--z2,blue);
+perpendicular(z3,NW,blue);
+draw(square((0,0),z3));
+draw(square(z1,z2));
+
+real d=0.3;
+pair v=unit(z2-z1);
+draw(baseline("$a$"),-d*I--z2-d*I,red,Bars,Arrows,PenMargins);
+draw(baseline("$b$"),z2-d*I--z3-d*I,red,Arrows,Bars,PenMargins);
+draw("$c$",z3+z2*I-d*v--z2-d*v,red,Arrows,PenMargins);
+draw("$a$",z3+d--z3+z2*I+d,red,Arrows,Bars,PenMargins);
+draw("$b$",z3+z2*I+d--z3+z3*I+d,red,Arrows,Bars,PenMargins);
diff --git a/Build/source/utils/asymptote/examples/PythagoreanTree.asy b/Build/source/utils/asymptote/examples/PythagoreanTree.asy
new file mode 100644
index 00000000000..8ea66650bf3
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/PythagoreanTree.asy
@@ -0,0 +1,20 @@
+size(250);
+
+real a=3;
+real b=4;
+real c=hypot(a,b);
+
+transform ta=shift(c,c)*rotate(-aCos(a/c))*scale(a/c)*shift(-c);
+transform tb=shift(0,c)*rotate(aCos(b/c))*scale(b/c);
+
+picture Pythagorean(int n) {
+ picture pic;
+ fill(pic,scale(c)*unitsquare,1/(n+1)*green+n/(n+1)*brown);
+ if(n == 0) return pic;
+ picture branch=Pythagorean(--n);
+ add(pic,ta*branch);
+ add(pic,tb*branch);
+ return pic;
+}
+
+add(Pythagorean(12));
diff --git a/Build/source/utils/asymptote/examples/RiemannSurface.asy b/Build/source/utils/asymptote/examples/RiemannSurface.asy
new file mode 100644
index 00000000000..68c8f237a19
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/RiemannSurface.asy
@@ -0,0 +1,13 @@
+import graph3;
+import palette;
+
+size(200,300,keepAspect=false);
+//settings.nothin=true;
+
+currentprojection=orthographic(10,10,30);
+currentlight=(10,10,5);
+triple f(pair t) {return (exp(t.x)*cos(t.y),exp(t.x)*sin(t.y),t.y);}
+
+surface s=surface(f,(-4,-2pi),(0,4pi),30,60);
+s.colors(palette(s.map(zpart),Rainbow()));
+draw(s,meshpen=black);
diff --git a/Build/source/utils/asymptote/examples/RiemannSurfaceRoot.asy b/Build/source/utils/asymptote/examples/RiemannSurfaceRoot.asy
new file mode 100644
index 00000000000..50cb9ead31d
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/RiemannSurfaceRoot.asy
@@ -0,0 +1,17 @@
+// Riemann surface of z^{1/n}
+import graph3;
+import palette;
+
+int n=3;
+
+size(200,300,keepAspect=false);
+//settings.nothin=true;
+
+currentprojection=orthographic(10,10,30);
+currentlight=(10,10,5);
+triple f(pair t) {return (t.x*cos(t.y),t.x*sin(t.y),t.x^(1/n)*sin(t.y/n));}
+
+surface s=surface(f,(0,0),(1,2pi*n),30,60);
+s.colors(palette(s.map(zpart),Rainbow()));
+
+draw(s,meshpen=black);
diff --git a/Build/source/utils/asymptote/examples/Sierpinski.asy b/Build/source/utils/asymptote/examples/Sierpinski.asy
new file mode 100644
index 00000000000..d1664045d9f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/Sierpinski.asy
@@ -0,0 +1,17 @@
+size(10cm);
+
+// Draw Sierpinski triangle with top vertex A, side s, and depth q.
+void Sierpinski(pair A, real s, int q, bool top=true)
+{
+ pair B=A-(1,sqrt(2))*s/2;
+ pair C=B+s;
+ if(top) draw(A--B--C--cycle);
+ draw((A+B)/2--(B+C)/2--(A+C)/2--cycle);
+ if(q > 0) {
+ Sierpinski(A,s/2,q-1,false);
+ Sierpinski((A+B)/2,s/2,q-1,false);
+ Sierpinski((A+C)/2,s/2,q-1,false);
+ }
+}
+
+Sierpinski((0,1),1,5);
diff --git a/Build/source/utils/asymptote/examples/advection.asy b/Build/source/utils/asymptote/examples/advection.asy
new file mode 100644
index 00000000000..ea993ff0fc8
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/advection.asy
@@ -0,0 +1,87 @@
+size(0,22cm);
+
+texpreamble("
+\usepackage{bm}
+\def\v{\bm}
+\def\grad{\v\nabla}
+\def\cross{{\v\times}}
+\def\curl{\grad\cross}
+\def\del{\nabla}
+");
+
+defaultpen(fontsize(10pt));
+
+real margin=1.5mm;
+
+object IC=draw("initial condition $\v U_0$",box,(0,1),
+ margin,black,FillDraw(palegray));
+object Adv0=draw("Lagrangian state $\v U(t)$",ellipse,(1,1),
+ margin,red,FillDraw(palered));
+object Adv=draw("Lagrangian prediction $\v U(t+\tau)$",ellipse,(1,0),
+ margin,red,FillDraw(palered));
+object AdvD=draw("diffused parcels",ellipse,(1.8,1),
+ margin,red,FillDraw(palered));
+object Ur=draw("rearranged $\v \widetilde U$",box,(0,0),
+ margin,orange+gray,FillDraw(paleyellow));
+object Ui=draw("interpolated $\v \widetilde U$",box,(1,-1),
+ margin,blue,FillDraw(paleblue));
+object Crank=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$",
+ box,(0.5,-1),margin,blue,FillDraw(paleblue));
+object CrankR=draw("${\cal L}^{-1}(-\tau){\cal L}(\tau)\v \widetilde U$",
+ box,(0,-1),margin,orange+gray,FillDraw(paleyellow));
+object Urout=draw(minipage("\center{Lagrangian rearranged solution~$\v U_R$}",
+ 100pt),box,(0,-2),margin,orange+gray,
+ FillDraw(paleyellow));
+object Diff=draw("$\v D\del^2 \v \widetilde U$",box,(0.75,-1.5),
+ margin,blue,FillDraw(paleblue));
+object UIout=draw(minipage("\center{semi-Lagrangian solution~$\v U_I$}",80pt),
+ box,(0.5,-2),margin,FillDraw(palered+paleyellow));
+object psi=draw("$\psi=\del^{-2}\omega$",box,(1.6,-1),
+ margin,darkgreen,FillDraw(palegreen));
+object vel=draw("$\v v=\v{\hat z} \cross\grad\psi$",box,(1.6,-0.5),
+ margin,darkgreen,FillDraw(palegreen));
+
+add(new void(frame f, transform t) {
+ pair padv=0.5*(point(Adv0,S,t)+point(Adv,N,t));
+ picture pic;
+ draw(pic,"initialize",point(IC,E,t)--point(Adv0,W,t),RightSide,Arrow,
+ PenMargin);
+ draw(pic,minipage("\flushright{advect: Runge-Kutta}",80pt),
+ point(Adv0,S,t)--point(Adv,N,t),RightSide,red,Arrow,PenMargin);
+ draw(pic,Label("Lagrange $\rightarrow$ Euler",0.45),
+ point(Adv,W,t)--point(Ur,E,t),5LeftSide,orange+gray,
+ Arrow,PenMargin);
+ draw(pic,"Lagrange $\rightarrow$ Euler",point(Adv,S,t)--point(Ui,N,t),
+ RightSide,blue,Arrow,PenMargin);
+ draw(pic,point(Adv,E,t)--(point(AdvD,S,t).x,point(Adv,E,t).y),red,
+ Arrow(Relative(0.7)),PenMargin);
+ draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt),
+ point(Ui,W,t)--point(Crank,E,t),5N,blue,MidArrow,PenMargin);
+ draw(pic,minipage("\flushleft{diffuse: multigrid Crank--Nicholson}",80pt),
+ point(Ur,S,t)--point(CrankR,N,t),LeftSide,orange+gray,Arrow,PenMargin);
+ draw(pic,"output",point(CrankR,S,t)--point(Urout,N,t),RightSide,
+ orange+gray,Arrow,PenMargin);
+ draw(pic,point(Ui,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin);
+ draw(pic,point(Crank,S,t)--point(Diff,N,t),blue,MidArrow,PenMargin);
+ label(pic,"subtract",point(Diff,N,t),12N,blue);
+ draw(pic,Label("Euler $\rightarrow$ Lagrange",0.5),
+ point(Diff,E,t)--(point(AdvD,S,t).x,point(Diff,E,t).y)--
+ (point(AdvD,S,t).x,point(Adv,E,t).y),RightSide,blue,
+ Arrow(position=1.5),PenMargin);
+ dot(pic,(point(AdvD,S,t).x,point(Adv,E,t).y),red);
+ draw(pic,(point(AdvD,S,t).x,point(Adv,E,t).y)--point(AdvD,S,t),red,Arrow,
+ PenMargin);
+ draw(pic,"output",point(Crank,S,t)--point(UIout,N,t),RightSide,brown,Arrow,
+ PenMargin);
+ draw(pic,Label("$t+\tau\rightarrow t$",0.45),
+ point(AdvD,W,t)--point(Adv0,E,t),2.5LeftSide,red,Arrow,PenMargin);
+ draw(pic,point(psi,N,t)--point(vel,S,t),darkgreen,Arrow,PenMargin);
+ draw(pic,Label("self-advection",4.5),point(vel,N,t)--
+ arc((point(vel,N,t).x,point(Adv,E,t).y),5,270,90)--
+ (point(vel,N,t).x,padv.y)--
+ padv,LeftSide,darkgreen,Arrow,PenMargin);
+ draw(pic,Label("multigrid",0.5,S),point(Ui,E,t)--point(psi,W,t),darkgreen,
+ Arrow,PenMargin);
+
+ add(f,pic.fit());
+ });
diff --git a/Build/source/utils/asymptote/examples/alignbox.asy b/Build/source/utils/asymptote/examples/alignbox.asy
new file mode 100644
index 00000000000..8f216c6a10c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/alignbox.asy
@@ -0,0 +1,9 @@
+real margin=1.5mm;
+
+object left=align(object("$x^2$",ellipse,margin),W);
+add(left);
+object right=align(object("$\sin x$",ellipse,margin),4E);
+add(right);
+currentpicture.add(new void(frame f, transform t) {
+ draw(f,point(left,NE,t)--point(right,W,t));
+ });
diff --git a/Build/source/utils/asymptote/examples/alignedaxis.asy b/Build/source/utils/asymptote/examples/alignedaxis.asy
new file mode 100644
index 00000000000..542dcb9bc60
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/alignedaxis.asy
@@ -0,0 +1,107 @@
+import graph;
+
+real Freq=60.0;
+real margin=5mm;
+
+pair exp(pair x) {
+ return exp(x.x)*(cos(x.y)+I*sin(x.y));
+}
+
+real Merr(real x, real w) {
+ real tau=x/(2*Freq);
+ return 20*log(abs((tau*w+tau/(exp(I*2*pi*Freq*tau)-1))*(I*2*pi*Freq)));
+}
+
+real Aerr(real x, real w) {
+ real tau=x/(2*Freq);
+ return degrees((tau*w+tau/(exp(I*2*pi*Freq*tau)-1))*(I*2*pi*Freq));
+}
+
+picture pic1;
+scale(pic1,Log,Linear);
+real Merr1(real x){return Merr(x,1);}
+draw(pic1,graph(pic1,Merr1,1e-4,1),black+1.2);
+
+ylimits(pic1,-60,20);
+yaxis(pic1,"magnitude (dB)",LeftRight,RightTicks(new
+ real[] {-60,-40,-20,0,20}));
+xaxis(pic1,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5));
+yequals(pic1,0,Dotted);
+yequals(pic1,-20,Dotted);
+yequals(pic1,-40,Dotted);
+xequals(pic1,1e-3,Dotted);
+xequals(pic1,1e-2,Dotted);
+xequals(pic1,1e-1,Dotted);
+
+size(pic1,100,100,point(pic1,SW),point(pic1,NE));
+
+label(pic1,"$\theta=1$",point(pic1,N),2N);
+
+frame f1=pic1.fit();
+add(f1);
+
+picture pic1p;
+scale(pic1p,Log,Linear);
+real Aerr1(real x){return Aerr(x,1);}
+draw(pic1p,graph(pic1p,Aerr1,1e-4,1),black+1.2);
+
+ylimits(pic1p,-5,95);
+yaxis(pic1p,"phase (deg)",LeftRight,RightTicks(new real[] {0,45,90}));
+xaxis(pic1p,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5));
+yequals(pic1p,0,Dotted);
+yequals(pic1p,45,Dotted);
+yequals(pic1p,90,Dotted);
+xequals(pic1p,1e-3,Dotted);
+xequals(pic1p,1e-2,Dotted);
+xequals(pic1p,1e-1,Dotted);
+
+size(pic1p,100,100,point(pic1p,SW),point(pic1p,NE));
+
+frame f1p=pic1p.fit();
+f1p=shift(0,min(f1).y-max(f1p).y-margin)*f1p;
+add(f1p);
+
+picture pic2;
+scale(pic2,Log,Linear);
+real Merr2(real x){return Merr(x,0.75);}
+draw(pic2,graph(pic2,Merr2,1e-4,1),black+1.2);
+
+ylimits(pic2,-60,20);
+yaxis(pic2,"magnitude (dB)",LeftRight,RightTicks(new
+ real[] {-60,-40,-20,0,20}));
+xaxis(pic2,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5));
+yequals(pic2,0,Dotted);
+yequals(pic2,-20,Dotted);
+yequals(pic2,-40,Dotted);
+xequals(pic2,1e-3,Dotted);
+xequals(pic2,1e-2,Dotted);
+xequals(pic2,1e-1,Dotted);
+
+size(pic2,100,100,point(pic2,SW),point(pic2,NE));
+
+label(pic2,"$\theta=0.75$",point(pic2,N),2N);
+
+frame f2=pic2.fit();
+f2=shift(max(f1).x-min(f2).x+margin)*f2;
+add(f2);
+
+picture pic2p;
+scale(pic2p,Log,Linear);
+real Aerr2(real x){return Aerr(x,0.75);}
+draw(pic2p,graph(pic2p,Aerr2,1e-4,1),black+1.2);
+
+ylimits(pic2p,-5,95);
+yaxis(pic2p,"phase (deg)",LeftRight,RightTicks(new real[] {0,45.1,90}));
+xaxis(pic2p,"$f/f_\mathrm{Ny}$",BottomTop,LeftTicks(N=5));
+yequals(pic2p,0,Dotted);
+yequals(pic2p,45,Dotted);
+yequals(pic2p,90,Dotted);
+xequals(pic2p,1e-3,Dotted);
+xequals(pic2p,1e-2,Dotted);
+xequals(pic2p,1e-1,Dotted);
+
+size(pic2p,100,100,point(pic2p,SW),point(pic2p,NE));
+
+frame f2p=pic2p.fit();
+f2p=shift(max(f1p).x-min(f2p).x+margin,min(f2).y-max(f2p).y-margin)*f2p;
+add(f2p);
diff --git a/Build/source/utils/asymptote/examples/animations/cube.asy b/Build/source/utils/asymptote/examples/animations/cube.asy
new file mode 100644
index 00000000000..001e54466d8
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/cube.asy
@@ -0,0 +1,46 @@
+import math;
+import bsp;
+import animation;
+
+size(100,100);
+
+animation a;
+
+void face(face[] faces, path3 p, int j, int k) {
+ picture pic=faces.push(p);
+ filldraw(pic,project(p),Pen(j));
+ int sign=(k % 2 == 0) ? 1 : -1;
+ transform t=scale(4)*transform(dir(p,0,sign),dir(p,0,-sign));
+ label(pic,t*(string) j,project(0.5*(min(p)+max(p))));
+}
+
+void snapshot(transform3 t)
+{
+ static transform3 s=shift(-0.5*(X+Y+Z));
+ save();
+
+ face[] faces;
+ int j=-1;
+ transform3 T=t*s;
+ for(int k=0; k < 2; ++k) {
+ face(faces,T*plane((1,0,0),(0,1,0),(0,0,k)),++j,k);
+ face(faces,T*plane((0,1,0),(0,0,1),(k,0,0)),++j,k);
+ face(faces,T*plane((0,0,1),(1,0,0),(0,k,0)),++j,k);
+ }
+ add(faces);
+
+ a.add();
+ restore();
+}
+
+int n=50;
+
+real step=360/n;
+for(int i=0; i < n; ++i)
+ snapshot(rotate(i*step,X));
+for(int i=0; i < n; ++i)
+ snapshot(rotate(i*step,Y));
+for(int i=0; i < n; ++i)
+ snapshot(rotate(i*step,Z));
+
+a.movie(loops=10,delay=50);
diff --git a/Build/source/utils/asymptote/examples/animations/dice.u3d b/Build/source/utils/asymptote/examples/animations/dice.u3d
new file mode 100644
index 00000000000..ae14b756a16
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/dice.u3d
Binary files differ
diff --git a/Build/source/utils/asymptote/examples/animations/earthmoon.asy b/Build/source/utils/asymptote/examples/animations/earthmoon.asy
new file mode 100644
index 00000000000..abd8ac9f431
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/earthmoon.asy
@@ -0,0 +1,77 @@
+import graph3;
+import solids;
+import three;
+import animate;
+
+settings.render=2;
+settings.tex="pdflatex";
+settings.prc=false;
+settings.thick=false;
+settings.outformat="mpg";
+currentprojection=orthographic(5,4,2);
+currentlight=light(specular=black,(0.1,-0.1,1));
+
+size(15cm,0);
+
+animation A;
+
+real Rst=20, Rl=0.7, Rtl=5;
+real ast=20, est=0.3, bst=ast*sqrt(1-est^2), cst=ast*est;
+real atl=5, etl=0.8, btl=atl*sqrt(1-etl^2), ctl=atl*etl;
+
+real xST(real t) {return ast*cos(t)+cst;}
+real yST(real t) {return bst*sin(t);}
+real zST(real t) {return 0;}
+
+real xTL(real t) {return atl*cos(27*t);}
+real yTL(real t) {return btl*sin(27*t);}
+real zTL(real t) {return 0;}
+
+
+real xLl(real t) {return Rl*cos(27*t);}
+real yLl(real t) {return Rl*sin(27*t);}
+real zLl(real t) {return 0;}
+
+real xTt(real t) {return Rtl*cos(100*(t))/5;}
+real yTt(real t) {return Rtl*sin(100*(t))/5;}
+real zTt(real t) {return 0;}
+
+real xl(real t) {return xST(t)+xTL(t)+xLl(t);}
+real yl(real t) {return yST(t)+yTL(t)+yLl(t);}
+real zl(real t) {return 0;}
+
+real xt(real t) {return xST(t)+xTt(t);}
+real yt(real t) {return yST(t)+yTt(t);}
+real zt(real t) {return 0;}
+
+real xL(real t) {return xST(t)+xTL(t);}
+real yL(real t) {return yST(t)+yTL(t);}
+real zL(real t) {return 0;}
+
+path3 Pl=graph(xl,yl,zl,0,2*pi,1000),Pt=graph(xt,yt,zt,0,2*pi,3000),
+Pts=graph(xST,yST,zST,0,2*pi,500);
+
+picture pic;
+
+draw(pic,Pl,lightgray);
+draw(pic,Pt,lightblue);
+draw(pic,Pts,blue+dashed);
+
+draw(pic,shift(cst,0,0)*scale3(Rtl/2)*unitsphere,yellow);
+
+surface terre=scale3(Rtl/5)*unitsphere;
+surface lune=scale3(Rl)*unitsphere;
+
+int n=100;
+real step=2pi/n;
+for(int i=0; i < n; ++i) {
+ real k=i*step;
+ add(pic);
+ draw(shift(xL(k),yL(k),0)*lune,lightgray);
+ draw(shift(xST(k),yST(k),0)*terre,lightblue+lightgreen);
+ A.add();
+ erase();
+}
+
+A.movie(BBox(1mm,Fill(Black)),delay=500,
+ options="-density 288x288 -geometry 50%x");
diff --git a/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy b/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy
new file mode 100644
index 00000000000..98dfd424db8
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/embeddedmovie.asy
@@ -0,0 +1,24 @@
+// An embedded movie;
+//
+// See http://www.tug.org/tex-archive/macros/latex/contrib/movie15/README
+// for documentation of the options.
+
+import embed; // Add embedded movie
+//import external; // Add external movie (use this form under Linux).
+
+// Generated needed mpeg file if it doesn't already exist.
+asy("mpg","wheel");
+
+// Produce a pdf file.
+settings.outformat="pdf";
+
+settings.twice=true;
+
+// An embedded movie:
+label(embed("wheel.mpg","poster,text=wheel.mpg,label=wheel.mpg",20cm,5.6cm),
+ (0,0),N);
+
+// An optional button:
+label(link("wheel.mpg","Play","play"),(0,0),S);
+
+
diff --git a/Build/source/utils/asymptote/examples/animations/embeddedu3d.asy b/Build/source/utils/asymptote/examples/animations/embeddedu3d.asy
new file mode 100644
index 00000000000..1116c216fe2
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/embeddedu3d.asy
@@ -0,0 +1,6 @@
+// An embedded U3D object;
+//
+import embed;
+
+label(embed("dice.u3d","poster,text=(dice.u3d),3Droo=27,label=dice",settings.paperwidth,settings.paperheight));
+
diff --git a/Build/source/utils/asymptote/examples/animations/externalmovie.asy b/Build/source/utils/asymptote/examples/animations/externalmovie.asy
new file mode 100644
index 00000000000..77c99528307
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/externalmovie.asy
@@ -0,0 +1,17 @@
+// Embed a movie to be run in an external window.
+
+import external;
+
+// External movies require the pdflatex engine.
+settings.tex="pdflatex";
+
+// Generated needed mpeg file if it doesn't already exist.
+asy("mpg","wheel");
+
+// Produce a pdf file.
+settings.outformat="pdf";
+
+// External movie: viewable even with the Linux version of acroread.
+label(embed("wheel.mpg"),(0,0),N);
+
+label(link("wheel.mpg","Play"),(0,0),S);
diff --git a/Build/source/utils/asymptote/examples/animations/heatequation.asy b/Build/source/utils/asymptote/examples/animations/heatequation.asy
new file mode 100644
index 00000000000..3c5708e583f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/heatequation.asy
@@ -0,0 +1,76 @@
+import graph3;
+import palette;
+import animate;
+
+settings.tex="pdflatex";
+settings.render=0;
+settings.prc=false;
+unitsize(1cm);
+
+animation a;
+
+currentprojection=perspective(-20,-18,18);
+currentlight=light(1,1,10);
+
+int n=26;
+real L=2.5;
+real dx=2*L/n;
+real CFL=0.125;
+real dt=CFL*dx^2;
+
+real[][] Z=new real[n][n];
+real[][] W=new real[n][n];
+
+guide initcond1=shift((-1,-1))*scale(0.5)*unitcircle;
+guide initcond2=shift((0.5,0))*yscale(1.2)*unitcircle;
+
+real f(pair p) {return (inside(initcond1,p)||inside(initcond2,p)) ? 2 : 0;}
+
+//Initialize
+for(int i=0; i < n; ++i)
+ for (int j=0; j < n; ++j)
+ Z[i][j]=f((-L,-L)+(2*L/n)*(i,j));
+
+real f(pair t) {
+ int i=round((n/2)*(t.x/L+1));
+ int j=round((n/2)*(t.y/L+1));
+ if(i > n-1) i=n-1;
+ if(j > n-1) j=n-1;
+ return Z[i][j];
+}
+
+surface sf;
+
+void advanceZ(int iter=20) {
+ for(int k=0; k < iter; ++k) {
+ for(int i=0; i < n; ++i)
+ for(int j=0; j < n; ++j) W[i][j]=0;
+ for(int i=1; i < n-1; ++i)
+ for(int j=1; j< n-1; ++j)
+ W[i][j]=Z[i][j]+(dt/dx^2)*(Z[i+1][j]+Z[i-1][j]+Z[i][j-1]+Z[i][j+1]
+ -4*Z[i][j]);
+ for(int i=0; i < n; ++i)
+ for(int j=0; j < n; ++j)
+ Z[i][j]=W[i][j];
+ };
+}
+
+pen[] Pal=Rainbow(96);
+
+int endframe=40;
+
+for(int fr=0; fr < endframe; ++fr) {
+ if(fr == 0) {// smoothing of initial state; no Spline, but full grid
+ advanceZ(3);
+ sf=surface(f,(-L,-L),(L,L),nx=n);
+ } else // use Spline and fewer grid points to save memory
+ sf=surface(f,(-L,-L),(L,L),nx=round(n/2),Spline);
+ sf.colors(palette(sf.map(zpart),Pal[0:round(48*max(sf).z)]));
+ draw(sf);
+ a.add();
+ erase();
+ advanceZ(30);
+};
+
+label(a.pdf(delay=400,"controls,loop"));
+shipout(bbox(3mm,darkblue+3bp+miterjoin,FillDraw(fillpen=paleblue)),"pdf");
diff --git a/Build/source/utils/asymptote/examples/animations/inlinemovie.tex b/Build/source/utils/asymptote/examples/animations/inlinemovie.tex
new file mode 100644
index 00000000000..3fa61b6673b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/inlinemovie.tex
@@ -0,0 +1,51 @@
+\documentclass{article}
+\usepackage[inline]{asymptote}
+%\usepackage{asymptote}
+\usepackage{animate}
+\begin{document}
+
+Here is an inline PDF movie, generated with the commands
+\begin{verbatim}
+pdflatex inlinemovie
+asy inlinemovie
+pdflatex inlinemovie
+\end{verbatim}
+
+\begin{center}
+\begin{asy}
+import animate;
+animation A=animation("movie1");
+real h=2pi/10;
+
+picture pic;
+unitsize(pic,2cm);
+for(int i=0; i < 10; ++i) {
+ draw(pic,expi(i*h)--expi((i+1)*h));
+ A.add(pic);
+}
+label(A.pdf("controls",delay=50,keep=!settings.inlinetex));
+\end{asy}
+%Uncomment the following line when not using the [inline] package option:
+%\ASYanimategraphics[controls,loop]{20}{movie1}{}{}
+\end{center}
+
+And here is another one, clickable but without the control panel:
+\begin{center}
+\begin{asy}
+import animate;
+animation A=animation("movie2");
+real h=2pi/10;
+
+picture pic;
+unitsize(pic,2cm);
+for(int i=0; i < 10; ++i) {
+ draw(pic,expi(-i*h)--expi(-(i+1)*h),red);
+ A.add(pic);
+}
+label(A.pdf(keep=!settings.inlinetex));
+\end{asy}
+%Uncomment the following line when not using the [inline] package option:
+%\ASYanimategraphics[controls,loop]{10}{movie2}{}{}
+\end{center}
+
+\end{document}
diff --git a/Build/source/utils/asymptote/examples/animations/inlinemovie3.tex b/Build/source/utils/asymptote/examples/animations/inlinemovie3.tex
new file mode 100644
index 00000000000..c46a17d3e59
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/inlinemovie3.tex
@@ -0,0 +1,41 @@
+\documentclass{article}
+\usepackage[inline]{asymptote}
+%\usepackage{asymptote}
+\usepackage{animate}
+\begin{document}
+
+Here is an inline 3D PDF movie, generated with the commands
+\begin{verbatim}
+pdflatex inlinemovie
+asy inlinemovie
+pdflatex inlinemovie
+\end{verbatim}
+
+\begin{center}
+\begin{asy}
+settings.render=4;
+settings.prc=false;
+
+import graph3;
+import animate;
+currentprojection=orthographic(1,-2,0.5);
+currentlight=(1,1,20);
+animation A=animation("movie3");
+int n=20;
+for(int i=0; i < n; ++i) {
+ picture pic;
+ size3(pic,12cm,12cm,8cm);
+ limits((-2,-2,-2),(2,2,2));
+ real k=i/n*pi;
+ real f(pair z) {return 4cos(abs(z)-k)*exp(-abs(z)/6);}
+ draw(pic,surface(f,(-4pi,-4pi),(4pi,4pi),Spline),paleblue);
+ draw(pic,shift(i*6Z/n)*unitsphere,yellow);
+ A.add(pic);
+}
+label(A.pdf("autoplay,loop",delay=20,keep=!settings.inlinetex));
+\end{asy}
+%Uncomment the following line when not using the [inline] package option:
+%\ASYanimategraphics[autoplay,loop]{50}{movie3}{}{}
+\end{center}
+\end{document}
+
diff --git a/Build/source/utils/asymptote/examples/animations/pdfmovie.asy b/Build/source/utils/asymptote/examples/animations/pdfmovie.asy
new file mode 100644
index 00000000000..0f9cbc96445
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/pdfmovie.asy
@@ -0,0 +1,20 @@
+import animate;
+import patterns;
+
+settings.tex="pdflatex";
+
+animation a;
+
+add("brick",brick(black));
+
+int n=20;
+for(int i=0; i < 3.5n; ++i) {
+ picture pic;
+ size(pic,100);
+ path g=circle((0,sin(pi/n*i)),1);
+ fill(pic,g,mediumred);
+ fill(pic,g,pattern("brick"));
+ a.add(pic);
+}
+
+label(a.pdf("controls",multipage=false));
diff --git a/Build/source/utils/asymptote/examples/animations/slidemovies.asy b/Build/source/utils/asymptote/examples/animations/slidemovies.asy
new file mode 100644
index 00000000000..205f94fbc85
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/slidemovies.asy
@@ -0,0 +1,47 @@
+// Slide demo.
+// Command-line options to enable stepping and/or reverse video:
+// asy [-u stepping=true] [-u reverse=true] slidedemo
+
+orientation=Landscape;
+
+settings.tex="pdflatex";
+
+import slide;
+
+// Optional movie modules:
+import animate; // For portable embedded PDF movies
+access external; // For portable external movies
+access embed; // For non-portable embedded movies
+
+usersetting();
+
+titlepage("Slides with {\tt Asymptote}: Animations","John C. Bowman",
+ "University of Alberta","\today","http://asymptote.sf.net");
+
+title("Embedded PDF movies (portable)");
+animation a=animation("A");
+animation b=animation("B");
+int n=20;
+for(int i=0; i < 2n; ++i) {
+ picture pic;
+ size(pic,100);
+ draw(pic,shift(0,sin(pi/n*i))*unitsquare);
+ a.add(pic);
+ if(i < 1.5n) b.add(rotate(45)*pic);
+}
+display(a.pdf("autoplay,loop,controls",multipage=false));
+display(b.pdf("controls",multipage=false));
+
+// Generated needed files if they don't already exist.
+asy("mpg","wheel");
+
+title("External Movie (portable)");
+display(external.embed("wheel.mpg",
+ "poster,text=wheel.mpg,label=wheel.mpg",20cm,5.6cm));
+display(external.link("wheel.mpg","Play","play"));
+
+title("Embedded Movie (not portable)");
+display(embed.embed("wheel.mpg",
+ "poster,text=wheel.mpg,label=wheel.mpg",
+ 20cm,5.6cm));
+display(embed.link("wheel.mpg","Play","play"));
diff --git a/Build/source/utils/asymptote/examples/animations/sphere.asy b/Build/source/utils/asymptote/examples/animations/sphere.asy
new file mode 100644
index 00000000000..e6bcb589add
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/sphere.asy
@@ -0,0 +1,44 @@
+import solids;
+import animation;
+
+currentprojection=orthographic((0,5,2));
+currentlight=(0,5,5);
+settings.thick=false;
+
+int nbpts=200;
+real step=2*pi/nbpts;
+int angle=10;
+
+unitsize(1cm);
+
+triple[] P=new triple[nbpts];
+for(int i=0; i < nbpts; ++i) {
+ real t=-pi+i*step;
+ P[i]=(3sin(t)*cos(2t),3sin(t)*sin(2t),3cos(t));
+}
+
+transform3 t=rotate(angle,(0,0,0),(1,0.25,0.25));
+revolution r=sphere(O,3);
+draw(surface(r),lightgrey);
+skeleton s;
+r.transverse(s,reltime(r.g,0.5));
+r.longitudinal(s);
+draw(s.transverse.back,linetype("8 8",8));
+draw(s.transverse.front);
+
+animation A;
+
+for(int phi=0; phi < 360; phi += angle) {
+ bool[] front=new bool[nbpts];
+ save();
+ for(int i=0; i < nbpts; ++i) {
+ P[i]=t*P[i];
+ front[i]=dot(P[i],currentprojection.camera) > 0;
+ }
+ draw(segment(P,front,operator ..),1mm+blue+extendcap);
+ draw(segment(P,!front,operator ..),grey);
+ A.add();
+ restore();
+}
+
+A.movie(0,200);
diff --git a/Build/source/utils/asymptote/examples/animations/torusanimation.asy b/Build/source/utils/asymptote/examples/animations/torusanimation.asy
new file mode 100644
index 00000000000..9073ab2b56a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/torusanimation.asy
@@ -0,0 +1,41 @@
+import graph3;
+import animation;
+import solids;
+
+settings.tex="pdflatex";
+settings.prc=false;
+settings.render=4;
+
+currentprojection=orthographic((0,5,2));
+currentlight=(0,5,5);
+unitsize(1cm);
+
+real R=3;
+real a=1;
+int n=8;
+
+path3[] p=new path3[n];
+animation A;
+
+for(int i=0; i < n; ++i) {
+ triple g(real s) {
+ return ((R-a*cos(2*pi*s))*cos(2*pi/(1+i+s)),
+ (R-a*cos(2*pi*s))*sin(2*pi/(1+i+s)),
+ -a*sin(2*pi*s));
+ }
+ p[i]=graph(g,0,1,operator ..);
+}
+
+revolution torus=revolution(shift(R*X)*Circle(O,a,Y,32),Z);
+surface s=surface(torus);
+
+for(int i=0; i < n; ++i){
+ picture fig;
+ size3(fig,400);
+ draw(fig,s,yellow);
+ for(int j=0;j <= i; ++j)
+ draw(fig,p[j],blue+linewidth(4));
+ A.add(fig);
+}
+
+A.movie(BBox(10,Fill(rgb(0.98,0.98,0.9))),delay=100);
diff --git a/Build/source/utils/asymptote/examples/animations/wavepacket.asy b/Build/source/utils/asymptote/examples/animations/wavepacket.asy
new file mode 100644
index 00000000000..72d35e59c84
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/wavepacket.asy
@@ -0,0 +1,85 @@
+// Author : Philippe Ivaldi
+// 2006/11/10
+
+import animation;
+import graph;
+
+unitsize(x=2cm,y=1.5cm);
+
+typedef real realfcn(real);
+
+real lambda=4;
+real T=2;
+real [] k=new real[3];
+real [] w=new real[3];
+k[0]=2pi/lambda;
+w[0]=2pi/T;
+real dk=-.5;
+k[1]=k[0]-dk;
+k[2]=k[0]+dk;
+real dw=1;
+w[1]=w[0]-dw;
+w[2]=w[0]+dw;
+
+real vp=w[1]/k[1];
+real vg=dw/dk;
+
+realfcn F(real x) {
+ return new real(real t) {
+ return cos(k[1]*x-w[1]*t)+cos(k[2]*x-w[2]*t);
+ };
+};
+
+realfcn G(real x) {
+ return new real(real t) {
+ return 2*cos(0.5*(k[2]-k[1])*x+0.5*(w[1]-w[2])*t);
+ };
+};
+
+realfcn operator -(realfcn f) {return new real(real t) {return -f(t);};};
+
+animation A;
+
+real tmax=abs(2pi/dk);
+real xmax=abs(2pi/dw);
+
+pen envelope=0.8*blue;
+pen fillpen=lightgrey;
+
+int n=50;
+real step=tmax/(n-1);
+for(int i=0; i < n; ++i) {
+ save();
+ real t=i*step;
+ real a=xmax*t/tmax-xmax/pi;
+ real b=xmax*t/tmax;
+ path f=graph(F(t),a,b);
+ path g=graph(G(t),a,b);
+ path h=graph(-G(t),a,b);
+ fill(buildcycle(reverse(f),g),fillpen);
+ draw(f);
+ draw(g,envelope);
+ draw(h,envelope);
+ A.add();
+ restore();
+}
+
+for(int i=0; i < n; ++i) {
+ save();
+ real t=i*step;
+ real a=-xmax/pi;
+ real b=xmax;
+ path f=graph(F(t),a,b);
+ path g=graph(G(t),a,b);
+ path h=graph(-G(t),a,b);
+ path B=box((-xmax/pi,-2),(xmax,2));
+ fill(buildcycle(reverse(f),g,B),fillpen);
+ fill(buildcycle(f,g,reverse(B)),fillpen);
+ draw(f);
+ draw(g,envelope);
+ draw(h,envelope);
+ A.add();
+ restore();
+}
+
+A.movie(0,10);
diff --git a/Build/source/utils/asymptote/examples/animations/wheel.asy b/Build/source/utils/asymptote/examples/animations/wheel.asy
new file mode 100644
index 00000000000..2ea45f75613
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/animations/wheel.asy
@@ -0,0 +1,53 @@
+import graph;
+import animation;
+
+size(0,200);
+
+defaultpen(3);
+dotfactor=4;
+
+pair wheelpoint(real t)
+{
+ return (t+cos(t),-sin(t));
+}
+
+guide wheel(guide g=nullpath, real a, real b, int n)
+{
+ real width=(b-a)/n;
+ for(int i=0; i <= n; ++i) {
+ real t=a+width*i;
+ g=g--wheelpoint(t);
+ }
+ return g;
+}
+
+real t1=0;
+real t2=t1+2*pi;
+
+draw(circle((0,0),1));
+draw(wheel(t1,t2,100),linetype("0 2"));
+yequals(Label("$y=-1$",1.0),-1,extend=true,linetype("4 4"));
+xaxis(Label("$x$",align=3SW),0);
+yaxis("$y$",0,1.2);
+pair z1=wheelpoint(t1);
+pair z2=wheelpoint(t2);
+dot(z1);
+dot(z2);
+
+animation a;
+
+int n=10;
+real dt=(t2-t1)/n;
+for(int i=0; i <= n; ++i) {
+ save();
+
+ real t=t1+dt*i;
+ draw(circle((t,0),1),red);
+ dot(wheelpoint(t));
+
+ a.add(); // Add currentpicture to animation.
+ restore();
+}
+
+// Produce the final merged gif.
+a.movie(BBox(0.25cm),loops=10,delay=250);
diff --git a/Build/source/utils/asymptote/examples/annotation.asy b/Build/source/utils/asymptote/examples/annotation.asy
new file mode 100644
index 00000000000..d52e15b4f76
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/annotation.asy
@@ -0,0 +1,13 @@
+import annotate;
+settings.outformat="pdf";
+
+size(200);
+
+draw(unitcircle);
+dot((0,0));
+annotate("O","(0,0)",(0,0));
+annotate("A","(1,0)",(1,0));
+annotate("B","(0,1)",(0,1));
+annotate("C","(-1,0)",(-1,0));
+annotate("D","(0,-1)",(0,-1));
+
diff --git a/Build/source/utils/asymptote/examples/arrows3.asy b/Build/source/utils/asymptote/examples/arrows3.asy
new file mode 100644
index 00000000000..21121c46d18
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/arrows3.asy
@@ -0,0 +1,20 @@
+import three;
+
+size(15cm);
+
+currentprojection=perspective(24,14,13,showtarget=false,autoadjust=false);
+currentlight=light(gray(0.5),specularfactor=3,viewport=false,
+ (0.5,-0.5,-0.25),(0.5,0.5,0.25),(0.5,0.5,1),(-0.5,-0.5,-1));
+
+defaultpen(0.75mm);
+
+path3 g=arc(O,1,90,-60,90,60);
+transform3 t=shift(invert(3S,O));
+
+draw(g,blue,Arrows3(TeXHead3),currentlight);
+draw(scale3(3)*g,green,ArcArrows3(HookHead3),currentlight);
+draw(scale3(6)*g,red,Arrows3(DefaultHead3),currentlight);
+
+draw(t*g,blue,Arrows3(TeXHead2),currentlight);
+draw(t*scale3(3)*g,green,ArcArrows3(HookHead2,NoFill),currentlight);
+draw(t*scale3(6)*g,red,Arrows3(DefaultHead2(normal=Z)),currentlight);
diff --git a/Build/source/utils/asymptote/examples/buildcycle.asy b/Build/source/utils/asymptote/examples/buildcycle.asy
new file mode 100644
index 00000000000..e4e7f8c7c96
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/buildcycle.asy
@@ -0,0 +1,22 @@
+size(200);
+
+real w=1.35;
+
+path[] p;
+for(int k=0; k < 2; ++k) {
+ int i=2+2*k;
+ int ii=i^2;
+ p[k]=(w/ii,1){1,-ii}::(w/i,1/i)::(w,1/ii){ii,-1};
+}
+
+path q0=(0,0)--(w,0.5);
+path q1=(0,0)--(w,1.5);
+draw(q0); draw(p[0]); draw(q1); draw(p[1]);
+path s=buildcycle(q0,p[0],q1,p[1]);
+fill(s,mediumgrey);
+
+label("$P$",intersectionpoint(p[0],q0),N);
+label("$Q$",intersectionpoint(p[0],q1),E);
+label("$R$",intersectionpoint(p[1],q1),W);
+label("$S$",intersectionpoint(p[1],q0),S);
+label("$f > 0$",0.5*(min(s)+max(s)),UnFill);
diff --git a/Build/source/utils/asymptote/examples/cardioid.asy b/Build/source/utils/asymptote/examples/cardioid.asy
new file mode 100644
index 00000000000..49a3c55207e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cardioid.asy
@@ -0,0 +1,15 @@
+import graph;
+
+size(0,100);
+
+real f(real t) {return 1+cos(t);}
+
+path g=polargraph(f,0,2pi,operator ..)--cycle;
+filldraw(g,pink);
+
+xaxis("$x$",above=true);
+yaxis("$y$",above=true);
+
+dot("$(a,0)$",(1,0),N);
+dot("$(2a,0)$",(2,0),N+E);
+
diff --git a/Build/source/utils/asymptote/examples/centroidfg.asy b/Build/source/utils/asymptote/examples/centroidfg.asy
new file mode 100644
index 00000000000..2e26454cdbe
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/centroidfg.asy
@@ -0,0 +1,38 @@
+import graph;
+size(0,150);
+
+int a=-1, b=1;
+
+real f(real x) {return x^3-x+2;}
+real g(real x) {return x^2;}
+
+draw(graph(f,a,b,operator ..),red);
+draw(graph(g,a,b,operator ..),blue);
+
+xaxis();
+
+int n=5;
+
+real width=(b-a)/(real) n;
+for(int i=0; i <= n; ++i) {
+ real x=a+width*i;
+ draw((x,g(x))--(x,f(x)));
+}
+
+labelx("$a$",a);
+labelx("$b$",b);
+draw((a,0)--(a,g(a)),dotted);
+draw((b,0)--(b,g(b)),dotted);
+
+real m=a+0.73*(b-a);
+arrow("$f(x)$",(m,f(m)),N,red);
+arrow("$g(x)$",(m,g(m)),E,0.8cm,blue);
+
+int j=2;
+real xi=b-j*width;
+real xp=xi+width;
+real xm=0.5*(xi+xp);
+pair dot=(xm,0.5*(f(xm)+g(xm)));
+dot(dot,darkgreen+4.0);
+arrow("$\left(x,\frac{f(x)+g(x)}{2}\right)$",dot,NE,2cm,darkgreen);
+
diff --git a/Build/source/utils/asymptote/examples/cheese.asy b/Build/source/utils/asymptote/examples/cheese.asy
new file mode 100644
index 00000000000..f283f5c8115
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cheese.asy
@@ -0,0 +1,12 @@
+import graph3;
+import palette;
+import contour3;
+size(400);
+
+real f(real x, real y, real z) {
+ return cos(x)*sin(y)+cos(y)*sin(z)+cos(z)*sin(x);
+}
+
+surface sf=surface(contour3(f,(-2pi,-2pi,-2pi),(2pi,2pi,2pi),12));
+sf.colors(palette(sf.map(abs),Gradient(red,yellow)));
+draw(sf,nolight);
diff --git a/Build/source/utils/asymptote/examples/circles.asy b/Build/source/utils/asymptote/examples/circles.asy
new file mode 100644
index 00000000000..69f5cf244a4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/circles.asy
@@ -0,0 +1,33 @@
+size(6cm,0);
+import math;
+
+currentpen=magenta;
+
+real r1=1;
+real r2=sqrt(7);
+real r3=4;
+pair O=0;
+
+path c1=circle(O,r1);
+draw(c1,green);
+draw(circle(O,r2),green);
+draw(circle(O,r3),green);
+
+real x=-0.6;
+real y=-0.8;
+real yD=0.3;
+pair A=(sqrt(r1^2-y^2),y);
+pair B=(-sqrt(r2^2-y^2),y);
+pair C=(x,sqrt(r3^2-x^2));
+
+pair d=A+r2*dir(B--C);
+pair D=intersectionpoint(c1,A--d);
+
+draw(A--B--C--cycle);
+draw(interp(A,D,-0.5)--interp(A,D,1.5),blue);
+
+dot("$O$",O,S,red);
+dot("$A$",A,dir(C--A,B--A),red);
+dot("$B$",B,dir(C--B,A--B),red);
+dot("$C$",C,dir(A--C,B--C),red);
+dot("$D$",D,red);
diff --git a/Build/source/utils/asymptote/examples/coag.asy b/Build/source/utils/asymptote/examples/coag.asy
new file mode 100644
index 00000000000..de976cb145b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/coag.asy
@@ -0,0 +1,16 @@
+size(0,200);
+import graph;
+
+pair z0=(0,0);
+pair m0=(0,1);
+pair tg=(1.5,0);
+pair mt=m0+tg;
+pair tf=(3,0);
+
+draw(m0--mt{dir(-70)}..{dir(0)}2tg+m0/4);
+xtick("$T_g$",tg,N);
+label("$M(t)$",mt,2NE);
+labely("$M_0$",m0);
+
+xaxis(Label("$t$",align=2S),Arrow);
+yaxis(Arrow);
diff --git a/Build/source/utils/asymptote/examples/colorplanes.asy b/Build/source/utils/asymptote/examples/colorplanes.asy
new file mode 100644
index 00000000000..16bef25b545
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/colorplanes.asy
@@ -0,0 +1,22 @@
+size(6cm,0);
+import bsp;
+
+real u=2.5;
+real v=1;
+
+currentprojection=oblique;
+
+path3 y=plane((2u,0,0),(0,2v,0),(-u,-v,0));
+path3 l=rotate(90,Z)*rotate(90,Y)*y;
+path3 g=rotate(90,X)*rotate(90,Y)*y;
+
+face[] faces;
+pen[] p={red,green,blue,black};
+int[] edges={0,0,0,2};
+gouraudshade(faces.push(y),project(y),p,edges);
+gouraudshade(faces.push(l),project(l),p,edges);
+gouraudshade(faces.push(g),project(g),new pen[]{cyan,magenta,yellow,black},
+ edges);
+
+add(faces);
+
diff --git a/Build/source/utils/asymptote/examples/condor.asy b/Build/source/utils/asymptote/examples/condor.asy
new file mode 100644
index 00000000000..d109335e3bf
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/condor.asy
@@ -0,0 +1,32 @@
+// Peter Luschny's Condor function
+// http://www.luschny.de/math/asy/ElCondorYElGamma.html
+
+import palette;
+import graph3;
+
+size(300,300,IgnoreAspect);
+currentprojection=orthographic(0,-1,0,center=true);
+currentlight=adobe;
+real K=7;
+
+triple condor(pair t)
+{
+ real y=t.y;
+ real x=t.x*y;
+ real e=gamma(y+1);
+ real ymx=y-x;
+ real ypx=y+x;
+ real a=gamma((ymx+1)/2);
+ real b=gamma((ymx+2)/2);
+ real c=gamma((ypx+1)/2);
+ real d=gamma((ypx+2)/2);
+ real A=cos(pi*ymx);
+ real B=cos(pi*ypx);
+ return (x,y,log(e)+log(a)*((A-1)/2)+log(b)*((-A-1)/2)+log(c)*((B-1)/2)+
+ log(d)*((-B-1)/2));
+}
+
+surface s=surface(condor,(-1,0),(1,K),64);
+s.colors(palette(s.map(zpart),Rainbow()));
+
+draw(s,meshpen=black);
diff --git a/Build/source/utils/asymptote/examples/cones.asy b/Build/source/utils/asymptote/examples/cones.asy
new file mode 100644
index 00000000000..4f28796cb92
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cones.asy
@@ -0,0 +1,16 @@
+import solids;
+
+size(200);
+currentprojection=orthographic(5,4,2);
+
+revolution upcone=cone(-Z,1,1);
+revolution downcone=cone(Z,1,-1);
+draw(surface(upcone),green);
+draw(surface(downcone),green);
+draw(upcone,5,blue,longitudinalpen=nullpen);
+draw(downcone,5,blue,longitudinalpen=nullpen);
+
+revolution cone=shift(2Y-2X)*cone(1,1);
+
+draw(surface(cone),green);
+draw(cone,5,blue);
diff --git a/Build/source/utils/asymptote/examples/conicurv.asy b/Build/source/utils/asymptote/examples/conicurv.asy
new file mode 100644
index 00000000000..cb678710c11
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/conicurv.asy
@@ -0,0 +1,49 @@
+// Original name : conicurv.mp
+// Author : L. Nobre G.
+// Translators : J. Pienaar (2004) and John Bowman (2005)
+
+import three;
+texpreamble("\usepackage{bm}");
+
+size(300,0);
+
+currentprojection=perspective(10,-5,5.44);
+
+real theta=30, width=3, shortradius=2, bord=2, refsize=1, vecsize=2;
+real height=0.3, anglar=1.75, totup=3;
+real longradius=shortradius+width*Cos(theta), updiff=width*Sin(theta);
+
+triple iplow=(0,shortradius,0), iphig=(0,longradius,updiff);
+triple oplow=(-shortradius,0,0), ophig=(-longradius,0,updiff);
+triple aplow=-iplow, aphig=(0,-longradius,updiff);
+triple eplow=-oplow, ephig=(longradius,0,updiff);
+triple anglebase=(0,longradius,0), centre=interp(iplow,iphig,0.5)+(0,0,height);
+triple central=(0,0,centre.z), refo=(0,0.5*centre.y,centre.z);
+triple refx=refsize*(0,Cos(theta),Sin(theta));
+triple refy=refsize*(0,-Sin(theta),Cos(theta));
+
+draw("$\theta$",arc(iplow,iplow+0.58*(iphig-iplow),anglebase),E);
+
+draw(central,linewidth(2bp));
+draw(iplow--iphig);
+draw(oplow--ophig);
+draw(aplow--aphig);
+draw(eplow--ephig);
+draw(iphig--anglebase--aplow,dashed);
+draw(oplow--eplow,dashed);
+draw(central--centre,dashed);
+
+draw((0,0,-bord)--(0,longradius+bord,-bord)--(0,longradius+bord,totup)
+ --(0,0,totup)--cycle);
+draw(Label("$y$",1),refo--refo+refy,SW,Arrow3);
+draw(Label("$x$",1),refo--refo+refx,SE,Arrow3);
+
+draw(Label("$\vec{R}_N$",1),centre--centre+vecsize*refy,E,Arrow3);
+draw(Label("$\vec{F}_a$",1),centre--centre+vecsize*refx,N,Arrow3);
+draw(Label("$\vec{F}_c$",1),centre--centre+vecsize*Y,NE,Arrow3);
+draw(Label("$\vec{P}$",1),centre--centre-vecsize*Z,E,Arrow3);
+draw(Label("$\vec{v}$",1),centre--centre+vecsize*X,E,Arrow3);
+draw(centre,10pt+blue);
+
+draw(circle((0,0,updiff),longradius),linewidth(2bp));
+draw(circle(O,shortradius),linewidth(2bp));
diff --git a/Build/source/utils/asymptote/examples/controlsystem.asy b/Build/source/utils/asymptote/examples/controlsystem.asy
new file mode 100644
index 00000000000..0829bc90d51
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/controlsystem.asy
@@ -0,0 +1,39 @@
+size(0,4cm);
+import flowchart;
+
+block delay=roundrectangle("$e^{-sT_t}$",(0.33,0));
+block system=roundrectangle("$\frac{s+3}{s^2+0.3s+1}$",(0.6,0));
+block controller=roundrectangle("$0.06\left( 1 + \frac{1}{s}\right)$",
+ (0.45,-0.25));
+block sum1=circle("",(0.15,0),mindiameter=0.3cm);
+block junction1=circle("",(0.75,0),fillpen=currentpen);
+
+draw(delay);
+draw(system);
+draw(controller);
+draw(sum1);
+draw(junction1);
+
+add(new void(picture pic, transform t) {
+ draw(pic,Label("$u$",0.5,N),path(new pair[]{t*(0,0),sum1.left(t)},
+ Horizontal),Arrow,PenMargin);
+
+ draw(pic,path(new pair[]{sum1.right(t),delay.left(t)},Horizontal),Arrow,
+ PenMargin);
+ label(pic,"-",sum1.bottom(t),ESE);
+
+ draw(pic,path(new pair[]{delay.right(t),system.left(t)},Horizontal),Arrow,
+ PenMargin);
+
+ draw(pic,path(new pair[]{system.right(t),junction1.left(t)},Horizontal),
+ PenMargin);
+
+ draw(pic,Label("$y$",0.5,N),path(new pair[]{junction1.right(t),t*(0.9,0)},
+ Horizontal),Arrow,PenMargin);
+
+ draw(pic,path(new pair[]{junction1.bottom(t),controller.right(t)},Vertical),
+ Arrow,PenMargin);
+
+ draw(pic,path(new pair[]{controller.left(t),sum1.bottom(t)},Horizontal),
+ Arrow,PenMargin);
+ });
diff --git a/Build/source/utils/asymptote/examples/cos2theta.asy b/Build/source/utils/asymptote/examples/cos2theta.asy
new file mode 100644
index 00000000000..1be0c519fb1
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cos2theta.asy
@@ -0,0 +1,15 @@
+import graph;
+size(0,100);
+
+real f(real t) {return cos(2*t);}
+
+path g=polargraph(f,0,2pi,operator ..)--cycle;
+fill(g,green+white);
+xaxis("$x$",above=true);
+yaxis("$y$",above=true);
+draw(g);
+
+dot(Label,(1,0),NE);
+dot(Label,(0,1),NE);
+
+
diff --git a/Build/source/utils/asymptote/examples/cosaddition.asy b/Build/source/utils/asymptote/examples/cosaddition.asy
new file mode 100644
index 00000000000..f6ce8de62a4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cosaddition.asy
@@ -0,0 +1,26 @@
+size(0,200);
+import geometry;
+
+real A=130;
+real B=40;
+
+pair O=(0,0);
+pair R=(1,0);
+pair P=dir(A);
+pair Q=dir(B);
+
+draw(circle(O,1.0));
+draw(Q--O--P);
+draw(P--Q,red);
+draw(O--Q--R--cycle);
+
+draw("$A$",arc(R,O,P,0.3),blue,Arrow,PenMargin);
+draw("$B$",arc(R,O,Q,0.6),blue,Arrow,PenMargin);
+pair S=(Cos(B),0);
+draw(Q--S,blue);
+perpendicular(S,NE,blue);
+
+dot(O);
+dot("$R=(1,0)$",R);
+dot("$P=(\cos A,\sin A)$",P,dir(O--P)+W);
+dot("$Q=(\cos B,\sin B)$",Q,dir(O--Q));
diff --git a/Build/source/utils/asymptote/examples/cpkcolors.asy b/Build/source/utils/asymptote/examples/cpkcolors.asy
new file mode 100644
index 00000000000..ddc7e286d58
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cpkcolors.asy
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2003-2005 Miguel, Jmol Development, www.jmol.org
+ *
+ * Contact: miguel@jmol.org
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+string[] Element={
+ "Xx", // 0
+ "H", // 1
+ "He", // 2
+ "Li", // 3
+ "Be", // 4
+ "B", // 5
+ "C", // 6
+ "N", // 7
+ "O", // 8
+ "F", // 9
+ "Ne", // 10
+ "Na", // 11
+ "Mg", // 12
+ "Al", // 13
+ "Si", // 14
+ "P", // 15
+ "S", // 16
+ "Cl", // 17
+ "Ar", // 18
+ "K", // 19
+ "Ca", // 20
+ "Sc", // 21
+ "Ti", // 22
+ "V", // 23
+ "Cr", // 24
+ "Mn", // 25
+ "Fe", // 26
+ "Co", // 27
+ "Ni", // 28
+ "Cu", // 29
+ "Zn", // 30
+ "Ga", // 31
+ "Ge", // 32
+ "As", // 33
+ "Se", // 34
+ "Br", // 35
+ "Kr", // 36
+ "Rb", // 37
+ "Sr", // 38
+ "Y", // 39
+ "Zr", // 40
+ "Nb", // 41
+ "Mo", // 42
+ "Tc", // 43
+ "Ru", // 44
+ "Rh", // 45
+ "Pd", // 46
+ "Ag", // 47
+ "Cd", // 48
+ "In", // 49
+ "Sn", // 50
+ "Sb", // 51
+ "Te", // 52
+ "I", // 53
+ "Xe", // 54
+ "Cs", // 55
+ "Ba", // 56
+ "La", // 57
+ "Ce", // 58
+ "Pr", // 59
+ "Nd", // 60
+ "Pm", // 61
+ "Sm", // 62
+ "Eu", // 63
+ "Gd", // 64
+ "Tb", // 65
+ "Dy", // 66
+ "Ho", // 67
+ "Er", // 68
+ "Tm", // 69
+ "Yb", // 70
+ "Lu", // 71
+ "Hf", // 72
+ "Ta", // 73
+ "W", // 74
+ "Re", // 75
+ "Os", // 76
+ "Ir", // 77
+ "Pt", // 78
+ "Au", // 79
+ "Hg", // 80
+ "Tl", // 81
+ "Pb", // 82
+ "Bi", // 83
+ "Po", // 84
+ "At", // 85
+ "Rn", // 86
+ "Fr", // 87
+ "Ra", // 88
+ "Ac", // 89
+ "Th", // 90
+ "Pa", // 91
+ "U", // 92
+ "Np", // 93
+ "Pu", // 94
+ "Am", // 95
+ "Cm", // 96
+ "Bk", // 97
+ "Cf", // 98
+ "Es", // 99
+ "Fm", // 100
+ "Md", // 101
+ "No", // 102
+ "Lr", // 103
+ "Rf", // 104
+ "Db", // 105
+ "Sg", // 106
+ "Bh", // 107
+ "Hs", // 108
+ "Mt", // 109
+ /*
+ "Ds", // 110
+ "Uuu",// 111
+ "Uub",// 112
+ "Uut",// 113
+ "Uuq",// 114
+ "Uup",// 115
+ "Uuh",// 116
+ "Uus",// 117
+ "Uuo",// 118
+ */
+};
+
+// Default table of CPK atom colors
+// (ghemical colors with a few proposed modifications).
+string[] Hexcolor={
+ "FF1493", // Xx 0
+ "FFFFFF", // H 1
+ "D9FFFF", // He 2
+ "CC80FF", // Li 3
+ "C2FF00", // Be 4
+ "FFB5B5", // B 5
+ "909090", // C 6 - changed from ghemical
+ "3050F8", // N 7 - changed from ghemical
+ "FF0D0D", // O 8
+ "90E050", // F 9 - changed from ghemical
+ "B3E3F5", // Ne 10
+ "AB5CF2", // Na 11
+ "8AFF00", // Mg 12
+ "BFA6A6", // Al 13
+ "F0C8A0", // Si 14 - changed from ghemical
+ "FF8000", // P 15
+ "FFFF30", // S 16
+ "1FF01F", // Cl 17
+ "80D1E3", // Ar 18
+ "8F40D4", // K 19
+ "3DFF00", // Ca 20
+ "E6E6E6", // Sc 21
+ "BFC2C7", // Ti 22
+ "A6A6AB", // V 23
+ "8A99C7", // Cr 24
+ "9C7AC7", // Mn 25
+ "E06633", // Fe 26 - changed from ghemical
+ "F090A0", // Co 27 - changed from ghemical
+ "50D050", // Ni 28 - changed from ghemical
+ "C88033", // Cu 29 - changed from ghemical
+ "7D80B0", // Zn 30
+ "C28F8F", // Ga 31
+ "668F8F", // Ge 32
+ "BD80E3", // As 33
+ "FFA100", // Se 34
+ "A62929", // Br 35
+ "5CB8D1", // Kr 36
+ "702EB0", // Rb 37
+ "00FF00", // Sr 38
+ "94FFFF", // Y 39
+ "94E0E0", // Zr 40
+ "73C2C9", // Nb 41
+ "54B5B5", // Mo 42
+ "3B9E9E", // Tc 43
+ "248F8F", // Ru 44
+ "0A7D8C", // Rh 45
+ "006985", // Pd 46
+ "C0C0C0", // Ag 47 - changed from ghemical
+ "FFD98F", // Cd 48
+ "A67573", // In 49
+ "668080", // Sn 50
+ "9E63B5", // Sb 51
+ "D47A00", // Te 52
+ "940094", // I 53
+ "429EB0", // Xe 54
+ "57178F", // Cs 55
+ "00C900", // Ba 56
+ "70D4FF", // La 57
+ "FFFFC7", // Ce 58
+ "D9FFC7", // Pr 59
+ "C7FFC7", // Nd 60
+ "A3FFC7", // Pm 61
+ "8FFFC7", // Sm 62
+ "61FFC7", // Eu 63
+ "45FFC7", // Gd 64
+ "30FFC7", // Tb 65
+ "1FFFC7", // Dy 66
+ "00FF9C", // Ho 67
+ "00E675", // Er 68
+ "00D452", // Tm 69
+ "00BF38", // Yb 70
+ "00AB24", // Lu 71
+ "4DC2FF", // Hf 72
+ "4DA6FF", // Ta 73
+ "2194D6", // W 74
+ "267DAB", // Re 75
+ "266696", // Os 76
+ "175487", // Ir 77
+ "D0D0E0", // Pt 78 - changed from ghemical
+ "FFD123", // Au 79 - changed from ghemical
+ "B8B8D0", // Hg 80 - changed from ghemical
+ "A6544D", // Tl 81
+ "575961", // Pb 82
+ "9E4FB5", // Bi 83
+ "AB5C00", // Po 84
+ "754F45", // At 85
+ "428296", // Rn 86
+ "420066", // Fr 87
+ "007D00", // Ra 88
+ "70ABFA", // Ac 89
+ "00BAFF", // Th 90
+ "00A1FF", // Pa 91
+ "008FFF", // U 92
+ "0080FF", // Np 93
+ "006BFF", // Pu 94
+ "545CF2", // Am 95
+ "785CE3", // Cm 96
+ "8A4FE3", // Bk 97
+ "A136D4", // Cf 98
+ "B31FD4", // Es 99
+ "B31FBA", // Fm 100
+ "B30DA6", // Md 101
+ "BD0D87", // No 102
+ "C70066", // Lr 103
+ "CC0059", // Rf 104
+ "D1004F", // Db 105
+ "D90045", // Sg 106
+ "E00038", // Bh 107
+ "E6002E", // Hs 108
+ "EB0026" // Mt 109
+};
+
+
diff --git a/Build/source/utils/asymptote/examples/curvedlabel.asy b/Build/source/utils/asymptote/examples/curvedlabel.asy
new file mode 100644
index 00000000000..2ff4c6c34ec
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/curvedlabel.asy
@@ -0,0 +1,4 @@
+size(200);
+import labelpath;
+labelpath("This is a test of curved labels in Asymptote (implemented with the {\tt PSTricks pstextpath} macro).",reverse(rotate(-90)*unitcircle));
+
diff --git a/Build/source/utils/asymptote/examples/curvedlabel3.asy b/Build/source/utils/asymptote/examples/curvedlabel3.asy
new file mode 100644
index 00000000000..5bee2342d83
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/curvedlabel3.asy
@@ -0,0 +1,17 @@
+size(200);
+import labelpath3;
+
+path3 g=(1,0,0)..(0,1,1)..(-1,0,0)..(0,-1,1)..cycle;
+path3 g2=shift(-Z)*reverse(unitcircle3);
+
+string txt1="\hbox{This is a test of \emph{curved} 3D labels in
+\textbf{Asymptote} (implemented with {\tt texpath}).}";
+
+string txt2="This is a test of curved labels in Asymptote\\(implemented
+without the {\tt PSTricks pstextpath} macro).";
+
+draw(surface(g),paleblue+opacity(0.5));
+draw(labelpath(txt1,subpath(g,0,reltime(g,0.95)),angle=-90),orange);
+
+draw(g2,1bp+red);
+draw(labelpath(txt2,subpath(g2,0,3.9),angle=180,optional=rotate(-70,X)*Z));
diff --git a/Build/source/utils/asymptote/examples/cyclohexane.asy b/Build/source/utils/asymptote/examples/cyclohexane.asy
new file mode 100644
index 00000000000..d0121d8ea7e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cyclohexane.asy
@@ -0,0 +1,73 @@
+import three;
+
+currentprojection = perspective(300,-650,500);
+
+surface carbon = scale3(70)*unitsphere; // 70 pm
+surface hydrogen = scale3(25)*unitsphere; // 25 pm
+
+real alpha = 90+aSin(1/3);
+
+real CCbond = 156; // 156 pm
+real CHbond = 110; // 110 pm
+
+triple c1 = (0,0,0);
+triple h1 = c1+CHbond*Z;
+triple c2 = rotate(alpha,c1,c1+Y)*(CCbond*Z);
+triple h2 = rotate(120,c1,c2)*h1;
+triple h3 = c2-CHbond*Z;
+triple h4 = rotate(120,c2,c1)*h3;
+
+triple c3 = rotate(120,c2,h3)*c1;
+triple h5 = c3+CHbond*Z;
+triple h6 = rotate(-120,c3,c2)*h5;
+
+triple c4 = rotate(-120,c3,h5)*c2;
+triple h7 = c4-CHbond*Z;
+triple h8 = rotate(120,c4,c3)*h7;
+
+triple c5 = rotate(120,c4,h7)*c3;
+triple h9 = c5+CHbond*Z;
+triple h10 = rotate(-120,c5,c4)*h9;
+
+triple c6 = rotate(-120,c5,h9)*c4;
+triple h11 = c6-CHbond*Z;
+triple h12 = rotate(120,c6,c5)*h11;
+
+draw(shift(c1)*carbon,black);
+draw(shift(c2)*carbon,black);
+draw(shift(c3)*carbon,black);
+draw(shift(c4)*carbon,black);
+draw(shift(c5)*carbon,black);
+draw(shift(c6)*carbon,black);
+
+
+draw(shift(h1)*hydrogen,lightgray);
+draw(shift(h2)*hydrogen,lightgray);
+draw(shift(h3)*hydrogen,lightgray);
+draw(shift(h4)*hydrogen,lightgray);
+draw(shift(h5)*hydrogen,lightgray);
+draw(shift(h6)*hydrogen,lightgray);
+draw(shift(h7)*hydrogen,lightgray);
+draw(shift(h8)*hydrogen,lightgray);
+draw(shift(h9)*hydrogen,lightgray);
+draw(shift(h10)*hydrogen,lightgray);
+draw(shift(h11)*hydrogen,lightgray);
+draw(shift(h12)*hydrogen,lightgray);
+
+
+pen thick = linewidth(10);
+
+draw(c1--c2--c3--c4--c5--c6--cycle,thick);
+
+draw(c1--h1,thick);
+draw(c1--h2,thick);
+draw(c2--h3,thick);
+draw(c2--h4,thick);
+draw(c3--h5,thick);
+draw(c3--h6,thick);
+draw(c4--h7,thick);
+draw(c4--h8,thick);
+draw(c5--h9,thick);
+draw(c5--h10,thick);
+draw(c6--h11,thick);
+draw(c6--h12,thick);
diff --git a/Build/source/utils/asymptote/examples/cylinder.asy b/Build/source/utils/asymptote/examples/cylinder.asy
new file mode 100644
index 00000000000..c574f577bbd
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/cylinder.asy
@@ -0,0 +1,7 @@
+import solids;
+
+size(0,100);
+
+revolution r=cylinder(O,1,1.5,Y+Z);
+draw(surface(r),green);
+draw(r,blue);
diff --git a/Build/source/utils/asymptote/examples/delu.asy b/Build/source/utils/asymptote/examples/delu.asy
new file mode 100644
index 00000000000..7f9853eb51c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/delu.asy
@@ -0,0 +1,29 @@
+size(7cm,0);
+
+pair z1=(1,-0.25);
+pair v1=dir(45);
+pair z2=-z1;
+pair v2=0.75*dir(260);
+pair z3=(z1.x,-3);
+
+// A centered random number
+real crand() {return unitrand()-0.5;}
+
+guide g;
+pair lastz;
+for(int i=0; i < 60; ++i) {
+ pair z=0.75*lastz+(crand(),crand());
+ g=g..2.5*z;
+ lastz=z;
+}
+g=shift(0,-.5)*g..cycle;
+
+draw(g,gray(0.7));
+
+draw("$r$",z1--z2,RightSide,red,Arrows,DotMargins);
+draw(z1--z1+v1,Arrow);
+draw(z2--z2+v2,Arrow);
+draw(z3--z3+v1-v2,green,Arrow);
+
+dot("1",z1,S,blue);
+dot("2",z2,NW,blue);
diff --git a/Build/source/utils/asymptote/examples/dimension.asy b/Build/source/utils/asymptote/examples/dimension.asy
new file mode 100644
index 00000000000..1244ba84e68
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/dimension.asy
@@ -0,0 +1,23 @@
+size(12cm,0);
+
+void distance(picture pic=currentpicture, pair A, pair B, Label L="", real n=0,
+ pen p=currentpen)
+{
+ real d=3mm;
+ path g=A--B;
+ transform T=shift(-n*d*unit(B-A)*I);
+ pic.add(new void(frame f, transform t) {
+ picture opic;
+ path G=T*t*g;
+ draw(opic,Label(L,Center,UnFill(1)),G,p,Arrows(NoFill),Bars,PenMargins);
+ add(f,opic.fit());
+ });
+ pic.addBox(min(g),max(g),T*min(p),T*max(p));
+}
+
+pair A=(0,0), B=(3,3);
+
+dot(A);
+dot(B);
+
+distance(A,B,"$\ell$",1);
diff --git a/Build/source/utils/asymptote/examples/dragon.asy b/Build/source/utils/asymptote/examples/dragon.asy
new file mode 100644
index 00000000000..08fcb61f5c0
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/dragon.asy
@@ -0,0 +1,66 @@
+pair crease(pair z1, pair z2, bool left)
+{
+ pair dz = z2 - z1;
+
+ if (left)
+ return z1 + dz * (0.5, 0.5);
+ else
+ return z1 + dz * (0.5, -0.5);
+}
+
+pair[] fold(pair[] oldz)
+{
+ int n = oldz.length;
+ pair[] newz = new pair[2n-1];
+
+ for (int i = 0; i < n-1; ++i)
+ {
+ newz[2i] = oldz[i];
+ newz[2i+1] = crease(oldz[i], oldz[i+1], i%2==0);
+ }
+
+ newz[2(n-1)] = oldz[n-1];
+
+ return newz;
+}
+
+pair[] dragon(int n, pair[] base={})
+{
+ if (base.length == 0)
+ if (n%2 == 0)
+ base = new pair[] {(0,0), (1,1) };
+ else
+ base = new pair[] {(0,0), (1,0) };
+
+ pair[] z = base;
+
+ for (int i = 1; i < n; ++i)
+ z = fold(z);
+
+ return z;
+}
+
+void drawtris(pair[] z, pen p = currentpen)
+{
+ int n = z.length;
+
+ for (int i = 0; i < n-2; i+=2)
+ fill(z[i]--z[i+1]--z[i+2]--cycle, p);
+}
+
+void drawtris(pair[] z, pen p1, pen p2)
+{
+ int n = z.length;
+
+ for (int i = 0; i < n-2; i+=2)
+ fill(z[i]--z[i+1]--z[i+2]--cycle, 2i < n-1 ? p1 : p2);
+}
+
+size(500,0);
+
+int n = 10;
+
+drawtris(dragon(n, new pair[] {(0,0), (1,0)}), black);
+drawtris(dragon(n, new pair[] {(0,0), (0,-1)}), blue);
+drawtris(dragon(n, new pair[] {(0,0), (-1,0)}), red);
+drawtris(dragon(n, new pair[] {(0,0), (0,1)}), green);
diff --git a/Build/source/utils/asymptote/examples/electromagnetic.asy b/Build/source/utils/asymptote/examples/electromagnetic.asy
new file mode 100644
index 00000000000..058c7c5c574
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/electromagnetic.asy
@@ -0,0 +1,47 @@
+import graph;
+import palette;
+texpreamble("\usepackage[amssymb,thinqspace,thinspace]{SIunits}");
+
+size(800,200);
+
+real c=3e8;
+real nm=1e-9;
+real freq(real lambda) {return c/(lambda*nm);}
+real lambda(real f) {return c/(f*nm);}
+
+real fmin=10;
+real fmax=1e23;
+
+scale(Log(true),Linear(true));
+xlimits(fmin,fmax);
+ylimits(0,1);
+
+real uv=freq(400);
+real ir=freq(700);
+
+bounds visible=bounds(Scale(uv).x,Scale(ir).x);
+palette(visible,uv,ir+(0,2),Bottom,Rainbow(),invisible);
+
+xaxis(Label("\hertz",1),Bottom,RightTicks,above=true);
+
+real log10Left(real x) {return -log10(x);}
+real pow10Left(real x) {return pow10(-x);}
+
+scaleT LogLeft=scaleT(log10Left,pow10Left,logarithmic=true);
+
+picture q=secondaryX(new void(picture p) {
+ scale(p,LogLeft,Linear);
+ xlimits(p,lambda(fmax),lambda(fmin));
+ ylimits(p,0,1);
+ xaxis(p,Label("\nano\metre",1),Top,LeftTicks(DefaultLogFormat,n=10));
+ });
+
+add(q,above=true);
+
+margin margin=PenMargin(0,0);
+draw("radio",Scale((10,1))--Scale((5e12,1)),N,Arrow);
+draw("infrared",Scale((1e12,1.5))--Scale(shift(0,1.5)*ir),Arrows,margin);
+draw("UV",Scale(shift(0,1.5)*uv)--Scale((1e17,1.5)),Arrows,margin);
+draw("x-rays",Scale((1e16,1))--Scale((1e21,1)),N,Arrows);
+draw("$\gamma$-rays",Scale((fmax,1.5))--Scale((2e18,1.5)),Arrow);
+
diff --git a/Build/source/utils/asymptote/examples/elevation.asy b/Build/source/utils/asymptote/examples/elevation.asy
new file mode 100644
index 00000000000..4e4579d98a9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/elevation.asy
@@ -0,0 +1,15 @@
+import graph3;
+import grid3;
+import palette;
+
+currentprojection=orthographic(0.8,1,1);
+
+size(400,300,IgnoreAspect);
+
+real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
+
+surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
+
+draw(s,mean(palette(s.map(zpart),Rainbow())),black);
+
+grid3(XYZgrid);
diff --git a/Build/source/utils/asymptote/examples/epix.asy b/Build/source/utils/asymptote/examples/epix.asy
new file mode 100644
index 00000000000..df0cd3d336c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/epix.asy
@@ -0,0 +1,14 @@
+import graph3;
+
+size(200,200,IgnoreAspect);
+
+currentprojection=perspective(4,2,3);
+
+real f(pair z) {return z.y^3/2-3z.x^2*z.y;}
+
+draw(surface(f,(-1,-1),(1,1),nx=10,Spline),green);
+draw(Label("$y$",1),(0,0,0)--(0,2,0),red,Arrow3);
+
+draw(Label("$x$",1),(0,0,0)--(2,0,0),red,Arrow3);
+draw(Label("$z$",1),(0,0,0)--(0,0,2.5),red,Arrow3);
+label("$z=\frac{1}{2}y^3-3x^2y$",(1,1,1),NE);
diff --git a/Build/source/utils/asymptote/examples/equilateral.asy b/Build/source/utils/asymptote/examples/equilateral.asy
new file mode 100644
index 00000000000..d68e0d02225
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/equilateral.asy
@@ -0,0 +1,12 @@
+size(10cm,0);
+import math;
+
+pair b=(0,0), c=(1,0);
+pair a=extension(b,b+dir(60),c,c+dir(120));
+pair d=extension(b,b+dir(30),a,a+dir(270));
+
+draw(a--b--c--a--d--b^^d--c);
+label("$A$",a,N);
+label("$B$",b,W);
+label("$C$",c,E);
+label("$D$",d,S);
diff --git a/Build/source/utils/asymptote/examples/equilchord.asy b/Build/source/utils/asymptote/examples/equilchord.asy
new file mode 100644
index 00000000000..ae3665b1a66
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/equilchord.asy
@@ -0,0 +1,21 @@
+import graph3;
+
+size(0,150);
+currentprojection=perspective(5,-4,6);
+currentlight=(-1,-1,2);
+real t=0.5;
+
+real F(pair z) {
+ return (z.x^2+z.y^2 <= 1) ? sqrt(3)*(sqrt(1-z.x^2)-abs(z.y)) : 0;
+}
+
+real a=1.5;
+draw((-a,-a,0)--(-a,a,0)--(a,a,0)--(a,-a,0)--cycle,lightgray);
+
+xaxis3(Label("$x$",1),red,Arrow3);
+yaxis3(Label("$y$",1),red,Arrow3);
+draw(circle((0,0,0),1),dashed);
+draw(surface(F,(-1,-1),(t,1),20,monotonic),green,black);
+real y=sqrt(1-t^2);
+draw((t,y,0)--(t,-y,0)--(t,0,sqrt(3)*y)--cycle,blue);
+label("$1$",(1,0,0),-Y+X);
diff --git a/Build/source/utils/asymptote/examples/extrudedcontour.asy b/Build/source/utils/asymptote/examples/extrudedcontour.asy
new file mode 100644
index 00000000000..b5ad885a350
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/extrudedcontour.asy
@@ -0,0 +1,22 @@
+import contour;
+import palette;
+import graph3;
+currentprojection=orthographic(25,10,10);
+size(0,12cm);
+real a=3;
+real b=4;
+real f(pair z) {return (z.x+z.y)/(2+cos(z.x)*sin(z.y));}
+guide[][] g=contour(f,(-10,-10),(10,10),new real[]{8},150);
+
+for(guide p:g[0]){
+ draw(extrude(p,8Z),palered);
+ draw(path3(p),red+2pt);
+}
+
+draw(lift(f,g),red+2pt);
+
+surface s=surface(f,(0,0),(10,10),20,Spline);
+s.colors(palette(s.map(zpart),Rainbow()+opacity(0.5)));
+draw(s);
+axes3("$x$","$y$","$z$",Arrow3);
+
diff --git a/Build/source/utils/asymptote/examples/fano.asy b/Build/source/utils/asymptote/examples/fano.asy
new file mode 100644
index 00000000000..12286d7006e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fano.asy
@@ -0,0 +1,28 @@
+import math;
+
+size(100,0);
+
+pair z4=(0,0);
+pair z7=(2,0);
+pair z1=point(rotate(60)*(z4--z7),1);
+
+pair z5=interp(z4,z7,0.5);
+pair z3=interp(z7,z1,0.5);
+pair z2=interp(z1,z4,0.5);
+pair z6=extension(z4,z3,z7,z2);
+
+draw(z4--z7--z1--cycle);
+draw(z4--z3);
+draw(z7--z2);
+draw(z1--z5);
+draw(circle(z6,abs(z3-z6)));
+
+label("1",z1,dir(z5--z1));
+label("2",z2,dir(z7--z2));
+label("3",z3,dir(z4--z3));
+label("4",z4,dir(z3--z4));
+label("5",z5,dir(z1--z5));
+label("6",z6,2.5E+0.1*N);
+label("7",z7,dir(z2--z7));
+
+
diff --git a/Build/source/utils/asymptote/examples/fermi.asy b/Build/source/utils/asymptote/examples/fermi.asy
new file mode 100644
index 00000000000..c74da952ab2
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fermi.asy
@@ -0,0 +1,40 @@
+import feynman;
+
+// set default line width to 0.8bp
+currentpen = linewidth(0.8);
+
+// scale all other defaults of the feynman module appropriately
+fmdefaults();
+
+// disable middle arrows
+currentarrow = None;
+
+// define vertex and external points
+
+pair xu = (-40,+45);
+pair xl = (-40,-45);
+pair yu = (+40,+45);
+pair yl = (+40,-45);
+
+pair zu = ( 0,+ 5);
+pair zl = ( 0,- 5);
+
+// define mid points
+
+pair mxu = (xu+zu)/2;
+pair mxl = (xl+zl)/2;
+pair myu = (yu+zu)/2;
+pair myl = (yl+zl)/2;
+
+// draw fermion lines
+drawFermion(xu--zu--yu);
+drawFermion(xl--zl--yl);
+
+// draw vertices
+drawVertexOX(zu);
+drawVertexOX(zl);
+
+// draw gluon. Note that the underlying fermion line is blotted out.
+drawGluon(arc((0,0),mxu,myl,CW));
+
+// shipout
diff --git a/Build/source/utils/asymptote/examples/filesurface.asy b/Build/source/utils/asymptote/examples/filesurface.asy
new file mode 100644
index 00000000000..42275715a0b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/filesurface.asy
@@ -0,0 +1,34 @@
+import graph3;
+import palette;
+
+size3(200,IgnoreAspect);
+
+file in=line(input("filesurface.dat"));
+real[] x=in;
+real[] y=in;
+
+real[][] f=dimension(in,0,0);
+
+triple f(pair t) {
+ int i=round(t.x);
+ int j=round(t.y);
+ return (x[i],y[j],f[i][j]);
+}
+
+surface s=surface(f,(0,0),(x.length-1,y.length-1),x.length-1,y.length-1);
+real[] level=uniform(min(f)*(1-sqrtEpsilon),max(f)*(1+sqrtEpsilon),4);
+
+s.colors(palette(s.map(new real(triple v) {return find(level >= v.z);}),
+ Rainbow()));
+
+draw(s,meshpen=thick());
+
+triple m=currentpicture.userMin;
+triple M=currentpicture.userMax;
+triple target=0.5*(m+M);
+currentprojection=perspective(camera=target+realmult(dir(68,225),M-m),
+ target=target);
+
+xaxis3("$x$",Bounds(),InTicks);
+yaxis3("$y$",Bounds(),InTicks(Step=1,step=0.1));
+zaxis3("$z$",Bounds(),InTicks);
diff --git a/Build/source/utils/asymptote/examples/filesurface.dat b/Build/source/utils/asymptote/examples/filesurface.dat
new file mode 100644
index 00000000000..16d5966f6be
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/filesurface.dat
@@ -0,0 +1,12 @@
+1 12 24 36 60 84 120 180 240 360
+2005 2005.083333 2005.166667 2005.25 2005.333333 2005.416667 2005.5 2005.583333 2005.666667 2005.75 2005.833333 2005.916667 2006 2006.083333 2006.166667 2006.25 2006.333333 2006.416667 2006.5 2006.583333 2006.666667 2006.75 2006.833333 2006.916667 2007 2007.083333 2007.166667 2007.25 2007.333333 2007.416667 2007.5 2007.583333 2007.666667 2007.75 2007.833333 2007.916667 2008 2008.083333 2008.166667 2008.25 2008.333333 2008.416667 2008.5 2008.583333 2008.666667 2008.75 2008.833333 2008.916667
+2.111 2.1039 2.103 2.1047 2.1041 2.1039 2.1064 2.1126 2.1152 2.1209 2.2225 2.4112 2.3885 2.4586 2.6333 2.6489 2.6926 2.8691 2.9389 3.0941 3.1572 3.3501 3.4214 3.64 3.6159 3.6511 3.8439 3.859 3.9194 4.0982 4.105 4.3081 4.4339 4.2355 4.216 4.7114 4.1973 4.1821 4.3046 4.3691 4.3874 4.4724 4.4716 4.4875 4.6599 4.8313 3.8433 2.9929
+2.223809524 2.228 2.246190476 2.165238095 2.092727273 1.997272727 2.07185 2.14 2.128636364 2.327619048 2.577272727 2.67 2.717727273 2.793 2.978695652 3.094210526 3.175 3.271363636 3.415238095 3.489565217 3.573333333 3.664090909 3.723636364 3.773157895 3.914090909 3.9605 3.982727273 4.132105263 4.254545455 4.398095238 4.44 4.228695652 4.088 4.09 4.044090909 4.0855 3.870909091 3.631904762 3.711052632 3.955909091 4.141428571 4.562380952 4.575217391 4.36952381 4.210909091 2.93173913 2.3795 2.007727273
+2.431904762 2.4595 2.517142857 2.367619048 2.237272727 2.077727273 2.18235 2.253913043 2.222727273 2.484761905 2.743636364 2.804285714 2.862272727 2.968 3.192173913 3.343157895 3.381818182 3.462727273 3.574285714 3.575652174 3.602380952 3.657272727 3.677727273 3.744210526 3.926818182 3.954 3.922272727 4.105263158 4.255454545 4.464285714 4.475 4.183478261 4.0595 4.090434783 3.898636364 3.9975 3.68 3.334761905 3.402105263 3.781818182 4.07047619 4.624761905 4.542608696 4.178095238 4.008636364 3.151304348 2.641 2.375
+2.638095238 2.6685 2.735714286 2.562380952 2.416818182 2.241363636 2.33035 2.400869565 2.340454545 2.60952381 2.865454545 2.895238095 2.949545455 3.0775 3.297826087 3.477368421 3.521363636 3.589545455 3.685714286 3.640434783 3.614761905 3.674545455 3.668636364 3.742631579 3.938636364 3.9625 3.91 4.106842105 4.258636364 4.496666667 4.496818182 4.210869565 4.0975 4.138695652 3.933181818 4.027 3.719090909 3.413809524 3.434210526 3.818636364 4.071428571 4.622380952 4.56826087 4.157619048 3.993181818 3.358695652 2.8285 2.594090909
+2.996190476 3.015 3.124761905 2.920952381 2.753181818 2.581818182 2.6606 2.710869565 2.595 2.829047619 3.082272727 3.056190476 3.080909091 3.2445 3.45173913 3.664736842 3.703181818 3.74 3.82047619 3.726956522 3.655714286 3.712727273 3.669090909 3.753157895 3.970454545 4.0055 3.914090909 4.126315789 4.273181818 4.538095238 4.537727273 4.25826087 4.1655 4.210869565 3.982727273 4.1085 3.829545455 3.600952381 3.591578947 3.941363636 4.137619048 4.65952381 4.622173913 4.201428571 4.126363636 3.774782609 3.2075 2.983181818
+3.265714286 3.2665 3.405238095 3.21 3.04 2.87 2.9277 2.959565217 2.819545455 3.021428571 3.238636364 3.144761905 3.143636364 3.3225 3.536086957 3.798421053 3.85 3.867727273 3.91047619 3.803043478 3.706666667 3.757727273 3.700454545 3.775263158 4.003181818 4.037368421 3.938181818 4.156315789 4.288636364 4.566190476 4.546363636 4.31173913 4.23 4.27 4.076818182 4.185 3.949545455 3.793333333 3.730526316 4.043636364 4.219047619 4.636190476 4.62173913 4.258095238 4.190454545 3.967826087 3.53 3.192272727
+3.593809524 3.5845 3.745238095 3.543333333 3.381363636 3.209545455 3.249 3.282173913 3.122272727 3.285714286 3.488181818 3.380952381 3.344545455 3.497 3.674347826 3.935789474 4.004090909 4.004545455 4.029047619 3.906956522 3.778095238 3.817272727 3.75 3.811052632 4.055909091 4.091 3.99 4.203157895 4.330454545 4.614285714 4.590454545 4.393913043 4.344 4.397391304 4.234545455 4.346 4.165 4.105238095 4.044210526 4.252727273 4.398571429 4.718571429 4.705217391 4.407142857 4.379090909 4.255652174 3.998 3.514545455
+3.78952381 3.7435 3.9255 3.75 3.582272727 3.451363636 3.50775 3.513913043 3.359545455 3.494761905 3.665909091 3.551428571 3.504545455 3.6535 3.812608696 4.098421053 4.167272727 4.175909091 4.186666667 4.056086957 3.908571429 3.916363636 3.824545455 3.882105263 4.12 4.162 4.089090909 4.306315789 4.423181818 4.699047619 4.661818182 4.504782609 4.4985 4.519565217 4.402272727 4.5115 4.382727273 4.366666667 4.336842105 4.509545455 4.613809524 4.861428571 4.877391304 4.636666667 4.659545455 4.482173913 4.2535 3.744545455
+3.99 3.9085 4.098571429 3.944285714 3.771363636 3.609090909 3.6536 3.640869565 3.488181818 3.604761905 3.755454545 3.634285714 3.565909091 3.7165 3.866521739 4.151052632 4.235454545 4.235909091 4.249047619 4.116086957 3.961904762 3.953333333 3.855714286 3.92 4.153636364 4.1985 4.139090909 4.365789474 4.471818182 4.747142857 4.695454545 4.55 4.572 4.590434783 4.500909091 4.602 4.504090909 4.513809524 4.521052632 4.656818182 4.733809524 4.899047619 4.935652174 4.746190476 4.776818182 4.598695652 4.4835 3.900454545
+4.137142857 4.0305 4.213333333 4.08 3.902727273 3.739090909 3.774285714 3.757391304 3.598181818 3.706190476 3.842272727 3.712 3.629545455 3.771 3.919565217 4.231111111 4.295909091 4.306818182 4.31 4.170434783 4.000952381 3.99 3.881818182 3.943684211 4.176818182 4.2195 4.163636364 4.387368421 4.480454545 4.758095238 4.710454545 4.559565217 4.595 4.612173913 4.544090909 4.64 4.57 4.58 4.614736842 4.702727273 4.768571429 4.884761905 4.905652174 4.741904762 4.775454545 4.496521739 4.3585 3.738636364
diff --git a/Build/source/utils/asymptote/examples/fillcontour.asy b/Build/source/utils/asymptote/examples/fillcontour.asy
new file mode 100644
index 00000000000..1b93e002fff
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fillcontour.asy
@@ -0,0 +1,29 @@
+import graph;
+import palette;
+import contour;
+
+size(12cm,IgnoreAspect);
+
+pair a=(pi/2,0);
+pair b=(1.5*pi+epsilon,2pi);
+
+real f(real x, real y) {return cos(x)*sin(y);}
+
+int N=100;
+int Divs=10;
+
+defaultpen(1bp);
+
+bounds range=bounds(-1,1);
+
+real[] Cvals=uniform(range.min,range.max,Divs);
+guide[][] g=contour(f,a,b,Cvals,N,operator --);
+
+pen[] Palette=quantize(Rainbow(),Divs);
+
+pen[][] interior=interior(g,extend(Palette,grey,black));
+fill(g,interior);
+draw(g);
+
+palette("$f(x,y)$",range,point(SE)+(0.5,0),point(NE)+(1,0),Right,Palette,
+ PaletteTicks("$%+#0.1f$",N=Divs));
diff --git a/Build/source/utils/asymptote/examples/fin.asy b/Build/source/utils/asymptote/examples/fin.asy
new file mode 100644
index 00000000000..8fe88f3dc0e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fin.asy
@@ -0,0 +1,152 @@
+import three;
+import palette;
+
+int N = 26;
+real[] C = array(N,0);
+real[][] A = new real[N][N];
+for(int i = 0; i < N; ++i)
+ for(int j = 0; j < N; ++j)
+ A[i][j] = 0;
+
+real Tb = 100; // deg C
+real h = 240; // 240 W/m^2 K
+real k = 240; // W/m K
+real Tinf = 20; // deg C
+real L = 12; // cm
+real t = 2; // cm
+
+real delta = 0.01; // 1 cm = 0.01 m
+
+// (1,2)-(2,2)-(3,2)-...-(13,2)
+// | | | |
+// (1,1)-(2,1)-(3,1)-...-(13,1)
+//
+// |
+// \ /
+// V
+//
+// 13-14-15-...-24-25
+// | | | ... | |
+// 0- 1- 2-...-11-12
+
+// but, note zero-based array indexing, so counting starts at 0
+int indexof(int m, int n)
+{
+ return 13(n-1)+m-1;
+}
+
+int i = 0;
+
+// fixed temperature bottom left
+A[i][indexof(1,1)] = 1; C[i] = Tb;
+++i;
+// fixed temperature middle left
+A[i][indexof(1,2)] = 1; C[i] = Tb;
+++i;
+
+// interior nodes
+for(int m = 2; m<13; ++m)
+{
+ A[i][indexof(m,2)] = -4;
+ A[i][indexof(m-1,2)] = A[i][indexof(m+1,2)] = 1;
+ A[i][indexof(m,1)] = 2;
+ C[i] = 0;
+ ++i;
+}
+
+// convective bottom side nodes
+for(int m = 2; m<13; ++m)
+{
+ A[i][indexof(m,1)] = -(2+h*delta/k);
+ A[i][indexof(m-1,1)] = A[i][indexof(m+1,1)] = 0.5;
+ A[i][indexof(m,2)] = 1;
+ C[i] = -h*delta*Tinf/k;
+ ++i;
+}
+
+// convective bottom right corner node
+A[i][indexof(13,2)] = A[i][indexof(12,1)] = 0.5;
+A[i][indexof(13,1)] = -(1+h*delta/k);
+C[i] = -h*delta*Tinf/k;
+++i;
+
+// convective middle right side node
+A[i][indexof(13,2)] = -(2+h*delta/k);
+A[i][indexof(13,1)] = 1;
+A[i][indexof(12,2)] = 1;
+C[i] = -h*delta*Tinf/k;
+++i;
+
+real[] T = solve(A,C);
+
+pen[] Palette = Gradient(256,blue,cyan,yellow,orange,red);
+
+real[][] T = {T[0:13],T[13:26],T[0:13]};
+T = transpose(T);
+
+size3(15cm);
+real w = 10;
+real h = 5;
+currentprojection = orthographic(2*(L,h,w),Y);
+draw((L,t,0)--(L,0,0)--(L,0,w)--(0,0,w)--(0,-h,w));
+draw((0,t,w)--(0,t+h,w)--(0,t+h,0)--(0,t,0));
+draw((L,0,w)--(L,t,w)--(0,t,w)--(0,t,0)--(L,t,0)--(L,t,w));
+
+real wo2 = 0.5*w;
+draw((0,0,wo2)--(0,t,wo2)--(L,t,wo2)--(L,0,wo2)--cycle);
+
+// centre points
+surface square = surface(shift(-0.5,-0.5,wo2)*unitsquare3);
+surface bottomsquare = surface(shift(-0.5,-0.5,wo2)*scale(1,0.5,1)*unitsquare3);
+surface topsquare = surface(shift(-0.5,0,wo2)*scale(1,0.5,1)*unitsquare3);
+surface leftsquare = surface(shift(-0.5,-0.5,wo2)*scale(0.5,1,1)*unitsquare3);
+surface rightsquare = surface(shift(0,-0.5,wo2)*scale(0.5,1,1)*unitsquare3);
+surface NEcorner = surface(shift(0,0,wo2)*scale(0.5,0.5,1)*unitsquare3);
+surface SEcorner = surface(shift(0,-0.5,wo2)*scale(0.5,0.5,1)*unitsquare3);
+surface SWcorner = surface(shift(-0.5,-0.5,wo2)*scale(0.5,0.5,1)*unitsquare3);
+surface NWcorner = surface(shift(-0.5,0,wo2)*scale(0.5,0.5,1)*unitsquare3);
+
+material lookupColour(int m,int n)
+{
+ int index = round(Palette.length*(T[m-1][n-1]-60)/(100-60));
+ if(index >= Palette.length) index = Palette.length-1;
+ return emissive(Palette[index]);
+}
+
+draw(shift(0,1,0)*rightsquare,lookupColour(1,2));
+for(int i = 2; i < 13; ++i)
+{
+ draw(shift(i-1,1,0)*square,lookupColour(i,2));
+}
+draw(shift(12,1,0)*leftsquare,lookupColour(13,2));
+
+draw(shift(0,2,0)*SEcorner,lookupColour(1,3));
+draw(shift(0,0,0)*NEcorner,lookupColour(1,1));
+for(int i = 2; i < 13; ++i)
+{
+ draw(shift(i-1,0,0)*topsquare,lookupColour(i,1));
+ draw(shift(i-1,2,0)*bottomsquare,lookupColour(i,3));
+}
+draw(shift(12,2,0)*SWcorner,lookupColour(13,3));
+draw(shift(12,0,0)*NWcorner,lookupColour(13,1));
+
+// annotations
+draw("$x$",(0,-h/2,w)--(L/4,-h/2,w),Y,Arrow3(HookHead2(normal=Z)),BeginBar3(Y));
+draw("$y$",(0,0,1.05*w)--(0,2t,1.05*w),Z,Arrow3(HookHead2(normal=X)),
+ BeginBar3(Z));
+draw("$z$",(L,-h/2,0)--(L,-h/2,w/4),Y,Arrow3(HookHead2(normal=X)),BeginBar3(Y));
+
+draw("$L$",(0,-h/4,w)--(L,-h/4,w),-Y,Arrows3(HookHead2(normal=Z)),
+ Bars3(Y),PenMargins2);
+draw("$w$",(L,-h/4,0)--(L,-h/4,w),-Y,Arrows3(HookHead2(normal=X)),
+ Bars3(Y),PenMargins2);
+draw("$t$",(1.05*L,0,0)--(1.05*L,t,0),-2Z,Arrows3(HookHead2(normal=Z)),
+ Bars3(X),PenMargins2);
+
+label(ZY()*"$T_b$",(0,t+h/2,wo2));
+
+label("$h$,$T_\infty$",(L/2,t+h/2,0),Y);
+path3 air = (L/2,t+h/3,w/3.5)--(1.5*L/2,t+2*h/3,w/8);
+draw(air,EndArrow3(TeXHead2));
+draw(shift(0.5,0,0)*air,EndArrow3(TeXHead2));
+draw(shift(1.0,0,0)*air,EndArrow3(TeXHead2));
diff --git a/Build/source/utils/asymptote/examples/fjortoft.asy b/Build/source/utils/asymptote/examples/fjortoft.asy
new file mode 100644
index 00000000000..0ef81ca2c09
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fjortoft.asy
@@ -0,0 +1,27 @@
+size(15cm,0);
+
+pair d=(1.5,1);
+real s=d.x+1;
+
+picture box(string s) {
+ picture pic;
+ draw(pic,box(0,d));
+ label(pic,s,d/2);
+ return pic;
+}
+
+add(box("$k_1$"));
+add(shift(s)*box("$k_2$"));
+add(shift(s)^2*box("$k_3$"));
+
+path g=(d.x,d.y/2)--(s,d.y/2);
+path G=(d.x/2,-(s-d.x))--(d.x/2,0);
+
+draw(Label(baseline("$\ldots$")),shift(-s)*g,BeginArrow,BeginPenMargin);
+draw(Label("$Z_1$"),g,BeginArrow,BeginPenMargin);
+draw(Label("$E_1$",LeftSide),g,Blank);
+draw(Label("$Z_3$"),shift(s)*g,Arrow,PenMargin);
+draw(Label("$E_3$",LeftSide),shift(s)*g,Blank);
+draw(Label("$Z_2$"),shift(s)*G,Arrow,PenMargin);
+draw(Label("$E_2$",LeftSide),shift(s)*G,Blank);
+draw(Label(baseline("$\ldots$")),shift(s)^2*g,Arrow,PenMargin);
diff --git a/Build/source/utils/asymptote/examples/floatingdisk.asy b/Build/source/utils/asymptote/examples/floatingdisk.asy
new file mode 100644
index 00000000000..2e99ec9c2c1
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/floatingdisk.asy
@@ -0,0 +1,24 @@
+import trembling;
+settings.outformat="pdf";
+size(6cm,0);
+
+real R=1/5;
+real h=0.5;
+real d=1/12;
+real l=.7;
+
+pair pA=(-l,0);
+pair pB=(l,0);
+
+path waterline=tremble(addnodes(pA..pB,1),angle=10,frequency=0.1,random=50);
+path disk=shift(0,-d)*(scale(R)*unitcircle);
+path water=waterline--(l,-h)--(-l,-h)--(-l,0)--cycle;
+path container=(l,1/7)--(l,-h)--(-l,-h)--(-l,1/7);
+
+filldraw(disk,red,linewidth(.3));
+fill(water,mediumgrey+opacity(0.5));
+draw(waterline);
+
+draw(container,linewidth(1.5));
+
+shipout(bbox(2mm,Fill(white)));
diff --git a/Build/source/utils/asymptote/examples/floor.asy b/Build/source/utils/asymptote/examples/floor.asy
new file mode 100644
index 00000000000..96e71812c01
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/floor.asy
@@ -0,0 +1,28 @@
+import graph;
+unitsize(1cm);
+
+real Floor(real x) {return floor(x);}
+
+pair[] Close;
+pair[] Open;
+
+bool3 branch(real x) {
+ static real lasty;
+ static bool first=true;
+ real y=floor(x);
+ bool samebranch=first || lasty == y;
+ first=false;
+ if(samebranch) lasty=x;
+ else {
+ Close.push((x,lasty));
+ Open.push((x,y));
+ }
+ lasty=y;
+ return samebranch ? true : default;
+};
+
+draw(graph(Floor,-5.5,5.5,500,branch));
+axes("$x$","$\lfloor x\rfloor$",red);
+
+dot(Close);
+dot(Open,UnFill);
diff --git a/Build/source/utils/asymptote/examples/fractaltree.asy b/Build/source/utils/asymptote/examples/fractaltree.asy
new file mode 100644
index 00000000000..c9775ec69d7
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/fractaltree.asy
@@ -0,0 +1,27 @@
+size(200);
+
+path ltrans(path p,int d)
+{
+ path a=rotate(65)*scale(0.4)*p;
+ return shift(point(p,(1/d)*length(p))-point(a,0))*a;
+}
+path rtrans(path p, int d)
+{
+ path a=reflect(point(p,0),point(p,length(p)))*rotate(65)*scale(0.35)*p;
+ return shift(point(p,(1/d)*length(p))-point(a,0))*a;
+}
+
+void drawtree(int depth, path branch)
+{
+ if(depth == 0) return;
+ real breakp=(1/depth)*length(branch);
+ draw(subpath(branch,0,breakp),deepgreen);
+ drawtree(depth-1,subpath(branch,breakp,length(branch)));
+ drawtree(depth-1,ltrans(branch,depth));
+ drawtree(depth-1,rtrans(branch,depth));
+ return;
+}
+
+path start=(0,0)..controls (-1/10,1/3) and (-1/20,2/3)..(1/20,1);
+drawtree(6,start);
+
diff --git a/Build/source/utils/asymptote/examples/functionshading.asy b/Build/source/utils/asymptote/examples/functionshading.asy
new file mode 100644
index 00000000000..7cdeb6f4bf4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/functionshading.asy
@@ -0,0 +1,31 @@
+size(200);
+
+settings.tex="pdflatex";
+
+// PostScript Calculator routine to convert from [0,1]x[0,1] to RG:
+string redgreen="0";
+
+// PostScript Calculator routine to convert from [0,1]x[0,1] to HS to RGB:
+// (http://www.texample.net/tikz/examples/hsv-shading):
+string hsv="0.5 sub exch 0.5 sub exch
+2 copy 2 copy 0 eq exch 0 eq and { pop pop 0.0 } {atan 360.0 div}
+ifelse dup 360 eq { pop 0.0 }{} ifelse 3 1 roll dup mul exch dup mul add
+sqrt 2.5 mul 0.25 sub 1 1 index 1.0
+eq { 3 1 roll pop pop dup dup } { 3 -1 roll 6.0 mul dup 4 1 roll floor dup
+5 1 roll 3 index sub neg 1.0 3 index sub 2 index mul 6 1 roll dup 3 index
+mul neg 1.0 add 2 index mul 7 1 roll neg 1.0 add 2 index mul neg 1.0 add 1
+index mul 7 2 roll pop pop dup 0 eq { pop exch pop } { dup 1 eq { pop exch
+4 1 roll exch pop } { dup 2 eq { pop 4 1 roll pop } { dup 3 eq { pop exch 4
+2 roll pop } { dup 4 eq { pop exch pop 3 -1 roll } { pop 3 1 roll exch pop
+} ifelse } ifelse } ifelse } ifelse } ifelse } ifelse cvr 3 1 roll cvr 3 1
+roll cvr 3 1 roll";
+
+path p=unitcircle;
+functionshade(p,rgb(zerowinding),redgreen);
+layer();
+draw(p);
+
+path g=shift(2*dir(-45))*p;
+functionshade(g,rgb(zerowinding),hsv);
+layer();
+draw(g);
diff --git a/Build/source/utils/asymptote/examples/galleon.asy b/Build/source/utils/asymptote/examples/galleon.asy
new file mode 100644
index 00000000000..6cd0f4545df
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/galleon.asy
@@ -0,0 +1,14 @@
+import obj;
+
+size(15cm);
+currentprojection=orthographic(0,2,5,up=Y);
+
+// A compressed version of the required data file may be obtained from:
+// http://www.cs.technion.ac.il/~irit/data/Viewpoint/galleon.obj.gz
+
+pen[] surfacepen={darkred,brown,darkred+orange,heavyred,heavyred,darkred+orange,
+ palegreen+blue+lightgrey,darkred,darkred,yellow,darkred,white,
+ white,white,white,white,white};
+surfacepen.cyclic(true);
+
+draw(obj("galleon.obj",verbose=false,surfacepen));
diff --git a/Build/source/utils/asymptote/examples/gamma.asy b/Build/source/utils/asymptote/examples/gamma.asy
new file mode 100644
index 00000000000..f92dd775abb
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/gamma.asy
@@ -0,0 +1,24 @@
+import graph;
+size(300,IgnoreAspect);
+
+bool3 branch(real x)
+{
+ static int lastsign=0;
+ if(x <= 0 && x == floor(x)) return false;
+ int sign=sgn(gamma(x));
+ bool b=lastsign == 0 || sign == lastsign;
+ lastsign=sign;
+ return b ? true : default;
+}
+
+draw(graph(gamma,-4,4,n=2000,branch),red);
+
+scale(false);
+xlimits(-4,4);
+ylimits(-6,6);
+crop();
+
+xaxis("$x$",RightTicks(NoZero));
+yaxis(LeftTicks(NoZero));
+
+label("$\Gamma(x)$",(1,2),red);
diff --git a/Build/source/utils/asymptote/examples/gamma3.asy b/Build/source/utils/asymptote/examples/gamma3.asy
new file mode 100644
index 00000000000..1e400152a93
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/gamma3.asy
@@ -0,0 +1,29 @@
+import graph3;
+import palette;
+
+size(12cm,IgnoreAspect);
+currentprojection=orthographic(1,-2,1);
+
+real X=4.5;
+real M=abs(gamma((X,0)));
+
+pair Gamma(pair z)
+{
+ return (z.x > 0 || z != floor(z.x)) ? gamma(z) : M;
+}
+
+real f(pair z) {return min(abs(Gamma(z)),M);}
+
+surface s=surface(f,(-2.1,-2),(X,2),70,Spline);
+
+real Arg(triple v)
+{
+ return degrees(Gamma((v.x,v.y)),warn=false);
+}
+
+s.colors(palette(s.map(Arg),Wheel()));
+draw(s);
+
+xaxis3("$\mathop{\rm Re} z$",Bounds,InTicks);
+yaxis3("$\mathop{\rm Im} z$",Bounds,InTicks(beginlabel=false));
+zaxis3("$|\Gamma(z)|$",Bounds,InTicks);
diff --git a/Build/source/utils/asymptote/examples/grid.asy b/Build/source/utils/asymptote/examples/grid.asy
new file mode 100644
index 00000000000..a607ac78e28
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/grid.asy
@@ -0,0 +1,7 @@
+import math;
+size(100,0);
+
+add(shift(-5,-5)*grid(10,10));
+
+dot((0,0),red);
+
diff --git a/Build/source/utils/asymptote/examples/hierarchy.asy b/Build/source/utils/asymptote/examples/hierarchy.asy
new file mode 100644
index 00000000000..fdb833e652a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/hierarchy.asy
@@ -0,0 +1,9 @@
+texpreamble("\def\Ham{\mathop {\rm Ham}\nolimits}");
+pair align=2N;
+frame f;
+ellipse(f,Label("$\Ham(r,2)$",(0,0)),lightblue,Fill,above=false);
+ellipse(f,Label("BCH Codes",point(f,N),align),green,Fill,above=false);
+ellipse(f,Label("Cyclic Codes",point(f,N),align),lightmagenta,Fill,above=false);
+ellipse(f,Label("Linear Codes",point(f,N),align),-4mm,orange,Fill,above=false);
+box(f,Label("General Codes",point(f,N),align),2mm,yellow,Fill,above=false);
+add(f);
diff --git a/Build/source/utils/asymptote/examples/hyperboloid.asy b/Build/source/utils/asymptote/examples/hyperboloid.asy
new file mode 100644
index 00000000000..10d3609f5d0
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/hyperboloid.asy
@@ -0,0 +1,8 @@
+size(200);
+import solids;
+
+currentprojection=perspective(4,4,3);
+revolution hyperboloid=revolution(new real(real x) {return sqrt(1+x*x);},
+ -2,2,20,operator..,X);
+draw(surface(hyperboloid),green);
+draw(hyperboloid,6,blue,longitudinalpen=nullpen);
diff --git a/Build/source/utils/asymptote/examples/hyperboloidsilhouette.asy b/Build/source/utils/asymptote/examples/hyperboloidsilhouette.asy
new file mode 100644
index 00000000000..1187208a670
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/hyperboloidsilhouette.asy
@@ -0,0 +1,9 @@
+size(200);
+import solids;
+settings.render=0;
+settings.prc=false;
+
+currentprojection=perspective(4,4,3);
+revolution hyperboloid=revolution(new real(real x) {return sqrt(1+x*x);},
+ -2,2,20,operator..,X);
+draw(hyperboloid.silhouette(64),blue);
diff --git a/Build/source/utils/asymptote/examples/imagehistogram.asy b/Build/source/utils/asymptote/examples/imagehistogram.asy
new file mode 100644
index 00000000000..d3bdc783757
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/imagehistogram.asy
@@ -0,0 +1,47 @@
+import stats;
+import graph;
+import palette;
+import contour;
+
+size(20cm);
+
+scale(false);
+
+pair[] data=new pair[50000];
+for(int i=0; i < data.length; ++i)
+ data[i]=Gaussrandpair();
+
+// Histogram limits and number of bins
+pair datamin=(-0.15,-0.15);
+pair datamax=(0.15,0.15);
+int Nx=30;
+int Ny=30;
+
+int[][] bins=frequency(data,datamin,datamax,Nx,Ny);
+
+real[] values=new real[Nx*Ny];
+pair[] points=new pair[Nx*Ny];
+int k=0;
+real dx=(datamax.x-datamin.x)/Nx;
+real dy=(datamax.y-datamin.y)/Ny;
+for(int i=0; i < Nx; ++i) {
+ for(int j=0; j < Ny; ++j) {
+ values[k]=bins[i][j];
+ points[k]=(datamin.x+(i+0.5)*dx,datamin.y+(j+0.5)*dy);
+ ++k;
+ }
+}
+
+// Create a color palette
+pen[] InvGrayscale(int NColors=256) {
+ real ninv=1.0/(NColors-1.0);
+ return sequence(new pen(int i) {return gray(1-17*i*ninv);},NColors);
+}
+
+// Draw the histogram, with axes
+bounds range=image(points,values,Range(0,40),InvGrayscale());
+draw(contour(points,values,new real[] {1,2,3,4,8,12,16,20,24,28,32,36,40},
+ operator--),blue);
+xaxis("$x$",BottomTop,LeftTicks,above=true);
+yaxis("$y$",LeftRight,RightTicks,above=true);
+
diff --git a/Build/source/utils/asymptote/examples/impact.asy b/Build/source/utils/asymptote/examples/impact.asy
new file mode 100644
index 00000000000..b58d381f26a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/impact.asy
@@ -0,0 +1,28 @@
+// Contributed by Philippe Ivaldi.
+
+import graph3 ;
+import contour;
+size (6cm,0);
+currentprojection=orthographic(1,1,1) ;
+
+real rc=1, hc=2, c=rc/hc;
+draw(shift(hc*Z)*scale(rc,rc,-hc)*unitcone,blue);
+
+triple Os=(0.5,0.5,1);
+real r=0.5;
+draw(shift(Os)*scale3(r)*unitsphere,red);
+
+real a=1+1/c^2;
+real b=abs(Os)^2-r^2;
+
+real f(pair z)
+{
+ real x=z.x, y=z.y;
+ return a*x^2-2*Os.x*x+a*y^2-2*Os.y*y-2*Os.z*sqrt(x^2+y^2)/c+b;
+}
+
+real g(pair z){return (sqrt(z.x^2+z.y^2))/c;}
+
+draw(lift(g,contour(f,(-rc,-rc),(rc,rc),new real[]{0})),linewidth(2bp)+yellow);
+
+axes3("$x$","$y$","$z$",Arrow3);
diff --git a/Build/source/utils/asymptote/examples/integraltest.asy b/Build/source/utils/asymptote/examples/integraltest.asy
new file mode 100644
index 00000000000..c45b1eb8f17
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/integraltest.asy
@@ -0,0 +1,38 @@
+import graph;
+size(300,150,IgnoreAspect);
+
+real f(real x) {return 1/x^(1.1);}
+pair F(real x) {return (x,f(x));}
+
+dotfactor=7;
+
+void subinterval(real a, real b)
+{
+ path g=box((a,0),(b,f(b)));
+ filldraw(g,lightgray);
+ draw(box((a,f(a)),(b,0)));
+}
+
+int a=1, b=9;
+
+xaxis("$x$",0,b);
+yaxis("$y$",0);
+
+draw(graph(f,a,b,operator ..),red);
+
+int n=2;
+
+for(int i=a; i <= b; ++i) {
+ if(i < b) subinterval(i,i+1);
+ if(i <= n) labelx(i);
+ dot(F(i));
+}
+
+int i=n;
+labelx("$\ldots$",++i);
+labelx("$k$",++i);
+labelx("$k+1$",++i);
+labelx("$\ldots$",++i);
+
+arrow("$f(x)$",F(i-1.5),NE,1.5cm,red,Margin(0,0.5));
+
diff --git a/Build/source/utils/asymptote/examples/interpolate1.asy b/Build/source/utils/asymptote/examples/interpolate1.asy
new file mode 100644
index 00000000000..9f8367a52a4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/interpolate1.asy
@@ -0,0 +1,213 @@
+// Lagrange and Hermite interpolation in Asymptote
+// Author: Olivier Guibé
+
+import interpolate;
+import graph;
+
+// Test 1: The Runge effect in the Lagrange interpolation of 1/(x^2+1).
+
+unitsize(2cm);
+xlimits(-5,5);
+ylimits(-1,1,Crop);
+
+real f(real x) {return(1/(x^2+1));}
+real df(real x) {return(-2*x/(x^2+1)^2);}
+
+real a=-5, b=5;
+int n=15;
+real[] x,y,dy;
+x=a+(b-a)*sequence(n+1)/n;
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+draw(graph(p,a,b,n=500),"$x\longmapsto{}L_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\frac{1}{x^2+1}$");
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+shipout("runge1");
+
+erase();
+
+// Test 2: The Runge effect in the Hermite interpolation of 1/(x^2+1).
+
+real f(real x) {return(1/(x^2+1));}
+real df(real x) {return(-2*x/(x^2+1)^2);}
+
+real a=-5, b=5;
+int n=16;
+real[] x,y,dy;
+x=a+(b-a)*sequence(n+1)/n;
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=hdiffdiv(x,y,dy);
+fhorner ph=fhorner(h);
+draw(graph(p,a,b,n=500),"$x\longmapsto{}H_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\frac{1}{x^2+1}$");
+
+unitsize(2cm);
+xlimits(-5,5);
+ylimits(-1,5,Crop);
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+
+shipout("runge2");
+
+erase();
+
+// Test 3: The Runge effect does not occur for all functions:
+// Lagrange interpolation of a function whose successive derivatives
+// are bounded by a constant M (here M=1) is shown here to converge.
+
+real f(real x) {return(sin(x));}
+real df(real x) {return(cos(x));}
+
+real a=-5, b=5;
+int n=16;
+real[] x,y,dy;
+x=a+(b-a)*sequence(n+1)/n;
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+
+draw(graph(p,a,b,n=500),"$x\longmapsto{}L_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\cos(x)$");
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+shipout("runge3");
+
+erase();
+
+// Test 4: However, one notes here that numerical artifacts may arise
+// from limit precision (typically 1e-16).
+
+real f(real x) {return(sin(x));}
+real df(real x) {return(cos(x));}
+
+real a=-5, b=5;
+int n=72;
+real[] x,y,dy;
+x=a+(b-a)*sequence(n+1)/n;
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+
+draw(graph(p,a,b,n=500),"$x\longmapsto{}L_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\cos(x)$");
+ylimits(-1,5,Crop);
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+
+shipout("runge4");
+
+erase();
+
+// Test 5: The situation is much better using Tchebychev points.
+
+unitsize(2cm);
+xlimits(-5,5);
+ylimits(-1,2,Crop);
+
+real f(real x) {return(1/(x^2+1));}
+real df(real x) {return(-2*x/(x^2+1)^2);}
+
+real a=-5, b=5;
+int n=16;
+real[] x,y,dy;
+fhorner p,ph,ph1;
+for(int i=0; i <= n; ++i)
+ x[i]=(a+b)/2+(b-a)/2*cos((2*i+1)/(2*n+2)*pi);
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+
+draw(graph(p,a,b,n=500),"$x\longmapsto{}T_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\frac{1}{x^2+1}$");
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+
+shipout("runge5");
+
+erase();
+
+// Test 6: Adding a few more Tchebychev points yields a very good result.
+
+unitsize(2cm);
+xlimits(-5,5);
+ylimits(-1,2,Crop);
+
+real f(real x) {return(1/(x^2+1));}
+real df(real x) {return(-2*x/(x^2+1)^2);}
+
+real a=-5, b=5;
+int n=26;
+real[] x,y,dy;
+for(int i=0; i <= n; ++i)
+ x[i]=(a+b)/2+(b-a)/2*cos((2*i+1)/(2*n+2)*pi);
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+draw(graph(p,a,b,n=500),"$x\longmapsto{}T_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\frac{1}{x^2+1}$");
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+
+
+shipout("runge6");
+
+erase();
+
+// Test 7: Another Tchebychev example.
+
+unitsize(2cm);
+xlimits(-2,2);
+ylimits(-0.5,2,Crop);
+
+real f(real x) {return(sqrt(abs(x-1)));}
+
+real a=-2, b=2;
+int n=30;
+real[] x,y,dy;
+for(int i=0; i <= n; ++i)
+ x[i]=(a+b)/2+(b-a)/2*cos((2*i+1)/(2*n+2)*pi);
+y=map(f,x);
+dy=map(df,x);
+for(int i=0; i <= n; ++i)
+ dot((x[i],y[i]),5bp+blue);
+horner h=diffdiv(x,y);
+fhorner p=fhorner(h);
+draw(graph(p,a,b,n=500),"$x\longmapsto{}T_{"+string(n)+"}$");
+draw(graph(f,a,b),red,"$x\longmapsto{}\sqrt{|x-1|}$");
+
+xaxis("$x$",BottomTop,LeftTicks);
+yaxis("$y$",LeftRight,RightTicks);
+attach(legend(),point(10S),30S);
+
+shipout("runge7");
diff --git a/Build/source/utils/asymptote/examples/jump.asy b/Build/source/utils/asymptote/examples/jump.asy
new file mode 100644
index 00000000000..7ae19be3886
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/jump.asy
@@ -0,0 +1,14 @@
+import graph;
+size(4inches,0);
+
+real f1(real x) {return (1+x^2);}
+real f2(real x) {return (4-x);}
+
+xaxis("$x$",LeftTicks,Arrow);
+yaxis("$y$",RightTicks,Arrow);
+
+draw("$y=1+x^2$",graph(f1,-2,1));
+dot((1,f1(1)),UnFill);
+
+draw("$y=4-x$",graph(f2,1,5),LeftSide,red,Arrow);
+dot((1,f2(1)),red);
diff --git a/Build/source/utils/asymptote/examples/label3.asy b/Build/source/utils/asymptote/examples/label3.asy
new file mode 100644
index 00000000000..5c966b0d9a5
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/label3.asy
@@ -0,0 +1,7 @@
+import three;
+
+currentprojection=perspective(1,1,1,up=Y);
+
+label("$\displaystyle\int_{-\infty}^{+\infty} e^{-\alpha x^2}\,dx=
+\sqrt{\frac{\pi}{\alpha}}$",O,blue);
+
diff --git a/Build/source/utils/asymptote/examples/label3ribbon.asy b/Build/source/utils/asymptote/examples/label3ribbon.asy
new file mode 100644
index 00000000000..d974b2fb748
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/label3ribbon.asy
@@ -0,0 +1,6 @@
+import three;
+
+currentprojection=perspective(100,100,200,up=Y);
+
+draw(extrude(texpath("$\displaystyle\int_{-\infty}^{+\infty}e^{-\alpha x^2}\,dx=
+\sqrt{\frac{\pi}{\alpha}}$"),2Z),blue);
diff --git a/Build/source/utils/asymptote/examples/label3solid.asy b/Build/source/utils/asymptote/examples/label3solid.asy
new file mode 100644
index 00000000000..5eb955ff482
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/label3solid.asy
@@ -0,0 +1,6 @@
+import three;
+
+currentprojection=perspective(100,100,200,up=Y);
+
+draw(extrude("$\displaystyle\int_{-\infty}^{+\infty}e^{-\alpha x^2}\,dx=
+\sqrt{\frac{\pi}{\alpha}}$",2Z),blue);
diff --git a/Build/source/utils/asymptote/examples/labelbox.asy b/Build/source/utils/asymptote/examples/labelbox.asy
new file mode 100644
index 00000000000..cd61a9da69c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/labelbox.asy
@@ -0,0 +1,11 @@
+size(0,100);
+real margin=2mm;
+pair z1=(0,1);
+pair z0=(0,0);
+
+object label1=draw("small box",box,z1,margin);
+object label0=draw("LARGE ELLIPSE",ellipse,z0,margin);
+
+add(new void(frame f, transform t) {
+ draw(f,point(label1,SW,t){SW}..{SW}point(label0,NNE,t));
+ });
diff --git a/Build/source/utils/asymptote/examples/laserlattice.asy b/Build/source/utils/asymptote/examples/laserlattice.asy
new file mode 100644
index 00000000000..da4d9a49b7c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/laserlattice.asy
@@ -0,0 +1,44 @@
+import graph;
+import palette;
+
+int n=256;
+pen[] Palette=BWRainbow();
+
+real w(real w0, real z0, real z) {return w0*sqrt(1+(z/z0)^2);}
+
+real pot(real lambda, real w0, real r, real z)
+{
+ real z0=pi*w0^2/lambda, kappa=2pi/lambda;
+ return exp(-2*(r/w(w0,z0,z))^2)*cos(kappa*z)^2;
+}
+
+picture make_field(real lambda, real w0)
+{
+ real[][] v=new real[n][n];
+ for(int i=0; i < n; ++i)
+ for(int j=0; j < n; ++j)
+ v[i][j]=pot(lambda,w0,i-n/2,abs(j-n/2));
+
+ picture p=new picture;
+ size(p,250,250,IgnoreAspect);
+ real xm=-n/lambda, ym=-n/(2*w0), xx=n/lambda, yx=n/(2*w0);
+ image(p,v,(xm,ym),(xx,yx),Palette);
+ xlimits(p,xm,xx);
+ ylimits(p,ym,yx);
+ xaxis(p,"{\Large $z/\frac{\lambda}{2}$}",BottomTop,LeftTicks);
+ yaxis(p,"{\Large $r/w_0$}",LeftRight,RightTicks);
+ label(p,format("{\LARGE $w_0/\lambda=%.2f$}",w0/lambda),point(p,NW),5N);
+
+ return p;
+}
+
+picture p=make_field(160,80);
+picture q=make_field(80,80);
+picture r=make_field(16,80);
+picture s=make_field(2,80);
+
+real margin=1cm;
+add(p.fit(),(0,0),margin*NW);
+add(q.fit(),(0,0),margin*NE);
+add(r.fit(),(0,0),margin*SW);
+add(s.fit(),(0,0),margin*SE);
diff --git a/Build/source/utils/asymptote/examples/latticeshading.asy b/Build/source/utils/asymptote/examples/latticeshading.asy
new file mode 100644
index 00000000000..c6689fa72d5
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/latticeshading.asy
@@ -0,0 +1,7 @@
+size(200);
+
+pen[][] p={{white,grey,black},
+ {red,green,blue},
+ {cyan,magenta,yellow}};
+
+latticeshade(unitsquare,p);
diff --git a/Build/source/utils/asymptote/examples/lever.asy b/Build/source/utils/asymptote/examples/lever.asy
new file mode 100644
index 00000000000..e30de87540f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/lever.asy
@@ -0,0 +1,23 @@
+size(200,0);
+
+pair z0=(0,0);
+pair z1=(2,0);
+pair z2=(5,0);
+pair zf=z1+0.75*(z2-z1);
+
+draw(z1--z2);
+dot(z1,red+0.15cm);
+dot(z2,darkgreen+0.3cm);
+label("$m$",z1,1.2N,red);
+label("$M$",z2,1.5N,darkgreen);
+label("$\hat{\ }$",zf,0.2*S,fontsize(24)+blue);
+
+pair s=-0.2*I;
+draw("$x$",z0+s--z1+s,N,red,Arrows,Bars,PenMargins);
+
+s=-0.5*I;
+draw("$\bar{x}$",z0+s--zf+s,blue,Arrows,Bars,PenMargins);
+
+s=-0.95*I;
+draw("$X$",z0+s--z2+s,darkgreen,Arrows,Bars,PenMargins);
+
diff --git a/Build/source/utils/asymptote/examples/limit.asy b/Build/source/utils/asymptote/examples/limit.asy
new file mode 100644
index 00000000000..ef71928941e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/limit.asy
@@ -0,0 +1,28 @@
+size(200,200,IgnoreAspect);
+import graph;
+
+real L=1;
+real epsilon=0.25;
+
+real a(int n) {return L+1/n;}
+
+for(int i=1; i < 20; ++i)
+ dot((i,a(i)));
+
+real N=1/epsilon;
+
+xaxis(Label("$n$",align=2S));
+yaxis(Label("$a_n$",0.85));
+
+xtick("$2$",2);
+ytick("$\frac{3}{2}$",3/2);
+ytick("$2$",2);
+
+yequals(Label("$L$",0,up),L,extend=true,blue);
+yequals(Label("$L+\epsilon$",1,NW),L+epsilon,extend=true,red+dashed);
+yequals(Label("$L-\epsilon$",1,SW),L-epsilon,extend=true,red+dashed);
+
+xequals(N,extend=true,darkgreen+dashed);
+labelx(shift(0,-10)*"$N=\frac{1}{\epsilon}$",N,E,darkgreen);
+
+label("$a_n=1+\frac{1}{n},\quad \epsilon=\frac{1}{4}$",point((0,1)),10S+E);
diff --git a/Build/source/utils/asymptote/examples/lines.asy b/Build/source/utils/asymptote/examples/lines.asy
new file mode 100644
index 00000000000..9749f73a350
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/lines.asy
@@ -0,0 +1,10 @@
+import math;
+
+int n=7;
+
+size(200,0);
+
+draw(unitcircle,red);
+for (int i=0; i < n-1; ++i)
+ for (int j=i+1; j < n; ++j)
+ drawline(unityroot(n,i),unityroot(n,j),blue);
diff --git a/Build/source/utils/asymptote/examples/log.asy b/Build/source/utils/asymptote/examples/log.asy
new file mode 100644
index 00000000000..532b7b782b6
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/log.asy
@@ -0,0 +1,14 @@
+import graph;
+
+size(150,0);
+
+real f(real x) {return log(x);}
+pair F(real x) {return (x,f(x));}
+
+xaxis("$x$",0);
+yaxis("$y$");
+
+draw(graph(f,0.01,10,operator ..));
+
+labelx(1,SSE);
+label("$\log x$",F(7),SE);
diff --git a/Build/source/utils/asymptote/examples/logdown.asy b/Build/source/utils/asymptote/examples/logdown.asy
new file mode 100644
index 00000000000..25d10ed978e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/logdown.asy
@@ -0,0 +1,13 @@
+import graph;
+size(200,IgnoreAspect);
+
+real log10Down(real x) {return -log10(x);}
+real pow10Down(real x) {return pow10(-x);}
+
+scaleT LogDown=scaleT(log10Down,pow10Down,logarithmic=true);
+scale(Linear,LogDown);
+
+draw(graph(exp,-5,5));
+
+yaxis("$y$",RightTicks(Label(Fill(white)),DefaultLogFormat),BeginArrow);
+xaxis("$x$",LeftTicks(NoZero),EndArrow);
diff --git a/Build/source/utils/asymptote/examples/logo3.asy b/Build/source/utils/asymptote/examples/logo3.asy
new file mode 100644
index 00000000000..6fc73dc9470
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/logo3.asy
@@ -0,0 +1,33 @@
+import three;
+
+size(560,320,IgnoreAspect);
+size3(140,80,15);
+currentprojection=perspective(-3,20,10,up=Y);
+currentlight=adobe;
+
+path[] outline;
+
+real a=-0.4;
+real b=0.95;
+real y1=-5;
+real y2=-3y1/2;
+path A=(a,0){dir(10)}::{dir(89.5)}(0,y2);
+outline.push(A);
+outline.push((0,y1){dir(88.3)}::{dir(20)}(b,0));
+real c=0.5*a;
+pair z=(0,2.5);
+path[] text = shift(0,2)*scale(0.01,0.15)*
+ texpath(Label("{\it symptote}",z,0.25*E+0.169S,fontsize(24)));
+outline.append(text);
+pair w=(0,1.7);
+outline.push(intersectionpoint(A,w-1--w)--w);
+outline.push((0,y1)--(0,y2));
+outline.push((a,0)--(b,0));
+
+for(path p : outline)
+ draw(extrude(p,-0.1Z),material(lightgray,shininess=1.0));
+
+draw(path3(outline),red+linewidth(0));
+
+draw(surface(text),red,nolight);
+
diff --git a/Build/source/utils/asymptote/examples/lowint.asy b/Build/source/utils/asymptote/examples/lowint.asy
new file mode 100644
index 00000000000..e4bf1c55606
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/lowint.asy
@@ -0,0 +1,11 @@
+size(100,0);
+import graph;
+import lowupint;
+
+real a=-0.8, b=1.2;
+real c=1.0/sqrt(3.0);
+
+partition(a,b,c,min);
+
+arrow("$f(x)$",F(0.5*(a+b)),NNE,red);
+label("$\cal{L}$",(0.5*(a+b),f(0.5*(a+b))/2));
diff --git a/Build/source/utils/asymptote/examples/lowupint.asy b/Build/source/utils/asymptote/examples/lowupint.asy
new file mode 100644
index 00000000000..3a14cd91104
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/lowupint.asy
@@ -0,0 +1,31 @@
+import graph;
+
+real f(real x) {return x^3-x+2;}
+pair F(real x) {return (x,f(x));}
+
+void rectangle(real a, real b, real c, real h(real,real))
+{
+ real height=(a < c && c < b) ? f(c) : h(f(a),f(b));
+ pair p=(a,0), q=(b,height);
+ path g=box(p,q);
+ fill(g,lightgray);
+ draw(g);
+}
+
+void partition(real a, real b, real c, real h(real,real))
+{
+ rectangle(a,a+.4,c,h);
+ rectangle(a+.4,a+.6,c,h);
+ rectangle(a+.6,a+1.2,c,h);
+ rectangle(a+1.2,a+1.6,c,h);
+ rectangle(a+1.6,a+1.8,c,h);
+ rectangle(a+1.8,b,c,h);
+
+ draw((a,0)--(F(a)));
+ draw((b,0)--(F(b)));
+
+ draw(graph(f,a,b,operator ..),red);
+ draw((a,0)--(b,0));
+ labelx("$a$",a);
+ labelx("$b$",b);
+}
diff --git a/Build/source/utils/asymptote/examples/magnetic.asy b/Build/source/utils/asymptote/examples/magnetic.asy
new file mode 100644
index 00000000000..4dc187f5770
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/magnetic.asy
@@ -0,0 +1,17 @@
+import graph3;
+import contour3;
+
+size(200,0);
+currentprojection=orthographic((6,8,2),up=Y);
+
+real a(real z) {return (z < 6) ? 1 : exp((abs(z)-6)/4);}
+real b(real z) {return 1/a(z);}
+real B(real z) {return 1-0.5cos(pi*z/10);}
+
+real f(real x, real y, real z) {return 0.5B(z)*(a(z)*x^2+b(z)*y^2)-1;}
+
+draw(surface(contour3(f,(-2,-2,-10),(2,2,10),10)),blue+opacity(0.75));
+
+xaxis3(Label("$x$",1),red);
+yaxis3(Label("$y$",1),red);
+zaxis3(Label("$z$",1),red);
diff --git a/Build/source/utils/asymptote/examples/markregular.asy b/Build/source/utils/asymptote/examples/markregular.asy
new file mode 100644
index 00000000000..716599fbcf1
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/markregular.asy
@@ -0,0 +1,26 @@
+import graph;
+
+size(10cm,0);
+
+real xmin=-4,xmax=4;
+real ymin=-2,ymax=10;
+
+real f(real x) {return x^2;}
+
+marker cross=marker(scale(4)*rotate(45)*cross(4),
+ markuniform(new pair(real t) {return Scale((t,f(t)));},
+ xmin,xmax,round(2*(xmax-xmin))),1bp+red);
+
+draw(graph(f,xmin,xmax,n=400),linewidth(1bp),cross);
+
+ylimits(-2.5,10,Crop);
+
+xaxis(Label("$x$",position=EndPoint, align=NE),xmin=xmin,xmax=xmax,
+ Ticks(scale(.7)*Label(align=E),NoZero,begin=false,beginlabel=false,
+ end=false,endlabel=false,Step=1,step=.25,
+ Size=1mm, size=.5mm,pTick=black,ptick=gray),Arrow);
+
+yaxis(Label("$y$",position=EndPoint, align=NE),ymin=ymin,ymax=ymax,
+ Ticks(scale(.7)*Label(),NoZero,begin=false,beginlabel=false,
+ end=false,endlabel=false,Step=1,step=.25,Size=1mm,size=.5mm,
+ pTick=black,ptick=gray),Arrow);
diff --git a/Build/source/utils/asymptote/examples/mosaic.asy b/Build/source/utils/asymptote/examples/mosaic.asy
new file mode 100644
index 00000000000..0f19117c4b3
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/mosaic.asy
@@ -0,0 +1,165 @@
+// Calendar example contributed by Jens Schwaiger
+
+// transformations
+path similarpath(pair a, pair b, path p) {
+ // transform p into a path starting at a and ending at b
+ pair first;
+ pair last;
+ path p_;
+ first=point(p,0);
+ last=point(p,length(p));
+ p_=shift(-first)*p;
+ p_=rotate(degrees(b-a))*p_;
+ p_=scale(abs(b-a)/abs(last-first))*p_;
+ p_=shift(a)*p_;
+ return p_;
+}
+
+path c_line(path p) {
+ // returns the path obtained by adding to p a copy rotated
+ // around the endpoint of p by 180 degrees
+ // works only if the initial point and the endpoint of p are different
+ // a c_line is symetric with respect to the center of
+ // the straight line between its endpoints
+ //
+ return p..rotate(180,point(p,length(p)))*reverse(p);
+}
+
+path tounitcircle(path p, int n=300) {
+ // the transformation pair x --> x/sqrt(1+abs(x)^2)
+ // is a bijection from the plane to the open unitdisk
+ real l=arclength(p);
+ path ghlp;
+ for(int i=0; i <= n; ++i) {
+ real at=arctime(p,l/n*i);
+ pair phlp=point(p,at);
+ real trhlp=1/(1+abs(phlp)^2)^(1/2);
+ ghlp=ghlp--trhlp*phlp;
+ }
+ if(cyclic(p)) {ghlp=ghlp--cycle;}
+ return ghlp;
+}
+
+void centershade(picture pic=currentpicture, path p, pen in, pen out,
+ pen drawpen=currentpen) {
+ pair center=0.5(max(p)+min(p));
+ real radius=0.5abs(max(p)-min(p));
+ radialshade(pic,p,in,center,0,out,center,radius);
+ draw(pic,p,drawpen);
+}
+
+pair zentrum(path p) {return 0.5(min(p)+max(p));}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+real scalefactor=19/13; // For output: height=scalefactor*width
+real outputwidth=13cm;
+picture kalender;// at first we produce a calendar for february 2006
+texpreamble("\usepackage[latin1]{inputenc}");
+size(outputwidth,0);
+real yc=0.5;
+pair diff=(-3.5,5*yc);
+pen farbe(int j) {
+ pen hlp=0.8white;
+ if(j % 7 == 6) {hlp=red+white;}
+ return hlp;}
+
+// farbe=German word for color
+path kasten=yscale(yc)*unitsquare;
+// Kasten is a German word meaning something like box
+path Gkasten=shift((0,2*yc)+diff)*xscale(7)*yscale(2)*kasten;
+path tage[]= new path[7]; // Tag=day
+string wochentag[]={"MO","DI","MI","DO","FR","SA","SO"};
+path[][] bx= new path[6][7];
+string[][] entry= new string[6][7];
+bool[][] holiday=new bool[6][7];
+
+// Now the necessary information for February 2006
+int start=2;
+int days=28;
+for(int i=0; i < entry.length; ++i) {
+ for(int j=0; j < entry[0].length; ++j) {
+ int day=i*7+j-start+1;
+ entry[i][j]=(day > 0 && day <= days ? (string) day : "");
+ holiday[i][j]=false;
+ }
+}
+
+for(int j=0; j < 7; ++j) {
+ tage[j]=shift((j,yc)+diff)*kasten;
+ filldraw(tage[j],farbe(j),black+2bp);
+ label(wochentag[j],zentrum(tage[j]),Palatino());
+ for(int i=0; i < 6; ++i) {bx[i][j]=shift((j,-yc*i)+diff)*kasten;
+ filldraw(bx[i][j],farbe(j),black+2bp);
+ if(holiday[i][j]) {filldraw(bx[i][j],farbe(6),black+2bp);};
+ };
+};
+filldraw(Gkasten,0.3white,black+2bp);
+for(int j=0; j < 7; ++j)
+ for(int i=0; i < 6 ; ++i) {label(entry[i][j],zentrum(bx[i][j]),Palatino());}
+label("\Huge Februar 2006",zentrum(Gkasten),Palatino()+white);
+// Zentrum=center; Februar=february
+add(kalender,currentpicture);
+erase();
+
+// Now the mosaic is constructed
+pair a[]=new pair[4];
+path p[]=new path[4];
+path q[]=new path[4];
+path kontur[]=new path[5];
+picture temppic;
+
+a[1]=(0,0);
+a[2]=(1,0);
+a[3]=(0,1); // a triangle with abs(a[2]-a[1])=abs(a[3]-a[1]
+ // and a right angle at a[1];
+q[1]=(0,0){dir(-20)}::{dir(20)}(0.2,0){dir(-140)}..{dir(0)}(0.3,-0.2){dir(0)}..
+{dir(140)}(0.4,0){dir(20)}..{dir(-20)}(1,0);
+q[2]=(0,0){dir(20)}..{dir(-20)}(0.8,0){dir(-140)}..{dir(0)}(0.9,-0.3){dir(0)}..
+{dir(140)}(1,0);
+q[2]=c_line(q[2]);
+p[1]=similarpath(a[1],a[2],q[1]);// arbitrary path from a[1] to a[2]
+p[2]=similarpath(a[2],a[3],q[2]);// arbitrary c_line from a[2] to a[3]
+p[3]=rotate(90,a[1])*reverse(p[1]);//
+kontur[1]=p[1]..p[2]..p[3]..cycle;// first tile
+kontur[2]=rotate(90,a[1])*kontur[1];// second
+kontur[3]=rotate(180,a[1])*kontur[1];// third
+kontur[4]=rotate(270,a[1])*kontur[1];// fourth
+pair tri=2*(interp(a[2],a[3],0.5)-a[1]);
+pair trii=rotate(90)*tri;
+// translations of kontur[i], i=1,2,3,4, with respect to
+// j*tri+k*trii
+// fill the plane
+
+for(int j=-4; j < 4; ++j)
+ for(int k=-4; k < 4; ++k) {
+ transform tr=shift(j*tri+k*trii);
+ for(int i=1; i < 5; ++i) {
+ centershade(temppic,tr*kontur[i],(1-i/10)*white,
+ (1-i/10)*chartreuse,black+2bp);
+ }
+ }
+
+// Now we produce the bijective images inside
+// a suitably scaled unitcircle
+for(int k=-1; k < 2; ++k)
+ for(int l=-1; l < 2; ++l) {
+ transform tr=shift(k*tri+l*trii);
+ for(int i=1; i < 5; ++i) {
+ centershade(temppic,scale(2.5)*tounitcircle(tr*kontur[i],380),
+ (1-i/10)*white,(1-i/10)*orange,black+2bp);
+ }
+ }
+
+add(temppic);
+
+// We clip the picture to a suitable box
+pair piccenter=0.5*(temppic.min()+temppic.max());
+pair picbox=temppic.max()-temppic.min();
+real picwidth=picbox.x;
+transform trialtrans=shift(0,-1.5)*shift(piccenter)*yscale(scalefactor)*
+ scale(0.25picwidth)*shift((-0.5,-0.5))*identity();
+clip(trialtrans*unitsquare);
+
+// add the calendar at a suitable position
+add(kalender.fit(0.75*outputwidth),interp(point(S),point(N),1/13));
diff --git a/Build/source/utils/asymptote/examples/mosquito.asy b/Build/source/utils/asymptote/examples/mosquito.asy
new file mode 100644
index 00000000000..288e253bfca
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/mosquito.asy
@@ -0,0 +1,82 @@
+size(9cm,10cm,IgnoreAspect);
+
+pair d=(1,0.25);
+real s=1.6d.x;
+real y=0.6;
+defaultpen(fontsize(8));
+
+picture box(string s, pair z=(0,0)) {
+ picture pic;
+ draw(pic,box(-d/2,d/2));
+ label(pic,s,(0,0));
+ return shift(z)*pic;
+}
+
+label("Birds",(0,y));
+picture removed=box("Removed ($R_B$)");
+picture infectious=box("Infectious ($I_B$)",(0,-1.5));
+picture susceptible=box("Susceptible ($S_B$)",(0,-3));
+
+add(removed);
+add(infectious);
+add(susceptible);
+
+label("Mosquitoes",(s,y));
+picture larval=box("Larval ($L_M$)",(s,0));
+picture susceptibleM=box("Susceptible ($S_M$)",(s,-1));
+picture exposed=box("Exposed ($E_M$)",(s,-2));
+picture infectiousM=box("Infectious ($I_M$)",(s,-3));
+
+add(larval);
+add(susceptibleM);
+add(exposed);
+add(infectiousM);
+
+path ls=point(larval,S)--point(susceptibleM,N);
+path se=point(susceptibleM,S)--point(exposed,N);
+path ei=point(exposed,S)--point(infectiousM,N);
+path si=point(susceptible,N)--point(infectious,S);
+
+draw(minipage("\flushright{recovery rate ($g$) \& death rate from virus
+($\mu_V$)}",40pt),point(infectious,N)--point(removed,S),LeftSide,Arrow,
+ PenMargin);
+
+draw(si,LeftSide,Arrow,PenMargin);
+
+draw(minipage("\flushright{maturation rate ($m$)}",50pt),ls,RightSide,
+ Arrow,PenMargin);
+draw(minipage("\flushright{viral incubation rate ($k$)}",40pt),ei,
+ RightSide,Arrow,PenMargin);
+
+path ise=point(infectious,E)--point(se,0.5);
+
+draw("$(ac)$",ise,LeftSide,dashed,Arrow,PenMargin);
+label(minipage("\flushleft{biting rate $\times$ transmission
+probability}",50pt),point(infectious,SE),dir(-60)+S);
+
+path isi=point(infectiousM,W)--point(si,2.0/3);
+
+draw("$(ab)$",isi,LeftSide,dashed,Arrow,PenMargin);
+draw(se,LeftSide,Arrow,PenMargin);
+
+real t=2.0;
+draw("$\beta_M$",
+ point(susceptibleM,E){right}..tension t..{left}point(larval,E),
+ 2*(S+SE),red,Arrow(Fill,0.5));
+draw(minipage("\flushleft{birth rate ($\beta_M$)}",20pt),
+ point(exposed,E){right}..tension t..{left}point(larval,E),2SW,red,
+ Arrow(Fill,0.5));
+draw("$\beta_M$",
+ point(infectiousM,E){right}..tension t..{left}point(larval,E),2SW,
+ red,Arrow(Fill,0.5));
+
+path arrow=(0,0)--0.75cm*dir(35);
+draw(point(larval,NNE),
+ Label(minipage("\flushleft{larval death rate ($\mu_L$)}",45pt),1),
+ arrow,blue,Arrow);
+draw(point(susceptibleM,NNE),
+ Label(minipage("\flushleft{adult death rate ($\mu_A$)}",20pt),1),
+ arrow,N,blue,Arrow);
+draw(point(exposed,NNE),Label("$\mu_A$",1),arrow,blue,Arrow);
+draw(point(infectiousM,NNE),Label("$\mu_A$",1),arrow,blue,Arrow);
+
diff --git a/Build/source/utils/asymptote/examples/near_earth.asy b/Build/source/utils/asymptote/examples/near_earth.asy
new file mode 100644
index 00000000000..afdf64c6b5c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/near_earth.asy
@@ -0,0 +1,56 @@
+import three;
+import math;
+texpreamble("\usepackage{bm}");
+
+size(300,0);
+
+pen thickp=linewidth(0.5mm);
+real radius=0.8, lambda=37, aux=60;
+
+currentprojection=perspective(4,1,2);
+
+// Planes
+pen bg=gray(0.9)+opacity(0.5);
+draw(surface((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg);
+draw(surface((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg);
+draw(surface((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle),bg);
+
+real r=1.5;
+pen p=rgb(0,0.7,0);
+draw(Label("$x$",1),O--r*X,p,Arrow3);
+draw(Label("$y$",1),O--r*Y,p,Arrow3);
+draw(Label("$z$",1),O--r*Z,p,Arrow3);
+label("$\rm O$",(0,0,0),W);
+
+// Point Q
+triple pQ=radius*dir(lambda,aux);
+draw(O--radius*dir(90,aux),dashed);
+label("$\rm Q$",pQ,N+3*W);
+draw("$\lambda$",arc(O,0.15pQ,0.15*Z),N+0.3E);
+
+// Particle
+triple m=pQ-(0.26,-0.4,0.28);
+real width=5;
+dot("$m$",m,SE,linewidth(width));
+draw("$\bm{\rho}$",(0,0,0)--m,Arrow3,PenMargin3(0,width));
+draw("$\bm{r}$",pQ--m,Arrow3,PenMargin3(0,width));
+
+// Spherical octant
+real r=sqrt(pQ.x^2+pQ.y^2);
+draw(arc((0,0,pQ.z),(r,0,pQ.z),(0,r,pQ.z)),dashed);
+draw(arc(O,radius*Z,radius*dir(90,aux)),dashed);
+draw(arc(O,radius*Z,radius*X),thickp);
+draw(arc(O,radius*Z,radius*Y),thickp);
+draw(arc(O,radius*X,radius*Y),thickp);
+
+// Moving axes
+triple i=dir(90+lambda,aux);
+triple k=unit(pQ);
+triple j=cross(k,i);
+
+draw(Label("$x$",1),pQ--pQ+0.2*i,2W,red,Arrow3);
+draw(Label("$y$",1),pQ--pQ+0.32*j,red,Arrow3);
+draw(Label("$z$",1),pQ--pQ+0.26*k,red,Arrow3);
+
+draw("$\bm{R}$",O--pQ,Arrow3,PenMargin3);
+draw("$\omega\bm{K}$",arc(0.9Z,0.2,90,-120,90,160,CW),1.2N,Arrow3);
diff --git a/Build/source/utils/asymptote/examples/oneoverx.asy b/Build/source/utils/asymptote/examples/oneoverx.asy
new file mode 100644
index 00000000000..5d9775d44dc
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/oneoverx.asy
@@ -0,0 +1,17 @@
+import graph;
+size(200,IgnoreAspect);
+
+real f(real x) {return 1/x;};
+
+bool3 branch(real x)
+{
+ static int lastsign=0;
+ if(x == 0) return false;
+ int sign=sgn(x);
+ bool b=lastsign == 0 || sign == lastsign;
+ lastsign=sign;
+ return b ? true : default;
+}
+
+draw(graph(f,-1,1,branch));
+axes("$x$","$y$",red);
diff --git a/Build/source/utils/asymptote/examples/orthocenter.asy b/Build/source/utils/asymptote/examples/orthocenter.asy
new file mode 100644
index 00000000000..3a4b314f68f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/orthocenter.asy
@@ -0,0 +1,41 @@
+import geometry;
+import math;
+
+size(7cm,0);
+
+real theta=degrees(asin(0.5/sqrt(7)));
+
+pair B=(0,sqrt(7));
+pair A=B+2sqrt(3)*dir(270-theta);
+pair C=A+sqrt(21);
+pair O=0;
+
+pair Ap=extension(A,O,B,C);
+pair Bp=extension(B,O,C,A);
+pair Cp=extension(C,O,A,B);
+
+perpendicular(Ap,NE,Ap--O,blue);
+perpendicular(Bp,NE,Bp--C,blue);
+perpendicular(Cp,NE,Cp--O,blue);
+
+draw(A--B--C--cycle);
+
+currentpen=black;
+
+draw("1",A--O,-0.25*I*dir(A--O));
+draw(O--Ap);
+draw("$\sqrt{7}$",B--O,LeftSide);
+draw(O--Bp);
+draw("4",C--O);
+draw(O--Cp);
+
+dot("$O$",O,1.5*dir(B--Bp,Cp--C),red);
+dot("$A$",A,1.5*dir(C--A,B--A),red);
+dot("$B$",B,NW,red);
+dot("$C$",C,dir(A--C,B--C),red);
+dot("$A'$",Ap,dir(A--Ap),red);
+dot("$B'$",Bp,dir(B--Bp),red);
+dot("$C'$",Cp,dir(C--Cp),red);
+
+label(graphic("piicon.eps","width=2.5cm"),Ap,5ENE,red);
+
diff --git a/Build/source/utils/asymptote/examples/parametricelevation.asy b/Build/source/utils/asymptote/examples/parametricelevation.asy
new file mode 100644
index 00000000000..0c800f3f4ac
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/parametricelevation.asy
@@ -0,0 +1,10 @@
+import graph3;
+import palette;
+size(200);
+
+currentprojection=orthographic(4,2,4);
+
+triple f(pair z) {return expi(z.x,z.y);}
+
+surface s=surface(f,(0,0),(pi,2pi),30);
+draw(s,mean(palette(s.map(zpart),BWRainbow())),black,nolight);
diff --git a/Build/source/utils/asymptote/examples/parametricsurface.asy b/Build/source/utils/asymptote/examples/parametricsurface.asy
new file mode 100644
index 00000000000..d020bbe6e7f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/parametricsurface.asy
@@ -0,0 +1,22 @@
+import graph3;
+
+size(200,0);
+currentprojection=orthographic(4,0,2);
+
+real R=2;
+real a=1.9;
+
+triple f(pair t) {
+ return ((R+a*cos(t.y))*cos(t.x),(R+a*cos(t.y))*sin(t.x),a*sin(t.y));
+}
+
+pen p=rgb(0.2,0.5,0.7);
+
+// surface only
+//draw(surface(f,(0,0),(2pi,2pi),30,15));
+
+// mesh only
+//draw(surface(f,(0,0),(2pi,2pi),30,15),nullpen,meshpen=p);
+
+// surface & mesh
+draw(surface(f,(0,0),(2pi,2pi),30,15),lightgray,meshpen=p);
diff --git a/Build/source/utils/asymptote/examples/partialsurface.asy b/Build/source/utils/asymptote/examples/partialsurface.asy
new file mode 100644
index 00000000000..2e8ad34d834
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/partialsurface.asy
@@ -0,0 +1,29 @@
+import graph3;
+import palette;
+
+size(0,300);
+currentprojection=perspective(3,-2,2);
+
+real V(real r) {return r^4-r^2;}
+real V(pair pos) {return V(abs(pos));}
+
+real R=1/sqrt(2);
+real z=-0.2;
+
+bool active(pair pos) {return abs(pos) < R;}
+bool above(pair pos) {return V(pos) >= z;}
+
+pair a=(-1.5,-1);
+pair b=(0.5,1);
+real f=1.2;
+
+draw(plane(f*(b.x-a.x,0,z),(0,f*(b.y-a.y),z),(a.x,a.y,z)),
+ lightgrey+opacity(0.5));
+
+surface s=surface(V,a,b,40,Spline,active);
+draw(s,mean(palette(s.map(new real(triple v) {
+ return above((v.x,v.y)) ? 1 : 0;}),
+ new pen[] {lightblue,lightgreen})),black);
+
+xaxis3(Label("$\phi^\dagger\phi$",1),red,Arrow3);
+zaxis3(Label("$V(\phi^\dagger\phi)$",1),0,0.3,red,Arrow3);
diff --git a/Build/source/utils/asymptote/examples/pdb.asy b/Build/source/utils/asymptote/examples/pdb.asy
new file mode 100644
index 00000000000..bef21dc2277
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/pdb.asy
@@ -0,0 +1,157 @@
+import three;
+import cpkcolors;
+
+// A sample Protein Data Bank file for this example is available from
+// http://ndbserver.rutgers.edu/ftp/NDB/coordinates/na-biol/100d.pdb1
+
+bool getviews=true;
+
+currentlight=adobe;
+//currentlight=nolight;
+
+size(200);
+currentprojection=perspective(30,30,15);
+
+// Uncomment this line for more accurate (but slower) PDF rendering
+//dotgranularity=0;
+
+pen chainpen=green;
+pen hetpen=purple;
+
+string filename="100d.pdb1";
+//string filename=getstring("filename");
+
+string prefix=stripextension(filename);
+file data=input(filename);
+
+pen color(string e)
+{
+ e=replace(e," ","");
+ int n=length(e);
+ if(n < 1) return currentpen;
+ if(n > 1) e=substr(e,0,1)+downcase(substr(e,1,n-1));
+ int index=find(Element == e);
+ if(index < 0) return currentpen;
+ return rgb(Hexcolor[index]);
+}
+
+// ATOM
+string[] name,altLoc,resName,chainID,iCode,element,charge;
+int[] serial,resSeq;
+real[][] occupancy,tempFactor;
+
+bool newchain=true;
+
+struct bond
+{
+ int i,j;
+ void operator init(int i, int j) {
+ this.i=i;
+ this.j=j;
+ }
+}
+
+bond[] bonds;
+
+struct atom
+{
+ string name;
+ triple v;
+ void operator init(string name, triple v) {
+ this.name=name;
+ this.v=v;
+ }
+}
+
+struct chain
+{
+ int[] serial;
+ atom[] a;
+}
+
+int[] serials;
+chain[] chains;
+atom[] atoms;
+
+while(true) {
+ string line=data;
+ if(eof(data)) break;
+ string record=replace(substr(line,0,6)," ","");
+ if(record == "TER") {newchain=true; continue;}
+ bool ATOM=record == "ATOM";
+ bool HETATOM=record == "HETATM";
+ int serial;
+
+ atom a;
+ if(ATOM || HETATOM) {
+ serial=(int) substr(line,6,5);
+ a.name=substr(line,76,2);
+ a.v=((real) substr(line,30,8),
+ (real) substr(line,38,8),
+ (real) substr(line,46,8));
+ }
+ if(ATOM) {
+ if(newchain) {
+ chains.push(new chain);
+ newchain=false;
+ }
+ chain c=chains[chains.length-1];
+ c.serial.push(serial);
+ c.a.push(a);
+ continue;
+ }
+ if(HETATOM) {
+ serials.push(serial);
+ atoms.push(a);
+ }
+ if(record == "CONECT") {
+ int k=0;
+ int i=(int) substr(line,6,5);
+ while(true) {
+ string s=replace(substr(line,11+k,5)," ","");
+ if(s == "") break;
+ k += 5;
+ int j=(int) s;
+ if(j <= i) continue;
+ bonds.push(bond(i,j));
+ }
+ }
+}
+
+write("Number of atomic chains: ",chains.length);
+
+int natoms;
+for(chain c : chains) {
+ for(int i=0; i < c.a.length-1; ++i)
+ draw(c.a[i].v--c.a[i+1].v,chainpen,currentlight);
+ for(atom a : c.a)
+ dot(a.v,color(a.name),currentlight);
+ natoms += c.a.length;
+}
+
+write("Number of chained atoms: ",natoms);
+write("Number of hetero atoms: ",atoms.length);
+
+for(atom h : atoms)
+ dot(h.v,color(h.name),currentlight);
+
+write("Number of hetero bonds: ",bonds.length);
+
+for(bond b : bonds) {
+ triple v(int i) {return atoms[find(serials == i)].v;}
+ draw(v(b.i)--v(b.j),hetpen,currentlight);
+}
+
+string options;
+string viewfilename=prefix+".views";
+
+if(!error(input(viewfilename,check=false)))
+ options="3Dviews="+viewfilename;
+
+if(getviews) {
+ picture pic;
+ add(pic,embed("label",currentpicture,options=options),(0,0),N);
+ label(pic,cameralink("label"),(0,0),S,fontsize(12pt));
+ shipout(prefix,pic,options=options);
+} else
+ shipout(prefix,options=options);
diff --git a/Build/source/utils/asymptote/examples/phase.asy b/Build/source/utils/asymptote/examples/phase.asy
new file mode 100644
index 00000000000..7256ffc515c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/phase.asy
@@ -0,0 +1,18 @@
+import graph;
+size(8cm,6cm,IgnoreAspect);
+
+pair S0=(4,0.2);
+pair S1=(2,3);
+pair S8=(0.5,0);
+
+xaxis("$S$");
+yaxis(Label("$I$",0.5));
+
+draw(S0{curl 0}..tension 1.5..S1{W}..tension 1.5..{curl 0}S8,Arrow(Fill,0.4));
+draw((S1.x,0)..S1,dashed);
+draw((0,S1.y)..S1,dotted);
+
+labelx("$\frac{\gamma}{\beta}$",S1.x);
+labelx("$S_\infty$",S8.x);
+labely("$I_{\max}$",S1.y);
+
diff --git a/Build/source/utils/asymptote/examples/piicon.eps b/Build/source/utils/asymptote/examples/piicon.eps
new file mode 100644
index 00000000000..56bf59bde96
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/piicon.eps
@@ -0,0 +1,1135 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 147 144
+%%HiResBoundingBox: 0.000000 0.000000 147.000000 144.000000
+%.........................................
+%%Creator: AFPL Ghostscript 814 (epswrite)
+%%CreationDate: 2005/05/07 23:32:22
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 250000 250000 re
+Y
+q[1470 0 0 1440 0 0]concat
+147 144 8[147 0 0 -144 0 144]@X false 3
+colorimage
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2rts7Z*U`K_\Jms=`eDnV)BF^#aQnF?PYs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts6f@F>Y#U0HO],N3WK,=
+aI!gMUk8XHs8;cjs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8Vfco#@%As6tC0iGZDf&oh%mnF5uJs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8VNUn6AL!Wd>3;]fH,mNQ@M*[&/KUs8W#oqZ$Tqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,mo^^"g,QI7\
+pYfu%M\9r3)=[.cs8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,en*jRQ'rlTik.NeTs,G-g)7QPss8W,sr;-Hns8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#up@\!rR3_h&IJ;Z3]S[5<=;p\unc/Xhrr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#umdKXM8/8.O%Hb>a
+s8S)$RMiW6KE(uOr;?Eks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr)lss7,UF`0_bKnUC5hB"Ea,CfVJCnF?PYs8N#s
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2rts6f@F>Y#U0HO],N3WK,=c(,`_W.Y-Ms8;fks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;6?js8T$jM6ML5
+s7h<Ag1@gL%Vo&_n*olIs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VNUn6AL!Wd>3;]fH,mNm4+4\Z1;^s8W#pqZ$Tq
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8;cjs8W+uSV"1u"981Qp"EibL(8$")Xm1cs8W,urr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,en*jRQ'rlWj
+k.<YRs,kQt)S)l#s8W,sr;-Hns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W#oqZ$TqXeLKXJcu,LM"95+\:kE.<>t>qnc/Xh
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#un*faK8/8+O%Hb;`s8S5+Sf5/>KE(uOr;?Eks8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,sqtg?ms0/;O
+\:Y"cq2+[p?FGLsAPsH7n+$GXs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts6oFG=\9F.HO],L3WK,Ac(5iaWe:?Os8;fk
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!r;6?js8T@"K=HXAs8.]Fe6]J7%:`6Rn*ffHs8W)trr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VQVn5r3r
+WI,0;]K-#lOj0I9\>k2]s8W#pqZ$Tqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8;cjs8W,+Vh;O:#ljd[o$gmNK+2?f)Xm.b
+s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#ss8W,emdO4H'rlWjk.<YRs,kTu)S<#%s8W,sr;-Hns8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W#oqZ$Tq
+[&8YhL^O1ZN:PJ$["Aiu:E&]jnc/Xhrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#umdBRE7hr%O%Hb8_s8S5,Sf5;BKE(uO
+r;?Eks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,sr;-Hns0en]\qpdor/C3r=gWek@87[-n*pAWs8N#ss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts6f=E
+<C[e(Hk#5M3WK,AcCPreWe:?Os8;fks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?Eks8TU.L:`?Ns8@oIdoj&2%U_sH
+mdBQDs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+rr2opr;-BiqYg?grVcZnrr2orrr<#urr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8VNTn5VsnWdG9<]K-#lOj9O:]W6\bs8W#pqZ$Tqs8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8;fk
+s8W,/X+n6H$NL'ao$^[IK+;9_([g_[s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W,urr2rts8N#s
+rr2orrr2rts8W)ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#srr2oss8W&qqu-Kks8W,urr2rts8N#ss8W,urqu`mqYgBjs8N#srr;usrr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,emdO4H'rlWjk.<YRs,kTu)SE,'
+s8W,sr;-Hns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W#pqZ$Tq];p\$NXPmdORpn"[=Jco8f-m_n,NFfrr2oss8W-!s8W-!
+s8W-!s8W,urr2ors8W,trVQQlr;ZfsrVZNjrVZZorr2ors8W,urr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts8N#sr;?Hls8Vcao#.kmf=m!]Z$Y9R\G>pq
+q"OL^s8W)ts8N#qrVZNkrr2rts8W-!s8W)us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+mdBRE7hr%O%Hb5^s8S5,Sf58BKE(uOr;?Eks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,sr;-Hns1PLg^lAj'rfH^!;71rb
+>"KOtmdL2Us8N#ss8W-!s8W-!s8W-!s8N#srr2rts8Doos8W,pq"XIOnc&Oes8W,urr2lpr;Q]p
+s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,urr2inqu?]r
+e^;=:O@[*C#j/r`gUJuhW@c,U+j$NXcF8GTb-h9Ls8N#srr2oqrVQTnrVuots8W-!s8N&us8W-!
+s8W-!s8W-!s8W-!s8W,urr2rts6f=E<C[e(Hk#5N3WK,AcCPreX+UHPs8;fks8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+r;?Eks8Ta6L;T#[s8A#Icr%&u%Tu@>mI'HCs8W)trr2orrVc`prr2orrr2orrr2opr;-Hns5;SM
+W/jN?H6LM?I,NShp\=X`r;?QnrVlfprr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2or
+rr2orrr2orrr)fpr;?Hks8UBc[W>CRY'^QLb=)C-KDtn7rr%fUomcYi?/2nBaI!gkX&RWbP4J,-
+s8W,urr2loqYpKmrr2orrr2orrr2orrr2orrr2orrr2orrVc]ps8VKSmo2alWI#*9]/fokOj0I9
+]W6\bs8Vunq>UBmrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2orrr2or
+s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+rr2orrr2inrV?9dqYL-dqY^3dr:p$\s8W,1WeA<O%0-9ema"b6J.>aR)!L5Os8N&oq>:*frVuot
+rr2oss8W)trr)fns8W,Ncb"mA$aYEkeY+,8TbP\<)Ph]tfZpl(s8W)trVlfqs8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rtrr2rtLO3$79*'r`'<[$.e"nGHX=E,2/a^D>
+q:]3Unp:<7PQ1T?p#0?8ZR<h`-e,h`o^_GMs8W,urr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+s8W,emdO7J's2oolG#@Zs-(m))SW>+s8W,sr;-Hns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#ss8W,urr2cjr;6Birr2oss8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#ss8W,urr2flrVHBgrr2oss8W)trr<#us8W-!s8W#pqZ$Tq]W?k*NXYscORCCk
+YCI*d7i:X]nGiOgs8W,oq"O=Kn+-&>o()>@nF-)FqqTW1F&`O)B+)>2*o<b=s5@8`q1\@a9>Q]#
+]:W6to_%S<p@@bCnaZ5@nal>AoC;ABnaZ2?nac5?oC;ABnaZ5@nal;@oC;ABnF,oBq>SUV[:)N-
+E`Wm0AdOT:%\n=^UNmEJHk3Z@'ul@Sd@MH?ZS;$t;#^!3s8S>]np'3-0ufP*`3P'Zl1=B4p[RbB
+nF,u<nFQ/<oC25?nF,r;n+,r9nauJIi8EZl5o-)7%G@pDq!s?[PT$g#IJWmAmd9H3n+,u:o'l,=
+nF,u<nFQ/=oC28@nF6&=nFQ/=oC28@nF6)?nal;@oC;AAo()DOrr2rts8;fnrVc`qs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trqlTkr;?Nns8W#pr;6Bf['[qoE2%]+Y'G;r
+H$QT=GcQ(9]Qn6tcC,CGqMjmd:U5T`903c%D52E'YC_A85X:#'!)a+0?3^^A#7"N>#[dc<9`P/i
+82VZWE!3_/);D2CpYTEZs-!?MHJ>GCT6M/$,>naPEs`7b#RP/M$"jPNBF5)]$41MT$#U%VE!Zki
+#mtVY$?-=ZE!cqk$Oh%[#@R`=@fusG1FPUr6kW`o&5"nk<'Lt1:C2GR!0qL-Xah(uN#0m5*p^L#
+r9//#s-NQGDq:a!LLVnJ&pY'(KbG/G&JKL('71?*HP.!?&efa-'7LQ.Ih<<B#mkV]$uumjF:o74
+%h<Ui%sS^$J.`NE&efa-'7UW.IM*<@&JKL&'719&HOpa7&.j.!&:+itH4:@.$Oq.b%<2XZD%R@r
+BkaEN[E\aOrqlTkrr2oss8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr<#uqtp<hr;HWorr<#u
+[C+4lBqlI^I0p@7$k&18)PJ8rX!8mn-Rl;A,f*DI@+Cn_s7hT@b>5Bo"'A6.,q?__0!QoXZ8FPT
+5=!CS4ioiOaZr275XELY7*J"ec::CNA5uNZ@L&o^&BBqNkIWSLoRQu<Ms.Z'Nb8PV2O@-5i(Qhj
+92*f/9[up6ePAul:J]P;:tAH?ek]/o:f?(L<8LYThGmP2=BOQb=lNLbiDEY=>[?&i?J/OffN__@
+=&uD3>)6Tc;dr?&Kk(@ZGSIQ>(!rBfm__3foR[#APk)s^TlguM;P@/qpKq:g?XN#)?ftg(k[7c^
+?si/+?g1s*l!n2h@:AM1@-h9.l=")e@:8A.?g(m)l!Rl_?si/+?g1s*kZqKW?!c`$?fta%jBc-Q
+>@$>q?0,6oi)a%=<E7mP:tSB5eLN2Z#7#oS8s&oGqYgBlrr2orrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+s8W,urr2cjr;HTns8W)2][Ai&N!'<7,:0Nr=Q!k+n8E:=B4pO;@-1HkhcEt;;HWF)>BA5a&-)Hc
+m`JD/IfNnVGuI`/='!jO<S:2HfM#&j8l!i-:=Dj2dS!<_92*c,9[-1&cU1(K3Ac@g57<Ec&$gg$
+hPqt%nU:H1K\WI?M/5XK7aFLmb="eB6UT$a6cVP^_a$Q+5XN@R6Gl#S_`^9'4[?tL5fGlO`B?K)
+4?pbH4Mj9E^,nBl4$(2?42Ep<^,J'i2`f/;1r(1TFs\7t9f`]/?3m*F'tK/8go)FniFW&hQM]E6
+_iY[28s(GN^b[jU0Jg0m1Uf%o[kKVI0Jg0l1Uf%o[P0MG0Jg-l1U\tn[P0MH0f-9m1Uf%o[kT\J
+0Jg0k1:Akm[PTkM1c;]u27GJ%[l?CZ3BFc53kmg@_EC0&5=37R7*&V=hfEl5(Drl87ZRNKrr2os
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8W-!s8DoqqYL-is8TmMdlKOH"9sK=42c#SojhY!5=!(,+J&rNL^=B=
+"pf__#C6U\FoVMo6SUs]V&01,N:"\]Z%WWP1+N>)Gm4It"9`rM"*aeIGQ7eh!!%'?!H8#?E<#uW
+!!$s<!,quBFTVhu!X3]q+XhSA$F5="i3=g4r/LO2E6=FM4"NAl!-ePIDu]o[!!.-@!HS5AEW?,\
+!!.*?!HS5@E<#uV!!$a6!,DQ7BE/$I!!$d7!,qo<D?'ZP!!$g8!,DQ7B`J-G!<Hs>"aC(OJcl3V
+*uZ5(6j\lj(9`B-c^GgHdo$/FQi,]C]8-h:(et&2C]OQF!!$L/!+Q!/@fQL=!!$L/!+#X*?N:(;
+!!$U2!+Gp.?iU1:!!$L/!+Z'0@fQLB!!$j9!,MW8C]FHO!!$g8!,MW8CB+?M!!$m:!,qo<EW?,\
+!!$m<"*uj`[rHKc'c)n;ZHW@Ks8;fns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2ors8W,rqu$Kos7GpVI=/(##^@jO[W$6\
+>@->9-`I7RIK0@a!!$L/!*K:%9E5&V!!#1a!B^>^4?tPDfqoeipPA4X9X'0_82q"X!&O]V3<0%=
+!!"tY!&srY2ZNhN!!#Oi!'pSb8cSic!!#Uk!&srY2#mV<!!"qZ!"<O7$,;H8mDqcss.Ao+9<3IT
+*#1F5!&=QU0E;),!!"\Q!&+BQ0E;),!!"\Q!&"<P0`V2?!<>=m$qL@!63%!O!!"YP!%n6O/cYl(
+!!"VO!&"<P/H>c#!!"DI!%%[G0`V2(!!!*B&ccfF#H!"had!_:bt7s7PPsBC]8I7J*BFZB<t5[/
+%Lu&?%S7-?8.Q5'*$&8u(Kq7U5Re,d&e[tS(0(eQ7h-##%Lu,B%o3E849,@0!!"ML!%S$L.f]Q"
+!!"VO!&"<P0E;)+!!"YP!&4HR2ZNhQ!!$F-!-h%+bYCse6q!:>s8W)ts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trqu]m
+rVc]fp%LmEOT>N<@V"b>C[`c&XT8NN!!$j:!au'/57%WU"pQeO7UM"/SUGpLJ:E`3Jsq7/:=#@E
+s7qH<a\/dg&5GG&F*34hJs(V5O+2Y?J:N`1J<Nhn+*V<OJq@0H=sm-/(+ggOG^5$pJW5//MLU,4
+JqTY$=A+-K"43JVq;Q&eq30^=,Bd6-GBo-uJW##-M1:#1It*6'ItrN'LOXf.JV&c(GC<@N'7OXI
+kN7D@?Q_s#'RG(TJUrQ*ItN6#KR\K)It*-$ItN6#K7AB'It**#It<-#Jp_s$L51Xs>=Da]!2b5a
+a,q/2b";X5QMB08["Ah-^T@>2s6oCCnaZ/@oCV;3lCaJn`N+"5[QaEQHIT6#cH!Njq"jLKn*f`6
+qYL&u\@Qj,H@^X$It**#ItN6#K7AB(It*-$ItrN'LOXf/JUrc+HA<"A2uiqQ!!$dP)OG/PnLH,\
+jlPe-s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#urVc`lqY^Bns08iO"U/fr0=5tKr('E(#RQ4c!,;Q:@K6Bm!!"3,5$#M9`:s#u
+p@e.Ys8W)trqu]js8W,5Y(afT%KH?]m`A,)J.GXK([UPXs8W,urr2oqr;Zfskhj>,T,7P%HN3V^
+jKB\[?N?adJH,ZLr;6Bjrr2orrr<#up\F`3C.FJ%"Q6L7s88&Oem,J3&Du0[s8W,trVZ]qs8W-!
+s8W-!s8W&qqZ$Tq`jh8JL]mbHEW>ZZhk_-FC)ld6o)Jairr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#uq"aeq>YA-]!2k>daHRP9cqOK>QhAd'X*bE-d(o\]s8;fls8W,dmdX4=%B+CL
+l+f=Zs,kEi&@A3Ys8W,sqtg?ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqcKf
+s8W+EH$fSl-3OH]!WmaU?f<Uk\UK"2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W&rrqlTks8W,'Yg!1LGY1TUF*%%%.B3@JEWQ;U
+!<Gsr!%C)q;o$2as8W&rrVliss8;fnq>'m`qYU'^pAb0m\u^P&Nt)-eL[N8WY^d6b72G(Mm/R+c
+q"XX`s8VWYm\kRKnBao0qiTmA0Vit)@8.^)l0SHMs7uKdqYL'bqYKs\p](9n]=b^g:CY.#')(@"
+s7VAhOq<Y!7J6EQqtp6cq>0saqYL'bq>'jcrr;6Jl\K6lgSu_&r/U3h9:Tl#Wh>+Hs8VlgpA4X^
+qYL'bqYL'bqYL'bqYL'bqYL'bqYL'bqYL'bqYL$`q>UBlq"jkt>YA9c!3(MgcBfFDd8L#ERHqjU
+a.Pp"r;QZnqu?]rmdKUO9GsmY&EUSds8S)"R2`N2L&_2Qqtp3frVlfqrqu]lq>'m`qYL'bqYL'b
+qYL'bqYL'bqYL'bqYL'bqYKs\q#CBo\@B$K!%%^H=9&>@7S(Z_43`/$\,ZL.s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#urVc]nrVl`mqaa86
+"9a9`@-D68lkUJ-!!$d;"ChH54:)<BZ*C\9s8W)trqu]lqtp<jrr2orrr<#urr2opr;-Hns1GIf
+_iG9,r.j^_8[*aV<CI_imI1)Ts8Mupp\F^!Sl=[Y/H>a8p!$4PP8\L?!0rXrs8W,rqtg<krr2or
+rr2oss8VunqZ$TqW1Sd0B)q><70!:TjgR(-CDZI/n,NFfrr2orrr2orrqu]ks8W,#TnT@e!;kY`
+s7_6"V&tA$(?t)Js8W,urr)lss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W&rrVlfp
+q"jl#?V4iu!N^klc^>[GfNA1RRd7jLcDX_<qu$Kos6f@D>tPm4HO],N3WK,=aI*pPVM"pKs8;cj
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts7#OH%1Off!)3FnD)OAd
+:/9V78<j/Sr;Zfss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8W&rrVc]orVZU]6])6ZMf<S-<E@c\$\n]^C'=cD!!!p193V#]o`"jhr;?KiqtpBlrr<#u
+rr2oss8W-!s8W-!r;?Eks8Ta5L;&ZVs87Q<btP?m%p2:;m-X<Bs8N&us1kgl_MnZtqM>(1CsSLg
+P&(Lo2&#6>mJm4drr2lqrr2rts8W-!rr2orrr2rts6T+;N,'6\U`]X5NUkIsW-Jfub.RcSs8Doo
+rr2orrr2rts6Aq;L1_O^W?_H@MY,G"XaC;%E(Kp*s8W,urr2orrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8W&rrVc]nqtp:r<C:Cl!j@4pd$l$Nfj"LVRcM+9aei#:s8VQVmTiBu
+Wd>3;]fH,mNQIS+[]"iYs8W#pqZ$Tqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+rVc]ps8VHPl3n(H!!#[m!,aeY^JRqd%M3:BnF-DWs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr<#urVc]nrVl`mr'Ec3&JLRYHMp?*c3"5t!!$[4!)<n007SJ.
+oCMMPs8Vunqu6Tos8W,urr2rts8W-!s8W-!s8W-!s8;fks8W,1X+n6E%0-6Xm`eG/J.GgS([LGT
+s8W,Jc+L?8')LQps7hK1W[=Zo'j='8[^NOBs8W&qr;Q]prr2oss8W-!s8N#srr2oss8VNUno7hS
+`0(c2m!A^"I'S5%Xe'k=s8W&qqYpKnr;?Hls8T*kKr&hjr8(c[pkIS*-@oJ._n`e^s8W#pr;Q]p
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8Vunqu?]r]"5Hs(]ekb%BP1!
+d[M3PhIHTcS`774c`:46m-\1O(92]ik.NeTs,P9l)7ZYus8W,sr;-Hns8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2rts8Dops8W,gnF$hs0E;)O!!%1B<SB8f_g-O6s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W&rrVc]or;?I[6^&K0Uj77b
+4$CC\!d=\IB)hp$!s9RN[(-/9s8)TgrVc]ps8W-!s8N#ss8W,urr2rts8N#srr2orrr2flq>^Kp
+\>b1oM@BO^J*tTSZ@NNi8J^[[mem(aZB.H3ZRPqSRIA!Z^Ps+;5lch"J,fQKqYL'gs8W)trr<#u
+s8W-!s8W-!s8N#sr;?Eks8T3pJ"^f]o\!IKqN0:(+FIZ@mdTfIs8W&rrVuotlg*qmBcZ!.,QI\"
+o[['HIKkXP9)JSes8Murrr2orrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8Vunqu?]r['[1f)Zk7f%BP0ueY+&]iFr8kSEIXB]9u/m8K+XW%Hb5]s8S5+Sf52>KE(uO
+qtp3grr2orrr2orrr2orrr2orrr2orrr2orrr2orrr)fpqYL*bq>:$bqu?]rZEgh;!'1)[A.9'/
+DJo"\(RobuV>pSqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+rVc]nrVl`mqa3c9+<dh2H2]NR[K$;J!s3!7!^?tt,dXhas8W,oq"Xjfrr<#us8W,urr2orrqu]l
+q>'paqY^3dr;Q]ps8W,sqtg?ms0nq^\:k4gpNH,Q9=9?^>Y#S&qZ"L?L;o;Zs87ZNk%iJ;)hqf*
+Cgfj1qu-Qps82]kqtp<ks8W)trr2orr;?Nhq>:$br:]jYs8W+dP_Xos!:%?^s8SJL]fVd0([UMR
+rVccjp\4^fs/DZGTPso+g0agQM:ngTHs$Zj^:4.Bs7lBbqYL*cqYU-cqtg0dqYL*cqYU-cr;HTn
+s8W-!s8W-!s8DoqqYL*cqYU-cqtg0dqYL*cqY^'\p](9nYHP2T)$"h_$a,1!eY+&\i+E#hRcqUL
+Tlpp:FV3lN2#mT7e"RhqXb6ZRs8;fks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+rVc`qs8TF3]*&6j!!$4'!I%./cXg\T!<R/J\&\OKs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8W&rrVc]or;?FZ7$]&DZ#t9g.P._&!,r)FAcMf`91rXbp%84]rVZTk
+s8W,urr2lprqcKgr;?Nns8W)trr2ors8W,urr2N[oCDJDn*f`Ds8T3nJ$st7s7'mrbtGBq%r#&d
+^q-VRL)oX1>kIE=etXXcGSa(7#.(\Cs8W,dmI'cEq#CBorr2oqrVl`mrVuotrr2oss8W)trr<#u
+o()=,Bc#3g)?9Ggr7u%^Er`D@N;rqXs8W,Vf<hl<&G=7,s8S;]i(pn:!1SdDs8W-!rr2orrr<#u
+s8W-!s8W-!s8W-!rr2oss8W)trqu]ms8W,sr;HWorr<#urr2oss8W-!s8W-!s8W-!s8W#pr;Zfs
+`lGta3"1:F$a#+!etO5_i+2lfQhAa!Wd5,pTIp3DPKK@5\#4QMrr;KVmIKi=o()ABo(2GCoCDJD
+o()DCo(2GCo^VJDoCM\AlgKIYRtcWq7RhP$!(?kfB+,3*923fQEqKtTP<hKcs8W,urr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#urVc]nrVl`mr'No<-7H0BGk`U7WW3$:
+"U/B9!%^`7>5S3ns8W,rqtpEns82]kr;?Nns8W-!s7Z0\qYL)u\&`T1S:5phF*"8h%UfMF@gWNR
+!<[3m,<*T+'*%0%o#aD2L^um0.f]QS#R+E>$>9_M@0H[;!!$:,"'uHICBk)U!<HCc3d\`\cN!qE
+qtp?ls8972b\qHrH@)];H)c7>X))^Q;*HGFN=PX@C]F!]aHI'dE`m^:[!-\f75Ql37kf=2@s`K=
+D,NGY.4.ndF+].PH$Q65H_l(9V0mWdI!_];I&24<VL!QaJqC#glgb#Ts8DoqrVc]]m-TIZUO.?a
+I!hf=I&24<VgEchH[D]<H`2+2UQ(8G2E,1l(]\tl$*/Xoe=I`Xh-L'\Qh&U*_3#M&O')Yl<!<@r
+#RFK:#?V6;=pPC;#7"Q?#[[fBAI&QR#7+rJ#\jVND$^Mi#mtYP!+,^+A,u^R&e^?f3kT0@n7?1s
+)B,"D!*m+Hc2[hDr;?Nns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trr<#u
+r;?I[7$Af>X`\mb-7>_l!,i#EA,lT[8kN4_qtg9irqu]lqtp?ir;HZqs8)TgkND5iMmGQ1L&_9h
+#mteT!-\VPM\d8)0JU'r35.F9_Dsd"7Rau!MBr5R8b0k_Z%O,m:<?%!g.=rf7nD'"9$p.$cpgUP
+7n:ff5fPrN`%s9b#ml(l%nQ*Tmf!+`9MC$<!-o(fRL^$q%M4j8&<I8/U,FT&V0N(+a%?=2RHM"3
+G?5F\#)i`kM[pGj#nEI-"criiNW]ZQ#nN=-$&JW^IK0A!!!%KK!.4bHHN4%n!!%?G!."VFHN=.o
+$4:gXYfZqFs0fDS#RF</!G)62H2mqj!!%<F!.+\GIfKJ!!!.TM!J:@PKFeZX)&no)1HB\_!NLYe
+d@2-NeQ2_MMY>OmV03;(/92j[[4!K*-n2;L/@$iZYV.Z:0f$9p1V#G(^,\9k4?peP7*.qicV73d
+>[?Au@d%B6l"Ol"AS1?i42D%'HiX7K[C"0Xs8W#prVuots8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#srr2oqrVl`mqEdN.)&]&jGlB*@XT/?="U/B9!%1B2<r;dkrVc]jq>:*frVlfq
+s8W,6^="r!Jcl6u"p]i--`p-=eR;qOCM`KZEV='[mo39=:/BA4:!lR,e4E6LY(@_e`&I(t0s6*O
+5XNFW7En1gb!eeC7nLlo8]jRqb=bLR92<r.9@%BjnjuL$!!$&WMPHE#YQ+Z.='=F$EV=*[nS;q3
+C2<<VDuNL+Vh\dhh5i"(r0$Zu=K[,^C1ObeC]%m[l=O\rB5$^JC@#VJl"4SlB4gIEC$o\MmqHP-
+Bkm-JB^fVJnRu\-Bkd!KB^BMOnL#`g%Luk=p%1jKCB+?=1c;dVBC'/>l!\/h@qG%>B'a)?l==Mk
+AnUIBB'j)=l=+8j?=)h_3C%[f!3(Dbb*<k2^c;5?:$Af*Vgogt@G,.#l<dr]?=)Yr>i8[dhH3k8
+;cMLK;UnQ>eOiQ`7nLom7`mq]`B$)p2)Vfs19_fDTEPLL!!$70#Z7t9`rH)=qYL*hs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts7uKfs8W+FHDUlNKm7nC2)`#G!-&/G@fQKY
+8kN.^r;-?hrVHBfrr2oss8KaHe2]RF!!%'c-)t-PiG`c.@V+k!:!kaT\/l``',?T;%>P,lI0'Ot
+!!.$=!,VlBB:sJejKC,lX=LE*'I"Dq!!%*A!Gqf:E<#uT!!$d7!,DQ7C]FHN!<[aT?fj+"ZiC).
+<)e!38Uq'QM/-qt+<dE`#_Wd%NXuk`&/1*9'9d$(*6=BYqWN#"mt&fQ%8&ZN#S*C@(Q]CLQPUR,
+(E8\X)j_?[QPpj5*$(Lg*h+,iS/`T?*?^jk*h!rdSf8]C)&\fE=klG9cO:5#jQ,>8'Lr-'DbX$W
+;,Z![(RZ<fSfJoD*?L^h*LdlbQl$d/()`GS(mc!TOqeh!&/(9V*[u26$DVna]o3`RRiT\?+Ld1<
+75dsD#*B<'KaJ0>$4;Ci#_E6dI0Bh$"U02R!d4PDC]FHO!!$d7!,)?4@fQL>!!$"#!_WLn92/-#
+p%A%WrVcZlrVuotrr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,sr;HZqs0oJ`
+$4MJuB^J;]c2[ig!s2s4!%gf8=oA3pqtp<gqu$Kork?+p3]`#r!-BP9Y@hS<Bl!3(6,a]\Qj*hH
+!!.*?!+Gp.>lXk"!!#1_!&srY0*__J%hDVJ$V>VH&&XSR_iu@EIh,OD)Z]q)&.Co/"#^Pr8Ic5)
+%Ll,D%o<6+<#m!KCi/eZ(7,"$7!!F"*?ArB-EC`km03fF!!$%"!'pSb4ok[M!!#P=*?qY;%HbAf
+s641OW?m+%'*&#1!!$1&!([(i7fWNZ!!#Oi!([(i8,rW\!!#Oi!(R"h8,rW^!!#pt!+,^+>Q=bE
+?<uVK27sY=EilIL!<Gam!dS-[juPQ:!!$1'!D<Cm8,rW\!!#Oi!([(i7fWN[!!#Ff!(6ee6N@*V
+!!#Rs!t/-m!ge!FWe)(lKGg(n#ppQ5!!#Cf!BpJ`4obRA!!"qX!&afW2?3_2#6mL*%TNuJ9b%Y-
+%Lu)B&4Qg,1dsiJOH?C(kiqs?q#CBor;?Kms8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr2orrVc`nr;8cDNB]\LA7Y!1#_W3ZB)hon8kNLhr;-<fr;?Kjp%A#M8WEcNDCI'=
+BPR!ND"'AD\d8au!!$j9!+>j-9)nrK&.h>8"YN;8@Yor2It*B"G'pg0])):"nF?1*E^u4'!j74s
+P&D(04:H+,%VJ<4@9cLsoCVPAnFcJHhr!Ds"_'AK]O"t+!!%3U&m@Re?iU17:J]G6:X]:DD?pJ0
+H$P3tJsUt:PCS4TJUN3(A.cqK)W%PCbF9W?EY18]&N_TqI!_'.JXV+=Q[jUTJ:O/?J=M.?S:H-[
+J:O/=I[Z+MVFX3h!!"/B!)a::MIpMf)]YIi*+a24GlRh2&.st7BC$`aUBh-+I!h93JY%CARt-$Z
+J:O,>J=(k;R"0^SJ:O&<J=1q<Q[XCMKnc:":IccK!*))]>X8?o8fE&'Lk1,?It*N/Iuf)/Mgp58
+It*?,JVnVoHapSsqYL*Xn*ff:naZ/>naZ,<nEp#GpAb0ms8W)rr;HTmrVuots8W,urr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8Vojqu?]rG^-5%'UO&gr#?`K!!$a6!)+"<.dcWj
+r;?Qos8TC1bl\)c)]bV`B'a>NnMN8:#mu@d!,V]9=onag"9^YP7:)"8QKdYunaZ)Bp\+Xes8N#s
+s8W-!s8W#pr;Zfs^V76J3"8A6!\PMo(C^@@3rs,.;"jY[s8W,pq>:3ls+cB*!!$D2?/n:@a8c3N
+,U?'&E0^J(Eb&eJ1H)]B!*MlbDZBb8rr2rsrr2rtrr<#uIr7c?C'D/+)m4f.M/!bj/-)oKJcGcM
+r;6Bjrr2rts8W-!s8W-!s8W-!s8W-!rr2ooqu$Kos*fE]!!#S:-`Cj!o)JcB=BLQ5J<g089-kp\
+DK,:L!.T6<W;lntqYL-hrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#unF5t&KnPD@I$^%O
+lg3s;s8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,sr;HKgqu-Km
+rr2oss8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#ur;?Nns8TR;cO1/3
+CMN?)6H&p)EWH2E!!"=MZ*OE0s8W-!ZEhdV!-Ue#c#e%&5=!0p$\\Q\CB+?<!!#"k&O1erOR)5u
+q>'dbs8W)trr<#ur;?Nhq>0saqYBs`r;?Klrr2lprVc]nkj%MlM1pY:ItWAr]=YQNrr;ooqu-Kl
+qYL-is8R4aUAt:BD/Sqi,c1PA=?SfP&eS7\(78rUnJN75!!#97J;XC,s7Q'YqYL*`p\=dgs2Dme
+:cel1>RZ<u&m.C!2(B=-mHsoPs7uKeqYL*cqYU-cqtg0dqYL*cqYU-cqt^'bq>'pfs8>M\FoVMJ
+5XE@q?KD.eATMpQ.4J!l!*qE=[q0.;!!$PYI[gB;s7Q'ZqYL*cqYU-cqtg0dqYL*cqYU-cqtg0d
+qYL*cqYU*aqY^9hs8W,urr2rts8N#sqYL*cqYL'bqYL'bqYL'bqYL'bqYL'bq>'mbr;?Qnrr)fp
+rr2orrr2orrr)fprr2oss8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2orrr)fpr;?FU5E%]ga(8iI"p]\[!Fu014%i4Ms8W,ko^mQZV[Eod<`\*kC@<#YRfEG,
+!<HU/!'q2/5(A'CmHs9?s8W-!s8;fmqYL'erVlfqrr2ors8W,urr2rts8W-!rr2oss8W&rr;Q]p
+s8W,urr2orrr<#ur;?Klrr)iqrr<#uoCMSa%V$k6WG6/8%1S-o!(M6ZM]3UX/2"8;@HI[qIK0@9
+[^N^Gs8W#pr;Q]ps8W,sr;?Tps1Q"N1arhl.17jZ%CimQs8W,sr;?Qnrr2ors8W-!s8W-!s8W-!
+s8W,urr2orrr<#ul07=<$VCC!G[Fh;4?gR]!+N%2\f)Jb!!$_*9[QL-e,TJV\@BQYs8W#pr;Q]p
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trqcKfqYL'cqtg<krVuots8W,urr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,pq>:3ls*/dh',-[UGPiI'TE"t,!!#\(&1Hl1li7"b
+7Rht0!,l7QkZqNT#RZ=e!,;W><WE+K9hf*ho^i%[rVlfqqYL*frVc`prr<#urr2oss8W-!s8W-!
+s8W-!s8W-!s8N#ss8W-!s8W)trVHBeqYL'bqYC'er;Q]ps8W,sr;?Tps1,\]!!$A":=;p7eGoSa
++X(-2EK:)"@9H^g7nCi(!+lr\8b;QDs8W,urr2rts8N#ss8W,trVZ]qs5;kq^:h5Sq"ajcr;Q]p
+rr2rsrr2rts8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+cAu!!#J.*Lpn^nduP"():,VXK2C%8HAm<
+?=2eS3kkt,B(PWes8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts8;fns8W,.\'GEkK558l
+5siNj!-/)@>6"XM['[4?s8PDPK`hR1C2<9@=l'AgK)bmb!Wl.""!OtU\,ZL.rVc]kqYU6irVuot
+s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL-is8R:eQiI,'B5-fe0s^i[?R[EuCi#=9!-W$iln:&r!!#c>H'\L1s82]krr2oss8W)trr2or
+s8W,sr;?Qnrr<#urr2opr;?Tps8N#srr2oss8W-!s8W-!s8W-!s8W-!s8N#srr2rts85>UC]FH>
+3BOo`A*EsnD-:"rIt)tK!'Lf%NFZVe+X<oj#>XdXmf3=erVc`qs8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2orrr2lprqu]l5<k2o5fdGFl3.EC!Wcg3!'3_E>6"X$77E"<#_d28oM/33!sO2V!GVT78HT&8
+['[7@s8VrlqYgBks8W-!s8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr<#uoCMMa&R67qSn`*4',?Z1!(:sPJg2LZ()`QVD=S>TOoPJM
+L5)#os8Vrlqu?]rs8W-!s8W)trr<#us8W,trVcZlr;Q]prr2oss8W)trr<#us8W-!s8W-!s8W-!
+s8W-!s8W)trr<#unaZ#W%7L6sFB;W#84h,-!)B#QYEkKQ!!#A-+.[7co*,MX6:,qss8Drrs8N#s
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr<#uq>'pfs8R=gWtQ59G'<d&*M!01B`J-+$k+K_s7q(kW;lpE
+E,bJA9$dS?HNF4^!Wkar#plpa[/^1+q>'mdrr2rts8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts6Ak9"pSd(5/g]/hZ*Y!
+#R=(EEe+;p@lZTb>?p.f!-ASV;![H5s8W,trVlfqrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2opr;?Tps0oJO!!#b#$]/J.lm!dQ"U/6#mHR>;CB+?6
+/M=/CD=RZ,EIWJ:s8W,qqYU<ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W#prVuot\$sZj%>8S7nNK1V
+!!%!>!F#O(+iVF:]tN&#"aXZgl;:I0!<RTL!bVK51eUJOp%@tUrVcZlr;Zfsrr2orrr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL*hs8Rb*VuQg3@q=gc42([p?n*X0F*!6>!+9,>j?c8T!!$OE'h@lenGiOgrr2oss8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!qYL'gs8RV"NrT/L
+-7>X*D=Io>MA6k-jQ,).&NKgkB0&/h?!ZCh!*al"PlLd`qYL*grr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+rr2oqrVl`mr'*E*5![1t@d4+$J-#d_!!"oe@r&lqeGoSc:/KMN@d"%&K`V<g!!#;W8n%Voq>^Kp
+qtp9js8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W*c6@B:PNc8n.)B>4H!).`dOB,D>!!%RcC@3GuW;lok
+H?teTs8Vrlqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr2oss8W$h8T4Y0=ueXT@:JI$!+pV+U&Y/l$O]Q,!,YS1e4E<\!!$<8\\nIIs8;fm
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2rts7uKgs8W+DGcDDkQ[!`O*$1[O!,2E58KAg)X/j)=!c:Csb\V1g
+&/1-*!,MW88J)O]mHs<@s8W#pr;Zfss8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts6An8"pS<j2nWL*j95a;
+!!#B4H%R(VAfVqdBl!5L&rlql4be]Qs8W,qqYL6ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts7,XH%LkW&!,k\2e4i`i!!#l[P,caMb5_N.
+!sEpY@H9@+]EegRoCMVSs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,rqu$Kos1#Sb$4MH!C@OSW`rH*[
+!!$.)"=pOQXVVds4$:;uEV1.dQiI,'!Wl7$![>"Y[f?C-qtp9js8W)trr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL*hs8Rh-V>pU+?!lYW6,N[&AJl=SUSFpk!,"J]aAuC"!!$sH$V]mPlMpnarVc`prr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srVc`qs8VENljXA(
+!!.LXAEbd'[/pG<s8W+NJqa7*3t;g^A7b!K,,>GK:%7Z>s8W,trVliss8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2or
+rVc`nr;8`CO$5hLAS(-2#D)sWA,lTj:/4ti;Oo0aZ#OgZ*?C^O!,_i><s&OQ['[@Cs8W#pr;Zfs
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W*c6@B+GMJ[;(+!@0U!)?d(FFo+6!!$J:@d-*@_#OIG
+(DfF/o'cVYs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8)Ths8W+RL6_f>6PgW,BPQuN(RYC/9)nqkL5)6!!(IqLSSN*5"pp,Q6?rP1rVlfr
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2orrr2lprr<#t6puhO*MR\!q]-`K!!$a6!(SUm3coJ:$4Mi6FS[I;WrN-:
+!s;^0"=pjd\c;^0qYL'gs8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts6An7"U8-c1V."(k6D9E
+!!#6@MNV(DP6(i<CMWD_,GG/<7XBB;s8W,qqYU9krr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjqu?]rH?thV!)5("Y\S%F!!%:57<ee3r's7k
+!!$"N/Zil-o`+u4It+Ess8Vrlqu?]rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?Nns8TI5bmOr2DK,;/3PGInE<#uA
+%1P"7G)-P9IplaI8kR>.!-/)@?iU0UZEgq=s8VrlqZ$Tqrr2orrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL*hs8Rh-UAt:'>[HJX7)o9-BFthChVQrp$sb5-WbH28#mu=c!)0r6_#OH7r;?Kms8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VWZmM$@(
+!!$Xu7)i;1huEa[K7fcqs83001&q;c3B=i]?fqCh?%%*ds8W,qqYU9krr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+r;?CW6'=l6do]f2!!@ZO!Fu01/Pf/G8P5-s0",P2mg9DV!<Hj6!'3eI>Q=a'r;?Klrr2orrr2or
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W*c6@/nBMJ[8'+!R?X!)ZZnE4rs,!!$Iu8^(%1f)Peh
+%Ltqtna?GWs8N#srr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#ss8W,hnaR%t:&k9:?!cJS5K3['>J%MgrVcU&%8$U#C.q@K9MNt9!+*4H`W,u<
+r;?Kms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,qqYU<ms*fEo&e^@KFScjlQN.#$!!#/i?tY+EXpYYqG'<a0-DphDC]FH2
+&eZ\\m-F]Os8N#srr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts6An7"pS6d1V."(k6D9E
+!!#-LR\Gb!VuQg-AnLBj3kPFm=\22(s8W#rrr;usrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2inr;Zfs\$s*P!)*k5N+ltm*Zq'\#?(<jp$_A=
+$49Z2!-VXTiB06>#RG,8oC`.`s8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!qYL-is8R+\YX(V#;,YmD!-/&><sAjY
+G'/i](lVg0k=J7k!!%'@!+5d,-F0q_s8W,rqu$Kos8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL*hs8Rh-V>pU+?=2bZ6cT0,BFk_Ahr!-'(0V4\O_\b'*$1UM!(DEgNrT.ZqYL'gs8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+#W_
+!!#P=.]dN*o`,&E5X9Yqs8Rh.OT5AE$4DSuAEbKlYQb;1nF5lGs8W&rrr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+o^q_m)Kf4fj#/m+!!$O0!)E_#3=#q/92*]AAEX4&K`V<h!!#)S9O%Pss8N#srr2orrr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W*d6@K7KMf!D(+!@3V!)cKaC@L]["U/?d0!f,#l3%<B
+!!#[$\%Mb@s8;fmrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#srr2rts85DYDu]lF4[6nk?fV1e@![-ds8W+EH&Ve(6PL?$BkcrD&!9.EIfKHI
+rr2rsrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8Vrlr;ZfsEcS3@3Q,3/i!^*Q!!79C!.$t!aDPnf'Gco5!,DQ78J)O]
+m-O*=s8W)trr2orrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts6An8"pS?m34rX-jou'@
+!!#*LR\6+<Z2al*;cMCC:=9+BCCUh;naZ#Hs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#unaZ#V%7L6sG$%r+5t&fp!+<.>_Z0Z9
+IX[[b!(eIaVf$JK!!%=nI&R)Fs8)Ths8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,rqu-Qps0]8[$4DGn?fu0>nQK2Y
+@V"_;B^Zr^T)\k1!WlC)"!b1[[K$:,r;?Kms8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL-is8Re+W;lp4?t&+Z5/R@#BF>21qu#u3H`$iDD.RDK1,ZN@!*;``CB+>2rr2rsrr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2opr;?Tps0oJO
+!!#b#$]/J.lm!dS"p\6#nac_[s$fIm!!$.W1:(\/mJm6$I!_Ufs8Vrlqu6Tos8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2orrr2rts%?"D!!$[S+eh(]^,J*e&/($)!ce8@<!*4P['[FEs8W#pr;Zfsrr2oss8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2orrr2oss8W*c6@o[XP&G=3)B5.G!)Q9[@/'Ee%hDkY(7K#ToGAI5
+!!#97J;XC,s8)Tgs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!qYL'gs8RV"O8o8M,q#U-Dt3r3KL/"Ss8W,gnEg\p3rf7n4?gMa>MfD\?A4*,
+s8W,qqYU<ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2oss8V]^omM7b$k-GB!)3Fn:&k8`!<G+c#r&]l\,ZL.
+qYL'gs8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,sr;?Tps1,\W!!$%f7*8e>huEe%
+!!#R']u9[>q#^_,1GlUL@H@UpHiO.7[^N^Gs8W#pr;Q]ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W!g8T=_1?9:?c?t&*r!+^P-V#UJp
+mHs<Q&5N9+D,!jW7Rt`-#&<Mkn,NFfrVc`qs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#urr2opr;HZqs6T+?
+L5).HJ"(n9QA($Rm-O$;s8W#pr;Zfsrr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qtp<ks8R:eQiI,(Bkcul27W\eA.fMEs8W%RLo::R?<ULg7nCi(!+lr\8b;QDs8W,urr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts7,XI
+%1P`+!,tt@g.=r_!!#lKK:;i?s6&S0$O]i4!-VURjuY]@#7"`/o(;t^s8N#ss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#urr2onqY^?lrr<#urr2orrr2rts8N#sr;?Kms8W)trr2ors8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2orrr<#unaZ/]&7He-UMF];&JL6+!(D$QLB%;REcR`O!-;jhm4U/s
+!!#c>H'\L1s82]krr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#sr;?Kms8TX?^&S.,$42AuB'^imX9Ac4kND+0s8Rb*NrT/C$4DW!AEbNmXp,,7
+o()AOs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#us8W,trVlZiqtg0dqYL*cqYL0hrVuot
+s8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2opr;HZqs1#S]!!$P-;:eWAeGoSi
+!!#9r]YFLHrsT<?)BGDbD=S>TOoPJML5)#os8Vrlqu?]rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tgs8W+LJ;XC-6QmYICM`PN%ZV&2<:B;D
+s8W+JIZOO05nk&uBP6ZJ)4:sE;tT_Ps8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2or
+rr2rts8PGRF9;YtDf,+o-`-kD?4ml4rr2c*]#F^M=$Agc>?g%d!-ASV;![H5s8W,trVlfqrr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjr;Zfs
+I!hC`!)ba7\7]I?!!$e\HD1B=s8W-!J:O'g!(S1VT5SZA!!%OlFe\p9s8)Tirr2oss8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W&rrr<#um-F!C#[B,?\79+9#muFf!(2*[NW9%YH[D%Y!*ru>j?c8T
+!!$OE'h@lenGiOgrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8VWZmh6@*!!$_'9$U@7g&M+PJ:Npbs8W-!s*B!Y!!#bF/Zs#1oDel2
+I=8!ms8Vrlqu?]rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2ooqu$Kos*fEk!!$_A@H9[>`W-!Q
+%LteilKJ9Js$T8&!<[siC@3GtW;lokH?teTs8Vrlqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,hnaR%t:]LK=?XMnX5/R@#=1GcU
+s8W,gnEgo(5QCdm1,HCLAa9<rAq5E,s8W,qqYU9krr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2or
+s8W,joCEJ'=r&!ED/Jh^)O^X+;+=#[s8W,hnaQhh<$<KbBkm&H&WHbj5DFoTs8W,qqYL6ls8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2inr;Zfs
+\$s$N!)*e1MJ$Sg+<dKb#[-]fo)JainF5iU%R:!oANW/l>$Bha!*4T!OoPI]qYL*hs8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2inr;Zfs\@BT[!+/;hcW+$&!!%0B!(jT+^An65[C*pQ!+J5]b#MKu
+!!%!I$UsCIkPtS^rVc]orr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,qqYL6ls+#W[!!#G5-DYHpo*c%d&.hV+nF$>Vs7#OH%Lu&1!,>,!cV@6b
+!!$E;\\nIIs8;fms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2onqYU<ms*&[X!!%(WD=T52Y5eQ/
+'bs(%m-F]Os*]<c!!$M?A*H0@_>jR@8P+%(s8N#ss8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2rts8>M\D#aQ>2E/-WAa9<rB6\Zl
+s8W,urr;NYnI5q(!!$q;<S9Z*b6A/ao()GQs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Doq
+s8W,dmI1PpBe1j?BPHlC%Z(/c8Ul5Qs8W-!s858RJHlI:CM`Ma,,,&;7Y$#Ns8W,qqYU9krr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+naYuV%Qj^kDGX-Y:f5aC!*4i/UAt8ns8W,blg+ue;?-]??XVtV4N%C-AFT*Zs8W,trVliss8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2flr;ZfsIXe$k!,?.YlU=:a!!$sI%n5dJkPtS^lK[[>#[K,>[qTXG
+#RcCf!Dp88^An65r;?Klrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,trVliss6T+>$kQYH#(UB%lSLK0#7G22m-juSrr<#uL51ij!'U`!M.^Me
+1,QNH$Y8i!oDejjrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2oss8V]_ndc=:*ZgqpFSHjuSH&Xl
+7n@CnrVHQos+Q9)!!$>.=PZqTfDknj%1ktuna?GWs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sqYL*hs8Rb,PQ1\R+!@+mDtOteSI#[%
+o'u2Jrr<#us+#WZ!!#=s&s$dAm3sKd#74T)o()h\s8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqu]m
+s8W,/\]OmPBhM1I?<uIn$%N!U4GAQOs8W-!s8R:fUAt::DJei&3Of%h?:de.s8Vuqrr;usrr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Th
+s8W+LJ=QZ?;)'l5EHCdQ"+ip2HN4$Dq>'sgs8RV$PlLeS(DrBPC[iJgU(.f=o^q_Ss8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2cjr;ZfsGB]VY!-rR)oeSD2!!$[I),0;[kPtS^oCMPa'4)UuS8`NC
+*?L^N!(MKhMuWhWqYL'gs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2ors8W,t7nR_#!+J5\`+3B@!!$Y\J#32Fs7Q'[s8W+LJsZN<8KAkA
+DK,@U$B0+OVuQesqYL-hrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2oss8VENmLKqE/haPIDY+MSO8o8O
+H?tGJs8W)trp&b8"UJm%3PK'9lN@KH!!#Nt\%2P=s8;fmrr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VWYljXIi!!%%=<7b)Kg&M+W
+K8-'!s8Vcbq#CBoJ:a6j!)+U_TlY;M!<e1)IB<JKs8)Tis8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqcKh
+s8W+PL8FqNAn,?4923e6!-J8A3k2]0s8W-!s8Re.VuQg/?XVqe:"'(BC_R^_oCMMPs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+s8W,io(!;(;ucuFA7aph6,a!6C@(<Us8W,pq>1-ks+#]k!!#e@.&V62q#CGIH[Vmns8Vrlr;Q]p
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2orrr2ors8W-!6:?G9&!D-ZqB[Ja!!$+k88eJ-rr2oss8Vs`7!Sb6Jo5Gq
+0f--9!)e)gRK*<eqtp<jrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W&rrr<#ulg3sF%Trr@KP>2i/M=:5$Y/buo`+skq>'mes8RV$S,`Oc
+.kIfFG5M=?I!gCBs8W,qqY^Bns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?Kms8TX?_Z0[=6q#.,AEF.*K)bm@
+L51ums8W)ts75^L#mscY,c5U&o+i41!!#KCLmA#?s8)Ths8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYL6ls+Z>j!!#A&)4"rOoGo$J
+#RXf+nac_[s7uKes8W+LJtE#C;(aQ*FERBZ!.0*BWW3"uqYL-is8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqlTj
+s8W+CGb"g7F)>g`4?^=W!,2rU6KmXos8W-!s8TR<`W-!J6Uf+(?fM+eGmb'\lg!g9s8W&rrr2or
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL*hs8RS!PlLeV,:0+'EVC%YPRnL/oCVVRs8VojqZ$TqJ:aHp!)tU*Y]Y*b!!%@nI]<AIs8)Ti
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2orrr2rts7,XN&JSq(-`V0*oG8=0!!#qf86c,os7uKfs8W+JJ"?W?AS,N=
+7n:Z$!,*)a8FuHBs8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8)Ths8W+LJt2lA;)'l5F`mEY!./m6V#UJpqYL-dqYU<ms+#]o
+!!#nM0X5\@q>^MBI"&'ps8Vrlr;Zfss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sr;?Nns8TU>bQ%WY<EIsV<SIKTFoVM6
+\@K?Rs8W#prVuor77_q7$&NS>oI;Dl!!#oCHBnO1s8)Thrr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjr;ZfsH@24_!*;9H^hINN
+!!$e`JZ&PJs8)ThqYL*hs8RV$T)\jf/hjGMFnl";H[L:As8W,qqY^Bns8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr2os
+s8W*d7!o:IMK<k6-nDA!!+Q]Z6LjU6s8W-!s8VWZnH]J,-nDE;DtO\UOoPJML5:uls8Vrlqu?]r
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8V]^mM$L)!!$e&8'>(?irB'eIt+0ls8Vrlqtg0ds8W+LJt)f@:b40#Fa!Z_!.90CWW3"u
+qYL-is8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oqrVliss6K";#n(<+4ht`EljOAZ!!#T?JWTp3s7lBcs8W,0]#t'RCJ7IN
+='4;Z!-\h]8*fI's8W,trVc`prr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,hna?nt8H8a1<*.^L;V1sL<ecF%s8W,qqYU-cqu?]r
+J:a9k!)OsjWHNI]!!%OrIB!8Hs8)Tis8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sqYL-is8RP!VZ6^=CMW?&6,`g(D[m=I
+lg![5s8Vojqu?]rGBfSW!,cRfm63hR!!$Cu9R-U;rr2osrr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W&srr<#un*f]R&5iK0H"1CH
+5XEBn#\iYln,NFfrVc`lqYU<ms+#]k!!#e@-_tp-pAb5JH[Vsps8Vrlr;Zfss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr<#u
+lg4!J%qHq3Wc<(S(E&S?!*)N\?2ss)rVc`qs8V]^ne)[B'Gm*TE:bA#UAt9bJ:Na]s8Vrlqu6To
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2rts7,[N$P-AC#(gQ&lS13(#7G/7o(;t^s8N#sqYL*hs8RV$R/d4[+siq'Eqoe@L3e3I
+s8W,qqY^?lrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2onqY^Bns+H-'!!$J7?K"mafDkts!!#<p\\.tBs82]js8W,blg=r_A2,mL
+C2<5C$AJN]:q*sKs8W,sr;?Qnrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?Kms8TX@]`8%-&e^=CD"8bpV$[]?o()DPs8W)trqcKg
+s8W+LJscT=9->@KE,t^V#)R_UXT/>#qYL-is8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2orrVc`qs8GARKaS?NF`mO..B<FK>XqA)
+s8W&rrVlZiqu?]rKnlE'!*rc3hbmA(!!$sI&4Q-Zmf3=err2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Tgs8W+LJ;=1*66IGC
+D/T%`)4Cm?;"F/Fs8W,urr2cjqu?]rJ:a-g!(\1RS8E0<&.t'l7="q5rVlfrrr2oss8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2inr;Zfs
+\@K]]!*r)bb[FuC#Rc:c!(2HpPQ1[_qYL*cqY^Bns)rU^!!%4[D=BPF\,ZM88P="%s82fps8N#s
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2cjqu?]rJqTTn!)4mmW,m(T"UKoN7XP18rr2osrr2onqYU<ms+#]d!!#J,*1(JXnf/[C
+#ms2nna6AVs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#srr2orrr<#us$]D$"9jBrEV)1L[K$;?',=((lfnHLs8Dops8W,jo^`V-?l^>^
+EH:gn*1Hp.7Y$#Is8W,qqYL6ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+#]m!!#nS2R[XHoDel7I=J9ss8Vrlqu?]r
+qYL*hs8RV$PQ1\R)&e`UC[iMiUC%K6o(2DOs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr)fps8W,blg4rb@l?6WCi/YQ&WQhk9Rq_\
+s8W,qqYU3gr;Zfs\$s0R!*qfS`FWQA!sa;U!(XK,\c;^0r;?Klrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sqYL-is8RCmS,`Ol
+4[-brBBoNtC4(N.s8W,qqY^?lrqcKgs8W+NKTZ<87M?N!C2<8`-)UtU=n;.Ss8W,urr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2cjr;Zfs
+IY"L!!-N$km6a:\!!%!K&4c$NkPtS^rVc`lqYU<ms*oNf!!$M<A*$9Tbl@`Z'c9U8oC;k\s8N#s
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr<#uoCMDb(d\3&CIUk=>$Kqc!+15+U&Y/mqYL*hs8VrlqZ$TqJ:N7P!'Li)NbE.p
+.4_P+$XN>ooDejjrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rVc`qs8VNTn-on?-Rc!8EV(%aQ2gnb7nHtcs8W)ts8N#srr2rts85;VJ-Q@5
+DfG>$0!50S;L*SSs8W,rqu$Hmrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts7,UI%1c)3!-2(@g/:l&!!$&SLn=YHs8)Th
+s8W,sr;?Tps1#YR!!#[s$AN8/l8:K0"q"r4o(;t^s8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqlTjs8W+JJ>3)EC1(K3:/B7;!d4PE6+FG8
+s8W,sr;?Qnrr<#unaZ)S$<nl,XE/@Q'GZc2!(M^!Q2gmaqYL*hs8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VW[ndQ14
+!!7LYB';HF`<6H\m-O3@s8W&rrr<#urr2oss8VWZndH(4!!7LYA`l3A`<HW^nF6&Ls8W&srr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2rts7,[N
+&.r:j*M7Frq&prV!!$"h87qo%rr)fprr2opr;HZqs1,_a!!$_)9@$gHhZ*Y#$Oo_olKJ9Js8Doq
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8Doqs8W,bm-P,h=p51cBkm)f/Zo<dA+K3_s8W,urr2rts8Drrs8W,fn*^Yr;ucoB
+>[?8W8'V>HDY!Aks8W,urr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#sr;?Nns8TU=bQ%WY:f>qL>MfD`I/j7@\@B?Ss8W#pr;Q]pqYL-is8R=gRfEG)
+Bkcs"6Grj(?qF%9s8W)trr;usrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Vrlqu?]rL5;&o!(IqJRVcm5)]YFU$X</ko)Jai
+rr2oss8W)trr<#unaZ)Y&kr?+DGO-Z:f>sH!+`UNa8c2>r;?Kms8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr)fps8W*d7=PRMMK<n7.kI_$!+lr^6h0^7
+s8W,urr2orrr<#uoCMPc'j_UlQZ@-@,:'#a!(_WjOT5@\qYL*grr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+#Wc
+!!#Y?.B.?.pC@gs&/8%6o^Vt]s8N#ss8W,urr2rts7,XJ%M2#.!,P%jaC&E<!!$AUJ!p?:s8)Th
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2opr;?Tps1#VZ
+!!$=n7`]+OkQq]R!!#K<J<0a1s82]krr2orrr2rts6Ak9"pep#27R@9lj!lO!!,p*\A&"Cs8;fm
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!qYL*hs8RV$SH&Xe1GlI[FS5\7H$=P0s8W,qqY^?lrr<#urr2oss8V]^mM$L%
+!!$Uj34Nd?mJm6*I=S0os8Vrlr;Q]ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr2orrr2rts8PMWF92SoE,kG.3P,7kB+u1[m-X-=s8W&rrr<#uqYL*hs8Re.VuQg-
+>[?8_:XT4CD@R4EnaYuGs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Ths8W+LJtW/E<&m"PD/AV?!-*I<WW3"u
+qYL*hs8W-!s8N#sqYL*hs8RCmR/d4c0JTbRG52+<H@11@s8W,qqY^Bns8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2lprr<#ulg*mC$=bkK\8H3S&JL<-!)%WaM?!VU
+qYL*grr2orrr2oss8W$b7!o"<Jo>Su0f$!6!*Vl`B`J,1rr2rsrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Vrlqu?]r
+J:aEo!*2<L_.@6E!!$e`J>`GIs8)Thrr2oss8W-!s8)Ths8W+NKU`#B:*M!XEH:d\%$!YCI/j6G
+rr2rsrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2onqY^Bns*oTt
+!!$qNBBr#VaT)<`!!,3l\@;M<s8;fmrr2orrr2rts7,XL#Raf^.&q<,obA:-!!#KCLmA#?s8)Th
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,qqYU<ms+#]o!!$(e6cNVHkPtTnIY"?qs8Vrlqu?]rs8W,urr2cjqZ$Tq
+It*:T!(.P?Q"t4)+<[Eb$<$Ean,NFfrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr2ors8W,bm-P5mA0N7qEc_!o*16d,<_#\hs8W,urr;usrr2orr;?Nns8TX@b5_NW
+8kdN8>MfD\G7+mRl07@1s8W)trr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!qYL*hs8RV$U&Y0q6q#+)@d!dl@t0')
+s8W,qqYU<ms8W-!s8W,sr;?Tps1#YU!!#e$$\iA/lRt!##n:G:oCW(_s8N#ss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjqu?]rKSH<'!+B&8hc<e5!!@BE!(s`1^]4?6
+r;?Klrr2orrqlTjs8W+CGFSX5DJO(W4[?mb!+8AlGQ7^Brr2rsrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8)Th
+s8W+LJtrAH=@>Tu?sr*s!+UM0V#UJpqYL*hs8W-!s8W-!rr2oss8VW[ndQ14!!%:TA*--H`rlZ_
+m-O3@s8W&rrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2oqrVlisr^0).
+$P&8@Fnm=2VZ6^,'c0.*naHMXs8N#srr2orrr2rts7>jR&J\[m*1:bdq&giR!!#Q?J<0a1s8)Th
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,urr2cjqu?]rJ:aQs!*Vc\a^AK;!!$JXJY`>Gs8)Ths8W-!s8W-!s8Doq
+s8W,fn*UVq8cSj0;Gu%F=53cU>(qa's8W,qqYU9krr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trqu]ls8W,/\]=aN?V*i8@:A4&$A&6X7"9`Gs8W,rqtpBlrr2orr;?Kms8TR;_Z0[C
+4[-eqAa'@)K)bmD[^WmKs8W#pr;Q]ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+#]t!!$7r9$LXIirB'g
+It=Eqs8Vrlqu?]rs8W-!s8W)trr<#uoCMGc(e"E)BKeYrA7as)!,-h2V>pSqqYL*hs8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr2ors8W-!77MP*#(gl8oeSJ7!!$XE'M.WYlMpna
+rVc`qs8W)trqcKgs8W+KJ"6Q>AR]3484h#*!,NDh:\42Js8W,urr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+qYL-is8R@lT)\js9MNi=>MoJ]@"3a%s8W,qqYU<ms8W-!s8W,urr2cjr;ZfsH@2.]!)t[/[<$H_
+!!%=hH)1K?s8)Tirr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srVc`qs8VENm0F&0
+2`SEdD=7uHM?!WMJ:a*es8Vrlqu6Torr2orrr2ors8W,u77`1>$&ieBoI;Do!!#i@HB%t)s82]j
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr<#uoCMA`(IA*%D+m[O='+5Y!*t)*U&Y/mqYL*hs8W-!s8W-!
+s8W,qqYU<ms+#Wd!!#Y9,,&mlp(\F4%h`"7o'l\Zs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2orrqcKhs8W+JJZ8\MF_Y^Z6:8]l!-&M\8*]C&s8W,trVlfqrr2orrr2oss8V?JlN[]&
+0ep"MD=IuCM#[NT\[oZXs8W#pr;Zfss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts7,XH%1kc)!-(k5ePoT(
+!!$,NJtN)Cs8)Ths8W-!s8W-!s8N#sqYL*hs8Re.O8o8J%han:C@3Z*Xp58@o()DPs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,trVliss6f=E$k?ns-`M-,pD4^6!!$(j8R;Ars8N#t
+rr2orrr2orrqcKgs8W+RLo(.P?WgRg;H)3J!-&J[7e-!8s8W,urr2orrr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8VWZmg]su!!%"><SLGNec5\MJ:a<ks8Vrlqu?]rs8W-!s8W-!s8Doqs8W,cm-G/n<r`5G
+@q+Rl8B_&6?FdYds8W,sr;?Qnrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sqtp<ks8ROuUAt:.
+?t&(j:t5OIG5qY2\@B3Os8W#pr;Q]ps8W,urr2ors8W-!6q)M(!J,-+nhW/3!!$4m88A2)r;Q]q
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#ss8W,hna?o!7K<F.=BXBV;:Y^I<If[js8W,qqYU<ms8W-!
+s8W-!s8W)trr<#unaYuU&3g-pDbEaJ>[6:h!*t)(RfEEfqYL*hs8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2orrr<#unac5^&muXuS98uM,:'&b!*2T\BE/#2rVc`prr2orrr2orrVc`qs8VENklqGs
+,q,^3EV't^Q2gnWL5;5ss8Vrlqu?]rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#unaZ)X&P)m%E*?K%
+;c;3I!*"K#R/d3dqYL*hs8W-!s8W-!s8W,urr2ors8W,s8PF"%!+.TAZuL*X!!%1fH_pcBs8)Ti
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2opr;HZqs1#Sa!!$e3;:\uWhuEn.!!#d(\AJ:Gs8;fm
+rr2oss8W-!s8)Ths8W+RLn+MG>Yn8G>?p(d!-ek]9Bk^'s8W,urr2orrr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2rts75aL%hhG5!,u+Gh,@5&!!#uKJt)f?s8)Ths8W-!s8W-!s8W-!s8W,qqYL6ls+#W\
+!!#S6,GK-rp(nO4%hi:@o^r1`s8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2orrVc`qs8PGTJHuXA
+FER@//?8aNB,)4MnaZ&Is8W)trr2ors8W,urr2flr;ZfsGB]h_!-2jkmQEeL!!$@t9QpI9rr2os
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8VWZljXId!!%(B=kZePec5\NJ:a?ls8Vrlqu?]r
+s8W-!s8W-!s8N#sr;?Kms8TR<]`8(0#n)T(C@*i8[g!(Jlg+!=s8W&rrr2ors8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2inrVuot\@BZ]!+JMkc"(AJ$4MUg!(MHgNrT.Zqtp9irr2rts8N#srr2oss8V]^oFM[H
+*$(VjEVU[uT)\j^J:N[[s8VrlqYpKns8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2rts8>DYF8u;T
+='"'S<7h0N<e#^ms8W,qqYU<ms8W-!s8W-!s8W-!s8N#ss8W,hna6hs7fWO3=BO<W<SIKR>_\'1
+s8W,qqYU<ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2oqrVliss$T;)"pfs'EqV1C[K$;?&emq)mHX`Os8Doq
+s8W-!s8W-!s8;fms8W,0\]=aN?9git@q4[(#CujT8%,n;s8W,sr;?Qnrr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8)Ths8W+KJYrJJ>u4DK<`e)W!*t#&U&Y/mqYL*grr2rts8W-!s8W-!s8W)trr2os
+s8W!g961(5@66WdCi/P>!-*4,UAt8nqtp<jrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqu]ms8W,/\B+^N?pmH+
+B4pK;%Yt)b8Ul;Ts8W,qqYU9krr2ors8W,urr2flr;ZfsG^,VV!,6(XlpX@b!!$[J)G0PlnGiOg
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjqu?]rIXn*l!*Vobb[+W8!!$MYJYrJIs8)Th
+s8W-!s8W-!s8W-!s8W-!s8VrlqZ$TqJ:N[\!(eI_VfQnR(`/MM'OUJ'oDejjrr2orrr2rts8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2orrr2lprr<#u6q2V0#_mA?p,"Y8!!$[F'hn#^li7"brVc`prr2rts8W-!rr2oss8V]^o+DdF
+'Gm'TEV1P&VZ6]kH$YGLs8Vunqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYU<ms+5ot
+!!#t\5/:`AlMpp-77_S$s8Drrs8N#ss8W-!s8W-!s8W-!rr2opr;?Tps0fDK!!#[t$\i;.lT./C
+!!$<8]#XjNs8;fms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sr;?Nns8TU=a8c3I6:Jt.BBfj7LB%<GIt<g`s8Vrlqu6To
+rr2oss8W)trqu]ls8W,.\&/1G?9(*[BkZi=$AJN\9t7aKs8W,sr;?Tps8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!qYL'gs8RV"NW9&O1GuRZEUsDCM$jb_naZ#Hs8W)trr<#us8W-!s8W-!s8W-!
+rr2oss8V]^nJ3!@!!$t6:XWKRiW&seG^5\Vs8Vunr;Q]ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr2oss8W*f7XYCCKQ2#'
+2E8/G!+uoY9C;-4s8W,trVlfqrr<#us8W,urr2cjqu?]rIt*sg!+TJIj\/@p!!$jO)H-.snGiOg
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8;fms8W,0]"n@H;^*H]F)q'i'Trk9?h3dZ
+s8W,urr2rts8W-!s8W-!s8W-!s8N#sqtp<ks8R@jOT5A[/hjVOEV'\NM\?n7naZ/Ls8W)trr2or
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2opr;?Tps1#VX!!$4d5Jh2OmLKkd!!#ZBJsHB9s8)Thrr2orrr2rts8W-!rr2orrr<#ur^BA6
+#RZK/EqCn7X8i5sH$YSPs8Vunqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#u
+o()A]&75hWNG<;$+<dKb$=N5emf3=erVc`qs8W-!s8W-!s8W-!s8W-!s8;fms8W,/\\S7G;%+"q
+D/Jc!27<Jb?+IPfs8W,sr;?Qnrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2orqYL-is8R=gScAb4DK##.5JdC#D%7+GlK[R4s8W&rrr2or
+s8W-!s8W)trr2ors8W,`l0AQ[?na=CCMiPK%Z(/c;7O0Rs8W,sr;?Tps8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W,trVliss6oFC$OoZ/"bC9!l9.AH!!#iKL7J;Ds8)Thrr2oss8W-!s8W-!
+s8W,urr2orrr<#uoCMJd(/Fo1E_]K\?XVjn!,G%oDu]k;rr2rsrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W&rrr<#umI'EQ&o0!LZZ'jR
+&epK/!*)N\>6"X&rr2rsrr2orrr<#us8W,urr2cjqu?]rKnu].!+oG>hbm>&!!$pQ)HQG"nc/Xh
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr<#urC0D'!!$nB?/\RWe,TJN
+J:OBos8Vrlqu?]rs8W-!s8W-!s8W-!s8W,urr2flr;ZfsJ:a6j!*1KuXE/LX'Gd#B$ruQVkl:\_
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2ooqu$Kos*fHm!!$bDA*HQXci=)i!!,6m\@MY>s8;fmrr2oss8W-!s8W-!rr2orrr<#us$K5*
+"pTa"E:bk?Z2al$H$YYRs8Vunqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+qYL*hs8RV"T`>'p7S([/@,q:fDad3Cs8W#rrr;usrr<#us8W-!s8W-!s8W-!s8W,trVliss6K"9
+$4Kl9#D6Z&l:+4a!!$,VM51+Ns8)Thrr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2ors8W,ho(!>(@3-J`Ec_$t+J/W6<_#\ks8W)srVlfqrr2or
+s8W-!s8W)trr2ors8W,`l0AQ\>q@S3D/SqS%ugPh<Oo]Zs8W,sr;?Tps8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trqcKgs8W+PL6hl?:GO`5E,b@T%>bH%:\!uDs8W,urr2rts8W-!
+s8W-!s8W-!s8N#srr2orrr<#us$oV'!!$Ot7`]:Xkl:^*77M_*s8N#ss8N#ss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2inrVuot\@Kf`!,>D1fNVS9
+!!@NI!)0o4_#OH7r;?Klrr2rts8W-!s8W,urr2cjr;ZfsKnlT,!+K&5gf%/)!!%'O&kDH\mJm4d
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W&rrr<#ulg*pD$==ScQZ-m9
+*[%*U!*-M<_>jQ8r;?Klrr2rts8W-!s8W-!s8W-!s8N#sqYL*hs8Rh0S,`Ob+<dD!EqUOrTa(m.
+m-F!;s8W&rrr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2orrr<#us$K2%#RQ<-F8.7:XT/?5'Gj4.naHMXs8N#srr2oss8W-!s8N#srr2orrr<#us$T;,
+!sO9rE:bh=ZN'u.7n@(gs8Drrs8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2rts7>jQ&f+OM"Fk)uks.SQ!!#fFJ<^*6s8)Thrr2oss8W-!s8W-!s8W-!s8W)trr2or
+s8W,`l0&Ka:B1HF@:A1i9[<\=>)%j,s8W,qqYU9krr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8Doqs8W,blg5#eB0JQ!BP?]?%Yk#a8:Q2Rs8W,rqu$Hmrr<#u
+s8W-!s8W)trqu]ls8W,0\\8%D;)0o6Ci/_Q&<6_j;7O0Ss8W,sr;?Tps8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2onqY^Bns*8m^!!$D,=4pVTg&M+c8PF@.s8N#ss8N#s
+s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W'g8p(+6@m3/rBPHl7!,R+5W;lntqYL*hs8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjr;ZfsJqU-(!-E'omliqP
+!!$aB%S5pOlMpnarVc`qs8W-!s8W-!rr2orrr2cjqu?]rH$YbV!+K2;iDNV+!!$pQ)HZFunGiOg
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!qYL*hs8Rk2T)\jj
+3'+]fD!hH4KF/,[l07=0s8W)trr2ors8W-!s8W-!s8W-!s8W,urr2cjqu?]rJ:a?m!)Y-oWH37[
+!!@muGcC`Cs8)Tirr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,qqY^Bns*B!n&J::NG52pkQ2gnj*?d]@p%&._s8N#srr2oss8W-!s8N#srVc`qs8VKRlk'q=
+%M4_>E:Y\8Z2al&H?tbSs8Vunqu6Tos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W)trr)fps8W,blg"f`=;MmCEH1Up,bb8=98A=hs8W,qqYU9krr<#us8W-!s8W-!s8W-!
+rr2onqYU<ms*oTb!!#P+)3\iOn00'P$kQV6oCDq]s8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8N#srr2rts8G>RM_Hru@q4U($%N!U9gD'HrVcTms8W)trr2or
+s8W,urr2rts7uKfs8W+LJsQH;<'<F^Bl!/F%>Xua9";FGs8W,sr;?Tps8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2oss8W*f7XtI=G\_$Z6UScl!+/5eDZBb8
+rr2rsrr2orrr<#us8W-!s8W)trr2orrVc`qs8>G[?2st&%1e>2C$I6%Z3q1FoCVSQs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr<#uo'u)P$!9hoeko>q
+!!%-A!Dj7;,4P*hs8W,trVccrs8N#srr2onqYU<ms6f=@&/.tB"+FlokXS.d!!$M"8TXq3s8N#s
+rr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2cjqu?]r
+L5;],!+/>kcX1)@!!7HS%8#mOl2Ue`rVc`prr2rts8N#ss8W-!s8VrlqZ$Tq\@K!I!#tt?@1Np-
+D/JbY(nYkkW;lntqYL-hrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2ors8W,u77WD+7*SV.ec5\m!!HF)"!FnUZ2ak(qYL'aq>0saqu6Tos8W,rqtNfZC]FH?
+/1muDEVC:gR/d4b\@BKWs8W#prVlfqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2orrr2rts68e5#n(&^+es+"pDtHK!!#iHK:)]=s7uKfs8W,urr2orrr2or
+qtp9irr;ooqaEtG!!#"Z!c9)*TQPDR#766=KWb@Ts8)Tis8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqY^Bns*/gi.4hi7A*F%!IfKUZ!!>"Z"p_H?ZiC(*
+rVc]lqu$9cp;+Va4[30O!(R8"Jm`!H;,YsF!,4qpGQ7^BrVc`prr2orrr<#us8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2orrr<#us$]G&!!%:WB'MiUaoDEX
+&en%,md0uRs7lBbqYL'bqYL3jrr)fpp%@rM9i(fi+9MjX!!.148',1KkReGPl07R7s8W&rrr2or
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#sr;?Nns8T:-bTeF0
+D/]%[(6ee"B`SE9!sC:X!!u.f:Pt*jGBn]R));@#1B7DO!!.=(3Os3Qq&(-@!!#g)\]+UKs8;fn
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8N#s
+r;?Kms8TU>a8c3H3]t2jB^?3@NW9&W9200uqtU3ks8N#sqtp9hrVNn,ZO%'U!<OMK#?Lm+C_IMF
+FEI.(/$D0&JH,ZLrr2rsrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8N#ss8W,ioCWe4J6u^I6Uo/t!dObJAcW*<!X)$o!%IsK,6.]t!!#mt"(qZ=Hn[:]
+H@,QO4i%*u>YS%>s8W&srr2orrr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W)trr2orrVc`qs8PMWIfot-Ci&W"34f.kF8u;)7S$jAMMlt8JpD]j
+'Gr(u"s3gF3<KLj!!6m:#(fcPfP,'d#Rc-l]$:9Ts8;fnrr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqu]ms8W,"XNMY,TlkSX3]t+Y#(ZaSDZBiL
+!<ls8#AO8BD?'`X%M=^l9$Vd2r]WN^!!$:t:4rH@qYgBlrr2orrr2rts8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trqu]ms8W,/\]OmP><bEl
+Ci/_W(6ALuD#jZ-!!")@!#P\9*<6(%!X)I'"_7T7D[$K$8P76THiF6QKR/$Fs8W,qqY^Bns8N#s
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W)trr2os
+s8W*n:6ZhEVfHkU?<uJ7-`@LdM[0ZE$kA.<,G.=ka)c=pCMWDT(RkR5C4Lo8o^qeUs8W&rrVuot
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W,urr2orrr2ors8W$j:4WBFE+3AB?!lS"%>k,fD$1,W":/?:#\!c:B)hsM!<dZd*1^JHjDf26
+"p^)V8<!KEqYgBlrr2orrr2rts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2orrr2orrqlTks8W,&YgO*uP!;4WBkd-QD";=Wm;$P.D/JuR?fiRYX8i6D
+4$JG:_pn_ds8)TirVc`qs8W)trr<#us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2orrr)fpqu$=]8rEfUJo,>oAS13N,GYPOJH?"%
+!X*oX$AKZIU/+V7F`dIO8_+OhNdQ;Xo^qhVs8W)trr<#urr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trqcKhs8W,-\'8`,XXl,r
+-7>T/*i'\nSf]/C(`Rp<CSeMMd/X.GrVc`lqYU9krr<#urr2oss8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W&rrr)fp
+r;?I`98roOG>1faE,bSgC@#)*gg"+@CMN6UDtd..h]<o85<tOJ^XiGbs8)TirVc`qs8W)trr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8W)trqu]mrr2opr;?<`q6I?JCi>qsJu[trmITrBrVc`qs8W#prVQKis8W,urr2orrr<#u
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!rr2oss8W&rrVuoto_%p(IAmnsHl!Zf,q$&U1r(t-_'gh<+<d(:6']$neGfLH
+rVc`lqY^?lrr<#urr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2rsrr2rts8;fnqYL-hrr2rts8N#srr2oss8W)trqcKh
+qu$Elrr2rts8N#ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W&rrqu]mr;?NjqtdY+c#7U%
+I"&MIGd)UGXl\[2q"adds8W#prVQKjs8W,urr2ors8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,urr2rts8N#s
+rr2opr;HHfqtg0erVc`prr2orrr<#urr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+rr2oss8W)trqcKhrr2oss8W)trr<#us8W,urr2rts8;fnqtp?krr2rts8N#ss8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr2oss8W)trr2orqu$Egq>C*cr;$3eqYL-grVlfqrr<#u
+rr2oss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!~>
+Q
+cleartomark end end pagesave restore showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Build/source/utils/asymptote/examples/pipeintersection.asy b/Build/source/utils/asymptote/examples/pipeintersection.asy
new file mode 100644
index 00000000000..b22574c13c2
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/pipeintersection.asy
@@ -0,0 +1,13 @@
+import graph3;
+
+currentprojection=orthographic(5,4,2);
+currentlight=adobe;
+
+size(12cm,0);
+
+real f(pair z) {return min(sqrt(1-z.x^2),sqrt(1-z.y^2));}
+
+surface s=surface(f,(0,0),(1,1),40,Spline);
+
+transform3 t=rotate(90,O,Z), t2=t*t, t3=t2*t, i=xscale3(-1)*zscale3(-1);
+draw(surface(s,t*s,t2*s,t3*s,i*s,i*t*s,i*t2*s,i*t3*s),blue);
diff --git a/Build/source/utils/asymptote/examples/planeproject.asy b/Build/source/utils/asymptote/examples/planeproject.asy
new file mode 100644
index 00000000000..ab8980b613e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/planeproject.asy
@@ -0,0 +1,18 @@
+import graph3;
+
+size3(200,IgnoreAspect);
+
+currentprojection=orthographic(4,6,3);
+
+real x(real t) {return 1+cos(2pi*t);}
+real y(real t) {return 1+sin(2pi*t);}
+real z(real t) {return t;}
+
+path3 p=graph(x,y,z,0,1,operator ..);
+
+draw(p,Arrow3);
+draw(planeproject(XY*unitsquare3)*p,red,Arrow3);
+draw(planeproject(YZ*unitsquare3)*p,green,Arrow3);
+draw(planeproject(ZX*unitsquare3)*p,blue,Arrow3);
+
+axes3("$x$","$y$","$z$");
diff --git a/Build/source/utils/asymptote/examples/polararea.asy b/Build/source/utils/asymptote/examples/polararea.asy
new file mode 100644
index 00000000000..42d3729914c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/polararea.asy
@@ -0,0 +1,38 @@
+import math;
+import graph;
+
+size(0,150);
+
+real f(real t) {return 5+cos(10*t);}
+
+xaxis("$x$");
+yaxis("$y$");
+
+real theta1=pi/8;
+real theta2=pi/3;
+path k=graph(f,theta1,theta2,operator ..);
+real rmin=min(k).y;
+real rmax=max(k).y;
+draw((0,0)--rmax*expi(theta1),dotted);
+draw((0,0)--rmax*expi(theta2),dotted);
+
+path g=polargraph(f,theta1,theta2,operator ..);
+path h=(0,0)--g--cycle;
+fill(h,lightgray);
+draw(h);
+
+real thetamin=3*pi/10;
+real thetamax=2*pi/10;
+pair zmin=polar(f(thetamin),thetamin);
+pair zmax=polar(f(thetamax),thetamax);
+draw((0,0)--zmin,dotted+red);
+draw((0,0)--zmax,dotted+blue);
+
+draw("$\theta_*$",arc((0,0),0.5*rmin,0,degrees(thetamin)),red+fontsize(10),
+ PenMargins);
+draw("$\theta^*$",arc((0,0),0.5*rmax,0,degrees(thetamax)),blue+fontsize(10),
+ PenMargins);
+
+draw(arc((0,0),rmin,degrees(theta1),degrees(theta2)),red,PenMargins);
+draw(arc((0,0),rmax,degrees(theta1),degrees(theta2)),blue,PenMargins);
+
diff --git a/Build/source/utils/asymptote/examples/polarcircle.asy b/Build/source/utils/asymptote/examples/polarcircle.asy
new file mode 100644
index 00000000000..c08160cde69
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/polarcircle.asy
@@ -0,0 +1,30 @@
+import math;
+import graph;
+size(0,100);
+
+real f(real t) {return 2*cos(t);}
+pair F(real x) {return (x,f(x));}
+
+draw(polargraph(f,0,pi,operator ..));
+
+defaultpen(fontsize(10));
+
+xaxis("$x$");
+yaxis("$y$");
+
+real theta=radians(50);
+real r=f(theta);
+draw("$\theta$",arc((0,0),0.5,0,degrees(theta)),red,Arrow,PenMargins);
+
+pair z=polar(r,theta);
+draw(z--(z.x,0),dotted+red);
+draw((0,0)--(z.x,0),dotted+red);
+label("$r\cos\theta$",(0.5*z.x,0),0.5*S,red);
+label("$r\sin\theta$",(z.x,0.5*z.y),0.5*E,red);
+dot("$(x,y)$",z,N);
+draw("r",(0,0)--z,0.5*unit(z)*I,blue,Arrow,DotMargin);
+
+dot("$(a,0)$",(1,0),NE);
+dot("$(2a,0)$",(2,0),NE);
+
+
diff --git a/Build/source/utils/asymptote/examples/poster.asy b/Build/source/utils/asymptote/examples/poster.asy
new file mode 100644
index 00000000000..d476dd079de
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/poster.asy
@@ -0,0 +1,32 @@
+orientation=Landscape;
+import slide;
+import graph;
+
+defaultpen(deepblue);
+
+real f(real x) {return (x != 0) ? x*sin(1/x) : 0;}
+pair F(real x) {return (x,f(x));}
+
+xaxis(background,grey);
+yaxis(background,-0.25,0.25,grey);
+real a=1.2/pi;
+draw(background,graph(background,f,-a,a,10000),grey);
+label(background,"$x\sin\frac{1}{x}$",F(0.92/pi),3SE,grey+fontsize(14));
+frame f=background.fit();
+box(f,RadialShade(yellow,0.6*yellow+red),above=false);
+background.erase();
+add(background,f);
+
+title("Young Researchers' Conference",align=3S,fontsize(48));
+center("University of Alberta, Edmonton, April 1--2, 2006");
+
+skip(4);
+
+center("A general conference for\\
+the mathematical and statistical sciences\\
+for graduate students, by graduate students.",fontsize(32));
+
+label("Registration and abstract submission online.",(0,-0.5));
+
+label("\tt http://www.pims.math.ca/science/2006/06yrc/",point(SW),NE,
+ black+fontsize(18));
diff --git a/Build/source/utils/asymptote/examples/progrid.asy b/Build/source/utils/asymptote/examples/progrid.asy
new file mode 100644
index 00000000000..20400b7148a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/progrid.asy
@@ -0,0 +1 @@
+label("$\displaystyle X_i = \sum_{j=1}^{N} a_{ij} f_j$");
diff --git a/Build/source/utils/asymptote/examples/projectelevation.asy b/Build/source/utils/asymptote/examples/projectelevation.asy
new file mode 100644
index 00000000000..19918c241c9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/projectelevation.asy
@@ -0,0 +1,18 @@
+import graph3;
+import grid3;
+import palette;
+
+currentprojection=orthographic(0.8,1,2);
+
+size(400,300,IgnoreAspect);
+
+real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
+
+surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
+
+surface S=planeproject(unitsquare3)*s;
+S.colors(palette(s.map(zpart),Rainbow()));
+draw(S,nolight);
+draw(s,lightgray+opacity(0.7));
+
+grid3(XYZgrid);
diff --git a/Build/source/utils/asymptote/examples/projectrevolution.asy b/Build/source/utils/asymptote/examples/projectrevolution.asy
new file mode 100644
index 00000000000..fe639b3b901
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/projectrevolution.asy
@@ -0,0 +1,15 @@
+import solids;
+import palette;
+
+currentprojection=orthographic(20,0,3);
+
+size(400,300,IgnoreAspect);
+
+revolution r=revolution(new real(real x) {return sin(x)*exp(-x/2);},
+ 0,2pi,operator ..,Z);
+surface s=surface(r);
+
+surface S=planeproject(shift(-Z)*unitsquare3)*s;
+S.colors(palette(s.map(zpart),Rainbow()));
+draw(S);
+draw(s,lightgray);
diff --git a/Build/source/utils/asymptote/examples/rainbow.asy b/Build/source/utils/asymptote/examples/rainbow.asy
new file mode 100644
index 00000000000..c85282a87b1
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/rainbow.asy
@@ -0,0 +1,12 @@
+size(200);
+
+pen indigo=rgb(102/255,0,238/255);
+
+void rainbow(path g) {
+ draw(new path[] {scale(1.3)*g,scale(1.2)*g,scale(1.1)*g,g,
+ scale(0.9)*g,scale(0.8)*g,scale(0.7)*g},
+ new pen[] {red,orange,yellow,green,blue,indigo,purple});
+}
+
+rainbow((1,0){N}..(0,1){W}..{S}(-1,0));
+rainbow(scale(4)*shift(-0.5,-0.5)*unitsquare);
diff --git a/Build/source/utils/asymptote/examples/randompath3.asy b/Build/source/utils/asymptote/examples/randompath3.asy
new file mode 100644
index 00000000000..56382d19b89
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/randompath3.asy
@@ -0,0 +1,3 @@
+import three;
+size(300);
+draw(randompath3(100),red,currentlight);
diff --git a/Build/source/utils/asymptote/examples/ring.asy b/Build/source/utils/asymptote/examples/ring.asy
new file mode 100644
index 00000000000..54e0e25d489
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/ring.asy
@@ -0,0 +1,5 @@
+size(0,100);
+path unitcircle=E..N..W..S..cycle;
+path g=scale(2)*unitcircle;
+radialshade(unitcircle^^g,yellow+evenodd,(0,0),1.0,yellow+brown,(0,0),2);
+
diff --git a/Build/source/utils/asymptote/examples/roundpath.asy b/Build/source/utils/asymptote/examples/roundpath.asy
new file mode 100644
index 00000000000..e6d31c6bc9c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/roundpath.asy
@@ -0,0 +1,32 @@
+// example file for 'roundedpath.asy'
+// written by stefan knorr
+
+// import needed packages
+import roundedpath;
+
+// define open and closed path
+path A = (0,0)--(10,10)--(30,10)--(20,0)--(30,-10)--(10,-10);
+path B = A--cycle;
+
+draw(shift(-60,0)*A, green);
+draw(shift(-30,0)*roundedpath(A,1), red);
+
+// draw open path and some modifications
+for (int i = 1; i < 20; ++i)
+ draw(roundedpath(A,i/4), rgb(1 - i*0.049, 0, i*0.049) + linewidth(0.5));
+
+draw(shift(-60,-30)*B, green);
+draw(shift(-30,-30)*roundedpath(B,1), red);
+
+//draw closed path and some modifications
+for (int i = 1; i < 20; ++i) // only round edges
+ draw(shift(0,-30)*roundedpath(B,i/4), rgb(0.5, i*0.049,0) + linewidth(0.5));
+
+for (int i = 1; i < 20; ++i) // round edged and scale
+ draw(shift(0,-60)*roundedpath(B,i/4,1-i/50), rgb(1, 1 - i*0.049,i*0.049) + linewidth(0.5));
+
+for (int i = 1; i < 50; ++i) // shift (round edged und scaled shifted version)
+ draw(shift(-30,-60)*shift(10,0)*roundedpath(shift(-10,0)*B,i/10,1-i/80), rgb( i*0.024, 1 - i*0.024,0) + linewidth(0.5));
+
+for (int i = 1; i < 20; ++i) // shift (round edged und scaled shifted version)
+ draw(shift(-60,-60)*shift(10,0)*roundedpath(shift(-10,0)*B,i/4,1-i/50), gray(i/40));
diff --git a/Build/source/utils/asymptote/examples/sacone.asy b/Build/source/utils/asymptote/examples/sacone.asy
new file mode 100644
index 00000000000..9cdd0e138af
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sacone.asy
@@ -0,0 +1,23 @@
+size(0,150);
+
+pair z0=(0,0);
+real r=1;
+real h=1;
+real l=sqrt(r^2+h^2);
+real a=(1-r/l)*360;
+real a1=a/2;
+real a2=360-a/2;
+path g=arc(z0,r,a1,a2);
+fill((0,0)--g--cycle,lightgreen);
+draw(g);
+pair z1=point(g,0);
+pair z2=point(g,length(g));
+
+real r2=1.1*r;
+path c=arc(0,r2,a1,a2);
+draw("$2\pi r$",c,red,Arrows,Bars,PenMargins);
+pen edge=blue+0.5mm;
+draw("$\ell$",z0--z1,0.5*SE,edge);
+draw(z0--z2,edge);
+draw(arc(z0,r,a2-360,a1),grey+dashed);
+dot(0);
diff --git a/Build/source/utils/asymptote/examples/sacone3D.asy b/Build/source/utils/asymptote/examples/sacone3D.asy
new file mode 100644
index 00000000000..1ed60da0351
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sacone3D.asy
@@ -0,0 +1,13 @@
+import solids;
+
+size(0,75);
+real r=1;
+real h=1;
+
+revolution R=cone(r,h);
+draw(surface(R),lightgreen+opacity(0.5));
+pen edge=blue+0.25mm;
+draw("$\ell$",(0,r,0)--(0,0,h),W,edge);
+draw("$r$",(0,0,0)--(r,0,0),red+dashed);
+draw((0,0,0)--(0,0,h),red+dashed);
+dot(h*Z);
diff --git a/Build/source/utils/asymptote/examples/sacylinder.asy b/Build/source/utils/asymptote/examples/sacylinder.asy
new file mode 100644
index 00000000000..06f7909d52a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sacylinder.asy
@@ -0,0 +1,26 @@
+import graph;
+size(0,100);
+
+real r=1;
+real h=3;
+
+yaxis(dashed);
+
+real m=0.475*h;
+
+draw((r,0)--(r,h));
+label("$L$",(r,0.5*h),E);
+
+real s=4;
+
+pair z1=(s,0);
+pair z2=z1+(2*pi*r,h);
+filldraw(box(z1,z2),lightgreen);
+pair zm=0.5*(z1+z2);
+label("$L$",(z1.x,zm.y),W);
+label("$2\pi r$",(zm.x,z2.y),N);
+draw("$r$",(0,m)--(r,m),N,red,Arrows);
+
+draw((0,1.015h),yscale(0.5)*arc(0,0.25cm,-250,70),red,ArcArrow);
+
+
diff --git a/Build/source/utils/asymptote/examples/sacylinder3D.asy b/Build/source/utils/asymptote/examples/sacylinder3D.asy
new file mode 100644
index 00000000000..e44f78e8e72
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sacylinder3D.asy
@@ -0,0 +1,14 @@
+import solids;
+size(0,100);
+
+real r=1;
+real h=3;
+
+revolution R=cylinder(-h/2*Z,r,h);
+draw(surface(R),lightgreen+opacity(0.5));
+draw((0,0,-h/2)--(0,0,h/2),dashed);
+dot((0,0,-h/2));
+dot((0,0,h/2));
+draw("$L$",(0,r,-h/2)--(0,r,h/2),W,black);
+draw("$r$",(0,0,-h/2)--(0,r,-h/2),red);
+draw(arc(O,1,90,90,90,0),red,Arrow3);
diff --git a/Build/source/utils/asymptote/examples/shade.asy b/Build/source/utils/asymptote/examples/shade.asy
new file mode 100644
index 00000000000..66b8880fd4b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/shade.asy
@@ -0,0 +1,4 @@
+
+size(100,0);
+radialshade(unitsquare,yellow,(0,0),0,red,(0,0),1);
+
diff --git a/Build/source/utils/asymptote/examples/shadestroke.asy b/Build/source/utils/asymptote/examples/shadestroke.asy
new file mode 100644
index 00000000000..44f0b6e8a3f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/shadestroke.asy
@@ -0,0 +1,5 @@
+size(100);
+
+radialshade(W..N..E--(0,0),stroke=true,
+ red+linewidth(30),(0,0),0.25,yellow,(0,0),1);
+
diff --git a/Build/source/utils/asymptote/examples/shellmethod.asy b/Build/source/utils/asymptote/examples/shellmethod.asy
new file mode 100644
index 00000000000..c1c0155ae3a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/shellmethod.asy
@@ -0,0 +1,39 @@
+import graph3;
+import solids;
+
+size(400);
+currentprojection=perspective(0,-1,30,up=Y);
+currentlight=light(gray(0.75),(0.25,-0.25,1),(0,1,0));
+
+pen color=green;
+real alpha=240;
+
+real f(real x) {return 2x^2-x^3;}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+int n=10;
+path3[] blocks=new path3[n];
+for(int i=1; i <= n; ++i) {
+ real height=f((i-0.5)*2/n);
+ real left=(i-1)*2/n;
+ real right=i*2/n;
+ blocks[i-1]=
+ (left,0,0)--(left,height,0)--(right,height,0)--(right,0,0)--cycle;
+}
+
+path p=graph(F,0,2,n,operator ..)--cycle;
+surface s=surface(p);
+path3 p3=path3(p);
+
+revolution a=revolution(p3,Y,0,alpha);
+draw(surface(a),color);
+draw(rotate(alpha,Y)*s,color);
+for(int i=0; i < n; ++i)
+ draw(surface(blocks[i]),color+opacity(0.5),black);
+draw(p3);
+
+xaxis3(Label("$x$",1,align=2X),Arrow3);
+yaxis3(Label("$y$",1,align=2Y),ymax=1.4,dashed,Arrow3);
+arrow("$y=2x^2-x^3$",XYplane(F(1.8)),X+Z,1.5cm,red,Arrow3(DefaultHead2));
+draw(arc(1.17Y,0.3,90,0,7.5,180),ArcArrow3);
diff --git a/Build/source/utils/asymptote/examples/shellsqrtx01.asy b/Build/source/utils/asymptote/examples/shellsqrtx01.asy
new file mode 100644
index 00000000000..c4edec122c8
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/shellsqrtx01.asy
@@ -0,0 +1,34 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=orthographic(1,0,10,up=Y);
+pen color=green;
+real alpha=-240;
+
+real f(real x) {return sqrt(x);}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+path p=graph(F,0,1,n=30,operator ..)--(1,0)--cycle;
+path3 p3=path3(p);
+
+revolution a=revolution(p3,X,alpha,0);
+draw(surface(a),color);
+draw(p3,blue);
+
+surface s=surface(p);
+draw(s,color);
+draw(rotate(alpha,X)*s,color);
+
+xaxis3(Label("$x$",1),xmax=1.25,dashed,Arrow3);
+yaxis3(Label("$y$",1),Arrow3);
+
+dot("$(1,1)$",(1,1,0));
+arrow("$y=\sqrt{x}$",F3(0.8),Y,0.75cm,red);
+
+real r=0.4;
+draw(F3(r)--(1,f(r),0),red);
+real x=(1+r)/2;
+
+draw("$r$",(x,0,0)--(x,f(r),0),X+0.2Z,red,Arrow3,PenMargin3);
+draw(arc(1.1X,0.4,90,90,3,-90),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/sin1x.asy b/Build/source/utils/asymptote/examples/sin1x.asy
new file mode 100644
index 00000000000..637943691f1
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sin1x.asy
@@ -0,0 +1,16 @@
+import graph;
+size(200,0);
+
+real f(real x) {return (x != 0) ? sin(1/x) : 0;}
+real T(real x) {return 2/(x*pi);}
+
+real a=-4/pi, b=4/pi;
+int n=150,m=5;
+
+xaxis("$x$",red);
+yaxis(red);
+
+draw(graph(f,a,-T(m),n)--graph(f,-m,-(m+n),n,T)--(0,f(0))--graph(f,m+n,m,n,T)--
+ graph(f,T(m),b,n));
+
+label("$\sin\frac{1}{x}$",(b,f(b)),SW);
diff --git a/Build/source/utils/asymptote/examples/sinc.asy b/Build/source/utils/asymptote/examples/sinc.asy
new file mode 100644
index 00000000000..cd0d377e633
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sinc.asy
@@ -0,0 +1,19 @@
+import graph3;
+import contour;
+
+currentprojection=orthographic(1,-2,1);
+currentlight=(1,-1,0.5);
+
+size(12cm,0);
+
+real sinc(pair z) {
+ real r=2pi*abs(z);
+ return r != 0 ? sin(r)/r : 1;
+}
+
+draw(lift(sinc,contour(sinc,(-2,-2),(2,2),new real[] {0})),red);
+draw(surface(sinc,(-2,-2),(2,2),Spline),lightgray+opacity(0.5));
+
+xaxis3("$x$",Bounds,InTicks);
+yaxis3("$y$",Bounds,InTicks(beginlabel=false));
+zaxis3("$z$",Bounds,InTicks);
diff --git a/Build/source/utils/asymptote/examples/sinxlex.asy b/Build/source/utils/asymptote/examples/sinxlex.asy
new file mode 100644
index 00000000000..912fa3c889b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sinxlex.asy
@@ -0,0 +1,24 @@
+import geometry;
+
+size(0,100);
+real theta=30;
+
+pair A=(0,0);
+pair B=dir(theta);
+pair C=(1,0);
+pair D=(1,Tan(theta));
+pair E=(Cos(theta),0);
+
+filldraw(A--C{N}..B--cycle,lightgrey);
+draw(B--C--D--cycle);
+draw(B--E);
+
+draw("$x$",arc(C,A,B,0.7),RightSide,Arrow,PenMargin);
+
+dot("$A$",A,W);
+dot("$B$",B,NW);
+dot("$C$",C);
+dot("$D$",D);
+dot(("$E$"),E,S);
+label("$1$",A--B,LeftSide);
+
diff --git a/Build/source/utils/asymptote/examples/slidedemo.asy b/Build/source/utils/asymptote/examples/slidedemo.asy
new file mode 100644
index 00000000000..cd1f05b4124
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/slidedemo.asy
@@ -0,0 +1,118 @@
+// Slide demo.
+// Command-line options to enable stepping and/or reverse video:
+// asy [-u stepping=true] [-u reverse=true] slidedemo
+
+orientation=Landscape;
+
+import slide;
+import three;
+
+viewportsize=pagewidth-2pagemargin;
+
+usersetting();
+
+// Commands to generate optional bibtex citations:
+// asy slidedemo
+// bibtex slidedemo_
+// asy slidedemo
+//
+bibliographystyle("alpha");
+
+// Generated needed files if they don't already exist.
+asy(nativeformat(),"Pythagoras","log","PythagoreanTree");
+
+// Optional background color or header:
+// import x11colors;
+// fill(background,box((-1,-1),(1,1)),Azure);
+// label(background,"Header",(0,startposition.y));
+
+titlepage(title="Slides with {\tt Asymptote}: A Demo",
+ author="John C. Bowman",
+ institution="University of Alberta",
+ date="\today",
+ url="http://asymptote.sf.net");
+
+outline("Basic Commands");
+item("item");
+subitem("subitem");
+remark("remark");
+item("draw \cite{Hobby86,Knuth86b}");
+item("figure");
+item("embedded and external animations: see {\tt slidemovie.asy}");
+
+title("Items");
+item("First item.");
+subitem("First subitem.");
+subitem("Second subitem.");
+item("Second item.");
+equation("a^2+b^2=c^2.");
+equations("\frac{\sin^2\theta+\cos^2\theta}{\cos^2\theta}
+&=&\frac{1}{\cos^2\theta}\nonumber\\
+&=&\sec^2\theta.");
+remark("A remark.");
+item("To enable pausing between bullets:");
+remark("{\tt asy -u stepping=true}");
+item("To enable reverse video:");
+remark("{\tt asy -u reverse=true}");
+
+title("Can draw on a slide, preserving the aspect ratio:");
+picture pic,pic2;
+draw(pic,unitcircle);
+add(pic.fit(15cm));
+step();
+fill(pic2,unitcircle,paleblue);
+label(pic2,"$\pi$",(0,0),fontsize(500));
+add(pic2.fit(15cm));
+
+newslide();
+item("The slide \Red{title} \Green{can} \Blue{be} omitted.");
+figure("Pythagoras","height=12cm",
+ "A simple proof of Pythagoras' Theorem.");
+
+newslide();
+item("Single skip:");
+skip();
+item("Double skip:");
+skip(2);
+figure(new string[] {"log."+nativeformat(),"PythagoreanTree."+nativeformat()},
+ "width=10cm",new string[] {"{\tt log.asy}","{\tt PythagoreanTree.asy}"},
+ "Examples of {\tt Asymptote} output.");
+
+title("Embedded Interactive 3D Graphics");
+picture pic;
+import graph3;
+import solids;
+viewportmargin=(0,1cm);
+currentprojection=orthographic(1,0,10,up=Y);
+pen color=green;
+real alpha=-240;
+real f(real x) {return sqrt(x);}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+path p=graph(pic,F,0,1,n=30,operator ..)--(1,0)--cycle;
+path3 p3=path3(p);
+revolution a=revolution(p3,X,alpha,0);
+draw(pic,surface(a),color);
+draw(pic,p3,blue);
+surface s=surface(p);
+draw(pic,s,color);
+draw(pic,rotate(alpha,X)*s,color);
+xaxis3(pic,Label("$x$",1),xmax=1.25,dashed,Arrow3);
+yaxis3(pic,Label("$y$",1),Arrow3);
+dot(pic,"$(1,1)$",(1,1,0));
+arrow(pic,"$y=\sqrt{x}$",F3(0.8),Y,0.75cm,red);
+real r=0.4;
+draw(pic,F3(r)--(1,f(r),0),red);
+real x=(1+r)/2;
+draw(pic,"$r$",(x,0,0)--(x,f(r),0),X+0.2Z,red,Arrow3);
+draw(pic,arc(1.1X,0.4,90,90,3,-90),Arrow3);
+add(pic.fit(8.5cm));
+
+viewportsize=viewportmargin=0;
+title("\mbox{Asymptote: 2D \& 3D Vector Graphics Language}");
+asyinclude("logo3");
+skip();
+center("\tt http://asymptote.sf.net");
+center("(freely available under the GNU public license)");
+
+bibliography("refs");
diff --git a/Build/source/utils/asymptote/examples/slidedemo_.bbl b/Build/source/utils/asymptote/examples/slidedemo_.bbl
new file mode 100644
index 00000000000..b3e55e47eee
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/slidedemo_.bbl
@@ -0,0 +1,13 @@
+\begin{thebibliography}{Knu86}
+
+\bibitem[Hob86]{Hobby86}
+John~D. Hobby.
+\newblock Smooth, easy to compute interpolating splines.
+\newblock {\em Discrete Comput. Geom.}, 1:123--140, 1986.
+
+\bibitem[Knu86]{Knuth86b}
+Donald~E. Knuth.
+\newblock {\em The METAFONTbook}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+
+\end{thebibliography}
diff --git a/Build/source/utils/asymptote/examples/slidemovies.asy b/Build/source/utils/asymptote/examples/slidemovies.asy
new file mode 100644
index 00000000000..ec724cf3326
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/slidemovies.asy
@@ -0,0 +1,46 @@
+// Slide demo.
+// Command-line options to enable stepping and/or reverse video:
+// asy [-u stepping=true] [-u reverse=true] slidedemo
+
+orientation=Landscape;
+
+settings.tex="pdflatex";
+
+import slide;
+
+// Optional movie modules:
+import animate; // For portable embedded PDF movies
+import external; // For portable external movies
+import embed; // For non-portable embedded movies
+
+usersetting();
+
+titlepage("Slides with {\tt Asymptote}: Animations","John C. Bowman",
+ "University of Alberta","\today","http://asymptote.sf.net");
+
+title("Embedded PDF movies (portable)");
+animation a=animation("A");
+animation b=animation("B");
+int n=20;
+for(int i=0; i < 2n; ++i) {
+ picture pic;
+ size(pic,100);
+ draw(pic,shift(0,sin(pi/n*i))*unitsquare);
+ a.add(pic);
+ if(i < 1.5n) b.add(rotate(45)*pic);
+}
+display(a.pdf("autoplay,loop,controls"));
+display(b.pdf("controls"));
+
+title("External Movie (portable)");
+display(external.embed("animations/wheel.mpg",
+ "poster,text=wheel.mpg,label=wheel.mpg",20cm,5.6cm));
+display(external.link("animations/wheel.mpg","Play","play"));
+
+title("Embedded Movie (not portable)");
+// Generated needed files if they don't already exist.
+asy("mpg","animations/wheel");
+display(embed.embed("animations/wheel.mpg",
+ "poster,text=wheel.mpg,label=wheel.mpg",
+ 20cm,5.6cm));
+display(embed.link("animations/wheel.mpg","Play","play"));
diff --git a/Build/source/utils/asymptote/examples/smoothelevation.asy b/Build/source/utils/asymptote/examples/smoothelevation.asy
new file mode 100644
index 00000000000..29ee84ba688
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/smoothelevation.asy
@@ -0,0 +1,24 @@
+import graph3;
+import grid3;
+import palette;
+
+if(settings.render <= 0) settings.prc=false;
+
+currentprojection=orthographic(1,2,13);
+
+size(400,300,IgnoreAspect);
+
+real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
+
+surface s=surface(f,(-1/2,-1/2),(1/2,1/2),20,Spline);
+s.colors(palette(s.map(zpart),Rainbow()));
+
+draw(s);
+
+scale(true);
+
+xaxis3(Label("$x$",0.5),Bounds,InTicks);
+yaxis3(Label("$y$",0.5),Bounds,InTicks);
+zaxis3(Label("$z$",0.5),Bounds,InTicks(beginlabel=false));
+
+grid3(XYZgrid);
diff --git a/Build/source/utils/asymptote/examples/sphere.asy b/Build/source/utils/asymptote/examples/sphere.asy
new file mode 100644
index 00000000000..8c5a444d01a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sphere.asy
@@ -0,0 +1,6 @@
+import three;
+
+size(200);
+currentprojection=orthographic(5,4,3);
+
+draw(unitsphere,green);
diff --git a/Build/source/utils/asymptote/examples/spheresilhouette.asy b/Build/source/utils/asymptote/examples/spheresilhouette.asy
new file mode 100644
index 00000000000..795efb00660
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spheresilhouette.asy
@@ -0,0 +1,9 @@
+import solids;
+settings.render=0;
+settings.prc=false;
+
+size(200);
+
+revolution r=sphere(O,1);
+draw(r,1,longitudinalpen=nullpen);
+draw(r.silhouette());
diff --git a/Build/source/utils/asymptote/examples/sphereskeleton.asy b/Build/source/utils/asymptote/examples/sphereskeleton.asy
new file mode 100644
index 00000000000..ca8b8c3d584
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sphereskeleton.asy
@@ -0,0 +1,9 @@
+size(100);
+import solids;
+
+currentprojection=orthographic(5,4,2);
+
+revolution sphere=sphere(1);
+draw(surface(sphere),green+opacity(0.2));
+draw(sphere,m=7,blue);
+
diff --git a/Build/source/utils/asymptote/examples/sphericalharmonic.asy b/Build/source/utils/asymptote/examples/sphericalharmonic.asy
new file mode 100644
index 00000000000..471bcaae9cd
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sphericalharmonic.asy
@@ -0,0 +1,12 @@
+import graph3;
+import palette;
+size(200);
+
+currentprojection=orthographic(4,2,4);
+
+real r(real theta, real phi) {return 1+0.5*(sin(2*theta)*sin(2*phi))^2;}
+
+triple f(pair z) {return r(z.x,z.y)*expi(z.x,z.y);}
+
+surface s=surface(f,(0,0),(pi,2pi),50);
+draw(s,mean(palette(s.map(abs),Gradient(yellow,red))),nolight);
diff --git a/Build/source/utils/asymptote/examples/spiral.asy b/Build/source/utils/asymptote/examples/spiral.asy
new file mode 100644
index 00000000000..a417ea06a7f
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spiral.asy
@@ -0,0 +1,12 @@
+size(0,150);
+import graph;
+
+real f(real t) {return exp(-t/(2pi));}
+
+draw(polargraph(f,0,20*pi,operator ..));
+
+xaxis("$x$",-infinity,1.3);
+yaxis("$y$",-infinity,1);
+
+labelx(1);
+labelx("$e^{-1}$",1.0/exp(1),SE);
diff --git a/Build/source/utils/asymptote/examples/spline.asy b/Build/source/utils/asymptote/examples/spline.asy
new file mode 100644
index 00000000000..9d79ef3a962
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spline.asy
@@ -0,0 +1,25 @@
+import graph;
+import interpolate;
+
+size(15cm,15cm,IgnoreAspect);
+
+real a=1997, b=2002;
+int n=5;
+real[] xpt=a+sequence(n+1)*(b-a)/n;
+real[] ypt={31,36,26,22,21,24};
+horner h=diffdiv(xpt,ypt);
+fhorner L=fhorner(h);
+
+scale(false,true);
+
+pen p=linewidth(1);
+
+draw(graph(L,a,b),dashed+black+p,"Lagrange interpolation");
+draw(graph(xpt,ypt,Hermite(natural)),red+p,"natural spline");
+draw(graph(xpt,ypt,Hermite(monotonic)),blue+p,"monotone spline");
+xaxis("$x$",BottomTop,LeftTicks(Step=1,step=0.25));
+yaxis("$y$",LeftRight,RightTicks(Step=5));
+
+dot(pairs(xpt,ypt),4bp+gray(0.3));
+
+attach(legend(),point(10S),30S);
diff --git a/Build/source/utils/asymptote/examples/spring.asy b/Build/source/utils/asymptote/examples/spring.asy
new file mode 100644
index 00000000000..cbfb256eee4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spring.asy
@@ -0,0 +1,33 @@
+pair coilpoint(real lambda, real r, real t)
+{
+ return (2.0*lambda*t+r*cos(t),r*sin(t));
+}
+
+guide coil(guide g=nullpath, real lambda, real r, real a, real b, int n)
+{
+ real width=(b-a)/n;
+ for(int i=0; i <= n; ++i) {
+ real t=a+width*i;
+ g=g..coilpoint(lambda,r,t);
+ }
+ return g;
+}
+
+void drawspring(real x, string label) {
+ real r=8;
+ real t1=-pi;
+ real t2=10*pi;
+ real lambda=(t2-t1+x)/(t2-t1);
+ pair b=coilpoint(lambda,r,t1);
+ pair c=coilpoint(lambda,r,t2);
+ pair a=b-20;
+ pair d=c+20;
+
+ draw(a--b,BeginBar(2*barsize()));
+ draw(c--d);
+ draw(coil(lambda,r,t1,t2,100));
+ dot(d);
+
+ pair h=20*I;
+ draw(label,a-h--d-h,red,Arrow,Bars,PenMargin);
+}
diff --git a/Build/source/utils/asymptote/examples/spring0.asy b/Build/source/utils/asymptote/examples/spring0.asy
new file mode 100644
index 00000000000..fd6cdf82938
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spring0.asy
@@ -0,0 +1,4 @@
+import spring;
+
+drawspring(0,"$L$");
+
diff --git a/Build/source/utils/asymptote/examples/spring2.asy b/Build/source/utils/asymptote/examples/spring2.asy
new file mode 100644
index 00000000000..e3eec5f39f5
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/spring2.asy
@@ -0,0 +1,4 @@
+import spring;
+
+drawspring(40.0,"$L+x$");
+
diff --git a/Build/source/utils/asymptote/examples/sqrtx01.asy b/Build/source/utils/asymptote/examples/sqrtx01.asy
new file mode 100644
index 00000000000..2ca9ac697d6
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sqrtx01.asy
@@ -0,0 +1,25 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=perspective(1.5,0,10,Y);
+pen color=green+opacity(0.75);
+
+real f(real x){return sqrt(x);}
+pair F(real x){return (x,f(x));}
+triple F3(real x){return (x,f(x),0);}
+
+path p=graph(F,0,1,n=20,operator ..);
+path3 p3=path3(p);
+
+revolution a=revolution(p3,X,0,360);
+draw(surface(a),color);
+draw(p3,blue);
+
+real x=relpoint(p,0.5).x;
+
+xaxis3(Label("$x$",1),xmax=1.5,dashed,Arrow3);
+yaxis3(Label("$y$",1),Arrow3);
+dot(Label("$(1,1)$"),(1,1,0));
+arrow(Label("$y=\sqrt{x}$"),F3(0.7),Y,0.75cm,red);
+draw(arc(1.2X,0.4,90,90,175,-40,CW),Arrow3);
+draw("$r$",(x,0,0)--F3(x),red,Arrow3,PenMargin3);
diff --git a/Build/source/utils/asymptote/examples/sqrtx01y1.asy b/Build/source/utils/asymptote/examples/sqrtx01y1.asy
new file mode 100644
index 00000000000..c944f43d268
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/sqrtx01y1.asy
@@ -0,0 +1,24 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=perspective(0,1,10,up=Y);
+
+real f(real x) {return sqrt(x);}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+path p=graph(F,0,1,n=25,operator ..);
+path3 p3=path3(p);
+
+revolution a=revolution(p3,Y,0,360);
+draw(surface(a),green);
+draw(p3,blue);
+
+xtick((0,0,0));
+xtick((1,0,0));
+
+xaxis3(Label("$x$",1),Arrow3);
+yaxis3(Label("$y$",1),ymax=1.5,dashed,Arrow3);
+dot(Label("$(1,1)$"),(1,1,0));
+arrow("$y=\sqrt{x}$",F3(0.5),X,0.75cm,red);
+draw(arc(1.2Y,0.3,90,0,7.5,140),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/star.asy b/Build/source/utils/asymptote/examples/star.asy
new file mode 100644
index 00000000000..3a7afb2529b
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/star.asy
@@ -0,0 +1,13 @@
+size(100);
+import math;
+
+int n=5;
+path p;
+
+int i=0;
+do {
+ p=p--unityroot(n,i);
+ i=(i+2) % n;
+} while(i != 0);
+
+filldraw(p--cycle,red+evenodd);
diff --git a/Build/source/utils/asymptote/examples/stroke3.asy b/Build/source/utils/asymptote/examples/stroke3.asy
new file mode 100644
index 00000000000..6b386c3a0c9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/stroke3.asy
@@ -0,0 +1,2 @@
+import three;
+draw(O--X,red,currentlight);
diff --git a/Build/source/utils/asymptote/examples/strokepath.asy b/Build/source/utils/asymptote/examples/strokepath.asy
new file mode 100644
index 00000000000..ee18b1c9bfe
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/strokepath.asy
@@ -0,0 +1,17 @@
+path g=scale(100)*unitcircle;
+pen p=linewidth(1cm);
+
+frame f;
+// Equivalent to draw(f,g,p):
+fill(f,strokepath(g,p),red);
+shipout("strokepathframe",f);
+shipped=false;
+
+size(400);
+
+// Equivalent to draw(g,p):
+currentpicture.add(new void(frame f, transform t) {
+ fill(f,strokepath(t*g,p),red);
+ });
+currentpicture.addPath(g,p);
+
diff --git a/Build/source/utils/asymptote/examples/strokeshade.asy b/Build/source/utils/asymptote/examples/strokeshade.asy
new file mode 100644
index 00000000000..f9413091d1c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/strokeshade.asy
@@ -0,0 +1,4 @@
+size(100);
+guide g=(0,0)..controls(70,30) and (-40,30)..(30,0);
+latticeshade(g,stroke=true,linewidth(10),
+ new pen[][] {{red,orange,yellow},{green,blue,purple}});
diff --git a/Build/source/utils/asymptote/examples/tanh.asy b/Build/source/utils/asymptote/examples/tanh.asy
new file mode 100644
index 00000000000..21d4decb1a6
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/tanh.asy
@@ -0,0 +1,13 @@
+import graph;
+size(100,0);
+
+real f(real x) {return tanh(x);}
+pair F(real x) {return (x,f(x));}
+
+xaxis("$x$");
+yaxis("$y$");
+
+draw(graph(f,-2.5,2.5,operator ..));
+
+label("$\tanh x$",F(1.5),1.25*N);
+
diff --git a/Build/source/utils/asymptote/examples/teapot.asy b/Build/source/utils/asymptote/examples/teapot.asy
new file mode 100644
index 00000000000..4b23aecb3b9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/teapot.asy
@@ -0,0 +1,202 @@
+import three;
+
+size(20cm);
+
+currentprojection=perspective(250,-250,250,center=true);
+
+triple[][][] Q={
+ {
+ {(39.68504,0.0,68.03150),(39.68504,-22.22362,68.03150),(22.22362,-39.68504,68.03150),(0.0,-39.68504,68.03150)},
+ {(37.91339,0.0,71.75197),(37.91339,-21.23150,71.75197),(21.23150,-37.91339,71.75197),(0.0,-37.91339,71.75197)},
+ {(40.74803,0.0,71.75197),(40.74803,-22.81890,71.75197),(22.81890,-40.74803,71.75197),(0.0,-40.74803,71.75197)},
+ {(42.51969,0.0,68.03150),(42.51969,-23.81102,68.03150),(23.81102,-42.51969,68.03150),(0.0,-42.51969,68.03150)},
+ },
+ {
+ {(0.0,-39.68504,68.03150),(-22.22362,-39.68504,68.03150),(-39.68504,-22.22362,68.03150),(-39.68504,0.0,68.03150)},
+ {(0.0,-37.91339,71.75197),(-21.23150,-37.91339,71.75197),(-37.91339,-21.23150,71.75197),(-37.91339,0.0,71.75197)},
+ {(0.0,-40.74803,71.75197),(-22.81890,-40.74803,71.75197),(-40.74803,-22.81890,71.75197),(-40.74803,0.0,71.75197)},
+ {(0.0,-42.51969,68.03150),(-23.81102,-42.51969,68.03150),(-42.51969,-23.81102,68.03150),(-42.51969,0.0,68.03150)},
+ },
+ {
+ {(-39.68504,0.0,68.03150),(-39.68504,22.22362,68.03150),(-22.22362,39.68504,68.03150),(0.0,39.68504,68.03150)},
+ {(-37.91339,0.0,71.75197),(-37.91339,21.23150,71.75197),(-21.23150,37.91339,71.75197),(0.0,37.91339,71.75197)},
+ {(-40.74803,0.0,71.75197),(-40.74803,22.81890,71.75197),(-22.81890,40.74803,71.75197),(0.0,40.74803,71.75197)},
+ {(-42.51969,0.0,68.03150),(-42.51969,23.81102,68.03150),(-23.81102,42.51969,68.03150),(0.0,42.51969,68.03150)},
+ },
+ {
+ {(0.0,39.68504,68.03150),(22.22362,39.68504,68.03150),(39.68504,22.22362,68.03150),(39.68504,0.0,68.03150)},
+ {(0.0,37.91339,71.75197),(21.23150,37.91339,71.75197),(37.91339,21.23150,71.75197),(37.91339,0.0,71.75197)},
+ {(0.0,40.74803,71.75197),(22.81890,40.74803,71.75197),(40.74803,22.81890,71.75197),(40.74803,0.0,71.75197)},
+ {(0.0,42.51969,68.03150),(23.81102,42.51969,68.03150),(42.51969,23.81102,68.03150),(42.51969,0.0,68.03150)},
+ },
+ {
+ {(42.51969,0.0,68.03150),(42.51969,-23.81102,68.03150),(23.81102,-42.51969,68.03150),(0.0,-42.51969,68.03150)},
+ {(49.60629,0.0,53.14960),(49.60629,-27.77952,53.14960),(27.77952,-49.60629,53.14960),(0.0,-49.60629,53.14960)},
+ {(56.69291,0.0,38.26771),(56.69291,-31.74803,38.26771),(31.74803,-56.69291,38.26771),(0.0,-56.69291,38.26771)},
+ {(56.69291,0.0,25.51181),(56.69291,-31.74803,25.51181),(31.74803,-56.69291,25.51181),(0.0,-56.69291,25.51181)},
+ },
+ {
+ {(0.0,-42.51969,68.03150),(-23.81102,-42.51969,68.03150),(-42.51969,-23.81102,68.03150),(-42.51969,0.0,68.03150)},
+ {(0.0,-49.60629,53.14960),(-27.77952,-49.60629,53.14960),(-49.60629,-27.77952,53.14960),(-49.60629,0.0,53.14960)},
+ {(0.0,-56.69291,38.26771),(-31.74803,-56.69291,38.26771),(-56.69291,-31.74803,38.26771),(-56.69291,0.0,38.26771)},
+ {(0.0,-56.69291,25.51181),(-31.74803,-56.69291,25.51181),(-56.69291,-31.74803,25.51181),(-56.69291,0.0,25.51181)},
+ },
+ {
+ {(-42.51969,0.0,68.03150),(-42.51969,23.81102,68.03150),(-23.81102,42.51969,68.03150),(0.0,42.51969,68.03150)},
+ {(-49.60629,0.0,53.14960),(-49.60629,27.77952,53.14960),(-27.77952,49.60629,53.14960),(0.0,49.60629,53.14960)},
+ {(-56.69291,0.0,38.26771),(-56.69291,31.74803,38.26771),(-31.74803,56.69291,38.26771),(0.0,56.69291,38.26771)},
+ {(-56.69291,0.0,25.51181),(-56.69291,31.74803,25.51181),(-31.74803,56.69291,25.51181),(0.0,56.69291,25.51181)},
+ },
+ {
+ {(0.0,42.51969,68.03150),(23.81102,42.51969,68.03150),(42.51969,23.81102,68.03150),(42.51969,0.0,68.03150)},
+ {(0.0,49.60629,53.14960),(27.77952,49.60629,53.14960),(49.60629,27.77952,53.14960),(49.60629,0.0,53.14960)},
+ {(0.0,56.69291,38.26771),(31.74803,56.69291,38.26771),(56.69291,31.74803,38.26771),(56.69291,0.0,38.26771)},
+ {(0.0,56.69291,25.51181),(31.74803,56.69291,25.51181),(56.69291,31.74803,25.51181),(56.69291,0.0,25.51181)},
+ },
+ {
+ {(56.69291,0.0,25.51181),(56.69291,-31.74803,25.51181),(31.74803,-56.69291,25.51181),(0.0,-56.69291,25.51181)},
+ {(56.69291,0.0,12.75590),(56.69291,-31.74803,12.75590),(31.74803,-56.69291,12.75590),(0.0,-56.69291,12.75590)},
+ {(42.51969,0.0,6.377957),(42.51969,-23.81102,6.377957),(23.81102,-42.51969,6.377957),(0.0,-42.51969,6.377957)},
+ {(42.51969,0.0,4.251961),(42.51969,-23.81102,4.251961),(23.81102,-42.51969,4.251961),(0.0,-42.51969,4.251961)},
+ },
+ {
+ {(0.0,-56.69291,25.51181),(-31.74803,-56.69291,25.51181),(-56.69291,-31.74803,25.51181),(-56.69291,0.0,25.51181)},
+ {(0.0,-56.69291,12.75590),(-31.74803,-56.69291,12.75590),(-56.69291,-31.74803,12.75590),(-56.69291,0.0,12.75590)},
+ {(0.0,-42.51969,6.377957),(-23.81102,-42.51969,6.377957),(-42.51969,-23.81102,6.377957),(-42.51969,0.0,6.377957)},
+ {(0.0,-42.51969,4.251961),(-23.81102,-42.51969,4.251961),(-42.51969,-23.81102,4.251961),(-42.51969,0.0,4.251961)},
+ },
+ {
+ {(-56.69291,0.0,25.51181),(-56.69291,31.74803,25.51181),(-31.74803,56.69291,25.51181),(0.0,56.69291,25.51181)},
+ {(-56.69291,0.0,12.75590),(-56.69291,31.74803,12.75590),(-31.74803,56.69291,12.75590),(0.0,56.69291,12.75590)},
+ {(-42.51969,0.0,6.377957),(-42.51969,23.81102,6.377957),(-23.81102,42.51969,6.377957),(0.0,42.51969,6.377957)},
+ {(-42.51969,0.0,4.251961),(-42.51969,23.81102,4.251961),(-23.81102,42.51969,4.251961),(0.0,42.51969,4.251961)},
+ },
+ {
+ {(0.0,56.69291,25.51181),(31.74803,56.69291,25.51181),(56.69291,31.74803,25.51181),(56.69291,0.0,25.51181)},
+ {(0.0,56.69291,12.75590),(31.74803,56.69291,12.75590),(56.69291,31.74803,12.75590),(56.69291,0.0,12.75590)},
+ {(0.0,42.51969,6.377957),(23.81102,42.51969,6.377957),(42.51969,23.81102,6.377957),(42.51969,0.0,6.377957)},
+ {(0.0,42.51969,4.251961),(23.81102,42.51969,4.251961),(42.51969,23.81102,4.251961),(42.51969,0.0,4.251961)},
+ },
+ {
+ {(-45.35433,0.0,57.40157),(-45.35433,-8.503932,57.40157),(-42.51969,-8.503932,63.77952),(-42.51969,0.0,63.77952)},
+ {(-65.19685,0.0,57.40157),(-65.19685,-8.503932,57.40157),(-70.86614,-8.503932,63.77952),(-70.86614,0.0,63.77952)},
+ {(-76.53543,0.0,57.40157),(-76.53543,-8.503932,57.40157),(-85.03937,-8.503932,63.77952),(-85.03937,0.0,63.77952)},
+ {(-76.53543,0.0,51.02362),(-76.53543,-8.503932,51.02362),(-85.03937,-8.503932,51.02362),(-85.03937,0.0,51.02362)},
+ },
+ {
+ {(-42.51969,0.0,63.77952),(-42.51969,8.503932,63.77952),(-45.35433,8.503932,57.40157),(-45.35433,0.0,57.40157)},
+ {(-70.86614,0.0,63.77952),(-70.86614,8.503932,63.77952),(-65.19685,8.503932,57.40157),(-65.19685,0.0,57.40157)},
+ {(-85.03937,0.0,63.77952),(-85.03937,8.503932,63.77952),(-76.53543,8.503932,57.40157),(-76.53543,0.0,57.40157)},
+ {(-85.03937,0.0,51.02362),(-85.03937,8.503932,51.02362),(-76.53543,8.503932,51.02362),(-76.53543,0.0,51.02362)},
+ },
+ {
+ {(-76.53543,0.0,51.02362),(-76.53543,-8.503932,51.02362),(-85.03937,-8.503932,51.02362),(-85.03937,0.0,51.02362)},
+ {(-76.53543,0.0,44.64566),(-76.53543,-8.503932,44.64566),(-85.03937,-8.503932,38.26771),(-85.03937,0.0,38.26771)},
+ {(-70.86614,0.0,31.88976),(-70.86614,-8.503932,31.88976),(-75.11811,-8.503932,26.57480),(-75.11811,0.0,26.57480)},
+ {(-56.69291,0.0,25.51181),(-56.69291,-8.503932,25.51181),(-53.85826,-8.503932,17.00787),(-53.85826,0.0,17.00787)},
+ },
+ {
+ {(-85.03937,0.0,51.02362),(-85.03937,8.503932,51.02362),(-76.53543,8.503932,51.02362),(-76.53543,0.0,51.02362)},
+ {(-85.03937,0.0,38.26771),(-85.03937,8.503932,38.26771),(-76.53543,8.503932,44.64566),(-76.53543,0.0,44.64566)},
+ {(-75.11811,0.0,26.57480),(-75.11811,8.503932,26.57480),(-70.86614,8.503932,31.88976),(-70.86614,0.0,31.88976)},
+ {(-53.85826,0.0,17.00787),(-53.85826,8.503932,17.00787),(-56.69291,8.503932,25.51181),(-56.69291,0.0,25.51181)},
+ },
+ {
+ {(48.18897,0.0,40.39370),(48.18897,-18.70866,40.39370),(48.18897,-18.70866,17.00787),(48.18897,0.0,17.00787)},
+ {(73.70078,0.0,40.39370),(73.70078,-18.70866,40.39370),(87.87401,-18.70866,23.38582),(87.87401,0.0,23.38582)},
+ {(65.19685,0.0,59.52755),(65.19685,-7.086619,59.52755),(68.03150,-7.086619,57.40157),(68.03150,0.0,57.40157)},
+ {(76.53543,0.0,68.03150),(76.53543,-7.086619,68.03150),(93.54330,-7.086619,68.03150),(93.54330,0.0,68.03150)},
+ },
+ {
+ {(48.18897,0.0,17.00787),(48.18897,18.70866,17.00787),(48.18897,18.70866,40.39370),(48.18897,0.0,40.39370)},
+ {(87.87401,0.0,23.38582),(87.87401,18.70866,23.38582),(73.70078,18.70866,40.39370),(73.70078,0.0,40.39370)},
+ {(68.03150,0.0,57.40157),(68.03150,7.086619,57.40157),(65.19685,7.086619,59.52755),(65.19685,0.0,59.52755)},
+ {(93.54330,0.0,68.03150),(93.54330,7.086619,68.03150),(76.53543,7.086619,68.03150),(76.53543,0.0,68.03150)},
+ },
+ {
+ {(76.53543,0.0,68.03150),(76.53543,-7.086619,68.03150),(93.54330,-7.086619,68.03150),(93.54330,0.0,68.03150)},
+ {(79.37007,0.0,70.15748),(79.37007,-7.086619,70.15748),(99.92125,-7.086619,70.68897),(99.92125,0.0,70.68897)},
+ {(82.20472,0.0,70.15748),(82.20472,-4.251961,70.15748),(97.79527,-4.251961,71.22047),(97.79527,0.0,71.22047)},
+ {(79.37007,0.0,68.03150),(79.37007,-4.251961,68.03150),(90.70866,-4.251961,68.03150),(90.70866,0.0,68.03150)},
+ },
+ {
+ {(93.54330,0.0,68.03150),(93.54330,7.086619,68.03150),(76.53543,7.086619,68.03150),(76.53543,0.0,68.03150)},
+ {(99.92125,0.0,70.68897),(99.92125,7.086619,70.68897),(79.37007,7.086619,70.15748),(79.37007,0.0,70.15748)},
+ {(97.79527,0.0,71.22047),(97.79527,4.251961,71.22047),(82.20472,4.251961,70.15748),(82.20472,0.0,70.15748)},
+ {(90.70866,0.0,68.03150),(90.70866,4.251961,68.03150),(79.37007,4.251961,68.03150),(79.37007,0.0,68.03150)},
+ },
+ {
+ {(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133)},
+ {(22.67716,0.0,89.29133),(22.67716,-12.75590,89.29133),(12.75590,-22.67716,89.29133),(0.0,-22.67716,89.29133)},
+ {(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740)},
+ {(5.669294,0.0,76.53543),(5.669294,-3.174809,76.53543),(3.174809,-5.669294,76.53543),(0.0,-5.669294,76.53543)},
+ },
+ {
+ {(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133)},
+ {(0.0,-22.67716,89.29133),(-12.75590,-22.67716,89.29133),(-22.67716,-12.75590,89.29133),(-22.67716,0.0,89.29133)},
+ {(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740)},
+ {(0.0,-5.669294,76.53543),(-3.174809,-5.669294,76.53543),(-5.669294,-3.174809,76.53543),(-5.669294,0.0,76.53543)},
+ },
+ {
+ {(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133)},
+ {(-22.67716,0.0,89.29133),(-22.67716,12.75590,89.29133),(-12.75590,22.67716,89.29133),(0.0,22.67716,89.29133)},
+ {(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740)},
+ {(-5.669294,0.0,76.53543),(-5.669294,3.174809,76.53543),(-3.174809,5.669294,76.53543),(0.0,5.669294,76.53543)},
+ },
+ {
+ {(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133),(0.0,0.0,89.29133)},
+ {(0.0,22.67716,89.29133),(12.75590,22.67716,89.29133),(22.67716,12.75590,89.29133),(22.67716,0.0,89.29133)},
+ {(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740),(0.0,0.0,80.78740)},
+ {(0.0,5.669294,76.53543),(3.174809,5.669294,76.53543),(5.669294,3.174809,76.53543),(5.669294,0.0,76.53543)},
+ },
+ {
+ {(5.669294,0.0,76.53543),(5.669294,-3.174809,76.53543),(3.174809,-5.669294,76.53543),(0.0,-5.669294,76.53543)},
+ {(11.33858,0.0,72.28346),(11.33858,-6.349609,72.28346),(6.349609,-11.33858,72.28346),(0.0,-11.33858,72.28346)},
+ {(36.85039,0.0,72.28346),(36.85039,-20.63622,72.28346),(20.63622,-36.85039,72.28346),(0.0,-36.85039,72.28346)},
+ {(36.85039,0.0,68.03150),(36.85039,-20.63622,68.03150),(20.63622,-36.85039,68.03150),(0.0,-36.85039,68.03150)},
+ },
+ {
+ {(0.0,-5.669294,76.53543),(-3.174809,-5.669294,76.53543),(-5.669294,-3.174809,76.53543),(-5.669294,0.0,76.53543)},
+ {(0.0,-11.33858,72.28346),(-6.349609,-11.33858,72.28346),(-11.33858,-6.349609,72.28346),(-11.33858,0.0,72.28346)},
+ {(0.0,-36.85039,72.28346),(-20.63622,-36.85039,72.28346),(-36.85039,-20.63622,72.28346),(-36.85039,0.0,72.28346)},
+ {(0.0,-36.85039,68.03150),(-20.63622,-36.85039,68.03150),(-36.85039,-20.63622,68.03150),(-36.85039,0.0,68.03150)},
+ },
+ {
+ {(-5.669294,0.0,76.53543),(-5.669294,3.174809,76.53543),(-3.174809,5.669294,76.53543),(0.0,5.669294,76.53543)},
+ {(-11.33858,0.0,72.28346),(-11.33858,6.349609,72.28346),(-6.349609,11.33858,72.28346),(0.0,11.33858,72.28346)},
+ {(-36.85039,0.0,72.28346),(-36.85039,20.63622,72.28346),(-20.63622,36.85039,72.28346),(0.0,36.85039,72.28346)},
+ {(-36.85039,0.0,68.03150),(-36.85039,20.63622,68.03150),(-20.63622,36.85039,68.03150),(0.0,36.85039,68.03150)},
+ },
+ {
+ {(0.0,5.669294,76.53543),(3.174809,5.669294,76.53543),(5.669294,3.174809,76.53543),(5.669294,0.0,76.53543)},
+ {(0.0,11.33858,72.28346),(6.349609,11.33858,72.28346),(11.33858,6.349609,72.28346),(11.33858,0.0,72.28346)},
+ {(0.0,36.85039,72.28346),(20.63622,36.85039,72.28346),(36.85039,20.63622,72.28346),(36.85039,0.0,72.28346)},
+ {(0.0,36.85039,68.03150),(20.63622,36.85039,68.03150),(36.85039,20.63622,68.03150),(36.85039,0.0,68.03150)},
+ },
+ {
+ {(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0)},
+ {(40.39370,0.0,0.0),(40.39370,22.62047,0.0),(22.62047,40.39370,0.0),(0.0,40.39370,0.0)},
+ {(42.51969,0.0,2.12598),(42.51969,23.81102,2.12598),(23.81102,42.51969,2.12598),(0.0,42.51969,2.12598)},
+ {(42.51969,0.0,4.251961),(42.51969,23.81102,4.251961),(23.81102,42.51969,4.251961),(0.0,42.51969,4.251961)},
+ },
+ {
+ {(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0)},
+ {(0.0,40.39370,0.0),(-22.62047,40.39370,0.0),(-40.39370,22.62047,0.0),(-40.39370,0.0,0.0)},
+ {(0.0,42.51969,2.12598),(-23.81102,42.51969,2.12598),(-42.51969,23.81102,2.12598),(-42.51969,0.0,2.12598)},
+ {(0.0,42.51969,4.251961),(-23.81102,42.51969,4.251961),(-42.51969,23.81102,4.251961),(-42.51969,0.0,4.251961)},
+ },
+ {
+ {(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0)},
+ {(-40.39370,0.0,0.0),(-40.39370,-22.62047,0.0),(-22.62047,-40.39370,0.0),(0.0,-40.39370,0.0)},
+ {(-42.51969,0.0,2.12598),(-42.51969,-23.81102,2.12598),(-23.81102,-42.51969,2.12598),(0.0,-42.51969,2.12598)},
+ {(-42.51969,0.0,4.251961),(-42.51969,-23.81102,4.251961),(-23.81102,-42.51969,4.251961),(0.0,-42.51969,4.251961)},
+ },
+ {
+ {(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0),(0.0,0.0,0.0)},
+ {(0.0,-40.39370,0.0),(22.62047,-40.39370,0.0),(40.39370,-22.62047,0.0),(40.39370,0.0,0.0)},
+ {(0.0,-42.51969,2.12598),(23.81102,-42.51969,2.12598),(42.51969,-23.81102,2.12598),(42.51969,0.0,2.12598)},
+ {(0.0,-42.51969,4.251961),(23.81102,-42.51969,4.251961),(42.51969,-23.81102,4.251961),(42.51969,0.0,4.251961)},
+ }
+};
+
+draw(surface(Q),blue);
diff --git a/Build/source/utils/asymptote/examples/tensor.asy b/Build/source/utils/asymptote/examples/tensor.asy
new file mode 100644
index 00000000000..3791b032b92
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/tensor.asy
@@ -0,0 +1,8 @@
+size(200);
+
+pen[][] p={{red,green,blue,cyan},{green,blue,rgb(black),magenta}};
+path G=(0,0){dir(-120)}..(1,0)..(1,1)..(0,1)..cycle;
+path[] g={G,subpath(G,1,2)..(2,1)..(2,0)..cycle};
+pair[][] z={{(0.5,0.5),(0.5,0.5),(0.5,0.5),(0.5,0.5)},{(2,0.5),(2,0.5),(1.5,0.5),(2,0.5)}};
+tensorshade(g,p,z);
+dot(g);
diff --git a/Build/source/utils/asymptote/examples/thermodynamics.asy b/Build/source/utils/asymptote/examples/thermodynamics.asy
new file mode 100644
index 00000000000..cfcc3d0e98e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/thermodynamics.asy
@@ -0,0 +1,131 @@
+// example file for roundedpath() in roundedpath.asy
+// written by stefan knorr
+
+
+// import needed packages
+import roundedpath;
+
+// function definition
+picture CreateKOOS(real Scale, string legend) // draw labeled coordinate system as picture
+{
+ picture ReturnPic;
+ real S = 1.2*Scale;
+ draw(ReturnPic, ((-S,0)--(S,0)), bar = EndArrow); // x axis
+ draw(ReturnPic, ((0,-S)--(0,S)), bar = EndArrow); // y axis
+ label(ReturnPic, "$\varepsilon$", (S,0), SW); // x axis label
+ label(ReturnPic, "$\sigma$", (0,S), SW); // y axis label
+ label(ReturnPic, legend, (0.7S, -S), NW); // add label 'legend'
+ return ReturnPic; // return picture
+}
+
+
+// some global definitions
+real S = 13mm; // universal scale factor for the whole file
+real grad = 0.25; // gradient for lines
+real radius = 0.04; // radius for the rounded path'
+real lw = 2; // linewidth
+pair A = (-1, -1); // start point for graphs
+pair E = ( 1, 1); // end point for graphs
+path graph; // local graph
+pen ActPen; // actual pen for each drawing
+picture T[]; // vector of all four diagrams
+real inc = 2.8; // increment-offset for combining pictures
+
+//////////////////////////////////////// 1st diagram
+T[1] = CreateKOOS(S, "$T_1$"); // initialise T[1] as empty diagram with label $T_1$
+graph = A; // # pointwise definition of current path 'graph'
+graph = graph -- (A.x + grad*1.6, A.y + 1.6); // #
+graph = graph -- (E.x - grad*0.4, E.y - 0.4); // #
+graph = graph -- E; // #
+
+graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy
+ActPen = rgb(0,0,0.6) + linewidth(lw); // define pen for drawing in 1st diagram
+draw(T[1], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[1]' (1st hysteresis branch)
+draw(T[1], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch)
+
+graph = (0,0) -- (grad*0.6, 0.6) -- ( (grad*0.6, 0.6) + (0.1, 0) ); // define branch from origin to hysteresis
+graph = roundedpath(graph, radius, S); // round this path
+draw(T[1], graph, ActPen); // draw this path into 'T[1]'
+
+
+//////////////////////////////////////// 2nd diagram
+T[2] = CreateKOOS(S, "$T_2$"); // initialise T[2] as empty diagram with label $T_2$
+graph = A; // # pointwise definition of current path 'graph'
+graph = graph -- (A.x + grad*1.3, A.y + 1.3); // #
+graph = graph -- (E.x - grad*0.7 , E.y - 0.7); // #
+graph = graph -- E; // #
+
+graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy
+ActPen = rgb(0.2,0,0.4) + linewidth(lw); // define pen for drawing in 2nd diagram
+draw(T[2], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[2]' (1st hysteresis branch)
+draw(T[2], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch)
+
+graph = (0,0) -- (grad*0.3, 0.3) -- ( (grad*0.3, 0.3) + (0.1, 0) ); // define branch from origin to hysteresis
+graph = roundedpath(graph, radius, S); // round this path
+draw(T[2], graph, ActPen); // draw this path into 'T[2]'
+
+
+//////////////////////////////////////// 3rd diagram
+T[3] = CreateKOOS(S, "$T_3$"); // initialise T[3] as empty diagram with label $T_3$
+graph = A; // # pointwise definition of current path 'graph'
+graph = graph -- (A.x + grad*0.7, A.y + 0.7); // #
+graph = graph -- ( - grad*0.3 , - 0.3); // #
+graph = graph -- (0,0); // #
+graph = graph -- (grad*0.6, 0.6); // #
+graph = graph -- (E.x - grad*0.4, E.y - 0.4); // #
+graph = graph -- E; // #
+
+graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy
+ActPen = rgb(0.6,0,0.2) + linewidth(lw); // define pen for drawing in 3rd diagram
+draw(T[3], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[3]' (1st hysteresis branch)
+draw(T[3], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (2nd hysteresis branch)
+
+
+//////////////////////////////////////// 4th diagram
+T[4] = CreateKOOS(S, "$T_4$"); // initialise T[4] as empty diagram with label $T_4$
+graph = A; // # pointwise definition of current path 'graph'
+graph = graph -- (A.x + grad*0.4, A.y + 0.4); // #
+graph = graph -- ( - grad*0.6 , - 0.6); // #
+graph = graph -- (0,0); // #
+graph = graph -- (grad*0.9, 0.9); // #
+graph = graph -- (E.x - grad*0.1, E.y - 0.1); // #
+graph = graph -- E; // #
+
+graph = roundedpath(graph, radius, S); // round edges of 'graph' using roundedpath() in roundedpath.asy
+ActPen = rgb(0.6,0,0) + linewidth(lw); // define pen for drawing in 4th diagram
+draw(T[4], graph, ActPen); // draw 'graph' with 'ActPen' into 'T[4]' (1st hysteresis branch)
+draw(T[4], rotate(180,(0,0))*graph, ActPen); // draw rotated 'graph' (3nd hysteresis branch)
+
+
+// add some labels and black dots to the first two pictures
+pair SWW = (-0.8, -0.6);
+label(T[1], "$\sigma_f$", (0, 0.6S), NE); // sigma_f
+draw(T[1], (0, 0.6S), linewidth(3) + black);
+label(T[2], "$\sigma_f$", (0, 0.3S), NE); // sigma_f
+draw(T[2], (0, 0.3S), linewidth(3) + black);
+label(T[1], "$\varepsilon_p$", (0.7S, 0), SWW); // epsilon_p
+draw(T[1], (0.75S, 0), linewidth(3) + black);
+label(T[2], "$\varepsilon_p$", (0.7S, 0), SWW); // epsilon_p
+draw(T[2], (0.75S, 0), linewidth(3) + black);
+
+
+// add all pictures T[1...4] to the current one
+add(T[1],(0,0));
+add(T[2],(1*inc*S,0));
+add(T[3],(2*inc*S,0));
+add(T[4],(3*inc*S,0));
+
+
+// draw line of constant \sigma and all intersection points with the graphs in T[1...4]
+ActPen = linewidth(1) + dashed + gray(0.5); // pen definition
+draw((-S, 0.45*S)--((3*inc+1)*S, 0.45*S), ActPen); // draw backgoundline
+label("$\sigma_s$", (-S, 0.45S), W); // label 'sigma_s'
+
+path mark = scale(2)*unitcircle; // define mark-symbol to be used for intersections
+ActPen = linewidth(1) + gray(0.5); // define pen for intersection mark
+draw(shift(( 1 - grad*0.55 + 0*inc)*S, 0.45*S)*mark, ActPen); // # draw all intersections
+draw(shift((-1 + grad*1.45 + 0*inc)*S, 0.45*S)*mark, ActPen); // #
+draw(shift(( 1 - grad*0.55 + 1*inc)*S, 0.45*S)*mark, ActPen); // #
+draw(shift(( 1 - grad*0.55 + 2*inc)*S, 0.45*S)*mark, ActPen); // #
+draw(shift(( grad*0.45 + 2*inc)*S, 0.45*S)*mark, ActPen); // #
+draw(shift(( grad*0.45 + 3*inc)*S, 0.45*S)*mark, ActPen); // #
diff --git a/Build/source/utils/asymptote/examples/torus.asy b/Build/source/utils/asymptote/examples/torus.asy
new file mode 100644
index 00000000000..33d6e6ddb1a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/torus.asy
@@ -0,0 +1,7 @@
+size(200);
+import solids;
+
+currentprojection=perspective(5,4,4);
+
+revolution torus=revolution(shift(3X)*Circle(O,1,Y,32),Z,90,345);
+draw(surface(torus),green);
diff --git a/Build/source/utils/asymptote/examples/transparency.asy b/Build/source/utils/asymptote/examples/transparency.asy
new file mode 100644
index 00000000000..02196a02ee9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/transparency.asy
@@ -0,0 +1,9 @@
+size(0,150);
+
+settings.outformat="pdf";
+
+begingroup();
+fill(shift(1.5dir(120))*unitcircle,green+opacity(0.75));
+fill(shift(1.5dir(60))*unitcircle,red+opacity(0.75));
+fill(unitcircle,blue+opacity(0.75));
+endgroup();
diff --git a/Build/source/utils/asymptote/examples/treetest.asy b/Build/source/utils/asymptote/examples/treetest.asy
new file mode 100644
index 00000000000..dbdf973c508
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/treetest.asy
@@ -0,0 +1,22 @@
+import drawtree;
+
+treeLevelStep = 2cm;
+
+TreeNode root = makeNode( "Root" );
+TreeNode child1 = makeNode( root, "Child\_1" );
+TreeNode child2 = makeNode( root, "Child\_2" );
+
+TreeNode gchild1 = makeNode( child1, "Grandchild\_1" );
+TreeNode gchild2 = makeNode( child1, "Grandchild\_2" );
+
+TreeNode gchild3 = makeNode( child1, "Grandchild\_3" );
+TreeNode gchild4 = makeNode( child1, "Grandchild\_4" );
+
+
+TreeNode gchild11 = makeNode( child2, "Grandchild\_1" );
+TreeNode gchild22 = makeNode( child2, "Grandchild\_2" );
+
+TreeNode ggchild1 = makeNode( gchild1, "Great Grandchild\_1" );
+
+draw( root, (0,0) );
+
diff --git a/Build/source/utils/asymptote/examples/trefoilknot.asy b/Build/source/utils/asymptote/examples/trefoilknot.asy
new file mode 100644
index 00000000000..fb10e3def0e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/trefoilknot.asy
@@ -0,0 +1,23 @@
+import tube;
+import graph3;
+import palette;
+currentlight=adobe;
+
+size(0,8cm);
+currentprojection=perspective(1,1,1,up=-Y);
+
+int e=1;
+real x(real t) {return cos(t)+2*cos(2t);}
+real y(real t) {return sin(t)-2*sin(2t);}
+real z(real t) {return 2*e*sin(3t);}
+
+path3 p=scale3(2)*graph(x,y,z,0,2pi,50,operator ..)&cycle;
+
+pen[] pens=Gradient(6,red,blue,purple);
+pens.push(yellow);
+for (int i=pens.length-2; i >= 0 ; --i)
+ pens.push(pens[i]);
+
+path sec=scale(0.25)*texpath("$\pi$")[0];
+coloredpath colorsec=coloredpath(sec, pens,colortype=coloredNodes);
+draw(tube(p,colorsec));
diff --git a/Build/source/utils/asymptote/examples/triads.asy b/Build/source/utils/asymptote/examples/triads.asy
new file mode 100644
index 00000000000..73088197e25
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/triads.asy
@@ -0,0 +1,52 @@
+import graph;
+
+path p=(10,75)..(15,85)..(20,90)..(35,85)..(40,79)--(78,30)..(85,15)..(87,5);
+
+pair l=point(p,3.5);
+pair m=point(p,4.5);
+pair s=point(p,4.9);
+
+pen c=linewidth(1.5);
+pair o=(m.x,0.5(m.x+l.y));
+
+pen d=c+darkgreen;
+
+void drawarrow(string s="", pair p, pair q, side side=RightSide,
+ bool upscale=false, pen c)
+{
+ path g=p{dir(-5)}..{dir(-85)}q;
+ if(upscale) g=reverse(g);
+ draw(s,g,side,c,Arrow(Fill,0.65));
+}
+
+void spectrum(pair l,pair m, pair s) {
+ draw(p,c);
+
+ d += 4.0;
+ dot("$p$",l,SW,d);
+ dot("$q$",m,SW,d);
+ dot("$k$",s,SW,d);
+
+ xaxis("$k$",0);
+ yaxis("$E(k)$",0);
+}
+
+drawarrow("$T_p$",l,m,true,blue);
+drawarrow("$T_k$",m,s,LeftSide,red);
+spectrum(l,m,s);
+shipout("triadpqk");
+
+erase();
+
+drawarrow("$-T_p$",l,m,LeftSide,red);
+drawarrow("$-T_q$",m,s,true,blue);
+spectrum(l,s,m);
+shipout("triadpkq");
+
+erase();
+
+drawarrow("$T_k$",l,m,true,blue);
+drawarrow("$T_q$",m,s,LeftSide,red);
+spectrum(m,s,l);
+
+shipout("triadkpq");
diff --git a/Build/source/utils/asymptote/examples/triangle.asy b/Build/source/utils/asymptote/examples/triangle.asy
new file mode 100644
index 00000000000..60388a78515
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/triangle.asy
@@ -0,0 +1,12 @@
+size(0,100);
+import geometry;
+
+triangle t=triangle(b=3,alpha=90,c=4);
+
+dot((0,0));
+
+draw(t);
+draw(rotate(90)*t,red);
+draw(shift((-4,0))*t,blue);
+draw(reflect((0,0),(1,0))*t,green);
+draw(slant(2)*t,magenta);
diff --git a/Build/source/utils/asymptote/examples/triceratops.asy b/Build/source/utils/asymptote/examples/triceratops.asy
new file mode 100644
index 00000000000..e640a6b37f9
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/triceratops.asy
@@ -0,0 +1,9 @@
+import obj;
+
+size(15cm);
+currentprojection=orthographic(0,2,5,up=Y);
+
+// A compressed version of the required data file may be obtained from:
+// http://www.cs.technion.ac.il/~irit/data/Viewpoint/galleon.obj.gz
+
+draw(obj("triceratops.obj",brown));
diff --git a/Build/source/utils/asymptote/examples/tvgen.asy b/Build/source/utils/asymptote/examples/tvgen.asy
new file mode 100644
index 00000000000..ade90e89211
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/tvgen.asy
@@ -0,0 +1,1314 @@
+/* tvgen - draw pm5544-like television test cards.
+ * Copyright (C) 2007, 2009, Servaas Vandenberghe.
+ *
+ * The tvgen code below is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with tvgen: see the file COPYING. If not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * tvgen-1.1/tvgen.asy
+ * This asy script generates pm5544-like television test cards. The image
+ * parameters were derived from a 1990 recording. The basic parameters
+ * conform to itu-r bt.470, bt.601, and bt.709. There is no unique image
+ * since local variants exist and parameters have varied over time.
+ */
+//papertype="a4";
+import plain;
+int verbose=settings.verbose/*+2*/; /* uncomment for debug info */
+
+/* tv dot coordinates --> PS points */
+pair tvps(real col, real row, real xd, real yd, int Nv) {
+ real psx, psy;
+ psx=col*xd; psy=(Nv-row)*yd;
+ return (psx,psy);
+}
+path tvrect(int lc, int tr, int rc, int br, real xd, real yd, int Nv) {
+ real lx, ty, rx, by;
+ pair[] z;
+
+ lx=lc*xd; ty=(Nv-tr)*yd;
+ rx=rc*xd; by=(Nv-br)*yd;
+ /* bl br tr tl */
+ z[0]=(lx, by);
+ z[1]=(rx, by);
+ z[2]=(rx, ty);
+ z[3]=(lx, ty);
+
+ return z[0]--z[1]--z[2]--z[3]--cycle;
+}
+
+/********************* image aspect ratio markers ********************/
+void rimarkers(real rimage, int Nh, int Nhc, int os, int Nvc, int Nsy, pen pdef, real xd, real yd, int Nv) {
+ int[] ridefN={ 4, 16 };
+ int[] ridefD={ 3, 9 };
+ int i;
+
+ for(i=0; i<2; ++i) {
+ real rid=ridefN[i]/ridefD[i];
+
+ if(rimage>rid) {
+ int off, offa, offb;
+
+ /* Nhdef=Nh/rimage*rid */
+ off=round(Nh/rimage*rid/2);
+ offa=off+os;
+ offb=off-os;
+ // write(offa,offb);
+
+ if(2*offa<Nh) {
+ int hy, tr, br;
+ path zz;
+
+ hy=floor(Nsy/3);
+ tr=Nvc-hy;
+ br=Nvc+hy;
+
+ zz=tvrect(Nhc+offb, tr, Nhc+offa, br, xd,yd,Nv);
+ //dot(zz);
+ fill(zz, p=pdef);
+ zz=tvrect(Nhc-offa, tr, Nhc-offb, br, xd,yd,Nv);
+ fill(zz, p=pdef);
+ }
+ }
+ } /* for i */
+ return;
+}
+
+/************* cross hatch: line pairing, center interlace test *************/
+void centerline(int[] coff, int[] coffa, int[] coffb, int Nhc, int divsx,
+ int os, int[] rcrowc, int Nvc, int divsy,
+ pair ccenter, real[] rcoff, pair[] rcright, pair[] rcleft,
+ pen pdef, real xd, real yd, int Nv) {
+ pair[] z;
+ int col;
+ pen pblack=pdef+gray(0.0), pwhite=pdef+gray(1.0);
+
+ z[0]=rcright[divsy];
+
+ col=Nhc+coff[0];
+ z[1]=tvps(col,rcrowc[divsy], xd,yd,Nv);
+ z[2]=tvps(col,rcrowc[divsy-1], xd,yd,Nv);
+ col=Nhc-coff[0];
+ z[3]=tvps(col,rcrowc[divsy-1], xd,yd,Nv);
+ z[4]=tvps(col,rcrowc[divsy], xd,yd,Nv);
+
+ z[5]=rcleft[divsy];
+ z[6]=rcleft[divsy+1];
+
+ z[7]=tvps(col,rcrowc[divsy+1], xd,yd,Nv);
+ z[8]=tvps(col,rcrowc[divsy+2], xd,yd,Nv);
+ col=Nhc+coff[0];
+ z[9]=tvps(col,rcrowc[divsy+2], xd,yd,Nv);
+ z[10]=tvps(col,rcrowc[divsy+1], xd,yd,Nv);
+
+ z[11]=rcright[divsy+1];
+ fill(z[1]--z[2]--z[3]--z[4] //--z[5]--z[6]
+ --arc(ccenter, z[5], z[6])
+ --z[7]--z[8]--z[9]--z[10] //--z[11]--z[0]
+ --arc(ccenter,z[11], z[0])
+ --cycle, p=pblack);
+
+ int i, maxoff, rows, tr, br;
+ path zz;
+
+ maxoff=floor(rcoff[divsy]);
+
+ /* center cross: vertical and horizontal centerline */
+ rows=min(Nvc-rcrowc[divsy-1], rcrowc[divsy+2]-Nvc);
+ tr=Nvc-rows;
+ br=Nvc+rows;
+ //write("centerline long: rows tr br ", rows, tr, br);
+ zz=tvrect(Nhc-os, tr, Nhc+os, br, xd,yd,Nv);
+ fill(zz, p=pwhite);
+ zz=tvrect(Nhc-maxoff,Nvc-1, Nhc+maxoff,Nvc+1, xd,yd,Nv);
+ fill(zz, p=pwhite);
+
+ /* vertical short lines */
+ rows=min(Nvc-rcrowc[divsy], rcrowc[divsy+1]-Nvc);
+ tr=Nvc-rows;
+ br=Nvc+rows;
+ if(verbose>1)
+ write("centerline: rows tr br ", rows, tr, br);
+ for(i=0; i<=divsx; ++i) {
+ int off;
+
+ off=coff[i];
+ if(off<maxoff) {
+ int offa, offb;
+ path zzv;
+ offa=coffa[i];
+ offb=coffb[i];
+
+ zzv=tvrect(Nhc+offb, tr, Nhc+offa, br, xd,yd,Nv);
+ fill(zzv, p=pwhite);
+ zzv=tvrect(Nhc-offa, tr, Nhc-offb, br, xd,yd,Nv);
+ fill(zzv, p=pwhite);
+ }
+ }
+ return;
+}
+
+/************************ topbw **************************************/
+void topbw(int[] coff, int Nhc, int os, int urow, int trow, int brow,
+ pair ccenter, pair rclt, pair rclb, pair rcrt, pair rcrb,
+ pen pdef, real xd, real yd, int Nv) {
+ pen pblack=pdef+gray(0.0), pwhite=pdef+gray(1.0);
+ pair[] ze;
+ path zext, zref, zint;
+ int off, col, cr;
+
+ off=ceil((coff[2]+coff[3])/2);
+ ze[0]=tvps(Nhc+off,trow, xd,yd,Nv);
+ ze[1]=rcrt;
+ ze[2]=rclt;
+ ze[3]=tvps(Nhc-off,trow, xd,yd,Nv);
+ ze[4]=tvps(Nhc-off,brow, xd,yd,Nv);
+ col=Nhc-coff[2]-os;
+ ze[5]=tvps(col,brow, xd,yd,Nv);
+ ze[6]=tvps(col,trow, xd,yd,Nv);
+ cr=col+3*os; /* reflection test black pulse */
+ zref=tvrect(col,trow, cr,brow, xd,yd,Nv);
+ ze[7]=tvps(cr,trow, xd,yd,Nv);
+ ze[8]=tvps(cr,brow, xd,yd,Nv);
+ ze[9]=tvps(Nhc+off,brow, xd,yd,Nv);
+ //dot(ze);
+
+ zext=ze[0] // --ze[1]--ze[2]
+ --arc(ccenter, ze[1], ze[2])
+ --ze[3]--ze[4]--ze[5]--ze[6]--ze[7]--ze[8]--ze[9]--cycle;
+
+ off=ceil((coff[1]+coff[2])/2);
+ zint=tvrect(Nhc-off,urow, Nhc+off,trow, xd,yd,Nv);
+
+ /* paths are completely resolved; no free endpoint conditions */
+ fill(zext^^reverse(zint), p=pwhite);
+ fill(zint, p=pblack);
+ fill(zref, p=pblack);
+
+ fill(arc(ccenter,rclt,rclb)--ze[4]--ze[3]--cycle, p=pblack);
+ fill(arc(ccenter,rcrb,rcrt)--ze[0]--ze[9]--cycle, p=pblack);
+ return;
+}
+
+/************************ testtone **************************************/
+/* x on circle -> return y>=0
+ * in:
+ * x x-coordinate relative to origin
+ * crad circle radius in y units, true size=crad*yd
+ */
+real testcircx(real x, real crad, real xd, real yd) {
+ real relx, phi, y;
+
+ relx=x*xd/yd/crad;
+ if(relx>1) {
+ phi=0;
+ } else {
+ phi=acos(relx);
+ }
+ y=crad*sin(phi); // or (x*xd)^2+(y*yd)^2=(crad*yd)^2
+
+ return y;
+}
+/* y on circle -> return x>=0 */
+real testcircy(real y, real crad, real xd, real yd) {
+ real rely, phi, x;
+
+ rely=y/crad;
+ if(rely>1) {
+ phi=pi/2;
+ } else {
+ phi=asin(rely);
+ }
+ x=crad*cos(phi)*yd/xd; // or (x*xd)^2+(y*yd)^2=(crad*yd)^2
+
+ return x;
+}
+
+/* brow>trow && xb>xt */
+void testtone(real Tt, int trow, int brow,
+ real ccol, real crow, real crad,
+ pen pdef, real xd, real yd, int Nv) {
+ int blocks, i;
+ real yt, xt, yb, xb, Ttt=Tt/2;
+ pair ccenter;
+
+ yt=crow-trow;
+ xt=testcircy(yt, crad, xd, yd);
+ yb=crow-brow;
+ xb=testcircy(yb, crad, xd, yd);
+ //write('#xt yt\t',xt,yt); write('#xb yb\t',xb,yb);
+
+ ccenter=tvps(ccol,crow, xd,yd,Nv);
+
+ blocks=floor(2*xb/Tt);
+
+ for(i=-blocks-1; i<=blocks; ++i) {
+ real tl, tr;
+ path zz;
+
+ tl=max(-xb,min(i*Ttt,xb)); /* limit [-xb..xb] */
+ tr=max(-xb,min((i+1)*Ttt,xb));
+
+ if(tl<-xt && tr<=-xt || tr>xt && tl>=xt) { /* top full circle */
+ pair[] z;
+ real yl, yr;
+
+ yl=testcircx(tl, crad, xd, yd);
+ yr=testcircx(tr, crad, xd, yd);
+
+ z[0]=tvps(ccol+tl,brow, xd,yd,Nv);
+ z[1]=tvps(ccol+tr,brow, xd,yd,Nv);
+ z[2]=tvps(ccol+tr,crow-yr, xd,yd,Nv);
+ z[3]=tvps(ccol+tl,crow-yl, xd,yd,Nv);
+
+ zz=z[0]--z[1]--arc(ccenter,z[2],z[3])--cycle;
+ } else if(tl<-xt) { /* tl in circel, tr not, partial */
+ pair[] z;
+ real yl;
+
+ yl=testcircx(tl, crad, xd, yd);
+
+ z[0]=tvps(ccol+tl,brow, xd,yd,Nv);
+ z[1]=tvps(ccol+tr,brow, xd,yd,Nv);
+ z[2]=tvps(ccol+tr,trow, xd,yd,Nv);
+ z[3]=tvps(ccol-xt,trow, xd,yd,Nv);
+ z[4]=tvps(ccol+tl,crow-yl, xd,yd,Nv);
+
+ zz=z[0]--z[1]--z[2]--arc(ccenter,z[3],z[4])--cycle;
+ } else if(tr>xt) { /* tr in circle, tl not, partial */
+ pair[] z;
+ real yr;
+
+ yr=testcircx(tr, crad, xd, yd);
+
+ z[0]=tvps(ccol+tl,brow, xd,yd,Nv);
+ z[1]=tvps(ccol+tr,brow, xd,yd,Nv);
+ z[2]=tvps(ccol+tr,crow-yr, xd,yd,Nv);
+ z[3]=tvps(ccol+xt,trow, xd,yd,Nv);
+ z[4]=tvps(ccol+tl,trow, xd,yd,Nv);
+ zz=z[0]--z[1]--arc(ccenter,z[2],z[3])--z[4]--cycle;
+ } else { /* full block */
+ pair[] z;
+
+ z[0]=tvps(ccol+tr,trow, xd,yd,Nv);
+ z[1]=tvps(ccol+tl,trow, xd,yd,Nv);
+ z[2]=tvps(ccol+tl,brow, xd,yd,Nv);
+ z[3]=tvps(ccol+tr,brow, xd,yd,Nv);
+ zz=z[0]--z[1]--z[2]--z[3]--cycle;
+ }
+
+ if(tl<tr) {
+ if(i%2 == 0) {
+ fill(zz, p=pdef+gray(0.0));
+ } else {
+ fill(zz, p=pdef+gray(0.75));
+ }
+ }
+ }
+ return;
+}
+
+/************************ color bars *************************************/
+void colorbars(int[] coff, int Nhc, int trow, int crow, int brow,
+ pair ccenter, pair rclt, pair rclb, pair rcrt, pair rcrb,
+ pen pdef, real xd, real yd, int Nv) {
+ real cI=0.75;
+ real[] cR={ cI, 0, 0, cI, cI, 0 };
+ real[] cG={ cI, cI, cI, 0, 0, 0 };
+ real[] cB={ 0, cI, 0, cI, 0, cI };
+ int cmax=2, poff, rows, i;
+
+ rows=brow-trow;
+ poff=0;
+ for(i=0; i<=cmax; ++i) {
+ int off;
+ int ii=2*i, il=cmax-i, ir=i+cmax+1;
+ path zzl, zzr;
+
+ off=ceil((coff[1+ii]+coff[2+ii])/2);
+ if(i!=0 && i<cmax) {
+ zzr=tvrect(Nhc+poff,trow, Nhc+off,brow, xd,yd,Nv);
+ zzl=tvrect(Nhc-off,trow, Nhc-poff,brow, xd,yd,Nv);
+ } else {
+ if(i==0) {
+ int col, pcol;
+ pair[] zl, zr;
+
+ col=Nhc+off;
+ pcol=Nhc+poff;
+ zr[0]=tvps(col,trow, xd,yd,Nv);
+ zr[1]=tvps(pcol,trow, xd,yd,Nv);
+ zr[2]=tvps(pcol,crow, xd,yd,Nv);
+ zr[3]=tvps(Nhc+coff[0],crow, xd,yd,Nv);
+ zr[4]=tvps(Nhc+coff[0],brow, xd,yd,Nv);
+ zr[5]=tvps(col,brow, xd,yd,Nv);
+ zzr=zr[0]--zr[1]--zr[2]--zr[3]--zr[4]--zr[5]--cycle;
+
+ col=Nhc-off;
+ pcol=Nhc-poff;
+ zl[0]=tvps(pcol,trow, xd,yd,Nv);
+ zl[1]=tvps(col,trow, xd,yd,Nv);
+ zl[2]=tvps(col,brow, xd,yd,Nv);
+ zl[3]=tvps(Nhc-coff[0],brow, xd,yd,Nv);
+ zl[4]=tvps(Nhc-coff[0],crow, xd,yd,Nv);
+ zl[5]=tvps(pcol,crow, xd,yd,Nv);
+ zzl=zl[0]--zl[1]--zl[2]--zl[3]--zl[4]--zl[5]--cycle;
+ } else {
+ int pcol;
+ pair[] zl, zr;
+
+ pcol=Nhc+poff;
+ zr[0]=tvps(pcol,brow, xd,yd,Nv);
+ zr[1]=rcrb;
+ zr[2]=rcrt;
+ zr[3]=tvps(pcol,trow, xd,yd,Nv);
+ zzr=zr[0]--arc(ccenter,zr[1],zr[2])--zr[3]--cycle;
+
+ pcol=Nhc-poff;
+ zl[0]=tvps(pcol,trow, xd,yd,Nv);
+ zl[1]=rclt;
+ zl[2]=rclb;
+ zl[3]=tvps(pcol,brow, xd,yd,Nv);
+ zzl=zl[0]--arc(ccenter,zl[1],zl[2])--zl[3]--cycle;
+ }
+ }
+ fill(zzr, p=pdef+rgb(cR[ir], cG[ir], cB[ir]));
+ fill(zzl, p=pdef+rgb(cR[il], cG[il], cB[il]));
+
+ poff=off;
+ }
+ return;
+}
+
+/************************ test frequencies ****************************/
+/* in
+ * theta rad
+ * freq 1/hdot
+ * step hdot
+ * out
+ * new phase theta
+ */
+real addphase(real theta, real freq, real step) {
+ real cycles, thetaret;
+ int coverflow;
+
+ cycles=freq*step;
+ coverflow=floor(abs(cycles));
+ if(coverflow>1) {
+ thetaret=0;
+ } else {
+ real dpi=2*pi;
+
+ cycles-=coverflow*sgn(cycles);
+ thetaret=theta+cycles*dpi; /* cycles=(-1 .. 1) */
+
+ if(thetaret>pi) {
+ thetaret-=dpi;
+ } else if(thetaret<-pi) {
+ thetaret-=dpi;
+ }
+ }
+
+ //write("addphase: ", step, theta, thetaret);
+ return thetaret;
+}
+
+void testfreqs(real[] ftones, int[] coff, int Nhc, int trow,int crow,int brow,
+ pair ccenter, pair rclt, pair rclb, pair rcrt, pair rcrb,
+ pen pdef, real xd, real yd, int Nv) {
+ int[] divc;
+ real[] divfl, divfr;
+ int i, divs, coffmax, off, divnext;
+ real fl, fr, thr, thl;
+
+ /* Segment info for PAL continental test card
+ * segment i extends from [divc[i] .. divc[i+1]) with frequency divf[i]
+ */
+ divs=2; // the number of segments on the right, total=2*divs+1
+ divc[0]=0;
+ for(i=0; i<=divs; ++i) {
+ int ii=i*2, il=divs-i, ir=divs+i;
+
+ divc[i+1]=ceil((coff[ii]+coff[ii+1])/2); /* xdot distance to center */
+
+ divfl[i]=ftones[divs-i];
+ divfr[i]=ftones[divs+i];
+ }
+ coffmax=divc[divs+1];
+
+ int trowlim=coff[0];
+ int tr;
+
+ tr=crow;
+
+ divnext=0;
+ fl=0;
+ fr=0;
+ thl=0;
+ thr=0;
+ // draw a vertical line at off..off+1
+ for(off=0; off<coffmax; ++off) {
+ real ampl, ampr;
+ int col;
+ path zz;
+
+ if(off==trowlim) {
+ tr=trow;
+ }
+
+ if(off == divc[divnext]) {
+ /* switch frequency: cycles=0.5*fcur+0.5*fnext */
+ thl=addphase(thl, fl, -0.5);
+ thr=addphase(thr, fr, 0.5);
+ fl=divfl[divnext];
+ fr=divfr[divnext];
+ thl=addphase(thl, fl, -0.5);
+ thr=addphase(thr, fr, 0.5);
+
+ ++divnext;
+ // thl=pi; thr=pi;
+ //write(off, fl, fr);
+ } else {
+ thl=addphase(thl, fl, -1);
+ thr=addphase(thr, fr, 1);
+ // thl=0; thr=0;
+ }
+
+ ampl=(1+sin(thl))/2;
+ ampr=(1+sin(thr))/2;
+ //write(off, thr, ampr);
+
+ col=Nhc-off-1;
+ zz=tvrect(col,tr, col+1,brow, xd,yd,Nv);
+ fill(zz, p=pdef+gray(ampl));
+ col=Nhc+off;
+ zz=tvrect(col,tr, col+1,brow, xd,yd,Nv);
+ fill(zz, p=pdef+gray(ampr));
+ }
+
+ pair[] z;
+ z[0]=tvps(Nhc-coffmax,trow, xd,yd,Nv);
+ z[1]=tvps(Nhc-coffmax,brow, xd,yd,Nv);
+ fill(z[0]--arc(ccenter,rclt,rclb)--z[1]--cycle, p=pdef+gray(0.0));
+ z[0]=tvps(Nhc+coffmax,brow, xd,yd,Nv);
+ z[1]=tvps(Nhc+coffmax,trow, xd,yd,Nv);
+ fill(z[0]--arc(ccenter,rcrb,rcrt)--z[1]--cycle, p=pdef+gray(0.0));
+ return;
+}
+
+/************************ gray bars **************************************/
+void graybars(int[] coff, int Nhc, int trow, int brow,
+ pair ccenter, pair rclt, pair rclb, pair rcrt, pair rcrb,
+ pen pdef, real xd, real yd, int Nv) {
+ int[] gs={0, 51, 102, 153, 204, 255};
+ int cmax=2, poff, rows, i;
+
+ rows=brow-trow;
+ poff=0;
+ for(i=0; i<=cmax; ++i) {
+ int off;
+ int ii=2*i, il=cmax-i, ir=i+cmax+1;
+ path zzl, zzr;
+
+ off=ceil((coff[1+ii]+coff[2+ii])/2);
+ if(i<cmax) {
+ zzl=tvrect(Nhc-off,trow, Nhc-poff,brow, xd,yd,Nv);
+ zzr=tvrect(Nhc+poff,trow, Nhc+off,brow, xd,yd,Nv);
+ } else {
+ int pcol;
+ pair zlt, zlb, zrt, zrb;
+
+ pcol=Nhc-poff;
+ zlt=tvps(pcol,trow, xd,yd,Nv);
+ zlb=tvps(pcol,brow, xd,yd,Nv);
+ zzl=zlt--arc(ccenter,rclt,rclb)--zlb--cycle;
+
+ pcol=Nhc+poff;
+ zrb=tvps(pcol,brow, xd,yd,Nv);
+ zrt=tvps(pcol,trow, xd,yd,Nv);
+ zzr=zrb--arc(ccenter,rcrb,rcrt)--zrt--cycle;
+ }
+ fill(zzl, p=pdef+gray(gs[il]/255));
+ fill(zzr, p=pdef+gray(gs[ir]/255));
+
+ poff=off;
+ }
+ return;
+}
+
+/************************ bottom bw **************************************/
+void bottombw(int off, int Nhc, int trow, int brow,
+ pair ccenter, pair rclt, pair rclb, pair rcrt, pair rcrb,
+ pen pdef, real xd, real yd, int Nv) {
+ int rows;
+ pair zt, zb;
+ path zz;
+
+ rows=brow-trow;
+ zz=tvrect(Nhc-off,trow, Nhc+off,brow, xd,yd,Nv);
+ fill(zz, p=pdef+gray(0.0));
+
+ zt=tvps(Nhc-off,trow, xd,yd,Nv);
+ zb=tvps(Nhc-off,brow, xd,yd,Nv);
+ fill(zt--arc(ccenter,rclt,rclb)--zb--cycle, p=pdef+gray(1.0));
+
+ zb=tvps(Nhc+off,brow, xd,yd,Nv);
+ zt=tvps(Nhc+off,trow, xd,yd,Nv);
+ fill(zb--arc(ccenter,rcrb,rcrt)--zt--cycle, p=pdef+gray(1.0));
+ return;
+}
+
+/************************ bottom circle **************************************/
+void bottomcirc(int off, int Nhc, int trow, real cx, real cy, real crad,
+ pair ccenter, pair rclt, pair rcrt,
+ pen pdef, real xd, real yd, int Nv) {
+ real cI=0.75;
+ real xl, yl, xr, yr, phil, phir;
+ pair ccleft, ccright;
+ pair[] z;
+
+ xl=Nhc-off-cx;
+ phil=acos(xl*xd/yd/crad);
+ yl=crad*sin(phil); // or (x*xd)^2+(y*yd)^2=(crad*yd)^2
+ ccleft=tvps(cx+xl,cy+yl, xd,yd,Nv);
+ //write(xl,yl);
+
+ xr=Nhc+off-cx;
+ phir=acos(xr*xd/yd/crad);
+ yr=crad*sin(phir);
+ ccright=tvps(cx+xr,cy+yr, xd,yd,Nv);
+
+ //dot(ccright); dot(ccleft);
+ // red center
+ z[0]=tvps(Nhc-off,trow, xd,yd,Nv);
+ z[1]=ccleft;
+ z[2]=ccright;
+ z[3]=tvps(Nhc+off,trow, xd,yd,Nv);
+ fill(z[0]--arc(ccenter,z[1],z[2])--z[3]--cycle, p=pdef+rgb(cI,0,0));
+
+ // yellow
+ z[0]=tvps(Nhc-off,trow, xd,yd,Nv);
+ z[1]=rclt;
+ z[2]=ccleft;
+ fill(z[0]--arc(ccenter,z[1],z[2])--cycle, p=pdef+rgb(cI,cI,0));
+ z[0]=tvps(Nhc+off,trow, xd,yd,Nv);
+ z[1]=ccright;
+ z[2]=rcrt;
+ fill(z[0]--arc(ccenter,z[1],z[2])--cycle, p=pdef+rgb(cI,cI,0));
+
+ return;
+}
+
+/****************************** PAL ears ***********************************
+ * left y R G B
+ * 0.55 98 162 140
+ * 0.5 103 128 191
+ * 0.5 152 128 64
+ * 0.45 157 93 115
+ * right
+ * 0.6 153 168 76
+ * 0.4 102 87 179
+ *
+ * in: dright= -1 left ear, +1 right ear
+ */
+void palears(int[] coff, int[] coffa, int[] coffb, int Nhc,
+ int[] rcrowt, int[] rcrowb, int Nvc, int divsy, int dright,
+ pen pdef, real xd, real yd, int Nv) {
+ /* the amplitude of (u,v) as seen on a vectorscope,
+ * max 0.296 Vn for 100% saturation in W and V ears.
+ * cvbs: 0.7*( y +/- |u+jv| ) = -0.24 .. 0.93 V
+ * maxima: ebu 75/0 bars 0.70, bbc 100/25 0.88, 100/0 bars 0.93
+ * burst: 0.150 Vcvbs, 21.4 IRE or 0.214 V normalized.
+ * luma: modulated for monochrome compatibility, 1990 version.
+ * choice: set amplitude of subcarrier equal to amplitude of colorburst.
+ */
+ real cI=0.214;
+
+ /* (u,v) for zero G-y, phase of -34.5 degrees */
+ real wr=0.299, wb=0.114, wg=1-wr-wb; /* wg=0.587, y=wr*R+wg*G+wb*B */
+ real wu=0.493, wv=0.877; /* u=wu*(B-y) v=wv*(R-y) */
+ real colu=wu*wg/wb, colv=-wv*wg/wr; /* for w=(G-y)/0.696 == 0 */
+
+ /* ears: U==0 W==0 W==0 U==0 */
+ real[] cyl={ 0.55, 0.5, 0.5, 0.45 };
+ real[] cul={ 0, colu, -colu, 0 };
+ real[] cvl={ -1, colv, -colv, 1 };
+
+ /* ears: V==0 W==0 W==0 V==0 */
+ real[] cyr={ 0.60, 0.5, 0.5, 0.40 };
+ real[] cur={ -1, colu, -colu, 1 };
+ real[] cvr={ 0, colv, -colv, 0 };
+
+ real[] cy, cu, cv;
+ pair[] z;
+ path[] zz;
+ int lcol, ccol, cicol, rcol, i;
+
+ if(dright>0) {
+ cy=cyr; cu=cur; cv=cvr;
+ } else {
+ cy=cyl; cu=cul; cv=cvl;
+ }
+
+ lcol=Nhc+dright*coffa[5];
+ ccol=Nhc+dright*coff[6];
+ cicol=Nhc+dright*coffa[6];
+ rcol=Nhc+dright*coffb[7];
+
+ int urow, trow, crow, brow, arow;
+ urow=rcrowb[divsy-5];
+ trow=rcrowt[divsy-3];
+ crow=Nvc;
+ brow=rcrowb[divsy+4];
+ arow=rcrowt[divsy+6];
+
+ z[0]=tvps(ccol,urow, xd,yd,Nv);
+ z[1]=tvps(ccol,trow, xd,yd,Nv);
+ z[2]=tvps(cicol,trow, xd,yd,Nv);
+ z[3]=tvps(cicol,crow, xd,yd,Nv);
+ z[4]=tvps(rcol,crow, xd,yd,Nv);
+ z[5]=tvps(rcol,urow, xd,yd,Nv);
+ zz[0]=z[0]--z[1]--z[2]--z[3]--z[4]--z[5]--cycle;
+
+ zz[1]=tvrect(lcol,urow, ccol,trow, xd,yd,Nv);
+ zz[2]=tvrect(lcol,brow, ccol,arow, xd,yd,Nv);
+
+ z[0]=tvps(ccol,arow, xd,yd,Nv);
+ z[1]=tvps(ccol,brow, xd,yd,Nv);
+ z[2]=tvps(cicol,brow, xd,yd,Nv);
+ z[3]=tvps(cicol,crow, xd,yd,Nv);
+ z[4]=tvps(rcol,crow, xd,yd,Nv);
+ z[5]=tvps(rcol,arow, xd,yd,Nv);
+ zz[3]=z[0]--z[1]--z[2]--z[3]--z[4]--z[5]--cycle;
+
+ for(i=0; i<4; ++i) {
+ real y, u, v, A, ph, By, Ry, Gy, R, G, B;
+
+ y=cy[i];
+ u=cu[i];
+ v=cv[i];
+
+ A=hypot(u,v);
+ ph= (u!=0 || v!=0) ? atan2(v,u) : 0.0;
+ if(v>=0) {
+ if(ph<0) ph=ph+pi;
+ } else {
+ if(ph>0) ph=ph-pi;
+ }
+ if(A>0) {
+ u=u/A*cI;
+ v=v/A*cI;
+ }
+
+ By=u/wu;
+ Ry=v/wv;
+ Gy=(-wr*Ry-wb*By)/wg;
+ //write(y,Gy,A,ph*180/pi);
+
+ R=Ry+y;
+ G=Gy+y;
+ B=By+y;
+ if(verbose > 1)
+ write(y,round(R*255),round(G*255),round(B*255));
+
+ fill(zz[i], p=pdef+rgb(R,G,B));
+ }
+ return;
+}
+
+/****************************** NTSC bars ***********************************
+ * amplitude equals color burst smpte (pm: -V +U)
+ * y campl sat R G B
+ * left 0.5 0.21 70% -I?
+ * right 0.5 0.17 60% +Q?
+ */
+void ntscbars(int[] coff, int[] coffa, int[] coffb, int Nhc,
+ int[] rcrowt, int[] rcrowb, int Nvc, int divsy, int dright,
+ pen pdef, real xd, real yd, int Nv) {
+ /* The amplitude of (i,q) as seen on a vectorscope,
+ * max 0.292 Vn for 100% saturation in I==0 ears.
+ * burst: 0.143 Vcvbs, 20 IRE or 0.200 V normalized.
+ * pedestal: (yp,up,vp)=(p,0,0)+(1-p)*(y,u,v), p=0.075.
+ * choice: equal amplitude for colorburst and subcarrier.
+ */
+ real campl=0.200/0.925;
+
+ /* wg=0.587, y=wr*R+wg*G+wb*B */
+ real wr=0.299, wb=0.114, wg=1-wr-wb;
+ /* iT : iq -> RyBy : rotation+scaling */
+ real iT11=0.95, iT12=0.62, iT21=-1.11, iT22=1.71;
+
+ /* bars -2 -1 0 1 2 */
+ real[] cyl={ 0.50, 0.50, 0, 0.50, 0.50 };
+ real[] cil={ 0, 0, 0, -1, 1 };
+ real[] cql={ -1, 1, 0, 0, 0 };
+ int[] offil={ 6, 7, 5, 7, 6 };
+
+ real cy, ci, cq;
+ int dri, dris, offi, lcol, rcol, i;
+
+ if(dright>=0) {
+ dris=1;
+ } else {
+ dris=-1;
+ }
+ if(dright<-2 || dright>2) {
+ dri=2;
+ } else {
+ dri=2+dright;
+ }
+
+ cy=cyl[dri]; ci=cil[dri]; cq=cql[dri];
+ offi=offil[dri];
+ lcol=Nhc+dris*coffa[offi];
+ rcol=Nhc+dris*coffb[offi+1];
+
+ real A, By, Ry, Gy, R, G, B;
+
+ A=hypot(ci,cq);
+ if(A>0) {
+ ci=ci/A*campl;
+ cq=cq/A*campl;
+ }
+ Ry=iT11*ci+iT12*cq;
+ By=iT21*ci+iT22*cq;
+ Gy=(-wr*Ry-wb*By)/wg;
+ //write(cy,Ry,Gy,By);
+
+ R=Ry+cy;
+ G=Gy+cy;
+ B=By+cy;
+ if(verbose > 1)
+ write(cy,ci,cq,round(R*255),round(G*255),round(B*255));
+
+ for(i=-divsy; i<=divsy; ++i) {
+ path zz;
+ int brow, trow;
+
+ if(i>-divsy) {
+ trow=rcrowb[divsy+i];
+ } else {
+ trow=floor((rcrowb[divsy+i]+rcrowt[divsy+i+1])/2);
+ }
+
+ if(divsy>i) {
+ brow=rcrowt[divsy+i+1];
+ } else {
+ brow=floor((rcrowb[divsy+i]+rcrowt[divsy+i+1])/2);
+ }
+
+ zz=tvrect(lcol,brow, rcol,trow, xd,yd,Nv);
+ fill(zz, p=pdef+rgb(R,G,B));
+ }
+
+ return;
+}
+
+
+/****************************** main ***********************************/
+/* Conversion to bitmap:
+ * EPSPNG='gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE=png16m'
+ * asy -u bsys=2 -u colortv=1 -u os=1 -a Z tvgen
+ * $EPSPNG -r132x144 -g720x576 -sOutputFile=tvgen.png tvgen.eps
+ *
+ * asy -u bsys=2 -u colortv=1 -u os=1 tvgen
+ */
+int bsys=2, colortv=1, os=1;
+
+/* bsys: broadcast system
+ * bsys im aspect Nh
+ * 0 4/3 704 guaranteed analog broadcast itu-r bt.470
+ * 1 4/3 720 new broadcast, most TV station logos and animations
+ * 2 15/11 720 total aperture analog 4/3, 1.37 film DVDs
+ * 3 20/11 720 total aperture analog 16/9, 1.85 film DVDs
+ * 4 4/3 768 bsys=0, square dot analog broadcast
+ * 5 4/3 768 bsys=1, square dot cable TV info channel
+ * 6 131/96 786 bsys=2, total square dot broadcast camera
+ * 7 16/9 720 new broadcast 16/9, SD from HD-1440 or itu-r bt.709
+ * 8 4/3 704 525 analog broadcast itu-r bt.470 711*485
+ * 9 4/3 720 525 new broadcast
+ * 10 15/11 720 525 total aperture analog broadcast
+ * 11 16/9 1920 1250, 1080 square dot at 12.5 frames/second
+ * 12 4/3 1600 1250, 1200 square dot at 12.5 frames/second
+ *
+ * colortv:
+ * set 0 for monochrome crosshatch, 1 for pal ears, 2 for ntsc bars
+ *
+ * os: horizontal oversampling, typical values for 13.5MHz:
+ * 2 4/3 704*576, 15/11 720*576
+ * 4 4/3 720*480
+ * 5 4/3 704*480, 15/11 720*480, 4/3 768*576 14.4MHz
+ * 8 4/3 720*576, 20/11 720*576
+ * 12 704->768 rerastering
+ * 16 720->768 rerastering
+ */
+access settings;
+usersetting();
+
+if(bsys<0 || bsys>12 || colortv<0 || colortv>3 || os<=0 || os>16) {
+ write('Error: bad user input: bsys, colortv, os=\t', bsys, colortv, os);
+ abort('Bad option -u bsys=N ?');
+}
+
+int[] bNdot=
+ { 12, 16, 12, 16, 1, 1, 1, 64, 10, 8, 10, 1, 1 };
+int[] bDdot=
+ { 11, 15, 11, 11, 1, 1, 1, 45, 11, 9, 11, 1, 1 };
+int[] bNh=
+ { 704, 720, 720, 720, 768, 768, 786, 720, 704, 720, 720, 1920, 1600 };
+int[] bNv=
+ { 576, 576, 576, 576, 576, 576, 576, 576, 480, 480, 480, 1080, 1200 };
+real[] bfs=
+ { 13.5,13.5,13.5,13.5, 14.75,14.4,14.75,13.5, 13.5,13.5,13.5, 36, 30 };
+int[] bNsy=
+ { 42, 42, 42, 42, 42, 42, 42, 42, 34, 34, 34, 78, 90 };
+int[] bNsh=
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+/* active lines for a 625 line frame
+ * The number of active video lines decreased around 1997.
+ * old: 3 run in + 575 visible + 3 run out = 581 lines
+ * new: 6 teletext and WSS + 575 visible
+ * Hence the image center shifted down by 3 lines. Thus
+ * old TV + new testcard = bottom is cut off,
+ * new TV + old testcard = top is cut off.
+ *
+ * To generate the old testcard either use Nv=582 Nsh=0 or Nv=576 Nsh=3.
+ *
+ * aspect ratio
+ * rimage=xsize/ysize rimage=rdot*Nh/Nv
+ * Nh=704 dots
+ * Nv=576 lines
+ * rd=ri*Nv/Nh=4/3*9/11=12/11
+ *
+ * Nv: 480=2^5*3*5 576=2^6*3^2
+ * Nh: 704=2^6*11 720=2^4*3^2*5
+ *
+ * horizontal line distance for pre 1997 test pattern
+ * top 8 lines, 13 squares of Ny=43 lines, bottom 9 lines
+ * top 12 lines, 13 squares of Ny=42 lines, bottom 18 lines
+ * pairs are from odd even field
+ * Interlace test: Ny must be odd for a cross-hatch without centerline.
+ *
+ * squares: ly=Nsy, lx=rd*Nsx, lx=ly ==> Nsx=Nsy/rd={ 39.4, 38.5 }
+ * x line width 230 ns -> 3 dots
+ * bottom 2.9us red -> 39.15 dots
+ *
+ * resolution DPI from image aspect ratio
+ * Rv=Nv/ly, ly=4in
+ * ri=Ni/Di, Ni={4,15,16} Di={3,11,9}
+ * lx=ri*ly
+ *
+ * Rh=Nh/lx=Di*(Nh/(Ni*ly))
+ * ==> ri=4/Di => Nh=k*16
+ * ri=15/Di => Nh=k*60
+ * ri=16/Di => Nh=k*64
+ *
+ * resolution DPI from dot aspect ratio, general algorithm,
+ *
+ * rd=Nd/Dd=ldx/ldy
+ *
+ * assume 1 dot = Nd x Dd square subdots at a resolution of k, in dpi, then
+ *
+ * ldx=Nd/k, ldy=Dd/k ==> Rh=k/Nd, Rv=k/Dd
+ *
+ * choosing k=m*Nd*Dd for integer Rh and Rv gives
+ *
+ * ldx=1/(m*Dd), ldy=1/(m*Nd), Rh=m*Dd, Rv=m*Nd
+ *
+ * and
+ *
+ * lx=Nh*ldx=Nh/(m*Dd), ly=Nv*ldy=Nv/(m*Nd)
+ *
+ * so choose m for the intended height Ly, in inch, as
+ *
+ * m=round(Nv/(Ly*Nd))
+ *
+ * which limits Ly<=Nv/Nd since Rv>=Nd.
+ */
+//cm=72/2.540005;
+real Ly, ly, lx, ysize, xsize, rimage, xd, yd, pwidth;
+int Nd, Dd, m, Nh, Nv, Nshift, Na, Nsy;
+real fs, Ttone;
+
+Nd=bNdot[bsys];
+Dd=bDdot[bsys]*os;
+Nh=bNh[bsys]*os;
+Nv=bNv[bsys];
+
+Ly=4; // 4 inch vertical size
+m=floor(0.5+Nv/(Ly*Nd));
+if(m<1) m=1;
+ly=Nv/(m*Nd);
+lx=Nh/(m*Dd);
+
+ysize=ly*1inch;
+xsize=lx*1inch;
+rimage=xsize/ysize;
+if(verbose > 1)
+ write('#Nd Dd m ri:\t', Nd, Dd, m, rimage);
+//size(xsize,ysize,Aspect); // should not have any effect
+
+Nsy=bNsy[bsys]; // grating size in lines 42,43, 34,35
+Nshift=bNsh[bsys]; // shift image up: pre 1997 =3, 2007 =0
+fs=1e6*bfs[bsys]*os;
+Na=0; // add 1,0,-1 to height of hor center squares for even Na+Nsy
+
+Ttone=fs/250e3; // period of ft=250 kHz, fs/ft=54
+real[] ftones={0.8e6/fs, 1.8e6/fs, 2.8e6/fs, 3.8e6/fs, 4.8e6/fs};
+
+xd=xsize/Nh;
+yd=ysize/Nv;
+pwidth=min(abs(xd),abs(yd));
+
+pen pdefault=squarecap+linewidth(pwidth);
+pen pblack=pdefault+gray(0.0);
+pen pwhite=pdefault+gray(1.0);
+
+/**** calculate grating repeats and size in tv dots ****/
+// horizontal lines
+int divsy, rdisty, Nvc, Nt, Nb;
+
+Nvc=floor(Nv/2)-Nshift;
+divsy=floor(((Nv-Na-2)/Nsy-1)/2); // (Nv-Na-2)/2-Nsy/2 dots for Nsy lengths
+rdisty=Na+Nsy*(1+2*divsy);
+Nt=Nvc-ceil(rdisty/2);
+Nb=Nv-Nt-rdisty;
+if(verbose > 1)
+ write('#divsy t b: \t',divsy,Nt,Nb);
+
+/* Nsyc: center square height
+ * line pairing test: verify distance of center to top and bot
+ * distance is odd ==> top=even/odd, cent=odd/even, bot=even/odd
+ *
+ * Nsyc odd: not possible
+ *
+ * Nsyc even:
+ * Nsyc/2 odd --> OK
+ * Nsyc/2 even --> stagger the raster one line upwards
+ *
+ * rcrowt top dist of hor line
+ * rcrowc true center for color info, distance to top of image.
+ * rcrowb bot dist of hor line
+ *
+ * Nt=Nvc-(offu+divsy*Nsy);
+ * Nb=Nv-( Nvc-(offd-divsy*Nsy) );
+ * ==> Nt+Nb=Nv-Nsyc-2*divsy*Nsy
+ */
+int Nsyc, offu, offd, Nyst=0, i;
+int[] rcrowt, rcrowc, rcrowb;
+
+Nsyc=Nsy+Na;
+offu=floor(Nsyc/2);
+offd=offu-Nsyc;
+if(Nsyc%2 != 0) {
+ Nyst=1;
+} else if(Nsyc%4 == 0) {
+ Nyst=1; /* stagger */
+}
+for(i=0; i<=divsy; ++i) {
+ int iu, id, ou, od, ru, rd;
+
+ iu=divsy-i;
+ id=divsy+i+1;
+
+ ou=offu+Nsy*i;
+ od=offd-Nsy*i;
+ if(verbose > 1)
+ write(ou,od);
+ rcrowc[iu]=Nvc-ou;
+ rcrowc[id]=Nvc-od;
+
+ ru=Nvc-(ou+Nyst);
+ rd=Nvc-(od+Nyst);
+
+ rcrowt[iu]=ru-1;
+ rcrowb[iu]=ru+1;
+
+ rcrowt[id]=rd-1;
+ rcrowb[id]=rd+1;
+}
+Nt=floor((rcrowt[0]+rcrowb[0])/2);
+Nb=Nv-Nt-Nsyc-2*Nsy*divsy;
+if(verbose > 1)
+ write('#st t b: \t',Nyst,Nt,Nb);
+
+/* vertical lines
+ * (Nh-2*os)/2-Nsx/2 dots available for divisions of Nsx dots.
+ * At least 5 dots margin left and right ==> use -10*os
+ */
+real lsq, Nsx;
+int divsx, Nhc, Nl;
+
+lsq=Nsy*yd;
+Nsx=lsq/xd;
+divsx=floor(((Nh-10*os)/Nsx-1)/2);
+Nhc=round(Nh/2);
+Nl=Nhc-round((1+2*divsx)*Nsx/2);
+if(verbose > 1)
+ write('#Nsx divsx Nl:\t',Nsx,divsx,Nl);
+
+/**** draw gray background ****/
+{
+ path zz;
+ //zz=tvrect(0,0, Nh,Nv, xd,yd,Nv);
+ /* keep white canvas for castellations */
+ zz=tvrect(Nl,Nt, Nh-Nl,Nv-Nb, xd,yd,Nv);
+ fill(zz, p=pdefault+gray(0.5));
+ //dot(zz);
+}
+/**** draw center circle ****/
+real cx, cy, crad;
+pair ccenter;
+path ccirc;
+cx=Nh/2;
+cy=Nv/2-Nshift;
+crad=6*Nsy;
+if(Nv%2 != 0) {
+ crad+=0.5;
+}
+ccenter=tvps(cx,cy, xd,yd,Nv);
+ccirc=circle(ccenter, crad*yd);
+if(colortv<=0) {
+ draw(ccirc, p=pwhite+linewidth(2*yd));
+}
+
+/****** draw 2*divsy+2 horizontal lines **********************************/
+real[] rcang, rcoff;
+pair[] rcright, rcleft;
+int i, iend=2*divsy+1;
+for(i=0; i<=iend; ++i) {
+ real y, phi, x;
+ path zzh;
+ pair zd;
+
+ zzh=tvrect(0,rcrowt[i], Nh,rcrowb[i], xd,yd,Nv);
+ fill(zzh, p=pwhite);
+
+ y=cy-rcrowc[i];
+ //write(roff);
+ if(abs(y)<crad) {
+ phi=asin(y/crad);
+ } else {
+ phi=pi/2;
+ }
+ rcang[i]=phi;
+ x=(crad*cos(phi))*yd/xd;
+ rcoff[i]=x;
+ zd=tvps(cx+x,cy-y, xd,yd,Nv);
+ rcright[i]=zd;
+ //dot(zd);
+ zd=tvps(cx-x,cy-y, xd,yd,Nv);
+ rcleft[i]=zd;
+}
+
+/****** draw 2*divsx+2 vertical lines ***************************/
+int[] coff, coffa, coffb;
+int poffa=0, ccenterwhite=divsx%2;
+for(i=0; i<=divsx; ++i) {
+ real cdist=(1+2*i)*Nsx;
+ int off, offa, offb;
+ path zzv;
+
+ off=round(cdist/2);
+ //write(cdist,off);
+ offa=off+os;
+ offb=off-os;
+
+ coff[i]=off;
+ coffa[i]=offa;
+ coffb[i]=offb;
+
+ //write(Nhc-offa);
+ zzv=tvrect(Nhc+offb,0, Nhc+offa,Nv, xd,yd,Nv);
+ fill(zzv, p=pwhite);
+ zzv=tvrect(Nhc-offa,0, Nhc-offb,Nv, xd,yd,Nv);
+ fill(zzv, p=pwhite);
+
+ /** top castellations, must end with black **/
+ if(i%2 == ccenterwhite) {
+ int j, jnum;
+
+ if(poffa == 0) {
+ poffa=-offb;
+ jnum=1;
+ } else {
+ jnum=2;
+ }
+
+ for(j=0; j<jnum; ++j) {
+ int lc, rc;
+ path zzc;
+
+ if(j==0) {
+ lc=Nhc+poffa;
+ rc=Nhc+offb;
+ } else {
+ lc=Nhc-offb;
+ rc=Nhc-poffa;
+ }
+
+ zzc=tvrect(lc,0, rc,Nt-1, xd,yd,Nv);
+ fill(zzc, p=pblack);
+ zzc=tvrect(lc,Nv-Nb+1, rc,Nv, xd,yd,Nv);
+ fill(zzc, p=pblack);
+ }
+ }
+
+ poffa=offa;
+}
+//write(coff);
+
+/** left and right castellations **/
+/* The bottom right red rectangle tests for a non causal color FIR
+ * filter in the receiver. The last 2..4 dots then typically appear
+ * colorless, green, or cyan.
+ *
+ * This comes from the fact that the chroma subcarrier is of lower
+ * bandwidth than luma and thus continues after the last active sample.
+ * These trailing (y,u,v) samples result from a signal to zero
+ * transition and depend on the transmit and receive filters. Samples
+ * from VHS, system B/G/D/K, system I, or a DVD player output are
+ * different. Nevertheless, a sharpening filter uses this data and so
+ * adds false color to the last dots.
+ */
+int lc, rc;
+iend=2*divsy+1;
+lc=Nhc-coffa[divsx];
+rc=Nhc+coffa[divsx];
+for(i=1; i<=iend; ++i) {
+ pen pcast;
+ if(i == iend && colortv>0) {
+ pcast=pdefault+rgb(0.75,0.0,0);
+ } else {
+ pcast=pblack;
+ }
+ if(i%2 == 1) {
+ int tr, br;
+ path zzc;
+
+ tr=rcrowb[i-1];
+ br=rcrowt[i];
+ zzc=tvrect( 0,tr, lc,br, xd,yd,Nv);
+ fill(zzc, p=pblack);
+ zzc=tvrect(rc,tr, Nh,br, xd,yd,Nv);
+ fill(zzc, p=pcast);
+ }
+}
+
+/****** markers for 4/3 aspect ratio ******/
+if(rimage>4/3)
+ rimarkers(rimage, Nh, Nhc, os, Nvc, Nsy, pwhite, xd, yd, Nv);
+
+/****** line pairing center ******/
+centerline(coff, coffa, coffb, Nhc, divsx, os, rcrowc, Nvc, divsy,
+ ccenter, rcoff, rcright, rcleft, pdefault, xd, yd, Nv);
+
+if(colortv>0) {
+ /* topbw structure */
+ topbw(coff, Nhc, os, rcrowc[divsy-5], rcrowc[divsy-4], rcrowc[divsy-3],
+ ccenter, rcleft[divsy-4], rcleft[divsy-3], rcright[divsy-4],
+ rcright[divsy-3], pdefault, xd, yd, Nv);
+
+ /* 250 kHz */
+ testtone(Ttone, rcrowc[divsy-3], rcrowc[divsy-2],
+ cx, cy, crad, pdefault, xd, yd, Nv);
+
+ /* color bars */
+ colorbars(coff, Nhc, rcrowc[divsy-2], rcrowc[divsy-1], rcrowc[divsy],
+ ccenter, rcleft[divsy-2], rcleft[divsy], rcright[divsy-2],
+ rcright[divsy], pdefault, xd, yd, Nv);
+
+ /* test frequencies */
+ testfreqs(ftones, coff, Nhc, rcrowc[divsy+1], rcrowc[divsy+2],
+ rcrowc[divsy+3], ccenter, rcleft[divsy+1], rcleft[divsy+3],
+ rcright[divsy+1],rcright[divsy+3], pdefault, xd, yd, Nv);
+
+ /* gray bars */
+ graybars(coff, Nhc, rcrowc[divsy+3], rcrowc[divsy+4], ccenter,
+ rcleft[divsy+3], rcleft[divsy+4],
+ rcright[divsy+3], rcright[divsy+4], pdefault, xd,yd,Nv);
+
+ /* PAL ears */
+ if(colortv==1) {
+ palears(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, -1,
+ pdefault, xd, yd, Nv);
+ palears(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, 1,
+ pdefault, xd, yd, Nv);
+ } else if(colortv==2) {
+ ntscbars(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, -1,
+ pdefault, xd, yd, Nv);
+ ntscbars(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, 1,
+ pdefault, xd, yd, Nv);
+ ntscbars(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, -2,
+ pdefault, xd, yd, Nv);
+ ntscbars(coff,coffa,coffb, Nhc, rcrowt, rcrowb, Nvc, divsy, 2,
+ pdefault, xd, yd, Nv);
+ }
+
+ /* bottom wh - black - wh */
+ bottombw(round((coff[2]+coff[3])/2), Nhc, rcrowc[divsy+4], rcrowc[divsy+5],
+ ccenter, rcleft[divsy+4], rcleft[divsy+5],
+ rcright[divsy+4], rcright[divsy+5], pdefault, xd, yd, Nv);
+
+ /* bottom yellow red circle */
+ bottomcirc(coff[0], Nhc, rcrowc[divsy+5], cx, cy, crad,
+ ccenter, rcleft[divsy+5], rcright[divsy+5], pdefault, xd, yd, Nv);
+}
+
+/********************** set id *********************/
+{ /* dpi */
+ pair rpos=tvps(Nhc,round((rcrowc[divsy-4]+rcrowc[divsy-5])/2), xd,yd,Nv);
+ string iRhor, iRver, ires;
+ real Rh, Rv;
+
+ Rh=Nh/xsize*inch;
+ Rv=Nv/ysize*inch;
+ iRhor=format("%.4gx", Rh);
+ iRver=format("%.4gdpi", Rv);
+ ires=insert(iRver,0, iRhor);
+
+ /* size info */
+ int rowbot=round((rcrowc[divsy+4]+rcrowc[divsy+5])/2);
+ pair tpos=tvps(Nhc,rowbot, xd,yd,Nv);
+ string ihor, iver, itot, iasp, ifm;
+ real asp, fm;
+
+ ihor=format("%ix",Nh);
+ iver=format("%i ",Nv);
+ itot=insert(iver,0, ihor);
+ asp=xsize/ysize;
+ iasp=format("%.3g ",asp);
+ fm=fs/1e6;
+ ifm=format("%.4gMHz",fm);
+ itot=insert(iasp,0, itot);
+ itot=insert(ifm,0, itot);
+
+ /* size of square */
+ int rowNsy=round((rcrowc[divsy+5]+rcrowc[divsy+6])/2);
+ pair Npos=tvps(Nhc+round((coff[4]+coff[5])/2),rowNsy, xd,yd,Nv);
+ string iNsy=format("%i",Nsy);
+
+ pen pbw;
+ if(colortv>0) {
+ pbw=pdefault+gray(1.0);
+ } else {
+ pbw=pdefault+gray(0.0);
+ }
+ label(ires, rpos, p=pbw);
+ label(itot, tpos, p=pbw);
+ label(iNsy, Npos, p=pbw);
+ if(verbose > 1)
+ write('#res:\t', ires, itot, iNsy);
+}
+
diff --git a/Build/source/utils/asymptote/examples/twistedtubes.asy b/Build/source/utils/asymptote/examples/twistedtubes.asy
new file mode 100644
index 00000000000..420e3898986
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/twistedtubes.asy
@@ -0,0 +1,28 @@
+import graph3;
+import palette;
+
+size(300,300,keepAspect=true);
+
+real w=0.4;
+
+real f(triple t) {return sin(t.x);}
+triple f1(pair t) {return (cos(t.x)-2cos(w*t.y),sin(t.x)-2sin(w*t.y),t.y);}
+triple f2(pair t) {return (cos(t.x)+2cos(w*t.y),sin(t.x)+2sin(w*t.y),t.y);}
+triple f3(pair t) {return (cos(t.x)+2sin(w*t.y),sin(t.x)-2cos(w*t.y),t.y);}
+triple f4(pair t) {return (cos(t.x)-2sin(w*t.y),sin(t.x)+2cos(w*t.y),t.y);}
+
+surface s1=surface(f1,(0,0),(2pi,10),25,15);
+surface s2=surface(f2,(0,0),(2pi,10),25,15);
+surface s3=surface(f3,(0,0),(2pi,10),25,15);
+surface s4=surface(f4,(0,0),(2pi,10),25,15);
+
+pen[] Rainbow=Rainbow();
+s1.colors(palette(s1.map(f),Rainbow));
+s2.colors(palette(s2.map(f),Rainbow));
+s3.colors(palette(s3.map(f),Rainbow));
+s4.colors(palette(s4.map(f),Rainbow));
+
+draw(s1,meshpen=black);
+draw(s2,meshpen=black);
+draw(s3,meshpen=black);
+draw(s4,meshpen=black);
diff --git a/Build/source/utils/asymptote/examples/unitcircle.asy b/Build/source/utils/asymptote/examples/unitcircle.asy
new file mode 100644
index 00000000000..582f5f3c1ff
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/unitcircle.asy
@@ -0,0 +1,14 @@
+size(0,150);
+
+pair z0=0;
+pair z1=1;
+real theta=30;
+pair z=dir(theta);
+
+draw(circle(z0,1));
+filldraw(z0--arc(z0,1,0,theta)--cycle,lightgrey);
+dot(z0);
+dot(Label,z1);
+dot("$(x,y)=(\cos\theta,\sin\theta)$",z);
+arrow("area $\frac{\theta}{2}$",dir(0.5*theta),2E);
+draw("$\theta$",arc(z0,0.7,0,theta),LeftSide,Arrow,PenMargin);
diff --git a/Build/source/utils/asymptote/examples/upint.asy b/Build/source/utils/asymptote/examples/upint.asy
new file mode 100644
index 00000000000..b488358ec6a
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/upint.asy
@@ -0,0 +1,13 @@
+import graph;
+import lowupint;
+
+size(100,0);
+
+real a=-0.8, b=1.2;
+real c=-1.0/sqrt(3.0);
+
+partition(a,b,c,max);
+
+arrow("$f(x)$",F(0.5*(a+b)),NNE,red);
+label("$\cal{U}$",(0.5*(a+b),f(0.5*(a+b))/2));
+
diff --git a/Build/source/utils/asymptote/examples/vectorfield3.asy b/Build/source/utils/asymptote/examples/vectorfield3.asy
new file mode 100644
index 00000000000..b8583c3b8d6
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/vectorfield3.asy
@@ -0,0 +1,26 @@
+import graph3;
+
+size(12cm,0);
+
+currentprojection=orthographic(1,-2,1);
+currentlight=(1,-1,0.5);
+
+real f(pair z) {return abs(z)^2;}
+
+path3 gradient(pair z) {
+ static real dx=sqrt(realEpsilon), dy=dx;
+ return O--((f(z+dx)-f(z-dx))/2dx,(f(z+I*dy)-f(z-I*dy))/2dy,0);
+}
+
+pair A=(-1,-1);
+pair B=(1,1);
+
+triple F(pair z) {return (z.x,z.y,0);}
+
+add(vectorfield(gradient,F,A,B,red));
+
+draw(surface(f,A,B,50),gray+opacity(0.5));
+
+xaxis3(XY()*"$x$",OutTicks(XY()*Label));
+yaxis3(XY()*"$y$",InTicks(YX()*Label));
+zaxis3("$z$",OutTicks());
diff --git a/Build/source/utils/asymptote/examples/venn.asy b/Build/source/utils/asymptote/examples/venn.asy
new file mode 100644
index 00000000000..f56440ba0a4
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/venn.asy
@@ -0,0 +1,37 @@
+size(0,150);
+
+pen colour1=red;
+pen colour2=green;
+
+pair z0=(0,0);
+pair z1=(-1,0);
+pair z2=(1,0);
+real r=1.5;
+path c1=circle(z1,r);
+path c2=circle(z2,r);
+fill(c1,colour1);
+fill(c2,colour2);
+
+picture intersection;
+fill(intersection,c1,colour1+colour2);
+clip(intersection,c2);
+
+add(intersection);
+
+draw(c1);
+draw(c2);
+
+label("$A$",z1);
+label("$B$",z2);
+
+pair z=(0,-2);
+real m=3;
+margin BigMargin=Margin(0,m*dot(unit(z1-z),unit(z0-z)));
+
+draw(Label("$A\cap B$",0),conj(z)--z0,Arrow,BigMargin);
+draw(Label("$A\cup B$",0),z--z0,Arrow,BigMargin);
+draw(z--z1,Arrow,Margin(0,m));
+draw(z--z2,Arrow,Margin(0,m));
+
+shipout(bbox(0.25cm));
+currentpicture.uptodate=true;
diff --git a/Build/source/utils/asymptote/examples/vertexshading.asy b/Build/source/utils/asymptote/examples/vertexshading.asy
new file mode 100644
index 00000000000..284ca3230de
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/vertexshading.asy
@@ -0,0 +1,10 @@
+import three;
+//settings.prc=false;
+
+size(200);
+
+currentprojection=perspective(4,5,5);
+
+draw(surface(unitcircle3,new pen[] {red,green,blue,white}));
+draw(surface(shift(Z)*unitsquare3,
+ new pen[] {red,green+opacity(0.5),blue,black}));
diff --git a/Build/source/utils/asymptote/examples/washermethod.asy b/Build/source/utils/asymptote/examples/washermethod.asy
new file mode 100644
index 00000000000..032ed6cbc85
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/washermethod.asy
@@ -0,0 +1,36 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=perspective(0,0,11,up=Y);
+
+pen color1=green+opacity(0.25);
+pen color2=red;
+real alpha=250;
+
+real f(real x) {return 2x^2-x^3;}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+ngraph=12;
+path[] p={graph(F,0.7476,1.8043,Spline)--cycle,
+ graph(F,0.7,0.7476,Spline)--graph(F,1.7787,1.8043,Spline)--cycle,
+ graph(F,0,0.7,Spline)--graph(F,1.8043,2,Spline)--cycle};
+
+pen[] pn=new pen[] {color1,color2,color1};
+
+for(int i=0; i < p.length; ++i) {
+ revolution a=revolution(path3(p[i]),Y,0,alpha);
+ draw(surface(a),pn[i]);
+
+ surface s=surface(p[i]);
+ draw(s,pn[i]);
+ draw(rotate(alpha,Y)*s,pn[i]);
+}
+
+draw((4/3,0,0)--F3(4/3),dashed);
+xtick("$\frac{4}{3}$",(4/3,0,0));
+
+xaxis3(Label("$x$",1),Arrow3);
+yaxis3(Label("$y$",1),ymax=1.25,dashed,Arrow3);
+arrow("$y=2x^2-x^3$",F3(1.6),X+Y,0.75cm,red);
+draw(arc(1.1Y,0.3,90,0,7.5,180),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/wedge.asy b/Build/source/utils/asymptote/examples/wedge.asy
new file mode 100644
index 00000000000..9e0f8355308
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/wedge.asy
@@ -0,0 +1,21 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=perspective(8,10,2);
+currentlight=adobe;
+
+draw(circle(O,4,Z));
+draw(shift(-4Z)*scale(4,4,8)*unitcylinder,green+opacity(0.2));
+
+triple F(real x){return (x,sqrt(16-x^2),sqrt((16-x^2)/3));}
+path3 p=graph(F,0,4,operator ..);
+path3 q=reverse(p)--rotate(180,(0,4,4/sqrt(3)))*p--cycle;
+draw(surface(q--cycle),red);
+
+real t=2;
+path3 triangle=(t,0,0)--(t,sqrt(16-t^2),0)--F(t)--cycle;
+draw(surface(triangle),blue);
+
+xaxis3("$x$",Arrow3,PenMargin3(0,0.25));
+yaxis3("$y$",Arrow3,PenMargin3(0,0.25));
+zaxis3("$z$",dashed,Arrow3);
diff --git a/Build/source/utils/asymptote/examples/workcone.asy b/Build/source/utils/asymptote/examples/workcone.asy
new file mode 100644
index 00000000000..5b4f8c94ad5
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/workcone.asy
@@ -0,0 +1,40 @@
+import solids;
+size(0,150);
+currentprojection=orthographic(0,-30,5);
+
+real r=4;
+real h=10;
+real s=8;
+real x=r*s/h;
+
+real sr=5;
+real xr=r*sr/h;
+
+real s1=sr-0.1;
+real x1=r*s1/h;
+
+real s2=sr+0.2;
+real x2=r*s2/h;
+
+path3 p=(0,0,0)--(x,0,s);
+revolution a=revolution(p,Z);
+draw(surface(a,4),lightblue+opacity(0.5));
+
+path3 q=(x,0,s)--(r,0,h);
+revolution b=revolution(q,Z);
+draw(surface(b),white+opacity(0.5));
+
+draw((-r-1,0,0)--(r+1,0,0));
+draw((0,0,0)--(0,0,h+1),dashed);
+
+path3 w=(x1,0,s1)--(x2,0,s2)--(0,0,s2);
+revolution b=revolution(w,Z);
+draw(surface(b),blue+opacity(0.5));
+draw(circle((0,0,s2),x2));
+draw(circle((0,0,s1),x1));
+
+draw("$x$",(xr,0,0)--(xr,0,sr),red,Arrow3,PenMargin3);
+draw("$r$",(0,0,sr)--(xr,0,sr),N,red);
+draw((string) r,(0,0,h)--(r,0,h),N,red);
+draw((string) h,(r,0,0)--(r,0,h),red,Arrow3,PenMargin3);
+draw((string) s,(-x,0,0)--(-x,0,s),W,red,Arrow3,Bar3,PenMargin3);
diff --git a/Build/source/utils/asymptote/examples/xsin1x.asy b/Build/source/utils/asymptote/examples/xsin1x.asy
new file mode 100644
index 00000000000..f03714b79df
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/xsin1x.asy
@@ -0,0 +1,10 @@
+import graph;
+size(300,0);
+
+real f(real x) {return (x != 0.0) ? x * sin(1.0 / x) : 0.0;}
+pair F(real x) {return (x,f(x));}
+
+xaxis("$x$",red);
+yaxis(red);
+draw(graph(f,-1.2/pi,1.2/pi,1000));
+label("$x\sin\frac{1}{x}$",F(1.1/pi),NW);
diff --git a/Build/source/utils/asymptote/examples/xxsq01.asy b/Build/source/utils/asymptote/examples/xxsq01.asy
new file mode 100644
index 00000000000..11a035f0418
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/xxsq01.asy
@@ -0,0 +1,30 @@
+import graph3;
+import solids;
+size(0,150);
+currentprojection=perspective(0,0,10,up=Y);
+
+pen color=green;
+real alpha=250;
+
+real f(real x) {return x^2;}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+path p=graph(F,0,1,n=10,operator ..)--cycle;
+path3 p3=path3(p);
+
+revolution a=revolution(p3,X,-alpha,0);
+draw(surface(a),color);
+
+surface s=surface(p);
+draw(s,color);
+draw(rotate(-alpha,X)*s,color);
+
+draw(p3,blue);
+
+xaxis3(Label("$x$",1),xmax=1.25,dashed,Arrow3);
+yaxis3(Label("$y$",1),Arrow3);
+dot(Label("$(1,1)$"),(1,1,0),X+Y);
+arrow("$y=x$",(0.7,0.7,0),Y,0.75cm,red);
+arrow("$y=x^2$",F3(0.7),X,0.75cm,red);
+draw(arc(1.1X,0.3,90,90,3,-90),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/xxsq01x-1.asy b/Build/source/utils/asymptote/examples/xxsq01x-1.asy
new file mode 100644
index 00000000000..2c4c9ec363c
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/xxsq01x-1.asy
@@ -0,0 +1,34 @@
+import graph3;
+import solids;
+size(300);
+currentprojection=perspective(0,2,10,up=Y);
+currentlight=(0.25,-0.25,5);
+
+pen color=green;
+
+real f(real x) {return x^2;}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+path p=graph(F,0,1,n=10,operator ..)--cycle;
+path3 p3=path3(p);
+
+revolution a=revolution(-X,p3,Y,0,180);
+draw(surface(a),color);
+surface s=surface(p);
+draw(s,color);
+transform3 t=shift(-2X)*rotate(180,Y);
+draw(t*s,color);
+draw(p3);
+draw(t*p3);
+
+draw((-1,0,0)--(-1,1,0),dashed);
+xaxis3(Label("$x$",1),Arrow3);
+yaxis3(Label("$y$",1),Arrow3);
+dot(Label("$(1,1)$"),(1,1,0));
+dot(Label("$(-1,1)$"),(-1,1,0),W);
+arrow("$y=x^{2}$",F3(0.7),X,1cm,red);
+arrow("$y=x$",(0.3,0.3,0),X,1.5cm,red);
+draw(circle((-1,1,0),2,Y),dashed);
+draw((-1,1,0)--(1,1,0),dashed);
+draw(shift(-X)*arc(0.02Y,0.3,90,0,0,0,CW),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/xxsq01y.asy b/Build/source/utils/asymptote/examples/xxsq01y.asy
new file mode 100644
index 00000000000..14cf177256e
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/xxsq01y.asy
@@ -0,0 +1,32 @@
+import solids;
+size(0,150);
+currentprojection=perspective(0,0,10);
+pen color=green;
+real alpha=240;
+
+real f(real x) {return x^2;}
+pair F(real x) {return (x,f(x));}
+triple F3(real x) {return (x,f(x),0);}
+
+path p=graph(F,0,1,n=10,operator ..)--cycle;
+path3 p3=path3(p);
+
+draw(surface(revolution(p3,Y,0,alpha)),color);
+
+surface s=surface(p);
+draw(s,color);
+draw(rotate(alpha,Y)*s,color);
+
+draw(p3,blue);
+
+xaxis3(Label("$x$",1),Arrow3);
+yaxis3(Label("$y$",1),ymax=1.25,dashed,Arrow3);
+
+dot("$(1,1)$",(1,1,0),X);
+arrow("$y=x^{2}$",F3(0.7),X,0.75cm,red);
+arrow("$y=x$",(0.8,0.8,0),Y,1cm,red);
+
+real r=0.4;
+draw((r,f(r),0)--(r,r,0),red);
+draw("$r$",(0,(f(r)+r)*0.5,0)--(r,(f(r)+r)*0.5,0),N,red,Arrows3,PenMargins3);
+draw(arc(1.1Y,0.3,90,0,7.5,180),Arrow3);
diff --git a/Build/source/utils/asymptote/examples/yingyang.asy b/Build/source/utils/asymptote/examples/yingyang.asy
new file mode 100644
index 00000000000..68b0d0eea74
--- /dev/null
+++ b/Build/source/utils/asymptote/examples/yingyang.asy
@@ -0,0 +1,7 @@
+size(0,25cm);
+guide center=(0,1){W}..tension 0.8..(0,0){(1,-.5)}..tension 0.8..{W}(0,-1);
+
+draw((0,1)..(-1,0)..(0,-1));
+filldraw(center{E}..{N}(1,0)..{W}cycle);
+unfill(circle((0,0.5),0.125));
+fill(circle((0,-0.5),0.125));