summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/doc/numpybook/Figures/contiguous.eps374
-rw-r--r--numpy/doc/numpybook/Figures/contiguous.fig133
-rw-r--r--numpy/doc/numpybook/Figures/contiguous.pdfbin0 -> 5700 bytes
-rw-r--r--numpy/doc/numpybook/Figures/fig1.eps4577
-rw-r--r--numpy/doc/numpybook/Figures/fig1bw.eps4575
-rw-r--r--numpy/doc/numpybook/Figures/fig2.eps4921
-rw-r--r--numpy/doc/numpybook/Figures/fig2bw.eps4919
-rw-r--r--numpy/doc/numpybook/Figures/hierarchy.diabin0 -> 4332 bytes
-rw-r--r--numpy/doc/numpybook/Figures/hierarchy.eps5596
-rw-r--r--numpy/doc/numpybook/Figures/hierarchy.figbin0 -> 2163 bytes
-rw-r--r--numpy/doc/numpybook/Figures/hierarchy.pdfbin0 -> 62320 bytes
-rw-r--r--numpy/doc/numpybook/Figures/hierarchy.pngbin0 -> 32014 bytes
-rw-r--r--numpy/doc/numpybook/Figures/threefundamental.eps246
-rw-r--r--numpy/doc/numpybook/Figures/threefundamental.fig57
-rw-r--r--numpy/doc/numpybook/Figures/threefundamental.pngbin0 -> 4696 bytes
-rw-r--r--numpy/doc/numpybook/capi.lyx24232
-rw-r--r--numpy/doc/numpybook/comparison/ctypes/code.c60
-rw-r--r--numpy/doc/numpybook/comparison/ctypes/filter.py26
-rw-r--r--numpy/doc/numpybook/comparison/ctypes/interface.py60
-rw-r--r--numpy/doc/numpybook/comparison/ctypes/newfile.datbin0 -> 800 bytes
-rwxr-xr-xnumpy/doc/numpybook/comparison/ctypes/timeme2
-rw-r--r--numpy/doc/numpybook/comparison/f2py/add.f45
-rw-r--r--numpy/doc/numpybook/comparison/f2py/add.pyf34
-rw-r--r--numpy/doc/numpybook/comparison/f2py/filter.f20
-rw-r--r--numpy/doc/numpybook/comparison/f2py/filter.pyf16
-rw-r--r--numpy/doc/numpybook/comparison/f2py/filtermodule.c293
-rwxr-xr-xnumpy/doc/numpybook/comparison/f2py/timeme1
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/add.c560
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/add.pyx75
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd106
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/filter.c388
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/filter.pyx44
-rw-r--r--numpy/doc/numpybook/comparison/pyrex/setup.py29
-rwxr-xr-xnumpy/doc/numpybook/comparison/pyrex/timeme2
-rw-r--r--numpy/doc/numpybook/comparison/timing.py63
-rw-r--r--numpy/doc/numpybook/comparison/weave/filter.py23
-rw-r--r--numpy/doc/numpybook/comparison/weave/inline.py49
-rwxr-xr-xnumpy/doc/numpybook/comparison/weave/timeme2
-rw-r--r--numpy/doc/numpybook/graphics/note.eps116
-rw-r--r--numpy/doc/numpybook/graphics/note.fig16
-rw-r--r--numpy/doc/numpybook/graphics/note.pngbin0 -> 1984 bytes
-rw-r--r--numpy/doc/numpybook/graphics/tip.eps127
-rw-r--r--numpy/doc/numpybook/graphics/tip.fig14
-rw-r--r--numpy/doc/numpybook/graphics/tip.pngbin0 -> 2685 bytes
-rw-r--r--numpy/doc/numpybook/graphics/tip.xfig.fig12
-rw-r--r--numpy/doc/numpybook/graphics/warning.eps125
-rw-r--r--numpy/doc/numpybook/graphics/warning.fig15
-rw-r--r--numpy/doc/numpybook/graphics/warning.pngbin0 -> 1690 bytes
-rw-r--r--numpy/doc/numpybook/mybook.layout177
-rw-r--r--numpy/doc/numpybook/numpybook.lyx27836
-rw-r--r--numpy/doc/numpybook/runcode.py148
51 files changed, 80114 insertions, 0 deletions
diff --git a/numpy/doc/numpybook/Figures/contiguous.eps b/numpy/doc/numpybook/Figures/contiguous.eps
new file mode 100644
index 000000000..006babe7a
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/contiguous.eps
@@ -0,0 +1,374 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: contiguous.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Aug 18 12:08:29 2005
+%%For: oliphant@oliphant (Travis Oliphant)
+%%BoundingBox: 0 0 434 215
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 215 moveto 0 0 lineto 434 0 lineto 434 215 lineto closepath clip newpath
+-197.3 306.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 50
+% Polyline
+30.000 slw
+n 5700 1575 m 6900 1575 l 6900 2175 l 5700 2175 l
+ cp gs col0 s gr
+% Polyline
+n 7500 1575 m 8700 1575 l 8700 2175 l 7500 2175 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 3300 1575 m 10500 1575 l 10500 2175 l 3300 2175 l
+ cp gs col0 s gr
+% Polyline
+n 3900 1575 m
+ 3900 2175 l gs col0 s gr
+% Polyline
+n 4500 1575 m
+ 4500 2175 l gs col0 s gr
+% Polyline
+n 5100 1575 m
+ 5100 2175 l gs col0 s gr
+% Polyline
+n 5700 1575 m
+ 5700 2175 l gs col0 s gr
+% Polyline
+n 6300 1575 m
+ 6300 2175 l gs col0 s gr
+% Polyline
+n 6900 1575 m
+ 6900 2175 l gs col0 s gr
+% Polyline
+n 7500 1575 m
+ 7500 2175 l gs col0 s gr
+% Polyline
+n 8100 1575 m
+ 8100 2175 l gs col0 s gr
+% Polyline
+n 8700 1575 m
+ 8700 2175 l gs col0 s gr
+% Polyline
+n 9300 1575 m
+ 9300 2175 l gs col0 s gr
+% Polyline
+n 9900 1575 m
+ 9900 2175 l gs col0 s gr
+/Helvetica-Bold ff 180.00 scf sf
+10125 1950 m
+gs 1 -1 sc (11) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+9525 1950 m
+gs 1 -1 sc (10) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+9000 1950 m
+gs 1 -1 sc (9) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8400 1950 m
+gs 1 -1 sc (8) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7800 1950 m
+gs 1 -1 sc (7) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7200 1950 m
+gs 1 -1 sc (6) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+6600 1950 m
+gs 1 -1 sc (5) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+6000 1950 m
+gs 1 -1 sc (4) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+5400 1950 m
+gs 1 -1 sc (3) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4800 1950 m
+gs 1 -1 sc (2) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4200 1950 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+3600 1950 m
+gs 1 -1 sc (0) col0 sh gr
+% Polyline
+30.000 slw
+n 4200 3300 m 5400 3300 l 5400 4500 l 4200 4500 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 4200 2700 m
+ 4200 5100 l gs col0 s gr
+% Polyline
+n 4800 2700 m
+ 4800 5100 l gs col0 s gr
+% Polyline
+n 3600 3300 m
+ 5400 3300 l gs col0 s gr
+% Polyline
+n 3600 3900 m
+ 5400 3900 l gs col0 s gr
+% Polyline
+n 3600 2700 m 5400 2700 l 5400 5100 l 3600 5100 l
+ cp gs col0 s gr
+% Polyline
+n 3600 4500 m
+ 5400 4500 l gs col0 s gr
+/Helvetica-Bold ff 240.00 scf sf
+5625 3975 m
+gs 1 -1 sc (C) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+5175 4725 m
+gs 1 -1 sc (11) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4575 4725 m
+gs 1 -1 sc (10) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4050 4725 m
+gs 1 -1 sc (9) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+5250 4125 m
+gs 1 -1 sc (8) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4650 4125 m
+gs 1 -1 sc (7) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4050 4125 m
+gs 1 -1 sc (6) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+5250 3525 m
+gs 1 -1 sc (5) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4650 3525 m
+gs 1 -1 sc (4) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4050 3525 m
+gs 1 -1 sc (3) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+5250 2925 m
+gs 1 -1 sc (2) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4650 2925 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4050 2925 m
+gs 1 -1 sc (0) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+3675 3225 m
+gs 1 -1 sc (\(0,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4875 3225 m
+gs 1 -1 sc (\(0,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+3675 3825 m
+gs 1 -1 sc (\(1,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4875 3825 m
+gs 1 -1 sc (\(1,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4275 3825 m
+gs 1 -1 sc (\(1,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4875 4425 m
+gs 1 -1 sc (\(2,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4875 5025 m
+gs 1 -1 sc (\(3,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4275 3225 m
+gs 1 -1 sc (\(0,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+3675 4425 m
+gs 1 -1 sc (\(2,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+3675 5025 m
+gs 1 -1 sc (\(3,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4275 4425 m
+gs 1 -1 sc (\(2,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+4275 5025 m
+gs 1 -1 sc (\(3,1\)) col0 sh gr
+% Polyline
+30.000 slw
+n 7650 3375 m 8850 3375 l 8850 4575 l 7650 4575 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 7050 3975 m
+ 9450 3975 l gs col0 s gr
+% Polyline
+n 7050 3375 m
+ 9450 3375 l gs col0 s gr
+% Polyline
+n 7650 4575 m
+ 7650 2775 l gs col0 s gr
+% Polyline
+n 8250 4575 m
+ 8250 2775 l gs col0 s gr
+% Polyline
+n 8850 4575 m
+ 8850 2775 l gs col0 s gr
+% Polyline
+n 7050 4575 m 7050 2775 l 9450 2775 l 9450 4575 l
+ cp gs col0 s gr
+/Helvetica-Bold ff 240.00 scf sf
+9600 3750 m
+gs 1 -1 sc (Fortran) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+9225 4200 m
+gs 1 -1 sc (11) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+9225 3600 m
+gs 1 -1 sc (10) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+9300 3000 m
+gs 1 -1 sc (9) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8625 4200 m
+gs 1 -1 sc (8) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8625 3600 m
+gs 1 -1 sc (7) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8625 3000 m
+gs 1 -1 sc (6) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8100 4200 m
+gs 1 -1 sc (5) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8100 3600 m
+gs 1 -1 sc (4) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8100 3000 m
+gs 1 -1 sc (3) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7500 4200 m
+gs 1 -1 sc (2) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7500 3600 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7500 3000 m
+gs 1 -1 sc (0) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7125 3300 m
+gs 1 -1 sc (\(0,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7725 3300 m
+gs 1 -1 sc (\(0,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8325 3300 m
+gs 1 -1 sc (\(0,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7125 3900 m
+gs 1 -1 sc (\(1,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7725 3900 m
+gs 1 -1 sc (\(1,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8325 3900 m
+gs 1 -1 sc (\(1,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7125 4500 m
+gs 1 -1 sc (\(2,0\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+7725 4500 m
+gs 1 -1 sc (\(2,1\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8325 4500 m
+gs 1 -1 sc (\(2,2\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8925 3900 m
+gs 1 -1 sc (\(1,3\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8925 4500 m
+gs 1 -1 sc (\(2,3\)) col0 sh gr
+/Helvetica-Bold ff 180.00 scf sf
+8925 3300 m
+gs 1 -1 sc (\(0,3\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
diff --git a/numpy/doc/numpybook/Figures/contiguous.fig b/numpy/doc/numpybook/Figures/contiguous.fig
new file mode 100644
index 000000000..c2416dafa
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/contiguous.fig
@@ -0,0 +1,133 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+6 3300 1500 10500 2250
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5700 1575 6900 1575 6900 2175 5700 2175 5700 1575
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 7500 1575 8700 1575 8700 2175 7500 2175 7500 1575
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3300 1575 10500 1575 10500 2175 3300 2175 3300 1575
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3900 1575 3900 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4500 1575 4500 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 5100 1575 5100 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 5700 1575 5700 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6300 1575 6300 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6900 1575 6900 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7500 1575 7500 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8100 1575 8100 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8700 1575 8700 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 9300 1575 9300 2175
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 9900 1575 9900 2175
+4 0 0 50 -1 18 12 0.0000 4 135 210 10125 1950 11\001
+4 0 0 50 -1 18 12 0.0000 4 135 210 9525 1950 10\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 9000 1950 9\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8400 1950 8\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 7800 1950 7\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 7200 1950 6\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 6600 1950 5\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 6000 1950 4\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 5400 1950 3\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4800 1950 2\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4200 1950 1\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 3600 1950 0\001
+-6
+6 3600 2700 5850 5100
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 4200 3300 5400 3300 5400 4500 4200 4500 4200 3300
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4200 2700 4200 5100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4800 2700 4800 5100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 3300 5400 3300
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 3900 5400 3900
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3600 2700 5400 2700 5400 5100 3600 5100 3600 2700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 4500 5400 4500
+4 0 0 50 -1 18 16 0.0000 4 180 180 5625 3975 C\001
+4 0 0 50 -1 18 12 0.0000 4 135 210 5175 4725 11\001
+4 0 0 50 -1 18 12 0.0000 4 135 210 4575 4725 10\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4725 9\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 5250 4125 8\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4650 4125 7\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4125 6\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 5250 3525 5\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4650 3525 4\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4050 3525 3\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 5250 2925 2\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4650 2925 1\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 4050 2925 0\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3225 (0,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3225 (0,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3825 (1,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3825 (1,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3825 (1,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4875 4425 (2,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4875 5025 (3,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3225 (0,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 3675 4425 (2,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 3675 5025 (3,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4275 4425 (2,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 4275 5025 (3,1)\001
+-6
+6 7050 2775 10500 4650
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 7650 3375 8850 3375 8850 4575 7650 4575 7650 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7050 3975 9450 3975
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7050 3375 9450 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7650 4575 7650 2775
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8250 4575 8250 2775
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8850 4575 8850 2775
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 7050 4575 7050 2775 9450 2775 9450 4575 7050 4575
+4 0 0 50 -1 18 16 0.0000 4 180 840 9600 3750 Fortran\001
+4 0 0 50 -1 18 12 0.0000 4 135 210 9225 4200 11\001
+4 0 0 50 -1 18 12 0.0000 4 135 210 9225 3600 10\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 9300 3000 9\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8625 4200 8\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3600 7\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3000 6\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8100 4200 5\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3600 4\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3000 3\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 7500 4200 2\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3600 1\001
+4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3000 0\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3300 (0,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3300 (0,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3300 (0,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3900 (1,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3900 (1,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3900 (1,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7125 4500 (2,0)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 7725 4500 (2,1)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8325 4500 (2,2)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3900 (1,3)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8925 4500 (2,3)\001
+4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3300 (0,3)\001
+-6
diff --git a/numpy/doc/numpybook/Figures/contiguous.pdf b/numpy/doc/numpybook/Figures/contiguous.pdf
new file mode 100644
index 000000000..3e3a55e64
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/contiguous.pdf
Binary files differ
diff --git a/numpy/doc/numpybook/Figures/fig1.eps b/numpy/doc/numpybook/Figures/fig1.eps
new file mode 100644
index 000000000..6b77676c8
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/fig1.eps
@@ -0,0 +1,4577 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: fig1.eps
+%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
+%%CreationDate: Fri Jan 6 00:09:47 2006
+%%BoundingBox: 13 175 598 616
+%%EndComments
+%%BeginProlog
+/mpldict 7 dict def
+mpldict begin
+/m { moveto } bind def
+/l { lineto } bind def
+/r { rlineto } bind def
+/box {
+m
+1 index 0 r
+0 exch r
+neg 0 r
+closepath
+} bind def
+/clipbox {
+box
+clip
+newpath
+} bind def
+/ellipse {
+newpath
+matrix currentmatrix 7 1 roll
+translate
+scale
+0 0 1 5 3 roll arc
+setmatrix
+closepath
+} bind def
+%%BeginFont: Verdana
+%!PS-TrueType-1.0-1.0
+8 dict begin
+/FontName /Verdana def
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 42 def
+/Encoding StandardEncoding def
+/FontBBox [-102 -423 2963 2049] def
+/PaintType 0 def
+/FontInfo 7 dict dup begin
+/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
+/FamilyName (Verdana) def
+/FullName (Verdana) def
+/version (Version 2.35) def
+/isFixedPitch false def
+/UnderlinePosition -180 def
+/UnderlineThickness 120 def
+end readonly def
+/sfnts [
+<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
+00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
+000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
+6670676DEE371553000021740000013867617370001700090000021000000010676C7966
+01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
+0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
+00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
+6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
+C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
+16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
+00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
+00000000000000000000037D00010000037D00620007006B000500020010002F00380000
+0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
+02A70800020B0604030504040204000002870000000000000000000000004D5320200040
+0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
+FFFF00030000002801E60001000000000000004300000001000000000001000700430001
+0000000000020007004A0001000000000003002F00510001000000000004000700800001
+000000000005000C00870001000000000006000700930001000000000007002F009A0003
+000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
+000104070002001000F10003000104080002001001010003000104090000008601110003
+000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
+000104090004000E021100030001040900050018021F0003000104090006000E02370003
+000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
+0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
+000104130002001202E50003000104140002000C02F70003000104150002001003030003
+000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
+0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
+0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
+00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
+61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
+6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
+736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
+6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
+616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
+6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
+6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
+BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
+6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
+66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
+6C0020005200690067006800740073002000520065007300650072007600650064005600
+65007200640061006E00610052006500670075006C00610072004D006900630072006F00
+73006F00660074003A00560065007200640061006E006100200052006500670075006C00
+610072003A00560065007200730069006F006E0020003100200028004D00690063007200
+6F0073006F00660074002900560065007200640061006E00610056006500720073006900
+6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
+61006E006100200069007300200061002000740072006100640065006D00610072006B00
+20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
+6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
+61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
+6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
+6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
+47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
+4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
+740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
+61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
+000001060000010000000000000001020000000200000000000000000000000000000001
+0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
+25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
+494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
+6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
+909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
+B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
+D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
+02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
+1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
+21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
+25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
+03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
+203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
+2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
+FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
+0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
+E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
+DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
+000002380000023800000000000000000000023800000242026800000000000000000000
+000002B203640368037600000000000000000000000000000000036A0000036A00000000
+000000000000000000000000000000000358000003580000000000000000000000000000
+0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
+00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
+00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
+00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
+0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
+0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
+010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
+014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
+015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
+01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
+016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
+00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
+0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
+00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
+01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
+01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
+01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
+01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
+026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
+027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
+03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
+036403650366036703680369036A036B036C036D036E036F037003710191019203740375
+037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
+00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
+0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
+04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
+0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
+122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
+17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
+1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
+2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
+245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
+2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
+316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
+361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
+3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
+3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
+40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
+44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
+48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
+4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
+4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
+54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
+575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
+5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
+5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
+62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
+65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
+67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
+6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
+705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
+73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
+78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
+7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
+82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
+87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
+8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
+9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
+95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
+976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
+98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
+9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
+9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
+9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
+0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
+740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
+110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
+B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
+010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
+01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
+0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
+320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
+111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
+230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
+100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
+010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
+111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
+100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
+11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
+0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
+282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
+0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
+28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
+00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
+000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
+0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
+001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
+0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
+0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
+002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
+0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
+0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
+003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
+0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
+0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
+004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
+0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
+005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
+0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
+0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
+006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
+0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
+0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
+007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
+0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
+008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
+0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
+0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
+009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
+00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
+00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
+00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
+00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
+00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
+00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
+00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
+00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
+00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
+00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
+00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
+00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
+00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
+00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
+00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
+00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
+B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
+026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
+04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
+0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
+B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
+092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
+4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
+8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
+C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
+15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
+480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
+1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
+1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
+BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
+0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
+004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
+B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
+2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
+26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
+45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
+45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
+60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
+042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
+8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
+468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
+8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
+441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
+0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
+00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
+00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
+009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
+006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
+0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
+0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
+006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
+008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
+045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
+0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
+022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
+0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
+0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
+057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
+058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
+04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
+03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
+02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
+04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
+04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
+05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
+04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
+0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
+051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
+0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
+064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
+068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
+03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
+0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
+0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
+03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
+050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
+064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
+05160113051602210516012D05160161051601560516019F05160132047E001802460018
+05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
+04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
+0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
+05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
+062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
+047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
+04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
+04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
+0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
+065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
+047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
+04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
+050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
+051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
+035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
+05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
+036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
+05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
+0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
+07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
+05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
+057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
+057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
+05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
+06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
+04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
+04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
+02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
+05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
+060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
+060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
+0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
+06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
+03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
+059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
+04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
+06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
+02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
+080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
+045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
+0000020900000221000001540000021D0516013605160003051601360516012505160142
+051601420516014205160125051602090516013605160142051601420516014205160142
+051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
+0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
+04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
+050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
+04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000064C007304DB006A064C0073
+04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
+064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
+04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
+060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
+04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
+0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
+070707070707070404070707060A08070808070608080505070609080907090707070808
+090707070404040706060606060606030606030306030906060606040604060607060605
+060506070808080708090806060606060606060606060303030306060606060606060606
+07050707060507060909090606070A090907070707060607070607050507090606050707
+0707070606070808090A0907090404020207070607030604040606070302040E08070807
+070505050509090908080803060606060606060606060603070607050508060706070607
+070505050909090608060507060806080606060308060806080608070607060603060306
+040806080609060704070407060704070408060806070507050609070606050605090606
+050B09060703050B03050303050308060806080607060706070608060806080608060806
+050305030503050305030706060603080608060906090607040706070408060806080608
+06090707060308060A090906040907090709070706020607060909090902060606080809
+060908090308070607070805070809080709080706070707090905070605060306060505
+060603060606060506060506050907030606060707080608070505050A0A070707070807
+070607070906080807070908090807080707070708070909080907080907060606040606
+070506060606070606060606050609060705090907080606080606060406060303030909
+060606060505090B06050505050505050000000009060806000000000606060606060606
+060606060606060806080608060806080608060806080608060806080608060706070607
+060706070607060706070605030503000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000090609060906
+090609060906090609060906090609060906080608060806080608060806080607060706
+07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
+0707070505080808060A070708080606080805050706090709070908070708070B070707
+0505050806060707050707040707030307030B0707070704060407060707060606050608
+070708060709080707070707070507070707030303030707070707070707070707050707
+060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
+06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
+050909090808080306060606060606060606060307060706050806070607070808050505
+0A0A0A060807050706080508050706040707070708070806070607060306030605070707
+0709070804080407060704070408070807070607060609090707050705090606050C0906
+0704060B0306040406040707080508050607060706070807080708070807080705030503
+0503050305030707070603070707070907090708040706070408070807080708070B0707
+060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
+030707070607080507070907070908070707070709090507070507030707070507070307
+0607060507070507060909030707070906080608070505050B0B08070708070707060706
+0906080807070908090807080707090709070B0B080907080A0707070605060707050707
+0706070707070705050609070706090A0708060608060707050606030303090907070607
+06050A0C0705050505050505000000000907080700000000060606060606060606060606
+060606070707070707070707070707070707070707070707070707060706070607060706
+070607060706070503050300000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000009070907090709070907
+090709070907090709070907090708070807080708070807080708070706070607060706
+070007000B110B000404040509070C080305050709040504050707070707070707070705
+05090909060A080809090706090805050806090809070908080708080B08070805050509
+07070707060707040707030407030B070707070506040707090707060705070908080907
+080908070707070707060707070703030303070707070707070707070706070707060707
+0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
+090C0B070B05050303090907070407050507070704030511080708070705050505090909
+08080803070707070707070707070603080608060509070707070709090606060B0B0B07
+090705080609060906070704080708070907090707070706030603060508070807090708
+05080508060704070408070807080608060609090707060705090707060D0A070804060C
+040704040704080709060906070707070707090709070907080708070503050305030503
+05040807070603080708070907090708050806070408070807080708070B090707030807
+0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
+070808050808090807090807070707080909050707060703070707050707030707070706
+07070607070909030707070907090609080505050D0C090808080808080608070B070808
+08080908090807090708090809080B0C090A07090B080707070508070906070707070707
+07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
+070606060606060600000000090708070000000007070707070707070707070707070708
+070807080708070807080708070807080708070807080707070707070707070707070707
+070707050305030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000907090709070907090709070907
+090709070907090709070807080708070807080708070807070707070707070707000700
+0C120C00040405060A080D09030505080904050405080808080808080808080505090909
+070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
+060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
+08080808080608080808030303030808080808080808080808070808080708070C0C0C08
+08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
+0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
+0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
+07090609060808040808080809090908080808070307040706090809080A080805080508
+07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
+070408080906090608080808080809080908090809080908050305030503050305040807
+070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
+050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
+08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
+070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
+0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
+07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
+07070707000000000A080908000000000808080808080808080808080808080808080808
+080808080808080808080808080808080808080808080808080808080808080808080805
+030503000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
+0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
+050505050A080D09030606090905070506080808080808080808080606090909070D0908
+090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
+0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
+080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
+0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
+03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
+08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
+080808050908090809080908080808070307040706090809080A08080508050907090609
+060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
+090809080808080808080908090809080908090805030503050305030604080707070309
+0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
+0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
+080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
+0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
+09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
+09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
+000000000A08090900000000080808080808080808080808080808090809080908090809
+080908090809080908090809080908080808080808080808080808080808080503050300
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
+0A0809080908090909090909090909090908090809080908080008000E150E0005050606
+0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
+0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
+08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
+0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
+0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
+0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
+090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
+0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
+090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
+0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
+090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
+080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
+0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
+090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
+0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
+090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
+0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
+080A080A080A080A080A0809080908090809080908090809080908050305030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
+0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
+0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
+0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
+0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
+0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
+0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
+0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
+0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
+0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
+09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
+09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
+060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
+0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
+0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
+0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
+0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
+0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
+000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
+090A090A090A090909090909090909090909090909090905030503000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
+0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
+0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
+0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
+09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
+0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
+090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
+060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
+070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
+0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
+0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
+0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
+070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
+10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
+0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
+12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
+110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
+0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
+0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
+0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
+0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
+080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
+0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
+0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
+0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
+09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
+0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
+0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
+05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
+080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
+0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
+0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
+0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
+0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
+0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
+0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
+050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
+0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000D0A
+0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
+0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
+0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
+120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
+0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
+0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
+0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
+0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
+0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
+080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
+0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
+080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
+0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
+0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
+0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
+0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
+0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
+0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
+0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
+0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
+0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
+0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
+090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
+0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
+0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
+0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
+080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
+1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
+0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
+0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
+0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
+0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
+060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
+0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
+120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
+0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
+0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
+0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
+0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
+0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
+0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
+091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
+0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
+0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
+1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
+1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
+0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
+100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
+090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
+060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
+09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
+1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
+0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
+0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
+0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
+0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
+0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
+0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
+0C0D0C080608060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
+110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
+152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
+0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
+0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
+0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
+0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
+150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
+0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
+0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
+0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
+0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
+0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
+0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
+0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
+0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
+11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
+0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
+0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
+0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
+060806000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
+120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
+0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
+0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
+0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
+0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
+161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
+0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
+0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
+0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
+09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
+0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
+0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
+1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
+0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
+0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
+0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
+0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
+00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
+0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
+120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
+130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
+12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
+0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
+0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
+0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
+0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
+0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
+100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
+0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
+0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
+0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
+0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
+0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
+0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
+121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
+0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
+130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
+0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
+110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
+060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
+110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
+0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
+06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
+14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
+0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
+100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
+1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
+0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
+0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
+0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
+1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
+15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
+100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
+1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
+140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
+000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
+0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
+12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
+160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
+15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
+0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
+1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
+0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
+0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
+0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
+1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
+11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
+15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
+0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
+1B061111111214180F181419071213131113140B13131714121514101211111318160B11
+110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
+1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
+1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
+0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
+111111111111111111111111111111121012101210121012101210121012101210121012
+101210111011101110111011101110111011100B070B0700000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000015101510151015101510151015101610161016101610161014111411141214121412
+141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
+0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
+141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
+1811110F120D1218141414121617151111111111110F1111111109090909121212121212
+1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
+100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
+14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
+11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
+091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
+0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
+161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
+12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
+12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
+1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
+12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
+110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
+090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
+121212121212121212121214111411141114111411141114111411141114111411141112
+1112111211121112111211121112110D090D090000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000001712
+171217121712171217121712171217121712171217121512151216131613161316131613
+121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
+141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
+201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
+140F141A1616161418191713131313131311131313130909090914131313131314141414
+141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
+141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
+140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
+1A1111112020201419140D16111611161114140C16131613191519141314131209120912
+0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
+11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
+0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
+14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
+111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
+141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
+161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
+1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
+14131314120F20261411111111111111000000001A131815000000001414141414141414
+141414141414141613161316131613161316131613161316131613161316131413141314
+13141314131413141314130D090D09000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000191319131913
+19131913191319131A131A131A131A131A13171417141815181518151815181514131413
+1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
+1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
+0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
+17171715191A181414141414141114141414090909091514141414141515151515121515
+1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
+151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
+0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
+212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
+151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
+180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
+0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
+140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
+091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
+1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
+2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
+141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
+131021271512121212121212000000001B14191600000000151515151515151515151515
+151515171417141714171417141714171417141714171417141714151415141514151415
+141514151415140D090D0900000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000001A141A141A141A141A14
+1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
+15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
+111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
+181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
+1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
+25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
+1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
+1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
+1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
+101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
+0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
+110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
+24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
+17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
+16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
+1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
+1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
+1814141414141414000000001E161C180000000018181818181818181818181818181819
+161916191619161916191619161916191619161916191617161716171617161716171617
+161716100A100A0000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
+1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
+2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
+172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
+161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
+191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
+1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
+2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
+1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
+161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
+161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
+190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
+19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
+132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
+1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
+1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
+2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
+151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
+17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
+191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
+0C120C000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000211921192119211921192119211922192219
+2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
+10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
+20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
+1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
+1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
+2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
+0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
+1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
+181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
+12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
+201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
+1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
+262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
+1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
+1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
+1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
+1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
+00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
+1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
+251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
+292036240D17172029121712172020202020202020202017172929291B3222222327201D
+27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
+1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
+1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
+202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
+1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
+20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
+221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
+20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
+201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
+1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
+1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
+221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
+20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
+26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
+20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
+281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
+1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
+2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
+0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
+251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
+212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
+0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
+2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
+19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
+251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
+2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
+1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
+22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
+17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
+27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
+2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
+251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
+2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
+2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
+000000002222222222222222222222222222222520252025202520252025202520252025
+2025202520252022202220222022202220222022202220170F170F000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
+29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
+2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
+2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
+1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
+2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
+202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
+15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
+1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
+232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
+24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
+2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
+172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
+3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
+241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
+41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
+3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
+1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
+252525252525252525252525252525282328232823282328232823282328232823282328
+23282325232523252325232523252325232523180F180F00000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
+2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
+1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
+2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
+372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
+2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
+251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
+2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
+28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
+122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
+21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
+322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
+2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
+2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
+2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
+29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
+28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
+12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
+282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000003529
+35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
+29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
+3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
+4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
+3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
+302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
+303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
+2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
+3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
+22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
+2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
+1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
+2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
+28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
+2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
+332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
+3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
+2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
+30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
+2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
+3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
+2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
+35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
+26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
+39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
+352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
+36443939415951355326261616444431331E3526263434351E16267E3934393434222222
+224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
+53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
+3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
+3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
+22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
+31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
+1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
+3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
+51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
+31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
+2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
+353535393239323932393239323932393239323932393239323932343134313431343134
+313431343134312218221800000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000041324132413241324132
+41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
+340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
+2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
+3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
+4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
+5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
+48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
+434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
+4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
+2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
+1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
+2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
+5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
+3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
+383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
+40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
+383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
+3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
+373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
+373A37271827180000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000004838483848384838483848384838
+4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
+649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
+37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
+343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
+3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
+4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
+642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
+40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
+34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
+343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
+3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
+3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
+2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
+4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
+3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
+4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
+323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
+3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
+3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
+1B2A1B000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
+513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
+000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
+2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
+0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
+332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
+0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
+5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
+BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
+7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
+0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
+131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
+ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
+C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
+2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
+CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
+8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
+70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
+08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
+312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
+201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
+2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
+5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
+15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
+2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
+7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
+C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
+05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
+260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
+031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
+282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
+2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
+321625012309011406232226353436333216013426232206151416333236013426232206
+1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
+64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
+DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
+004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
+087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
+300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
+1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
+3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
+4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
+2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
+323601151406070123270E01232224353436373E01372E01353436373E01333216151406
+070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
+3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
+0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
+F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
+03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
+822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
+28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
+000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
+070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
+2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
+060306131503151326012603261326154701400340134715500350136003601379007602
+700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
+3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
+4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
+00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
+0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
+0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
+060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
+392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
+8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
+FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
+01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
+FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
+0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
+590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
+012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
+01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
+0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
+3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
+01250138004900440156016701770186010A011202032F02010200010000022F332F003F
+2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
+05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
+4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
+5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
+36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
+02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
+4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
+1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
+3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
+03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
+03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
+0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
+100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
+101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
+373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
+8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
+3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
+290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
+780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
+020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
+E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
+06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
+2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
+6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
+02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
+233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
+240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
+0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
+395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
+3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
+00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
+7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
+1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
+ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
+353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
+6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
+344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
+0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
+0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
+2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
+002322262726023534123736243332161715232E01232200073E01333216171E01073426
+272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
+290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
+E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
+282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
+4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
+0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
+012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
+0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
+592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
+0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
+0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
+ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
+26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
+908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
+92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
+3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
+0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
+294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
+5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
+35331E01333212370E01232226272E01353400333216171612073426272E012322061514
+16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
+012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
+BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
+15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
+2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
+00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
+5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
+5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
+40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
+540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
+080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
+10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
+FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
+09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
+213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
+006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
+2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
+5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
+7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
+40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
+090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
+172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
+070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
+52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
+346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
+0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
+2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
+3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
+510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
+0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
+3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
+23222635341233321617353311333E013534022726242322040706021514121716043332
+3637150E0123222427260235341237362433320417161201112E01232206151416333236
+074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
+010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
+438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
+A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
+A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
+01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
+03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
+010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
+39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
+130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
+0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
+1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
+10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
+171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
+36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
+2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
+1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
+05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
+600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
+3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
+012322242726023534123736243332161715232E01232206070E01151416171E01333236
+373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
+46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
+E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
+03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
+3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
+3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
+B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
+003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
+016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
+21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
+0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
+FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
+C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
+130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
+0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
+3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
+32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
+01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
+23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
+05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
+03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
+11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
+002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
+3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
+A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
+09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
+22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
+02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
+190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
+3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
+0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
+400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
+10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
+FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
+002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
+113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
+023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
+050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
+0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
+30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
+130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
+34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
+0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
+6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
+0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
+002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
+53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
+10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
+373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
+01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
+B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
+001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
+080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
+10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
+3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
+C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
+0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
+59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
+150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
+2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
+305D015D010E01232226270E01232224272602353412373624333216171612151002071E
+01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
+5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
+BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
+3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
+3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
+071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
+031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
+7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
+3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
+B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
+009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
+4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
+86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
+111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
+ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
+2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
+0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
+A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
+152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
+0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
+04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
+4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
+F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
+01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
+4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
+470148020205040507065706860603061400000105070457048604030414030203080144
+014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
+6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
+F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
+01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
+00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
+08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
+0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
+000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
+75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
+10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
+390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
+000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
+09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
+020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
+290839084808050208070A04010406020D00160026003600470050000600660D08090619
+062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
+30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
+FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
+000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
+08270628085606590865066A08080814000100061405040502000D050200010004000703
+040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
+ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
+E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
+000900594036030708060813082608360846085608660876080808B30202030707033506
+03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
+2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
+91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
+0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
+FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
+0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
+003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
+0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
+1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
+3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
+036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
+0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
+0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
+051602FA068C000300244016480159026902790204500360037003030303010000022F33
+2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
+0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
+0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
+001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
+3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
+353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
+BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
+5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
+FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
+3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
+141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
+31305D011406070E012322262707231133113E0133321203342623220607111E01333236
+04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
+2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
+40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
+0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
+3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
+2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
+A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
+006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
+0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
+F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
+3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
+B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
+FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
+6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
+1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
+013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
+E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
+011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
+030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
+0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
+22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
+BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
+006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
+702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
+1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
+3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
+1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
+9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
+276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
+045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
+1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
+22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
+262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
+02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
+003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
+021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
+4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
+FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
+210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
+2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
+011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
+0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
+325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
+015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
+1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
+01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
+006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
+1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
+801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
+2123113426272E01232206071E01151123113426272E012322060711231133153E013332
+16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
+9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
+5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
+040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
+123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
+4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
+047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
+1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
+002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
+C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
+00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
+0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
+32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
+33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
+51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
+D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
+701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
+F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
+321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
+BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
+C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
+05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
+305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
+2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
+091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
+6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
+2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
+07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
+14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
+0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
+393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
+221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
+02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
+0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
+3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
+02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
+FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
+09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
+3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
+B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
+047F045D000600864041260429063604390646044906062905390540055105600505061A
+000100041A03020328002703380037034A00470375017A02080005027503010305020802
+010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
+820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
+2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
+045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
+58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
+0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
+3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
+23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
+5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
+14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
+4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
+084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
+06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
+01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
+395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
+0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
+01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
+0519031705460149035800570179030902071A000100051A040304490046040200030204
+05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
+0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
+30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
+5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
+45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
+1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
+3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
+000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
+09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
+2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
+2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
+AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
+BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
+1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
+0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
+010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
+5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
+37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
+887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
+000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
+4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
+1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
+26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
+5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
+4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
+40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
+0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
+125906561278027703082020211F02870101011400120020210387040104140505067B06
+74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
+114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
+5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
+10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
+C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
+26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
+7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
+02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
+342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
+313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
+2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
+5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
+062322262735331E01333236353426270E01232224272602353412373624333216171523
+2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
+5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
+BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
+B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
+002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
+023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
+075002360032FD000117008E009601750018401103002930295029702904020029240F03
+25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
+24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
+0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
+01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
+011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
+0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
+5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
+3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
+2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
+01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
+0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
+20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
+015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
+003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
+1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
+460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
+D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
+21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
+20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
+20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
+2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
+FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
+0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
+40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
+880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
+023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
+0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
+0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
+2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
+0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
+FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
+FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
+FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
+FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
+2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
+012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
+012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
+012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
+012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
+1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
+0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
+173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
+6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
+0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
+3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
+A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
+FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
+7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
+471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
+2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
+353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
+010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
+0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
+00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
+1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
+190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
+ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
+1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
+0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
+05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
+63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
+10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
+181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
+39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
+07151E01151406070E012322262735331E01333236353426272E01272627263534363735
+2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
+2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
+5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
+845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
+072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
+323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
+563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
+0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
+DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
+0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
+5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
+BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
+39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
+303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
+2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
+333236373E0135342623353236353426272E01232206070E01151123113436373E013332
+1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
+28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
+421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
+000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
+282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
+2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
+06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
+ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
+5D005D011000212000111000212000031000212000111000212000072301231123112132
+16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
+66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
+63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
+FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
+3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
+0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
+146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
+521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
+5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
+2000031000212000111000212000050E012322243534003332161715232E012322061514
+1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
+36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
+0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
+1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
+0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
+000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
+0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
+FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
+03C3068C000300244016470156006600760004500360037003030303010000022F332F00
+2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
+000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
+5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
+04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
+0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
+030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
+2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
+0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
+6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
+000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
+05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
+0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
+5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
+112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
+B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
+0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
+090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
+1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
+0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
+ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
+3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
+63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
+453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
+216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
+E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
+441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
+AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
+ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
+2202353412333216173E01333212052E01232206151416333236373E0125342623220607
+0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
+9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
+010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
+05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
+0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
+5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
+021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
+020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
+00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
+2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
+FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
+000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
+051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
+5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
+350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
+0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
+0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
+0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
+BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
+5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
+015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
+080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
+5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
+363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
+433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
+410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
+19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
+3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
+22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
+F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
+0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
+99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
+08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
+03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
+0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
+012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
+8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
+FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
+050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
+5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
+B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
+093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
+300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
+008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
+10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
+2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
+228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
+0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
+6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
+2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
+0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
+01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
+B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
+300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
+40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
+ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
+3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
+AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
+300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
+1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
+FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
+26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
+A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
+580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
+40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
+6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
+124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
+00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
+10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
+31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
+362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
+<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
+5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
+20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
+242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
+FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
+0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
+04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
+1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
+3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
+22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
+6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
+E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
+03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
+05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
+101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
+331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
+151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
+FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
+05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
+FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
+00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
+00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
+0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
+08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
+308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
+DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
+270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
+020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
+FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
+5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
+3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
+2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
+1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
+050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
+541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
+3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
+26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
+01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
+59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
+607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
+05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
+0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
+5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
+D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
+0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
+000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
+2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
+8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
+0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
+1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
+2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
+82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
+110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
+2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
+3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
+004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
+011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
+0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
+002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
+10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
+FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
+152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
+FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
+B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
+2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
+5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
+0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
+10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
+015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
+321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
+BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
+92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
+A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
+02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
+00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
+FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
+3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
+04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
+F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
+E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
+000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
+2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
+FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
+00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
+000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
+010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
+14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
+0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
+3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
+1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
+4804470658045706680467067F047006087F057007020705000301000330036003900304
+03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
+19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
+C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
+400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
+00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
+35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
+332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
+003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
+4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
+00121203151827190119191D341502002833010133332F34030A272001022320292C0400
+0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
+12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
+331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
+37332E013534363723373312003332161715232E01232204072107210E01151416172107
+211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
+C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
+152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
+02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
+2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
+5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
+400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
+0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
+001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
+0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
+10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
+333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
+6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
+0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
+000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
+3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
+33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
+03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
+0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
+0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
+3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
+01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
+000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
+0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
+0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
+09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
+E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
+0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
+2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
+0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
+073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
+17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
+19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
+01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
+3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
+ED5D3130015D011406232226353436333216250123090114062322263534363332160134
+262322061514163332360134262322061514163332362514062322263534363332160734
+262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
+BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
+586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
+FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
+023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
+0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
+055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
+3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
+012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
+0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
+104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
+000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
+003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
+023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
+08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
+052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
+FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
+00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
+000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
+FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
+5606690566067A0573060601020350056005700503050560030103500060007000030000
+042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
+00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
+0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
+2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
+365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
+29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
+31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
+7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
+03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
+ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
+0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
+2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
+090009300902313009015009600970090309091551030C29200030000200003000600003
+D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
+343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
+065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
+1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
+22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
+A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
+00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
+0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
+8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
+1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
+222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
+790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
+64016B0274017B020606050250036003700303030360020102500060007000030000032F
+332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
+7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
+090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
+332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
+52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
+000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
+050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
+37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
+0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
+03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
+050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
+000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
+FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
+2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
+64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
+0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
+2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
+23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
+66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
+B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
+0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
+542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
+030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
+1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
+00232200353400333216172E01270527372E012735211E01173717071612013E01353426
+272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
+0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
+08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
+2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
+012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
+012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
+0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
+233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
+3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
+3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
+4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
+0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
+1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
+3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
+111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
+88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
+02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
+0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
+0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
+01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
+B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
+0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
+35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
+102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
+651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
+ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
+333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
+022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
+002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
+2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
+2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
+1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
+01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
+0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
+B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
+0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
+010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
+003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
+2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
+002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
+003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
+0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
+0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
+32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
+1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
+8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
+FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
+000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
+0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
+24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
+6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
+0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
+3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
+2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
+14062322262735331E01333236353426270E012322242735331604333236353426272E01
+272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
+9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
+9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
+4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
+28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
+3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
+3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
+0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
+4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
+1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
+262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
+15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
+0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
+4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
+0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
+0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
+068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
+0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
+03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
+04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
+70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
+01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
+1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
+213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
+95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
+9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
+2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
+0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
+FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
+3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
+35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
+0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
+570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
+0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
+20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
+003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
+005D010E012322263534363703210323012101230E0115141633323637330902062B344B
+2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
+90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
+003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
+703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
+3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
+03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
+392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
+3637362437353426272E012322060723353E01333216171E011511230E01151416333236
+373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
+1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
+7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
+24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
+0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
+062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
+34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
+0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
+ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
+33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
+6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
+2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
+04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
+090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
+5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
+3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
+03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
+B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
+34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
+3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
+1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
+31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
+343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
+03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
+5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
+B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
+012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
+012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
+0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
+030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
+005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
+030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
+32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
+C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
+010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
+1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
+0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
+07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
+2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
+05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
+2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
+33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
+0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
+00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
+0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
+00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
+00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
+068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
+059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
+00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
+00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
+FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
+3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
+012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
+012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
+18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
+5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
+3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
+FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
+0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
+18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
+5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
+5D250E01071E011514062322262735331E01333236353426272322263511233533113311
+211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
+B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
+B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
+011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
+0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
+0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
+4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
+322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
+331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
+CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
+00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
+210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
+21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
+3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
+023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
+0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
+FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
+007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
+FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
+3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
+012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
+012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
+10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
+FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
+53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
+27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
+003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
+33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
+5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
+6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
+FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
+65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
+12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
+071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
+0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
+4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
+524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
+363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
+38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
+0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
+3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
+32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
+8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
+4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
+1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
+001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
+113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
+3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
+F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
+FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
+0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
+79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
+2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
+11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
+272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
+3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
+40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
+40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
+0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
+451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
+1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
+232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
+1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
+A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
+0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
+0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
+05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
+ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
+2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
+51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
+4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
+051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
+12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
+03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
+10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
+3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
+2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
+3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
+9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
+00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
+3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
+34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
+4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
+7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
+1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
+332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
+2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
+32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
+E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
+B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
+1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
+45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
+75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
+B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
+60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
+B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
+040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
+ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
+012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
+B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
+0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
+022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
+041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
+0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
+5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
+88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
+481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
+29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
+371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
+1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
+335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
+2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
+220615141633323637330901230901140623222635343633321607342623220615141633
+3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
+B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
+68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
+006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
+120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
+FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
+2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
+3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
+0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
+A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
+05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
+1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
+400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
+CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
+0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
+8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
+00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
+0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
+0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
+CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
+0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
+06232226353436172206151416333236353426016B689393686893926949666748486766
+03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
+011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
+011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
+00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
+00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
+00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
+00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
+049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
+046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
+0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
+068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
+0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
+FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
+05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
+0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
+FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
+FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
+23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
+4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
+40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
+040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
+2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
+002132041715232E01272E012322001110002132363711213521110E01071E0115140623
+22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
+FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
+0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
+A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
+10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
+112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
+603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
+E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
+305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
+321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
+7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
+E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
+BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
+B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
+4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
+001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
+070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
+1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
+11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
+0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
+031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
+02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
+ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
+15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
+04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
+10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
+0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
+332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
+2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
+C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
+FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
+40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
+10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
+ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
+1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
+81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
+0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
+140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
+302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
+98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
+00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
+01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
+00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
+12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
+2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
+232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
+FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
+0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
+0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
+1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
+045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
+13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
+E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
+230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
+1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
+024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
+04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
+FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
+3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
+13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
+0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
+0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
+1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
+5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
+35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
+160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
+FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
+00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
+0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
+021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
+050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
+11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
+7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
+2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
+01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
+ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
+02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
+0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
+01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
+2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
+8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
+FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
+0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
+2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
+7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
+06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
+550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
+0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
+715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
+330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
+000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
+1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
+322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
+062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
+0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
+0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
+03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
+2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
+2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
+FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
+001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
+1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
+332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
+231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
+0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
+5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
+011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
+011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
+004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
+5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
+21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
+528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
+3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
+0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
+3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
+331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
+012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
+251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
+1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
+2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
+2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
+FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
+FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
+00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
+20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
+1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
+302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
+070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
+976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
+037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
+000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
+0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
+1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
+350E01232226351133111416171E0133323637113311230E011514163332363733150E01
+23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
+A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
+FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
+FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
+FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
+FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
+00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
+5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
+67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
+00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
+125906561278027703082020211F02370187010201140012002021033704870402041405
+05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
+F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
+C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
+0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
+0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
+05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
+17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
+5D212303210323012E013534363332161514060727342623220615141633323613090207
+2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
+F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
+CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
+37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
+4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
+01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
+0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
+32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
+5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
+2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
+110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
+5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
+E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
+4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
+5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
+0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
+068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
+08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
+3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
+2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
+ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
+004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
+004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
+008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
+008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
+008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
+355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
+40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
+003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
+003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
+090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
+B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
+010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
+05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
+00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
+1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
+1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
+17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
+393931305D2901353E0137233533352335333534123332161715232E012322061D012115
+21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
+016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
+000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
+07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
+1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
+31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
+06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
+9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
+FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
+040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
+003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
+39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
+3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
+4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
+094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
+003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
+01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
+00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
+010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
+D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
+0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
+010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
+0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
+0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
+090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
+33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
+803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
+00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
+059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
+0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
+0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
+5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
+010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
+0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
+1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
+003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
+4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
+019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
+2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
+0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
+370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
+2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
+BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
+05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
+00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
+4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
+012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
+FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
+05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
+002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
+0902390258020378017703020203020114000600020314040405490546067C0573060405
+030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
+65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
+09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
+0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
+40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
+0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
+213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
+FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
+010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
+2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
+000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
+A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
+0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
+293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
+0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
+D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
+71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
+090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
+061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
+FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
+021B067518011834380948096F090309192209030810030822142311141023071B180714
+108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
+C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
+1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
+359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
+2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
+641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
+041925140204160B341F02261835011608251202191214081502141C272222290F29010F
+291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
+1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
+023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
+CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
+0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
+FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
+000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
+01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
+B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
+014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
+019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
+FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
+019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
+0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
+371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
+90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
+2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
+1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
+F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
+1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
+A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
+01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
+15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
+1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
+0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
+0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
+07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
+2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
+2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
+201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
+664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
+264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
+05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
+3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
+A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
+04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
+2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
+181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
+12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
+072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
+252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
+28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
+8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
+045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
+18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
+10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
+178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
+00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
+FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
+71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
+487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
+0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
+FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
+260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
+04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
+08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
+FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
+0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
+3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
+4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
+047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
+24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
+030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
+400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
+1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
+353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
+06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
+4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
+211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
+2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
+00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
+3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
+F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
+220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
+0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
+03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
+3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
+12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
+3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
+5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
+AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
+045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
+091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
+3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
+5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
+4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
+0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
+3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
+8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
+010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
+53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
+1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
+7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
+5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
+070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
+4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
+343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
+045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
+0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
+291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
+2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
+2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
+01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
+5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
+5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
+7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
+023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
+FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
+00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
+FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
+073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
+1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
+31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
+3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
+BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
+00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
+0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
+0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
+000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
+33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
+243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
+EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
+4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
+0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
+02E207500236002C00000117008EFF240175001940130200104010501060107010050100
+100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
+000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
+28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
+3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
+013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
+2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
+0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
+401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
+052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
+000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
+1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
+FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
+2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
+35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
+C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
+FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
+07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
+5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
+01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
+646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
+07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
+0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
+191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
+1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
+E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
+5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
+8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
+030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
+1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
+09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
+0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
+10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
+FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
+052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
+71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
+011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
+554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
+B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
+021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
+6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
+000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
+0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
+392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
+9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
+9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
+093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
+09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
+35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
+350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
+392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
+2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
+2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
+0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
+912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
+18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
+FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
+3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
+0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
+392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
+0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
+06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
+F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
+A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
+151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
+0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
+FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
+14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
+0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
+40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
+0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
+030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
+10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
+305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
+D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
+000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
+6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
+1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
+4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
+5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
+FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
+0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
+5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
+051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
+01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
+210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
+030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
+FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
+00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
+000100C80000053B05D100070027401703350603010501140078090F0940095009030414
+056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
+DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
+FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
+461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
+03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
+0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
+FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
+010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
+05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
+001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
+150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
+3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
+272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
+0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
+8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
+4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
+B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
+0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
+392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
+FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
+0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
+12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
+EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
+2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
+05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
+31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
+000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
+05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
+32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
+05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
+1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
+0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
+11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
+0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
+2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
+4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
+150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
+002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
+113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
+EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
+23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
+560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
+ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
+3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
+C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
+FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
+34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
+1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
+3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
+01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
+F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
+676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
+000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
+03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
+6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
+2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
+03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
+FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
+04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
+0506060F113440030103030012340F03000519150904060309045F050105120114007821
+0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
+C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
+04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
+026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
+0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
+6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
+223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
+ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
+37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
+4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
+B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
+11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
+00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
+12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
+35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
+302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
+36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
+4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
+045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
+19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
+10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
+FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
+1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
+332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
+3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
+F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
+045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
+E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
+37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
+0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
+0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
+39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
+3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
+33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
+1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
+01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
+631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
+10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
+06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
+5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
+1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
+26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
+49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
+546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
+110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
+0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
+0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
+01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
+0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
+04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
+190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
+2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
+FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
+94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
+1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
+3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
+001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
+2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
+01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
+2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
+003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
+1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
+0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
+201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
+1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
+4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
+030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
+0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
+012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
+023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
+0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
+31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
+006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
+011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
+210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
+FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
+014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
+0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
+013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
+0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
+D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
+003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
+011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
+0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
+0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
+33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
+16171133113E0133321203342623220607111E0133323605112E01232206151416333236
+064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
+2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
+DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
+FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
+08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
+0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
+2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
+0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
+092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
+171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
+CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
+1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
+10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
+045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
+0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
+5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
+1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
+000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
+0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
+FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
+0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
+FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
+2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
+05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
+402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
+3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
+1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
+334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
+0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
+090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
+5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
+037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
+FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
+0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
+061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
+03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
+ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
+2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
+BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
+000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
+3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
+10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
+15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
+D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
+FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
+0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
+09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
+ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
+3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
+AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
+37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
+250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
+59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
+2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
+ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
+0607112311233533353315211521113E01333216171416151406070602070E01232A0127
+35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
+020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
+FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
+0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
+006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
+193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
+090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
+2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
+3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
+0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
+021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
+0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
+30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
+3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
+35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
+31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
+01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
+64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
+183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
+03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
+06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
+FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
+F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
+012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
+3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
+334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
+00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
+010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
+ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
+3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
+63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
+0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
+FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
+0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
+0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
+03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
+0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
+2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
+331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
+FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
+0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
+05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
+330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
+B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
+3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
+000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
+0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
+0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
+2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
+0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
+0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
+C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
+0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
+1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
+0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
+B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
+D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
+000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
+333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
+05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
+ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
+05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
+166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
+2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
+86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
+1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
+0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
+16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
+121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
+0E012322262735331E013332363534262B01353332363534262322060723353E01333216
+15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
+964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
+57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
+05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
+ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
+0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
+1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
+092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
+262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
+75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
+373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
+000100F3023503A505DA000600414025560101030100012A020203630073000200000351
+0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
+8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
+021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
+0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
+04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
+140623222635343637352E0135343633321615140607151E01033426232206151416171E
+01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
+5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
+64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
+304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
+0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
+1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
+5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
+0E01232224272602353412373624333216171E01173E013534262735331E011514060110
+0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
+144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
+630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
+DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
+21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
+2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
+302B011000232200111000333216173332363534262735331E01151406071E0107342623
+22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
+9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
+D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
+0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
+050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
+26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
+052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
+F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
+000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
+051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
+050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
+350E01232226351133111416171E0133323637113332363534262735331E011514062B01
+0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
+8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
+4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
+09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
+353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
+F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
+8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
+001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
+004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
+0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
+392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
+00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
+0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
+103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
+3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
+0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
+0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
+370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
+2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
+30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
+9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
+44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
+200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
+40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
+002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
+2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
+192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
+912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
+0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
+002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
+A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
+0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
+8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
+1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
+010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
+13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
+0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
+D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
+22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
+42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
+03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
+11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
+D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
+33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
+A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
+A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
+00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
+020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
+5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
+4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
+00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
+0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
+0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
+D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
+07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
+F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
+6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
+6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
+11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
+71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
+9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
+001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
+6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
+0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
+222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
+58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
+02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
+CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
+0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
+5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
+06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
+231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
+4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
+1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
+E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
+0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
+5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
+370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
+6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
+2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
+06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
+0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
+143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
+5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
+071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
+211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
+001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
+FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
+FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
+1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
+BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
+00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
+04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
+0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
+030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
+025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
+04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
+3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
+38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
+024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
+041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
+0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
+02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
+0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
+00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
+0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
+055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
+041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
+FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
+FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
+252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
+001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
+FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
+002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
+000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
+B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
+401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
+068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
+2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
+0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
+B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
+400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
+00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
+00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
+FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
+00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
+252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
+2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
+000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
+000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
+01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
+5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
+031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
+0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
+01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
+02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
+018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
+05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
+0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
+080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
+090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
+E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
+0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
+005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
+501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
+024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
+0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
+05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
+252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
+201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
+01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
+FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
+1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
+024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
+3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
+212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
+007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
+0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
+024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
+35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
+002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
+400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
+024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
+008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
+02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
+0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
+006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
+FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
+0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
+080102360038000001170256006201750012400B01502301010023220C00252B35005D35
+FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
+00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
+0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
+28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
+0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
+5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
+27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
+01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
+00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
+011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
+011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
+024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
+FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
+0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
+FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
+2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
+2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
+4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
+401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
+005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
+07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
+FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
+006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
+4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
+2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
+ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
+1123350E01232202113436373E0133321617352135213533153301112E01232206151416
+3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
+B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
+2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
+0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
+24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
+5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
+16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
+1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
+17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
+0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
+01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
+011401150116011701180119011A011B011C011D011E011F012001210122012301240125
+0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
+01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
+014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
+015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
+016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
+0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
+01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
+01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
+01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
+01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
+01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
+01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
+01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
+0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
+02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
+023402350236023702380239023A023B023C023D023E023F024002410242024302440245
+0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
+02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
+026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
+027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
+028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
+02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
+02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
+02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
+02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
+02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
+02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
+030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
+031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
+0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
+03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
+035403550356035703580359035A035B035C035D035E035F036003610362036303640365
+0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
+03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
+038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
+039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
+03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
+03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
+03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
+03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
+03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
+04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
+041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
+042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
+043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
+0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
+04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
+047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
+6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
+7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
+696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
+706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
+6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
+676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
+67726561746572087175657374696F6E0261740141014201430144014501460147014801
+49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
+627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
+7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
+650166016701680169016A016B016C016D016E016F017001710172017301740175017601
+7701780179017A0962726163656C656674036261720A627261636572696768740A617363
+696974696C646509416469657265736973054172696E670843636564696C6C6106456163
+757465064E74696C6465094F646965726573697309556469657265736973066161637574
+65066167726176650B6163697263756D666C657809616469657265736973066174696C64
+65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
+756D666C65780965646965726573697306696163757465066967726176650B6963697263
+756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
+650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
+65067567726176650B7563697263756D666C657809756469657265736973066461676765
+72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
+74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
+707972696768740974726164656D61726B056163757465086469657265736973086E6F74
+657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
+657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
+6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
+0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
+6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
+6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
+656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
+697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
+61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
+740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
+650979646965726573697309596469657265736973086672616374696F6E044575726F0D
+6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
+616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
+73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
+6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
+617665064961637574650B4963697263756D666C65780949646965726573697306496772
+617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
+0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
+6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
+6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
+4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
+6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
+650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
+72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
+6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
+72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
+61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
+76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
+6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
+656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
+7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
+63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
+7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
+65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
+61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
+065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
+0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
+68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
+0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
+6F6E64096166696936313234380961666969363132383906483232303733064831383534
+3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
+6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
+63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
+646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
+740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
+0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
+07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
+656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
+636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
+6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
+67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
+696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
+7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
+6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
+5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
+7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
+757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
+7368616375746509616E6F74656C65696106576772617665067767726176650657616375
+746506776163757465095764696572657369730977646965726573697306596772617665
+067967726176650D71756F74657265766572736564097261646963616C65780961666969
+303839343109657374696D61746564096F6E656569676874680C74687265656569676874
+68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
+656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
+6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
+7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
+730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
+04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
+707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
+69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
+696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
+7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
+6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
+746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
+63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
+610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
+6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
+313030323309616669693130303531096166696931303035320961666969313030353309
+616669693130303534096166696931303035350961666969313030353609616669693130
+303537096166696931303035380961666969313030353909616669693130303630096166
+696931303036310961666969313030363209616669693130313435096166696931303031
+370961666969313030313809616669693130303139096166696931303032300961666969
+313030323109616669693130303232096166696931303032340961666969313030323509
+616669693130303236096166696931303032370961666969313030323809616669693130
+303239096166696931303033300961666969313030333109616669693130303332096166
+696931303033330961666969313030333409616669693130303335096166696931303033
+360961666969313030333709616669693130303338096166696931303033390961666969
+313030343009616669693130303431096166696931303034320961666969313030343309
+616669693130303434096166696931303034350961666969313030343609616669693130
+303437096166696931303034380961666969313030343909616669693130303635096166
+696931303036360961666969313030363709616669693130303638096166696931303036
+390961666969313030373009616669693130303732096166696931303037330961666969
+313030373409616669693130303735096166696931303037360961666969313030373709
+616669693130303738096166696931303037390961666969313030383009616669693130
+303831096166696931303038320961666969313030383309616669693130303834096166
+696931303038350961666969313030383609616669693130303837096166696931303038
+380961666969313030383909616669693130303930096166696931303039310961666969
+313030393209616669693130303933096166696931303039340961666969313030393509
+616669693130303936096166696931303039370961666969313030373109616669693130
+303939096166696931303130300961666969313031303109616669693130313032096166
+696931303130330961666969313031303409616669693130313035096166696931303130
+360961666969313031303709616669693130313038096166696931303130390961666969
+313031313009616669693130313933096166696931303035300961666969313030393809
+616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
+74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
+7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
+696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
+35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
+6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
+096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
+393108676C79706835393208676C79706835393308676C79706835393408676C79706835
+393508676C79706835393608676C79706835393708676C79706835393808676C79706835
+393908676C79706836303008676C79706836303108676C79706836303208676C79706836
+303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
+6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
+63697263756D666C65786163757465104163697263756D666C6578677261766510616369
+7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
+63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
+106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
+77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
+7265766561637574650B41627265766567726176650B61627265766567726176650F4162
+72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
+74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
+657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
+6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
+63756D666C65786163757465106563697263756D666C6578616375746510456369726375
+6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
+6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
+697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
+63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
+49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
+62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
+70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
+74616671616D617473056869726971057473657265057365676F6C057061746168067161
+6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
+0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
+616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
+740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
+6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
+70650270650A66696E616C747361646905747361646903716F660472657368047368696E
+0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
+73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
+740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
+686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
+68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
+7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
+7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
+6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
+676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
+657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
+6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
+0870656461676573680B747361646964616765736809716F666461676573680A72657368
+6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
+62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
+6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
+746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
+380961666969353734303309616669693537343037096166696935373430390961666969
+353734343009616669693537343531096166696935373435320961666969353734353309
+616669693537343534096166696935373435350961666969353734353609616669693537
+343537096166696935373435380961666969353733393209616669693537333933096166
+696935373339340961666969353733393509616669693537333936096166696935373339
+370961666969353733393809616669693537333939096166696935373430300961666969
+353734303109616669693537333831096166696935373436310961666969363331363709
+616669693537343539096166696935373534330961666969353735333409616669693537
+343934096166696936323834330961666969363238343409616669693632383435096166
+696936343234300961666969363432343109616669693633393534096166696935373338
+320961666969363432343209616669693632383831096166696935373530340961666969
+353733363909616669693537333730096166696935373337310961666969353733373209
+616669693537333733096166696935373337340961666969353733373509616669693537
+333931096166696935373437310961666969353734363009616669693532323538096166
+696935373530360961666969363239353809616669693632393536096166696935323935
+370961666969353735303509616669693632383839096166696936323838370961666969
+363238383809616669693537353037096166696936323936310961666969363239353909
+616669693632393630096166696935373530380961666969363239363209616669693537
+353637096166696936323936340961666969353233303509616669693532333036096166
+696935373530390961666969363239363709616669693632393635096166696936323936
+360961666969353735353509616669693532333634096166696936333735330961666969
+363337353409616669693633373539096166696936333736330961666969363337393509
+616669693632383931096166696936333830380961666969363239333809616669693633
+383130096166696936323934320961666969363239343709616669693633383133096166
+696936333832330961666969363338323409616669693633383333096166696936333834
+340961666969363238383209616669693632383833096166696936323838340961666969
+363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
+4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
+7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
+106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
+7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
+696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
+62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
+0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
+6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
+64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
+62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
+<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
+6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
+686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
+55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
+08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
+626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
+696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
+0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
+FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
+FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
+FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
+FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
+FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
+FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
+FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
+FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
+FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
+FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
+FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
+FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
+FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
+FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
+FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
+FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
+FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
+FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
+FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
+FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
+FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
+FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
+FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
+FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
+FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
+FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
+FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
+FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
+FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
+FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
+FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
+FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
+FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
+FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
+FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
+FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
+FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
+FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
+FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
+FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
+FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
+FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
+FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
+FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
+FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
+FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
+FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
+FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
+FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
+FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
+FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
+FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
+FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
+FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
+FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
+0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
+FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
+FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
+FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
+FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
+FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
+FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
+FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
+FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
+FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
+FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
+FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
+FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
+FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
+FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
+FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
+FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
+FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
+FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
+FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
+FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
+FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
+FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
+FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
+FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
+FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
+FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
+FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
+FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
+FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
+FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
+006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
+FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
+FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
+06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
+05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
+801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
+2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
+3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
+010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
+74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
+55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
+526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
+2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
+30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
+5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
+6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
+70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
+4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
+819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
+2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
+B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
+1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
+6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
+3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
+5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
+16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
+C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
+ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
+1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
+55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
+676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
+040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
+695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
+3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
+74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
+72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
+41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
+55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
+657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
+8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
+F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
+D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
+E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
+006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
+2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
+5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
+A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
+7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
+0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
+20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
+536F667477617265205075626C697368657273204341301E170D39383034313630303030
+30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
+65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
+55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
+626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
+6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
+41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
+73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
+207632310B3009060355040613025553311330110603550408130A57617368696E67746F
+6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
+6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
+436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
+8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
+D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
+6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
+DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
+4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
+7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
+A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
+E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
+0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
+CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
+040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
+6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
+0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
+0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
+0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
+636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
+66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
+642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
+6520566572695369676E2043657274696669636174696F6E205072616374696365205374
+6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
+20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
+733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
+50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
+20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
+204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
+6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
+732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
+41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
+473A2054484520555345204F462054484953204345525449464943415445204953205354
+524943544C59205355424A45435420544F205448450A564552495349474E204345525449
+4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
+5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
+504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
+494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
+204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
+4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
+49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
+414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
+656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
+657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
+616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
+7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
+2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
+69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
+80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
+2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
+3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
+43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
+286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
+30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
+25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
+AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
+228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
+2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
+08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
+3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
+65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
+082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
+8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
+1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
+2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
+006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
+727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
+B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
+CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
+E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
+836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
+88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
+86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
+0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
+8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
+0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
+0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
+2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
+132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
+69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
+2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
+0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
+2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
+86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
+BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
+41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
+DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
+] def
+/CharStrings 893 dict dup begin
+/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
+/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
+/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
+/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
+/period 17 def /slash 18 def /zero 19 def /one 20 def
+/two 21 def /three 22 def /four 23 def /five 24 def
+/six 25 def /seven 26 def /eight 27 def /nine 28 def
+/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
+/greater 33 def /question 34 def /at 35 def /A 36 def
+/B 37 def /C 38 def /D 39 def /E 40 def
+/F 41 def /G 42 def /H 43 def /I 44 def
+/J 45 def /K 46 def /L 47 def /M 48 def
+/N 49 def /O 50 def /P 51 def /Q 52 def
+/R 53 def /S 54 def /T 55 def /U 56 def
+/V 57 def /W 58 def /X 59 def /Y 60 def
+/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
+/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
+/b 69 def /c 70 def /d 71 def /e 72 def
+/f 73 def /g 74 def /h 75 def /i 76 def
+/j 77 def /k 78 def /l 79 def /m 80 def
+/n 81 def /o 82 def /p 83 def /q 84 def
+/r 85 def /s 86 def /t 87 def /u 88 def
+/v 89 def /w 90 def /x 91 def /y 92 def
+/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
+/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
+/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
+/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
+/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
+/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
+/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
+/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
+/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
+/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
+/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
+/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
+/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
+/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
+/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
+/summation 153 def /product 154 def /pi1 155 def /integral 156 def
+/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
+/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
+/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
+/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
+/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
+/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
+/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
+/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
+/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
+/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
+/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
+/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
+/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
+/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
+/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
+/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
+/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
+/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
+/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
+/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
+/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
+/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
+/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
+/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
+/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
+/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
+/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
+/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
+/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
+/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
+/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
+/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
+/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
+/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
+/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
+/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
+/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
+/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
+/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
+/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
+/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
+/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
+/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
+/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
+/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
+/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
+/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
+/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
+/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
+/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
+/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
+/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
+/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
+/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
+/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
+/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
+/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
+/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
+/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
+/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
+/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
+/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
+/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
+/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
+/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
+/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
+/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
+/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
+/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
+/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
+/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
+/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
+/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
+/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
+/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
+/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
+/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
+/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
+/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
+/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
+/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
+/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
+/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
+/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
+/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
+/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
+/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
+/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
+/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
+/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
+/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
+/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
+/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
+/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
+/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
+/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
+/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
+/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
+/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
+/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
+/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
+/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
+/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
+/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
+/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
+/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
+/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
+/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
+/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
+/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
+/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
+/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
+/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
+/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
+/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
+/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
+/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
+/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
+/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
+/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
+/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
+/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
+/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
+/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
+/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
+/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
+/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
+/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
+/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
+/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
+/vav 677 def /zayin 678 def /het 679 def /tet 680 def
+/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
+/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
+/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
+/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
+/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
+/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
+/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
+/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
+/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
+/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
+/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
+/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
+/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
+/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
+/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
+/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
+/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
+/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
+/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
+/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
+/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
+/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
+/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
+/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
+/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
+/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
+/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
+/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
+/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
+/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
+/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
+/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
+/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
+/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
+/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
+/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
+/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
+/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
+/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
+/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
+/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
+/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
+/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
+/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
+/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
+/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
+/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
+/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
+/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
+/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
+/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
+/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
+/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
+
+end readonly def
+FontName currentdict end definefont pop
+%%EndFont
+%%EndProlog
+mpldict begin
+13.5 175.5 translate
+585 441 0 0 clipbox
+% polygon
+1.000 setgray
+1.000 setlinewidth
+0 setlinejoin
+2 setlinecap
+[] 0 setdash
+0 0 m
+0 441 l
+585 441 l
+585 0 l
+closepath
+gsave
+fill
+grestore
+stroke
+% polygon
+0.000 setgray
+73.125 44.1 m
+73.125 396.9 l
+526.5 396.9 l
+526.5 44.1 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+0.000 0.000 1.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 44.625 l
+91.260 46.237 l
+100.328 49.043 l
+109.395 53.206 l
+118.463 58.937 l
+127.530 66.464 l
+136.597 76.012 l
+145.665 87.777 l
+154.733 101.897 l
+163.800 118.431 l
+172.868 137.336 l
+181.935 158.456 l
+191.002 181.511 l
+200.070 206.100 l
+209.138 231.707 l
+218.205 257.720 l
+227.273 283.450 l
+236.340 308.160 l
+245.408 331.100 l
+254.475 351.539 l
+263.543 368.804 l
+272.610 382.309 l
+281.678 391.584 l
+290.745 396.306 l
+299.812 396.306 l
+308.880 391.584 l
+317.948 382.309 l
+327.015 368.804 l
+336.083 351.539 l
+345.150 331.100 l
+354.218 308.160 l
+363.285 283.450 l
+372.353 257.720 l
+381.420 231.707 l
+390.488 206.100 l
+399.555 181.511 l
+408.623 158.456 l
+417.690 137.336 l
+426.758 118.431 l
+435.825 101.897 l
+444.893 87.777 l
+453.960 76.012 l
+463.028 66.464 l
+472.095 58.937 l
+481.163 53.206 l
+490.230 49.043 l
+499.298 46.237 l
+508.365 44.625 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+1.000 0.000 0.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 58.500 l
+91.260 72.900 l
+100.328 87.300 l
+109.395 101.700 l
+118.463 116.100 l
+127.530 130.500 l
+136.597 144.900 l
+145.665 159.300 l
+154.733 173.700 l
+163.800 188.100 l
+172.868 202.500 l
+181.935 216.900 l
+191.002 231.300 l
+200.070 245.700 l
+209.138 260.100 l
+218.205 274.500 l
+227.273 288.900 l
+236.340 303.300 l
+245.408 317.700 l
+254.475 332.100 l
+263.543 346.500 l
+272.610 360.900 l
+281.678 375.300 l
+290.745 389.700 l
+299.812 389.700 l
+308.880 375.300 l
+317.948 360.900 l
+327.015 346.500 l
+336.083 332.100 l
+345.150 317.700 l
+354.218 303.300 l
+363.285 288.900 l
+372.353 274.500 l
+381.420 260.100 l
+390.488 245.700 l
+399.555 231.300 l
+408.623 216.900 l
+417.690 202.500 l
+426.758 188.100 l
+435.825 173.700 l
+444.893 159.300 l
+453.960 144.900 l
+463.028 130.500 l
+472.095 116.100 l
+481.163 101.700 l
+490.230 87.300 l
+499.298 72.900 l
+508.365 58.500 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+0.000 0.500 0.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 45.548 l
+91.260 49.869 l
+100.328 56.992 l
+109.395 66.799 l
+118.463 79.131 l
+127.530 93.783 l
+136.597 110.516 l
+145.665 129.056 l
+154.733 149.096 l
+163.800 170.309 l
+172.868 192.347 l
+181.935 214.846 l
+191.002 237.438 l
+200.070 259.753 l
+209.138 281.422 l
+218.205 302.092 l
+227.273 321.421 l
+236.340 339.094 l
+245.408 354.819 l
+254.475 368.339 l
+263.543 379.431 l
+272.610 387.913 l
+281.678 393.647 l
+290.745 396.538 l
+299.812 396.538 l
+308.880 393.647 l
+317.948 387.913 l
+327.015 379.431 l
+336.083 368.339 l
+345.150 354.819 l
+354.218 339.094 l
+363.285 321.421 l
+372.353 302.092 l
+381.420 281.422 l
+390.488 259.753 l
+399.555 237.438 l
+408.623 214.846 l
+417.690 192.347 l
+426.758 170.309 l
+435.825 149.096 l
+444.893 129.056 l
+453.960 110.516 l
+463.028 93.783 l
+472.095 79.131 l
+481.163 66.799 l
+490.230 56.992 l
+499.298 49.869 l
+508.365 45.548 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+0.750 0.000 0.750 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 72.324 m
+82.192 73.656 l
+91.260 77.632 l
+100.328 84.185 l
+109.395 93.207 l
+118.463 104.552 l
+127.530 118.033 l
+136.597 133.427 l
+145.665 150.483 l
+154.733 168.921 l
+163.800 188.437 l
+172.868 208.711 l
+181.935 229.410 l
+191.002 250.195 l
+200.070 270.724 l
+209.138 290.661 l
+218.205 309.676 l
+227.273 327.460 l
+236.340 343.718 l
+245.408 358.186 l
+254.475 370.624 l
+263.543 380.828 l
+272.610 388.632 l
+281.678 393.907 l
+290.745 396.567 l
+299.812 396.567 l
+308.880 393.907 l
+317.948 388.632 l
+327.015 380.828 l
+336.083 370.624 l
+345.150 358.186 l
+354.218 343.718 l
+363.285 327.460 l
+372.353 309.676 l
+381.420 290.661 l
+390.488 270.724 l
+399.555 250.195 l
+408.623 229.410 l
+417.690 208.711 l
+426.758 188.437 l
+435.825 168.921 l
+444.893 150.483 l
+453.960 133.427 l
+463.028 118.033 l
+472.095 104.552 l
+481.163 93.207 l
+490.230 84.185 l
+499.298 77.632 l
+508.365 73.656 l
+517.433 72.324 l
+stroke
+grestore
+% text
+0.000 setgray
+/Verdana findfont
+18.000 scalefont
+setfont
+144.812 403.956 m
+0 4 rmoveto
+(Smoothing window in time-domain) show
+% text
+/Verdana findfont
+14.000 scalefont
+setfont
+69.469 30.1 m
+(0) show
+% line
+0.500 setlinewidth
+0 setlinecap
+163.800 44.100 m 163.800 48.100 l
+stroke
+% line
+163.800 392.900 m 163.800 396.900 l
+stroke
+% text
+155.769 30.1 m
+(10) show
+% line
+254.475 44.100 m 254.475 48.100 l
+stroke
+% line
+254.475 392.900 m 254.475 396.900 l
+stroke
+% text
+246.444 30.1 m
+(20) show
+% line
+345.150 44.100 m 345.150 48.100 l
+stroke
+% line
+345.150 392.900 m 345.150 396.900 l
+stroke
+% text
+337.619 30.1 m
+(30) show
+% line
+435.825 44.100 m 435.825 48.100 l
+stroke
+% line
+435.825 392.900 m 435.825 396.900 l
+stroke
+% text
+427.731 30.1 m
+(40) show
+% text
+518.844 30.1 m
+(50) show
+% text
+296.656 17.1 m
+(n) show
+% text
+47.812 39.1 m
+(0.0) show
+% line
+73.125 114.660 m 77.125 114.660 l
+stroke
+% line
+522.500 114.660 m 526.500 114.660 l
+stroke
+% text
+47.875 109.66 m
+(0.2) show
+% line
+73.125 185.220 m 77.125 185.220 l
+stroke
+% line
+522.500 185.220 m 526.500 185.220 l
+stroke
+% text
+47.125 180.22 m
+(0.4) show
+% line
+73.125 255.780 m 77.125 255.780 l
+stroke
+% line
+522.500 255.780 m 526.500 255.780 l
+stroke
+% text
+47.812 250.78 m
+(0.6) show
+% line
+73.125 326.340 m 77.125 326.340 l
+stroke
+% line
+522.500 326.340 m 526.500 326.340 l
+stroke
+% text
+47.797 321.34 m
+(0.8) show
+% text
+48.062 391.9 m
+(1.0) show
+% polygon
+1.000 setlinewidth
+2 setlinecap
+214.291 51.156 m
+214.291 161.736 l
+385.334 161.736 l
+385.334 51.156 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+0.000 0.000 1.000 setrgbcolor
+230.344 143.521 m
+237.901 143.521 l
+245.457 143.521 l
+253.013 143.521 l
+stroke
+% draw_lines
+1.000 0.000 0.000 setrgbcolor
+230.344 121.605 m
+237.901 121.605 l
+245.457 121.605 l
+253.013 121.605 l
+stroke
+% draw_lines
+0.000 0.500 0.000 setrgbcolor
+230.344 97.688 m
+237.901 97.688 l
+245.457 97.688 l
+253.013 97.688 l
+stroke
+% draw_lines
+0.750 0.000 0.750 setrgbcolor
+230.344 71.371 m
+237.901 71.371 l
+245.457 71.371 l
+253.013 71.371 l
+stroke
+% text
+0.000 setgray
+/Verdana findfont
+24.000 scalefont
+setfont
+262.081 134.521 m
+(Blackman) show
+% text
+262.081 112.605 m
+(Bartlett) show
+% text
+262.081 86.688 m
+0 5 rmoveto
+(Hanning) show
+% text
+262.081 60.371 m
+0 5 rmoveto
+(Hamming) show
+
+end
+showpage
diff --git a/numpy/doc/numpybook/Figures/fig1bw.eps b/numpy/doc/numpybook/Figures/fig1bw.eps
new file mode 100644
index 000000000..3353edcb4
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/fig1bw.eps
@@ -0,0 +1,4575 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: fig1bw.eps
+%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
+%%CreationDate: Fri Jan 6 00:30:28 2006
+%%BoundingBox: 13 175 598 616
+%%EndComments
+%%BeginProlog
+/mpldict 7 dict def
+mpldict begin
+/m { moveto } bind def
+/l { lineto } bind def
+/r { rlineto } bind def
+/box {
+m
+1 index 0 r
+0 exch r
+neg 0 r
+closepath
+} bind def
+/clipbox {
+box
+clip
+newpath
+} bind def
+/ellipse {
+newpath
+matrix currentmatrix 7 1 roll
+translate
+scale
+0 0 1 5 3 roll arc
+setmatrix
+closepath
+} bind def
+%%BeginFont: Verdana
+%!PS-TrueType-1.0-1.0
+8 dict begin
+/FontName /Verdana def
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 42 def
+/Encoding StandardEncoding def
+/FontBBox [-102 -423 2963 2049] def
+/PaintType 0 def
+/FontInfo 7 dict dup begin
+/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
+/FamilyName (Verdana) def
+/FullName (Verdana) def
+/version (Version 2.35) def
+/isFixedPitch false def
+/UnderlinePosition -180 def
+/UnderlineThickness 120 def
+end readonly def
+/sfnts [
+<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
+00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
+000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
+6670676DEE371553000021740000013867617370001700090000021000000010676C7966
+01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
+0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
+00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
+6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
+C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
+16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
+00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
+00000000000000000000037D00010000037D00620007006B000500020010002F00380000
+0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
+02A70800020B0604030504040204000002870000000000000000000000004D5320200040
+0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
+FFFF00030000002801E60001000000000000004300000001000000000001000700430001
+0000000000020007004A0001000000000003002F00510001000000000004000700800001
+000000000005000C00870001000000000006000700930001000000000007002F009A0003
+000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
+000104070002001000F10003000104080002001001010003000104090000008601110003
+000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
+000104090004000E021100030001040900050018021F0003000104090006000E02370003
+000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
+0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
+000104130002001202E50003000104140002000C02F70003000104150002001003030003
+000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
+0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
+0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
+00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
+61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
+6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
+736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
+6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
+616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
+6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
+6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
+BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
+6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
+66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
+6C0020005200690067006800740073002000520065007300650072007600650064005600
+65007200640061006E00610052006500670075006C00610072004D006900630072006F00
+73006F00660074003A00560065007200640061006E006100200052006500670075006C00
+610072003A00560065007200730069006F006E0020003100200028004D00690063007200
+6F0073006F00660074002900560065007200640061006E00610056006500720073006900
+6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
+61006E006100200069007300200061002000740072006100640065006D00610072006B00
+20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
+6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
+61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
+6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
+6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
+47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
+4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
+740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
+61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
+000001060000010000000000000001020000000200000000000000000000000000000001
+0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
+25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
+494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
+6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
+909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
+B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
+D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
+02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
+1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
+21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
+25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
+03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
+203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
+2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
+FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
+0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
+E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
+DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
+000002380000023800000000000000000000023800000242026800000000000000000000
+000002B203640368037600000000000000000000000000000000036A0000036A00000000
+000000000000000000000000000000000358000003580000000000000000000000000000
+0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
+00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
+00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
+00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
+0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
+0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
+010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
+014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
+015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
+01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
+016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
+00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
+0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
+00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
+01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
+01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
+01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
+01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
+026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
+027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
+03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
+036403650366036703680369036A036B036C036D036E036F037003710191019203740375
+037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
+00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
+0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
+04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
+0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
+122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
+17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
+1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
+2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
+245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
+2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
+316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
+361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
+3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
+3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
+40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
+44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
+48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
+4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
+4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
+54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
+575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
+5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
+5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
+62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
+65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
+67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
+6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
+705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
+73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
+78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
+7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
+82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
+87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
+8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
+9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
+95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
+976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
+98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
+9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
+9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
+9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
+0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
+740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
+110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
+B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
+010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
+01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
+0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
+320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
+111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
+230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
+100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
+010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
+111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
+100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
+11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
+0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
+282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
+0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
+28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
+00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
+000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
+0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
+001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
+0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
+0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
+002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
+0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
+0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
+003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
+0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
+0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
+004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
+0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
+005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
+0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
+0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
+006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
+0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
+0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
+007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
+0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
+008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
+0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
+0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
+009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
+00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
+00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
+00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
+00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
+00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
+00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
+00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
+00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
+00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
+00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
+00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
+00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
+00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
+00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
+00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
+00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
+B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
+026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
+04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
+0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
+B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
+092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
+4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
+8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
+C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
+15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
+480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
+1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
+1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
+BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
+0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
+004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
+B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
+2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
+26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
+45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
+45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
+60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
+042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
+8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
+468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
+8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
+441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
+0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
+00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
+00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
+009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
+006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
+0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
+0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
+006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
+008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
+045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
+0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
+022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
+0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
+0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
+057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
+058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
+04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
+03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
+02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
+04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
+04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
+05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
+04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
+0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
+051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
+0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
+064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
+068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
+03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
+0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
+0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
+03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
+050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
+064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
+05160113051602210516012D05160161051601560516019F05160132047E001802460018
+05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
+04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
+0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
+05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
+062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
+047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
+04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
+04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
+0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
+065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
+047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
+04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
+050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
+051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
+035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
+05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
+036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
+05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
+0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
+07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
+05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
+057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
+057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
+05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
+06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
+04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
+04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
+02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
+05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
+060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
+060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
+0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
+06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
+03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
+059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
+04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
+06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
+02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
+080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
+045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
+0000020900000221000001540000021D0516013605160003051601360516012505160142
+051601420516014205160125051602090516013605160142051601420516014205160142
+051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
+0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
+04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
+050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
+04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000064C007304DB006A064C0073
+04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
+064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
+04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
+060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
+04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
+0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
+070707070707070404070707060A08070808070608080505070609080907090707070808
+090707070404040706060606060606030606030306030906060606040604060607060605
+060506070808080708090806060606060606060606060303030306060606060606060606
+07050707060507060909090606070A090907070707060607070607050507090606050707
+0707070606070808090A0907090404020207070607030604040606070302040E08070807
+070505050509090908080803060606060606060606060603070607050508060706070607
+070505050909090608060507060806080606060308060806080608070607060603060306
+040806080609060704070407060704070408060806070507050609070606050605090606
+050B09060703050B03050303050308060806080607060706070608060806080608060806
+050305030503050305030706060603080608060906090607040706070408060806080608
+06090707060308060A090906040907090709070706020607060909090902060606080809
+060908090308070607070805070809080709080706070707090905070605060306060505
+060603060606060506060506050907030606060707080608070505050A0A070707070807
+070607070906080807070908090807080707070708070909080907080907060606040606
+070506060606070606060606050609060705090907080606080606060406060303030909
+060606060505090B06050505050505050000000009060806000000000606060606060606
+060606060606060806080608060806080608060806080608060806080608060706070607
+060706070607060706070605030503000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000090609060906
+090609060906090609060906090609060906080608060806080608060806080607060706
+07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
+0707070505080808060A070708080606080805050706090709070908070708070B070707
+0505050806060707050707040707030307030B0707070704060407060707060606050608
+070708060709080707070707070507070707030303030707070707070707070707050707
+060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
+06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
+050909090808080306060606060606060606060307060706050806070607070808050505
+0A0A0A060807050706080508050706040707070708070806070607060306030605070707
+0709070804080407060704070408070807070607060609090707050705090606050C0906
+0704060B0306040406040707080508050607060706070807080708070807080705030503
+0503050305030707070603070707070907090708040706070408070807080708070B0707
+060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
+030707070607080507070907070908070707070709090507070507030707070507070307
+0607060507070507060909030707070906080608070505050B0B08070708070707060706
+0906080807070908090807080707090709070B0B080907080A0707070605060707050707
+0706070707070705050609070706090A0708060608060707050606030303090907070607
+06050A0C0705050505050505000000000907080700000000060606060606060606060606
+060606070707070707070707070707070707070707070707070707060706070607060706
+070607060706070503050300000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000009070907090709070907
+090709070907090709070907090708070807080708070807080708070706070607060706
+070007000B110B000404040509070C080305050709040504050707070707070707070705
+05090909060A080809090706090805050806090809070908080708080B08070805050509
+07070707060707040707030407030B070707070506040707090707060705070908080907
+080908070707070707060707070703030303070707070707070707070706070707060707
+0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
+090C0B070B05050303090907070407050507070704030511080708070705050505090909
+08080803070707070707070707070603080608060509070707070709090606060B0B0B07
+090705080609060906070704080708070907090707070706030603060508070807090708
+05080508060704070408070807080608060609090707060705090707060D0A070804060C
+040704040704080709060906070707070707090709070907080708070503050305030503
+05040807070603080708070907090708050806070408070807080708070B090707030807
+0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
+070808050808090807090807070707080909050707060703070707050707030707070706
+07070607070909030707070907090609080505050D0C090808080808080608070B070808
+08080908090807090708090809080B0C090A07090B080707070508070906070707070707
+07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
+070606060606060600000000090708070000000007070707070707070707070707070708
+070807080708070807080708070807080708070807080707070707070707070707070707
+070707050305030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000907090709070907090709070907
+090709070907090709070807080708070807080708070807070707070707070707000700
+0C120C00040405060A080D09030505080904050405080808080808080808080505090909
+070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
+060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
+08080808080608080808030303030808080808080808080808070808080708070C0C0C08
+08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
+0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
+0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
+07090609060808040808080809090908080808070307040706090809080A080805080508
+07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
+070408080906090608080808080809080908090809080908050305030503050305040807
+070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
+050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
+08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
+070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
+0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
+07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
+07070707000000000A080908000000000808080808080808080808080808080808080808
+080808080808080808080808080808080808080808080808080808080808080808080805
+030503000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
+0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
+050505050A080D09030606090905070506080808080808080808080606090909070D0908
+090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
+0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
+080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
+0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
+03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
+08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
+080808050908090809080908080808070307040706090809080A08080508050907090609
+060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
+090809080808080808080908090809080908090805030503050305030604080707070309
+0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
+0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
+080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
+0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
+09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
+09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
+000000000A08090900000000080808080808080808080808080808090809080908090809
+080908090809080908090809080908080808080808080808080808080808080503050300
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
+0A0809080908090909090909090909090908090809080908080008000E150E0005050606
+0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
+0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
+08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
+0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
+0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
+0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
+090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
+0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
+090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
+0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
+090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
+080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
+0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
+090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
+0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
+090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
+0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
+080A080A080A080A080A0809080908090809080908090809080908050305030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
+0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
+0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
+0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
+0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
+0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
+0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
+0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
+0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
+0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
+09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
+09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
+060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
+0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
+0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
+0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
+0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
+0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
+000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
+090A090A090A090909090909090909090909090909090905030503000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
+0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
+0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
+0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
+09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
+0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
+090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
+060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
+070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
+0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
+0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
+0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
+070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
+10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
+0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
+12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
+110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
+0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
+0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
+0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
+0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
+080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
+0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
+0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
+0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
+09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
+0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
+0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
+05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
+080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
+0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
+0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
+0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
+0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
+0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
+0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
+050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
+0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000D0A
+0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
+0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
+0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
+120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
+0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
+0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
+0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
+0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
+0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
+080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
+0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
+080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
+0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
+0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
+0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
+0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
+0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
+0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
+0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
+0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
+0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
+0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
+090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
+0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
+0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
+0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
+080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
+1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
+0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
+0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
+0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
+0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
+060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
+0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
+120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
+0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
+0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
+0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
+0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
+0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
+0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
+091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
+0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
+0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
+1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
+1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
+0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
+100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
+090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
+060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
+09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
+1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
+0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
+0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
+0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
+0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
+0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
+0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
+0C0D0C080608060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
+110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
+152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
+0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
+0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
+0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
+0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
+150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
+0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
+0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
+0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
+0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
+0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
+0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
+0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
+0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
+11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
+0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
+0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
+0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
+060806000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
+120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
+0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
+0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
+0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
+0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
+161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
+0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
+0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
+0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
+09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
+0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
+0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
+1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
+0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
+0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
+0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
+0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
+00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
+0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
+120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
+130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
+12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
+0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
+0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
+0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
+0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
+0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
+100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
+0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
+0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
+0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
+0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
+0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
+0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
+121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
+0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
+130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
+0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
+110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
+060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
+110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
+0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
+06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
+14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
+0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
+100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
+1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
+0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
+0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
+0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
+1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
+15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
+100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
+1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
+140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
+000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
+0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
+12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
+160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
+15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
+0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
+1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
+0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
+0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
+0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
+1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
+11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
+15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
+0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
+1B061111111214180F181419071213131113140B13131714121514101211111318160B11
+110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
+1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
+1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
+0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
+111111111111111111111111111111121012101210121012101210121012101210121012
+101210111011101110111011101110111011100B070B0700000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000015101510151015101510151015101610161016101610161014111411141214121412
+141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
+0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
+141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
+1811110F120D1218141414121617151111111111110F1111111109090909121212121212
+1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
+100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
+14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
+11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
+091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
+0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
+161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
+12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
+12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
+1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
+12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
+110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
+090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
+121212121212121212121214111411141114111411141114111411141114111411141112
+1112111211121112111211121112110D090D090000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000001712
+171217121712171217121712171217121712171217121512151216131613161316131613
+121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
+141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
+201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
+140F141A1616161418191713131313131311131313130909090914131313131314141414
+141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
+141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
+140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
+1A1111112020201419140D16111611161114140C16131613191519141314131209120912
+0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
+11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
+0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
+14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
+111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
+141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
+161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
+1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
+14131314120F20261411111111111111000000001A131815000000001414141414141414
+141414141414141613161316131613161316131613161316131613161316131413141314
+13141314131413141314130D090D09000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000191319131913
+19131913191319131A131A131A131A131A13171417141815181518151815181514131413
+1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
+1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
+0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
+17171715191A181414141414141114141414090909091514141414141515151515121515
+1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
+151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
+0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
+212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
+151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
+180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
+0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
+140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
+091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
+1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
+2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
+141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
+131021271512121212121212000000001B14191600000000151515151515151515151515
+151515171417141714171417141714171417141714171417141714151415141514151415
+141514151415140D090D0900000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000001A141A141A141A141A14
+1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
+15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
+111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
+181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
+1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
+25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
+1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
+1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
+1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
+101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
+0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
+110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
+24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
+17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
+16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
+1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
+1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
+1814141414141414000000001E161C180000000018181818181818181818181818181819
+161916191619161916191619161916191619161916191617161716171617161716171617
+161716100A100A0000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
+1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
+2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
+172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
+161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
+191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
+1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
+2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
+1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
+161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
+161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
+190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
+19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
+132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
+1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
+1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
+2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
+151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
+17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
+191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
+0C120C000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000211921192119211921192119211922192219
+2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
+10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
+20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
+1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
+1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
+2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
+0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
+1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
+181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
+12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
+201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
+1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
+262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
+1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
+1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
+1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
+1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
+00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
+1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
+251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
+292036240D17172029121712172020202020202020202017172929291B3222222327201D
+27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
+1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
+1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
+202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
+1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
+20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
+221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
+20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
+201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
+1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
+1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
+221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
+20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
+26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
+20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
+281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
+1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
+2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
+0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
+251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
+212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
+0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
+2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
+19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
+251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
+2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
+1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
+22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
+17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
+27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
+2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
+251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
+2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
+2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
+000000002222222222222222222222222222222520252025202520252025202520252025
+2025202520252022202220222022202220222022202220170F170F000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
+29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
+2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
+2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
+1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
+2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
+202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
+15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
+1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
+232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
+24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
+2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
+172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
+3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
+241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
+41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
+3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
+1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
+252525252525252525252525252525282328232823282328232823282328232823282328
+23282325232523252325232523252325232523180F180F00000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
+2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
+1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
+2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
+372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
+2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
+251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
+2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
+28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
+122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
+21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
+322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
+2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
+2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
+2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
+29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
+28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
+12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
+282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000003529
+35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
+29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
+3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
+4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
+3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
+302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
+303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
+2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
+3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
+22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
+2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
+1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
+2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
+28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
+2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
+332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
+3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
+2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
+30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
+2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
+3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
+2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
+35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
+26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
+39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
+352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
+36443939415951355326261616444431331E3526263434351E16267E3934393434222222
+224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
+53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
+3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
+3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
+22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
+31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
+1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
+3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
+51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
+31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
+2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
+353535393239323932393239323932393239323932393239323932343134313431343134
+313431343134312218221800000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000041324132413241324132
+41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
+340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
+2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
+3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
+4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
+5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
+48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
+434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
+4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
+2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
+1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
+2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
+5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
+3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
+383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
+40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
+383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
+3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
+373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
+373A37271827180000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000004838483848384838483848384838
+4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
+649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
+37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
+343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
+3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
+4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
+642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
+40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
+34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
+343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
+3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
+3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
+2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
+4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
+3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
+4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
+323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
+3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
+3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
+1B2A1B000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
+513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
+000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
+2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
+0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
+332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
+0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
+5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
+BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
+7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
+0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
+131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
+ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
+C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
+2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
+CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
+8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
+70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
+08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
+312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
+201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
+2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
+5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
+15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
+2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
+7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
+C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
+05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
+260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
+031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
+282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
+2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
+321625012309011406232226353436333216013426232206151416333236013426232206
+1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
+64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
+DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
+004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
+087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
+300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
+1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
+3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
+4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
+2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
+323601151406070123270E01232224353436373E01372E01353436373E01333216151406
+070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
+3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
+0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
+F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
+03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
+822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
+28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
+000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
+070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
+2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
+060306131503151326012603261326154701400340134715500350136003601379007602
+700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
+3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
+4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
+00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
+0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
+0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
+060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
+392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
+8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
+FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
+01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
+FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
+0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
+590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
+012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
+01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
+0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
+3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
+01250138004900440156016701770186010A011202032F02010200010000022F332F003F
+2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
+05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
+4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
+5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
+36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
+02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
+4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
+1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
+3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
+03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
+03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
+0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
+100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
+101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
+373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
+8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
+3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
+290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
+780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
+020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
+E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
+06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
+2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
+6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
+02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
+233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
+240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
+0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
+395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
+3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
+00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
+7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
+1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
+ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
+353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
+6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
+344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
+0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
+0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
+2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
+002322262726023534123736243332161715232E01232200073E01333216171E01073426
+272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
+290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
+E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
+282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
+4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
+0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
+012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
+0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
+592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
+0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
+0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
+ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
+26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
+908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
+92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
+3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
+0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
+294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
+5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
+35331E01333212370E01232226272E01353400333216171612073426272E012322061514
+16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
+012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
+BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
+15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
+2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
+00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
+5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
+5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
+40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
+540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
+080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
+10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
+FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
+09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
+213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
+006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
+2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
+5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
+7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
+40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
+090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
+172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
+070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
+52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
+346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
+0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
+2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
+3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
+510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
+0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
+3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
+23222635341233321617353311333E013534022726242322040706021514121716043332
+3637150E0123222427260235341237362433320417161201112E01232206151416333236
+074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
+010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
+438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
+A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
+A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
+01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
+03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
+010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
+39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
+130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
+0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
+1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
+10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
+171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
+36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
+2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
+1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
+05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
+600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
+3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
+012322242726023534123736243332161715232E01232206070E01151416171E01333236
+373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
+46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
+E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
+03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
+3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
+3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
+B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
+003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
+016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
+21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
+0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
+FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
+C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
+130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
+0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
+3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
+32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
+01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
+23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
+05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
+03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
+11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
+002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
+3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
+A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
+09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
+22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
+02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
+190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
+3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
+0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
+400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
+10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
+FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
+002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
+113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
+023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
+050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
+0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
+30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
+130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
+34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
+0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
+6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
+0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
+002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
+53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
+10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
+373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
+01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
+B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
+001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
+080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
+10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
+3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
+C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
+0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
+59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
+150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
+2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
+305D015D010E01232226270E01232224272602353412373624333216171612151002071E
+01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
+5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
+BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
+3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
+3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
+071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
+031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
+7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
+3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
+B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
+009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
+4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
+86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
+111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
+ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
+2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
+0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
+A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
+152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
+0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
+04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
+4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
+F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
+01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
+4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
+470148020205040507065706860603061400000105070457048604030414030203080144
+014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
+6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
+F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
+01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
+00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
+08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
+0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
+000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
+75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
+10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
+390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
+000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
+09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
+020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
+290839084808050208070A04010406020D00160026003600470050000600660D08090619
+062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
+30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
+FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
+000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
+08270628085606590865066A08080814000100061405040502000D050200010004000703
+040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
+ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
+E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
+000900594036030708060813082608360846085608660876080808B30202030707033506
+03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
+2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
+91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
+0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
+FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
+0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
+003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
+0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
+1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
+3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
+036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
+0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
+0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
+051602FA068C000300244016480159026902790204500360037003030303010000022F33
+2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
+0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
+0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
+001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
+3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
+353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
+BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
+5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
+FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
+3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
+141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
+31305D011406070E012322262707231133113E0133321203342623220607111E01333236
+04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
+2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
+40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
+0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
+3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
+2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
+A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
+006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
+0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
+F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
+3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
+B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
+FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
+6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
+1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
+013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
+E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
+011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
+030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
+0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
+22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
+BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
+006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
+702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
+1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
+3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
+1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
+9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
+276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
+045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
+1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
+22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
+262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
+02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
+003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
+021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
+4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
+FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
+210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
+2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
+011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
+0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
+325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
+015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
+1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
+01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
+006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
+1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
+801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
+2123113426272E01232206071E01151123113426272E012322060711231133153E013332
+16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
+9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
+5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
+040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
+123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
+4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
+047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
+1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
+002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
+C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
+00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
+0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
+32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
+33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
+51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
+D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
+701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
+F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
+321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
+BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
+C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
+05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
+305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
+2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
+091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
+6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
+2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
+07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
+14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
+0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
+393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
+221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
+02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
+0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
+3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
+02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
+FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
+09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
+3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
+B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
+047F045D000600864041260429063604390646044906062905390540055105600505061A
+000100041A03020328002703380037034A00470375017A02080005027503010305020802
+010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
+820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
+2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
+045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
+58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
+0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
+3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
+23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
+5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
+14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
+4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
+084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
+06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
+01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
+395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
+0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
+01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
+0519031705460149035800570179030902071A000100051A040304490046040200030204
+05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
+0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
+30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
+5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
+45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
+1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
+3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
+000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
+09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
+2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
+2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
+AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
+BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
+1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
+0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
+010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
+5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
+37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
+887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
+000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
+4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
+1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
+26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
+5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
+4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
+40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
+0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
+125906561278027703082020211F02870101011400120020210387040104140505067B06
+74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
+114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
+5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
+10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
+C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
+26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
+7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
+02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
+342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
+313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
+2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
+5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
+062322262735331E01333236353426270E01232224272602353412373624333216171523
+2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
+5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
+BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
+B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
+002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
+023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
+075002360032FD000117008E009601750018401103002930295029702904020029240F03
+25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
+24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
+0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
+01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
+011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
+0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
+5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
+3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
+2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
+01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
+0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
+20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
+015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
+003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
+1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
+460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
+D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
+21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
+20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
+20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
+2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
+FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
+0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
+40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
+880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
+023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
+0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
+0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
+2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
+0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
+FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
+FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
+FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
+FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
+2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
+012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
+012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
+012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
+012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
+1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
+0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
+173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
+6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
+0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
+3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
+A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
+FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
+7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
+471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
+2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
+353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
+010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
+0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
+00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
+1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
+190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
+ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
+1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
+0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
+05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
+63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
+10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
+181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
+39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
+07151E01151406070E012322262735331E01333236353426272E01272627263534363735
+2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
+2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
+5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
+845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
+072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
+323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
+563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
+0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
+DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
+0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
+5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
+BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
+39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
+303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
+2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
+333236373E0135342623353236353426272E01232206070E01151123113436373E013332
+1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
+28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
+421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
+000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
+282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
+2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
+06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
+ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
+5D005D011000212000111000212000031000212000111000212000072301231123112132
+16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
+66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
+63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
+FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
+3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
+0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
+146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
+521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
+5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
+2000031000212000111000212000050E012322243534003332161715232E012322061514
+1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
+36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
+0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
+1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
+0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
+000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
+0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
+FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
+03C3068C000300244016470156006600760004500360037003030303010000022F332F00
+2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
+000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
+5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
+04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
+0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
+030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
+2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
+0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
+6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
+000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
+05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
+0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
+5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
+112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
+B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
+0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
+090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
+1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
+0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
+ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
+3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
+63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
+453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
+216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
+E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
+441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
+AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
+ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
+2202353412333216173E01333212052E01232206151416333236373E0125342623220607
+0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
+9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
+010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
+05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
+0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
+5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
+021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
+020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
+00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
+2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
+FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
+000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
+051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
+5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
+350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
+0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
+0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
+0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
+BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
+5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
+015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
+080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
+5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
+363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
+433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
+410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
+19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
+3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
+22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
+F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
+0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
+99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
+08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
+03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
+0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
+012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
+8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
+FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
+050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
+5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
+B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
+093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
+300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
+008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
+10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
+2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
+228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
+0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
+6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
+2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
+0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
+01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
+B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
+300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
+40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
+ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
+3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
+AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
+300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
+1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
+FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
+26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
+A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
+580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
+40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
+6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
+124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
+00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
+10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
+31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
+362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
+<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
+5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
+20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
+242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
+FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
+0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
+04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
+1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
+3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
+22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
+6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
+E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
+03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
+05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
+101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
+331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
+151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
+FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
+05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
+FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
+00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
+00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
+0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
+08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
+308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
+DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
+270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
+020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
+FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
+5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
+3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
+2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
+1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
+050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
+541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
+3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
+26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
+01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
+59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
+607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
+05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
+0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
+5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
+D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
+0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
+000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
+2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
+8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
+0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
+1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
+2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
+82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
+110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
+2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
+3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
+004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
+011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
+0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
+002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
+10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
+FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
+152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
+FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
+B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
+2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
+5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
+0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
+10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
+015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
+321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
+BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
+92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
+A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
+02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
+00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
+FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
+3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
+04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
+F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
+E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
+000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
+2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
+FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
+00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
+000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
+010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
+14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
+0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
+3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
+1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
+4804470658045706680467067F047006087F057007020705000301000330036003900304
+03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
+19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
+C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
+400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
+00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
+35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
+332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
+003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
+4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
+00121203151827190119191D341502002833010133332F34030A272001022320292C0400
+0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
+12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
+331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
+37332E013534363723373312003332161715232E01232204072107210E01151416172107
+211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
+C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
+152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
+02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
+2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
+5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
+400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
+0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
+001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
+0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
+10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
+333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
+6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
+0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
+000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
+3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
+33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
+03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
+0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
+0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
+3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
+01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
+000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
+0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
+0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
+09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
+E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
+0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
+2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
+0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
+073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
+17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
+19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
+01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
+3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
+ED5D3130015D011406232226353436333216250123090114062322263534363332160134
+262322061514163332360134262322061514163332362514062322263534363332160734
+262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
+BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
+586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
+FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
+023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
+0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
+055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
+3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
+012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
+0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
+104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
+000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
+003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
+023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
+08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
+052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
+FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
+00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
+000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
+FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
+5606690566067A0573060601020350056005700503050560030103500060007000030000
+042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
+00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
+0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
+2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
+365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
+29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
+31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
+7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
+03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
+ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
+0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
+2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
+090009300902313009015009600970090309091551030C29200030000200003000600003
+D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
+343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
+065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
+1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
+22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
+A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
+00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
+0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
+8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
+1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
+222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
+790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
+64016B0274017B020606050250036003700303030360020102500060007000030000032F
+332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
+7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
+090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
+332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
+52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
+000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
+050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
+37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
+0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
+03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
+050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
+000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
+FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
+2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
+64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
+0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
+2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
+23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
+66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
+B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
+0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
+542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
+030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
+1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
+00232200353400333216172E01270527372E012735211E01173717071612013E01353426
+272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
+0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
+08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
+2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
+012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
+012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
+0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
+233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
+3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
+3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
+4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
+0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
+1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
+3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
+111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
+88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
+02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
+0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
+0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
+01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
+B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
+0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
+35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
+102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
+651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
+ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
+333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
+022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
+002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
+2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
+2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
+1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
+01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
+0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
+B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
+0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
+010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
+003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
+2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
+002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
+003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
+0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
+0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
+32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
+1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
+8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
+FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
+000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
+0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
+24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
+6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
+0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
+3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
+2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
+14062322262735331E01333236353426270E012322242735331604333236353426272E01
+272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
+9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
+9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
+4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
+28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
+3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
+3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
+0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
+4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
+1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
+262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
+15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
+0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
+4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
+0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
+0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
+068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
+0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
+03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
+04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
+70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
+01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
+1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
+213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
+95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
+9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
+2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
+0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
+FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
+3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
+35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
+0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
+570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
+0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
+20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
+003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
+005D010E012322263534363703210323012101230E0115141633323637330902062B344B
+2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
+90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
+003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
+703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
+3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
+03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
+392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
+3637362437353426272E012322060723353E01333216171E011511230E01151416333236
+373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
+1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
+7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
+24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
+0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
+062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
+34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
+0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
+ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
+33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
+6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
+2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
+04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
+090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
+5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
+3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
+03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
+B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
+34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
+3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
+1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
+31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
+343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
+03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
+5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
+B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
+012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
+012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
+0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
+030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
+005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
+030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
+32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
+C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
+010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
+1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
+0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
+07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
+2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
+05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
+2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
+33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
+0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
+00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
+0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
+00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
+00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
+068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
+059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
+00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
+00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
+FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
+3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
+012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
+012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
+18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
+5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
+3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
+FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
+0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
+18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
+5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
+5D250E01071E011514062322262735331E01333236353426272322263511233533113311
+211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
+B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
+B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
+011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
+0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
+0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
+4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
+322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
+331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
+CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
+00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
+210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
+21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
+3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
+023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
+0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
+FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
+007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
+FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
+3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
+012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
+012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
+10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
+FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
+53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
+27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
+003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
+33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
+5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
+6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
+FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
+65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
+12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
+071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
+0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
+4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
+524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
+363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
+38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
+0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
+3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
+32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
+8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
+4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
+1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
+001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
+113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
+3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
+F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
+FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
+0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
+79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
+2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
+11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
+272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
+3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
+40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
+40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
+0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
+451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
+1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
+232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
+1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
+A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
+0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
+0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
+05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
+ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
+2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
+51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
+4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
+051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
+12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
+03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
+10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
+3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
+2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
+3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
+9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
+00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
+3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
+34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
+4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
+7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
+1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
+332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
+2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
+32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
+E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
+B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
+1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
+45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
+75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
+B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
+60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
+B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
+040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
+ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
+012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
+B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
+0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
+022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
+041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
+0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
+5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
+88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
+481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
+29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
+371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
+1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
+335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
+2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
+220615141633323637330901230901140623222635343633321607342623220615141633
+3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
+B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
+68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
+006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
+120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
+FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
+2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
+3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
+0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
+A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
+05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
+1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
+400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
+CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
+0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
+8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
+00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
+0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
+0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
+CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
+0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
+06232226353436172206151416333236353426016B689393686893926949666748486766
+03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
+011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
+011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
+00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
+00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
+00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
+00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
+049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
+046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
+0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
+068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
+0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
+FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
+05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
+0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
+FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
+FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
+23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
+4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
+40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
+040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
+2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
+002132041715232E01272E012322001110002132363711213521110E01071E0115140623
+22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
+FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
+0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
+A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
+10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
+112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
+603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
+E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
+305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
+321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
+7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
+E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
+BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
+B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
+4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
+001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
+070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
+1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
+11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
+0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
+031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
+02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
+ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
+15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
+04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
+10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
+0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
+332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
+2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
+C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
+FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
+40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
+10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
+ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
+1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
+81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
+0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
+140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
+302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
+98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
+00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
+01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
+00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
+12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
+2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
+232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
+FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
+0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
+0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
+1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
+045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
+13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
+E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
+230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
+1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
+024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
+04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
+FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
+3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
+13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
+0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
+0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
+1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
+5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
+35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
+160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
+FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
+00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
+0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
+021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
+050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
+11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
+7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
+2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
+01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
+ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
+02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
+0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
+01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
+2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
+8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
+FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
+0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
+2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
+7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
+06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
+550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
+0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
+715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
+330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
+000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
+1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
+322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
+062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
+0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
+0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
+03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
+2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
+2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
+FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
+001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
+1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
+332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
+231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
+0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
+5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
+011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
+011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
+004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
+5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
+21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
+528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
+3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
+0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
+3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
+331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
+012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
+251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
+1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
+2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
+2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
+FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
+FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
+00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
+20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
+1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
+302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
+070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
+976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
+037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
+000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
+0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
+1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
+350E01232226351133111416171E0133323637113311230E011514163332363733150E01
+23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
+A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
+FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
+FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
+FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
+FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
+00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
+5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
+67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
+00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
+125906561278027703082020211F02370187010201140012002021033704870402041405
+05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
+F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
+C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
+0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
+0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
+05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
+17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
+5D212303210323012E013534363332161514060727342623220615141633323613090207
+2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
+F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
+CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
+37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
+4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
+01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
+0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
+32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
+5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
+2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
+110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
+5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
+E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
+4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
+5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
+0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
+068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
+08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
+3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
+2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
+ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
+004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
+004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
+008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
+008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
+008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
+355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
+40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
+003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
+003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
+090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
+B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
+010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
+05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
+00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
+1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
+1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
+17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
+393931305D2901353E0137233533352335333534123332161715232E012322061D012115
+21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
+016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
+000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
+07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
+1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
+31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
+06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
+9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
+FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
+040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
+003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
+39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
+3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
+4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
+094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
+003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
+01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
+00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
+010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
+D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
+0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
+010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
+0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
+0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
+090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
+33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
+803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
+00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
+059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
+0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
+0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
+5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
+010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
+0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
+1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
+003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
+4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
+019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
+2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
+0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
+370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
+2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
+BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
+05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
+00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
+4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
+012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
+FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
+05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
+002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
+0902390258020378017703020203020114000600020314040405490546067C0573060405
+030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
+65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
+09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
+0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
+40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
+0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
+213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
+FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
+010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
+2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
+000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
+A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
+0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
+293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
+0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
+D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
+71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
+090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
+061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
+FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
+021B067518011834380948096F090309192209030810030822142311141023071B180714
+108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
+C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
+1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
+359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
+2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
+641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
+041925140204160B341F02261835011608251202191214081502141C272222290F29010F
+291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
+1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
+023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
+CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
+0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
+FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
+000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
+01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
+B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
+014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
+019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
+FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
+019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
+0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
+371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
+90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
+2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
+1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
+F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
+1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
+A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
+01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
+15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
+1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
+0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
+0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
+07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
+2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
+2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
+201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
+664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
+264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
+05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
+3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
+A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
+04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
+2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
+181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
+12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
+072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
+252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
+28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
+8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
+045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
+18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
+10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
+178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
+00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
+FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
+71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
+487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
+0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
+FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
+260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
+04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
+08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
+FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
+0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
+3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
+4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
+047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
+24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
+030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
+400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
+1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
+353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
+06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
+4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
+211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
+2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
+00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
+3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
+F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
+220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
+0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
+03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
+3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
+12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
+3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
+5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
+AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
+045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
+091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
+3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
+5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
+4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
+0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
+3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
+8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
+010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
+53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
+1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
+7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
+5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
+070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
+4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
+343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
+045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
+0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
+291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
+2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
+2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
+01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
+5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
+5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
+7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
+023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
+FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
+00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
+FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
+073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
+1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
+31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
+3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
+BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
+00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
+0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
+0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
+000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
+33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
+243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
+EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
+4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
+0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
+02E207500236002C00000117008EFF240175001940130200104010501060107010050100
+100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
+000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
+28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
+3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
+013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
+2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
+0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
+401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
+052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
+000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
+1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
+FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
+2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
+35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
+C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
+FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
+07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
+5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
+01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
+646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
+07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
+0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
+191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
+1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
+E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
+5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
+8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
+030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
+1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
+09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
+0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
+10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
+FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
+052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
+71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
+011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
+554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
+B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
+021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
+6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
+000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
+0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
+392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
+9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
+9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
+093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
+09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
+35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
+350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
+392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
+2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
+2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
+0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
+912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
+18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
+FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
+3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
+0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
+392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
+0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
+06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
+F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
+A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
+151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
+0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
+FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
+14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
+0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
+40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
+0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
+030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
+10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
+305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
+D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
+000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
+6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
+1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
+4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
+5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
+FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
+0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
+5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
+051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
+01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
+210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
+030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
+FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
+00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
+000100C80000053B05D100070027401703350603010501140078090F0940095009030414
+056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
+DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
+FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
+461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
+03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
+0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
+FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
+010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
+05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
+001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
+150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
+3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
+272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
+0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
+8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
+4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
+B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
+0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
+392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
+FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
+0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
+12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
+EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
+2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
+05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
+31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
+000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
+05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
+32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
+05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
+1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
+0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
+11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
+0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
+2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
+4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
+150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
+002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
+113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
+EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
+23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
+560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
+ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
+3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
+C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
+FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
+34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
+1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
+3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
+01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
+F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
+676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
+000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
+03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
+6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
+2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
+03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
+FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
+04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
+0506060F113440030103030012340F03000519150904060309045F050105120114007821
+0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
+C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
+04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
+026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
+0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
+6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
+223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
+ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
+37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
+4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
+B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
+11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
+00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
+12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
+35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
+302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
+36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
+4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
+045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
+19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
+10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
+FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
+1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
+332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
+3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
+F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
+045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
+E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
+37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
+0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
+0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
+39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
+3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
+33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
+1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
+01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
+631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
+10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
+06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
+5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
+1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
+26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
+49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
+546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
+110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
+0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
+0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
+01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
+0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
+04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
+190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
+2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
+FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
+94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
+1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
+3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
+001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
+2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
+01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
+2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
+003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
+1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
+0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
+201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
+1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
+4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
+030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
+0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
+012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
+023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
+0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
+31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
+006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
+011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
+210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
+FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
+014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
+0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
+013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
+0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
+D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
+003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
+011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
+0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
+0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
+33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
+16171133113E0133321203342623220607111E0133323605112E01232206151416333236
+064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
+2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
+DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
+FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
+08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
+0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
+2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
+0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
+092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
+171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
+CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
+1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
+10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
+045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
+0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
+5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
+1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
+000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
+0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
+FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
+0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
+FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
+2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
+05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
+402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
+3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
+1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
+334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
+0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
+090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
+5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
+037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
+FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
+0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
+061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
+03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
+ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
+2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
+BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
+000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
+3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
+10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
+15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
+D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
+FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
+0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
+09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
+ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
+3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
+AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
+37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
+250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
+59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
+2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
+ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
+0607112311233533353315211521113E01333216171416151406070602070E01232A0127
+35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
+020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
+FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
+0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
+006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
+193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
+090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
+2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
+3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
+0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
+021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
+0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
+30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
+3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
+35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
+31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
+01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
+64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
+183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
+03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
+06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
+FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
+F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
+012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
+3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
+334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
+00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
+010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
+ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
+3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
+63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
+0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
+FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
+0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
+0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
+03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
+0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
+2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
+331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
+FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
+0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
+05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
+330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
+B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
+3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
+000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
+0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
+0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
+2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
+0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
+0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
+C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
+0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
+1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
+0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
+B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
+D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
+000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
+333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
+05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
+ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
+05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
+166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
+2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
+86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
+1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
+0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
+16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
+121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
+0E012322262735331E013332363534262B01353332363534262322060723353E01333216
+15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
+964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
+57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
+05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
+ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
+0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
+1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
+092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
+262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
+75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
+373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
+000100F3023503A505DA000600414025560101030100012A020203630073000200000351
+0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
+8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
+021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
+0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
+04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
+140623222635343637352E0135343633321615140607151E01033426232206151416171E
+01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
+5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
+64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
+304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
+0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
+1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
+5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
+0E01232224272602353412373624333216171E01173E013534262735331E011514060110
+0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
+144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
+630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
+DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
+21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
+2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
+302B011000232200111000333216173332363534262735331E01151406071E0107342623
+22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
+9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
+D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
+0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
+050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
+26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
+052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
+F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
+000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
+051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
+050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
+350E01232226351133111416171E0133323637113332363534262735331E011514062B01
+0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
+8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
+4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
+09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
+353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
+F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
+8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
+001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
+004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
+0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
+392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
+00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
+0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
+103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
+3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
+0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
+0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
+370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
+2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
+30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
+9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
+44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
+200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
+40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
+002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
+2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
+192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
+912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
+0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
+002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
+A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
+0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
+8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
+1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
+010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
+13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
+0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
+D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
+22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
+42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
+03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
+11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
+D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
+33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
+A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
+A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
+00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
+020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
+5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
+4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
+00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
+0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
+0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
+D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
+07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
+F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
+6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
+6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
+11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
+71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
+9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
+001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
+6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
+0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
+222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
+58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
+02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
+CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
+0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
+5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
+06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
+231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
+4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
+1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
+E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
+0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
+5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
+370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
+6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
+2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
+06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
+0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
+143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
+5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
+071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
+211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
+001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
+FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
+FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
+1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
+BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
+00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
+04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
+0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
+030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
+025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
+04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
+3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
+38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
+024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
+041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
+0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
+02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
+0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
+00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
+0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
+055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
+041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
+FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
+FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
+252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
+001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
+FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
+002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
+000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
+B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
+401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
+068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
+2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
+0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
+B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
+400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
+00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
+00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
+FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
+00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
+252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
+2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
+000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
+000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
+01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
+5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
+031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
+0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
+01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
+02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
+018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
+05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
+0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
+080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
+090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
+E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
+0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
+005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
+501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
+024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
+0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
+05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
+252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
+201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
+01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
+FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
+1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
+024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
+3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
+212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
+007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
+0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
+024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
+35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
+002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
+400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
+024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
+008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
+02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
+0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
+006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
+FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
+0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
+080102360038000001170256006201750012400B01502301010023220C00252B35005D35
+FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
+00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
+0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
+28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
+0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
+5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
+27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
+01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
+00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
+011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
+011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
+024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
+FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
+0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
+FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
+2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
+2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
+4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
+401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
+005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
+07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
+FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
+006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
+4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
+2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
+ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
+1123350E01232202113436373E0133321617352135213533153301112E01232206151416
+3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
+B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
+2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
+0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
+24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
+5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
+16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
+1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
+17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
+0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
+01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
+011401150116011701180119011A011B011C011D011E011F012001210122012301240125
+0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
+01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
+014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
+015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
+016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
+0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
+01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
+01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
+01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
+01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
+01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
+01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
+01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
+0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
+02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
+023402350236023702380239023A023B023C023D023E023F024002410242024302440245
+0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
+02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
+026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
+027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
+028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
+02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
+02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
+02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
+02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
+02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
+02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
+030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
+031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
+0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
+03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
+035403550356035703580359035A035B035C035D035E035F036003610362036303640365
+0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
+03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
+038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
+039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
+03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
+03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
+03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
+03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
+03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
+04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
+041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
+042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
+043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
+0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
+04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
+047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
+6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
+7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
+696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
+706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
+6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
+676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
+67726561746572087175657374696F6E0261740141014201430144014501460147014801
+49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
+627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
+7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
+650166016701680169016A016B016C016D016E016F017001710172017301740175017601
+7701780179017A0962726163656C656674036261720A627261636572696768740A617363
+696974696C646509416469657265736973054172696E670843636564696C6C6106456163
+757465064E74696C6465094F646965726573697309556469657265736973066161637574
+65066167726176650B6163697263756D666C657809616469657265736973066174696C64
+65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
+756D666C65780965646965726573697306696163757465066967726176650B6963697263
+756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
+650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
+65067567726176650B7563697263756D666C657809756469657265736973066461676765
+72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
+74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
+707972696768740974726164656D61726B056163757465086469657265736973086E6F74
+657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
+657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
+6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
+0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
+6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
+6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
+656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
+697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
+61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
+740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
+650979646965726573697309596469657265736973086672616374696F6E044575726F0D
+6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
+616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
+73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
+6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
+617665064961637574650B4963697263756D666C65780949646965726573697306496772
+617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
+0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
+6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
+6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
+4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
+6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
+650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
+72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
+6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
+72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
+61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
+76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
+6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
+656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
+7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
+63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
+7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
+65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
+61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
+065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
+0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
+68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
+0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
+6F6E64096166696936313234380961666969363132383906483232303733064831383534
+3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
+6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
+63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
+646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
+740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
+0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
+07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
+656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
+636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
+6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
+67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
+696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
+7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
+6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
+5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
+7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
+757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
+7368616375746509616E6F74656C65696106576772617665067767726176650657616375
+746506776163757465095764696572657369730977646965726573697306596772617665
+067967726176650D71756F74657265766572736564097261646963616C65780961666969
+303839343109657374696D61746564096F6E656569676874680C74687265656569676874
+68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
+656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
+6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
+7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
+730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
+04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
+707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
+69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
+696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
+7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
+6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
+746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
+63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
+610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
+6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
+313030323309616669693130303531096166696931303035320961666969313030353309
+616669693130303534096166696931303035350961666969313030353609616669693130
+303537096166696931303035380961666969313030353909616669693130303630096166
+696931303036310961666969313030363209616669693130313435096166696931303031
+370961666969313030313809616669693130303139096166696931303032300961666969
+313030323109616669693130303232096166696931303032340961666969313030323509
+616669693130303236096166696931303032370961666969313030323809616669693130
+303239096166696931303033300961666969313030333109616669693130303332096166
+696931303033330961666969313030333409616669693130303335096166696931303033
+360961666969313030333709616669693130303338096166696931303033390961666969
+313030343009616669693130303431096166696931303034320961666969313030343309
+616669693130303434096166696931303034350961666969313030343609616669693130
+303437096166696931303034380961666969313030343909616669693130303635096166
+696931303036360961666969313030363709616669693130303638096166696931303036
+390961666969313030373009616669693130303732096166696931303037330961666969
+313030373409616669693130303735096166696931303037360961666969313030373709
+616669693130303738096166696931303037390961666969313030383009616669693130
+303831096166696931303038320961666969313030383309616669693130303834096166
+696931303038350961666969313030383609616669693130303837096166696931303038
+380961666969313030383909616669693130303930096166696931303039310961666969
+313030393209616669693130303933096166696931303039340961666969313030393509
+616669693130303936096166696931303039370961666969313030373109616669693130
+303939096166696931303130300961666969313031303109616669693130313032096166
+696931303130330961666969313031303409616669693130313035096166696931303130
+360961666969313031303709616669693130313038096166696931303130390961666969
+313031313009616669693130313933096166696931303035300961666969313030393809
+616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
+74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
+7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
+696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
+35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
+6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
+096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
+393108676C79706835393208676C79706835393308676C79706835393408676C79706835
+393508676C79706835393608676C79706835393708676C79706835393808676C79706835
+393908676C79706836303008676C79706836303108676C79706836303208676C79706836
+303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
+6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
+63697263756D666C65786163757465104163697263756D666C6578677261766510616369
+7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
+63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
+106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
+77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
+7265766561637574650B41627265766567726176650B61627265766567726176650F4162
+72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
+74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
+657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
+6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
+63756D666C65786163757465106563697263756D666C6578616375746510456369726375
+6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
+6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
+697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
+63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
+49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
+62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
+70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
+74616671616D617473056869726971057473657265057365676F6C057061746168067161
+6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
+0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
+616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
+740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
+6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
+70650270650A66696E616C747361646905747361646903716F660472657368047368696E
+0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
+73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
+740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
+686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
+68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
+7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
+7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
+6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
+676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
+657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
+6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
+0870656461676573680B747361646964616765736809716F666461676573680A72657368
+6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
+62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
+6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
+746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
+380961666969353734303309616669693537343037096166696935373430390961666969
+353734343009616669693537343531096166696935373435320961666969353734353309
+616669693537343534096166696935373435350961666969353734353609616669693537
+343537096166696935373435380961666969353733393209616669693537333933096166
+696935373339340961666969353733393509616669693537333936096166696935373339
+370961666969353733393809616669693537333939096166696935373430300961666969
+353734303109616669693537333831096166696935373436310961666969363331363709
+616669693537343539096166696935373534330961666969353735333409616669693537
+343934096166696936323834330961666969363238343409616669693632383435096166
+696936343234300961666969363432343109616669693633393534096166696935373338
+320961666969363432343209616669693632383831096166696935373530340961666969
+353733363909616669693537333730096166696935373337310961666969353733373209
+616669693537333733096166696935373337340961666969353733373509616669693537
+333931096166696935373437310961666969353734363009616669693532323538096166
+696935373530360961666969363239353809616669693632393536096166696935323935
+370961666969353735303509616669693632383839096166696936323838370961666969
+363238383809616669693537353037096166696936323936310961666969363239353909
+616669693632393630096166696935373530380961666969363239363209616669693537
+353637096166696936323936340961666969353233303509616669693532333036096166
+696935373530390961666969363239363709616669693632393635096166696936323936
+360961666969353735353509616669693532333634096166696936333735330961666969
+363337353409616669693633373539096166696936333736330961666969363337393509
+616669693632383931096166696936333830380961666969363239333809616669693633
+383130096166696936323934320961666969363239343709616669693633383133096166
+696936333832330961666969363338323409616669693633383333096166696936333834
+340961666969363238383209616669693632383833096166696936323838340961666969
+363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
+4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
+7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
+106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
+7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
+696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
+62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
+0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
+6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
+64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
+62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
+<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
+6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
+686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
+55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
+08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
+626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
+696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
+0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
+FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
+FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
+FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
+FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
+FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
+FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
+FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
+FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
+FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
+FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
+FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
+FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
+FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
+FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
+FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
+FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
+FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
+FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
+FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
+FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
+FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
+FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
+FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
+FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
+FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
+FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
+FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
+FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
+FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
+FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
+FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
+FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
+FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
+FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
+FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
+FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
+FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
+FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
+FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
+FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
+FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
+FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
+FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
+FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
+FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
+FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
+FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
+FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
+FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
+FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
+FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
+FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
+FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
+FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
+FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
+0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
+FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
+FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
+FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
+FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
+FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
+FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
+FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
+FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
+FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
+FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
+FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
+FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
+FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
+FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
+FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
+FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
+FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
+FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
+FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
+FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
+FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
+FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
+FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
+FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
+FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
+FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
+FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
+FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
+FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
+FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
+006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
+FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
+FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
+06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
+05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
+801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
+2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
+3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
+010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
+74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
+55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
+526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
+2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
+30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
+5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
+6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
+70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
+4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
+819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
+2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
+B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
+1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
+6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
+3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
+5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
+16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
+C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
+ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
+1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
+55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
+676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
+040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
+695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
+3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
+74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
+72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
+41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
+55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
+657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
+8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
+F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
+D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
+E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
+006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
+2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
+5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
+A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
+7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
+0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
+20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
+536F667477617265205075626C697368657273204341301E170D39383034313630303030
+30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
+65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
+55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
+626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
+6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
+41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
+73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
+207632310B3009060355040613025553311330110603550408130A57617368696E67746F
+6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
+6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
+436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
+8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
+D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
+6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
+DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
+4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
+7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
+A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
+E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
+0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
+CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
+040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
+6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
+0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
+0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
+0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
+636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
+66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
+642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
+6520566572695369676E2043657274696669636174696F6E205072616374696365205374
+6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
+20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
+733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
+50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
+20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
+204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
+6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
+732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
+41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
+473A2054484520555345204F462054484953204345525449464943415445204953205354
+524943544C59205355424A45435420544F205448450A564552495349474E204345525449
+4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
+5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
+504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
+494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
+204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
+4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
+49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
+414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
+656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
+657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
+616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
+7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
+2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
+69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
+80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
+2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
+3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
+43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
+286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
+30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
+25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
+AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
+228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
+2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
+08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
+3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
+65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
+082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
+8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
+1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
+2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
+006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
+727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
+B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
+CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
+E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
+836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
+88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
+86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
+0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
+8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
+0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
+0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
+2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
+132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
+69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
+2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
+0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
+2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
+86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
+BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
+41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
+DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
+] def
+/CharStrings 893 dict dup begin
+/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
+/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
+/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
+/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
+/period 17 def /slash 18 def /zero 19 def /one 20 def
+/two 21 def /three 22 def /four 23 def /five 24 def
+/six 25 def /seven 26 def /eight 27 def /nine 28 def
+/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
+/greater 33 def /question 34 def /at 35 def /A 36 def
+/B 37 def /C 38 def /D 39 def /E 40 def
+/F 41 def /G 42 def /H 43 def /I 44 def
+/J 45 def /K 46 def /L 47 def /M 48 def
+/N 49 def /O 50 def /P 51 def /Q 52 def
+/R 53 def /S 54 def /T 55 def /U 56 def
+/V 57 def /W 58 def /X 59 def /Y 60 def
+/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
+/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
+/b 69 def /c 70 def /d 71 def /e 72 def
+/f 73 def /g 74 def /h 75 def /i 76 def
+/j 77 def /k 78 def /l 79 def /m 80 def
+/n 81 def /o 82 def /p 83 def /q 84 def
+/r 85 def /s 86 def /t 87 def /u 88 def
+/v 89 def /w 90 def /x 91 def /y 92 def
+/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
+/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
+/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
+/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
+/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
+/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
+/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
+/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
+/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
+/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
+/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
+/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
+/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
+/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
+/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
+/summation 153 def /product 154 def /pi1 155 def /integral 156 def
+/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
+/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
+/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
+/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
+/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
+/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
+/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
+/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
+/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
+/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
+/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
+/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
+/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
+/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
+/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
+/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
+/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
+/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
+/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
+/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
+/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
+/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
+/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
+/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
+/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
+/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
+/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
+/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
+/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
+/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
+/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
+/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
+/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
+/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
+/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
+/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
+/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
+/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
+/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
+/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
+/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
+/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
+/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
+/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
+/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
+/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
+/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
+/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
+/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
+/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
+/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
+/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
+/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
+/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
+/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
+/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
+/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
+/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
+/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
+/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
+/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
+/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
+/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
+/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
+/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
+/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
+/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
+/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
+/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
+/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
+/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
+/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
+/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
+/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
+/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
+/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
+/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
+/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
+/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
+/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
+/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
+/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
+/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
+/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
+/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
+/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
+/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
+/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
+/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
+/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
+/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
+/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
+/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
+/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
+/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
+/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
+/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
+/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
+/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
+/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
+/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
+/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
+/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
+/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
+/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
+/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
+/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
+/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
+/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
+/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
+/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
+/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
+/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
+/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
+/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
+/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
+/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
+/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
+/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
+/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
+/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
+/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
+/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
+/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
+/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
+/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
+/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
+/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
+/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
+/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
+/vav 677 def /zayin 678 def /het 679 def /tet 680 def
+/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
+/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
+/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
+/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
+/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
+/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
+/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
+/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
+/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
+/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
+/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
+/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
+/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
+/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
+/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
+/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
+/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
+/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
+/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
+/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
+/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
+/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
+/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
+/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
+/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
+/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
+/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
+/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
+/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
+/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
+/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
+/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
+/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
+/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
+/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
+/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
+/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
+/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
+/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
+/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
+/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
+/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
+/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
+/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
+/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
+/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
+/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
+/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
+/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
+/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
+/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
+/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
+/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
+
+end readonly def
+FontName currentdict end definefont pop
+%%EndFont
+%%EndProlog
+mpldict begin
+13.5 175.5 translate
+585 441 0 0 clipbox
+% polygon
+1.000 setgray
+1.000 setlinewidth
+0 setlinejoin
+2 setlinecap
+[] 0 setdash
+0 0 m
+0 441 l
+585 441 l
+585 0 l
+closepath
+gsave
+fill
+grestore
+stroke
+% polygon
+0.000 setgray
+73.125 44.1 m
+73.125 396.9 l
+526.5 396.9 l
+526.5 44.1 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 44.625 l
+91.260 46.237 l
+100.328 49.043 l
+109.395 53.206 l
+118.463 58.937 l
+127.530 66.464 l
+136.597 76.012 l
+145.665 87.777 l
+154.733 101.897 l
+163.800 118.431 l
+172.868 137.336 l
+181.935 158.456 l
+191.002 181.511 l
+200.070 206.100 l
+209.138 231.707 l
+218.205 257.720 l
+227.273 283.450 l
+236.340 308.160 l
+245.408 331.100 l
+254.475 351.539 l
+263.543 368.804 l
+272.610 382.309 l
+281.678 391.584 l
+290.745 396.306 l
+299.812 396.306 l
+308.880 391.584 l
+317.948 382.309 l
+327.015 368.804 l
+336.083 351.539 l
+345.150 331.100 l
+354.218 308.160 l
+363.285 283.450 l
+372.353 257.720 l
+381.420 231.707 l
+390.488 206.100 l
+399.555 181.511 l
+408.623 158.456 l
+417.690 137.336 l
+426.758 118.431 l
+435.825 101.897 l
+444.893 87.777 l
+453.960 76.012 l
+463.028 66.464 l
+472.095 58.937 l
+481.163 53.206 l
+490.230 49.043 l
+499.298 46.237 l
+508.365 44.625 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+0 setlinecap
+[6 6] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 58.500 l
+91.260 72.900 l
+100.328 87.300 l
+109.395 101.700 l
+118.463 116.100 l
+127.530 130.500 l
+136.597 144.900 l
+145.665 159.300 l
+154.733 173.700 l
+163.800 188.100 l
+172.868 202.500 l
+181.935 216.900 l
+191.002 231.300 l
+200.070 245.700 l
+209.138 260.100 l
+218.205 274.500 l
+227.273 288.900 l
+236.340 303.300 l
+245.408 317.700 l
+254.475 332.100 l
+263.543 346.500 l
+272.610 360.900 l
+281.678 375.300 l
+290.745 389.700 l
+299.812 389.700 l
+308.880 375.300 l
+317.948 360.900 l
+327.015 346.500 l
+336.083 332.100 l
+345.150 317.700 l
+354.218 303.300 l
+363.285 288.900 l
+372.353 274.500 l
+381.420 260.100 l
+390.488 245.700 l
+399.555 231.300 l
+408.623 216.900 l
+417.690 202.500 l
+426.758 188.100 l
+435.825 173.700 l
+444.893 159.300 l
+453.960 144.900 l
+463.028 130.500 l
+472.095 116.100 l
+481.163 101.700 l
+490.230 87.300 l
+499.298 72.900 l
+508.365 58.500 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+[3 5 1 5] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 44.100 m
+82.192 45.548 l
+91.260 49.869 l
+100.328 56.992 l
+109.395 66.799 l
+118.463 79.131 l
+127.530 93.783 l
+136.597 110.516 l
+145.665 129.056 l
+154.733 149.096 l
+163.800 170.309 l
+172.868 192.347 l
+181.935 214.846 l
+191.002 237.438 l
+200.070 259.753 l
+209.138 281.422 l
+218.205 302.092 l
+227.273 321.421 l
+236.340 339.094 l
+245.408 354.819 l
+254.475 368.339 l
+263.543 379.431 l
+272.610 387.913 l
+281.678 393.647 l
+290.745 396.538 l
+299.812 396.538 l
+308.880 393.647 l
+317.948 387.913 l
+327.015 379.431 l
+336.083 368.339 l
+345.150 354.819 l
+354.218 339.094 l
+363.285 321.421 l
+372.353 302.092 l
+381.420 281.422 l
+390.488 259.753 l
+399.555 237.438 l
+408.623 214.846 l
+417.690 192.347 l
+426.758 170.309 l
+435.825 149.096 l
+444.893 129.056 l
+453.960 110.516 l
+463.028 93.783 l
+472.095 79.131 l
+481.163 66.799 l
+490.230 56.992 l
+499.298 49.869 l
+508.365 45.548 l
+517.433 44.100 l
+stroke
+grestore
+% draw_lines
+[1 3] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 72.324 m
+82.192 73.656 l
+91.260 77.632 l
+100.328 84.185 l
+109.395 93.207 l
+118.463 104.552 l
+127.530 118.033 l
+136.597 133.427 l
+145.665 150.483 l
+154.733 168.921 l
+163.800 188.437 l
+172.868 208.711 l
+181.935 229.410 l
+191.002 250.195 l
+200.070 270.724 l
+209.138 290.661 l
+218.205 309.676 l
+227.273 327.460 l
+236.340 343.718 l
+245.408 358.186 l
+254.475 370.624 l
+263.543 380.828 l
+272.610 388.632 l
+281.678 393.907 l
+290.745 396.567 l
+299.812 396.567 l
+308.880 393.907 l
+317.948 388.632 l
+327.015 380.828 l
+336.083 370.624 l
+345.150 358.186 l
+354.218 343.718 l
+363.285 327.460 l
+372.353 309.676 l
+381.420 290.661 l
+390.488 270.724 l
+399.555 250.195 l
+408.623 229.410 l
+417.690 208.711 l
+426.758 188.437 l
+435.825 168.921 l
+444.893 150.483 l
+453.960 133.427 l
+463.028 118.033 l
+472.095 104.552 l
+481.163 93.207 l
+490.230 84.185 l
+499.298 77.632 l
+508.365 73.656 l
+517.433 72.324 l
+stroke
+grestore
+% text
+/Verdana findfont
+18.000 scalefont
+setfont
+144.812 403.956 m
+0 4 rmoveto
+(Smoothing window in time-domain) show
+% text
+/Verdana findfont
+14.000 scalefont
+setfont
+69.469 30.1 m
+(0) show
+% line
+0.500 setlinewidth
+[] 0 setdash
+163.800 44.100 m 163.800 48.100 l
+stroke
+% line
+163.800 392.900 m 163.800 396.900 l
+stroke
+% text
+155.769 30.1 m
+(10) show
+% line
+254.475 44.100 m 254.475 48.100 l
+stroke
+% line
+254.475 392.900 m 254.475 396.900 l
+stroke
+% text
+246.444 30.1 m
+(20) show
+% line
+345.150 44.100 m 345.150 48.100 l
+stroke
+% line
+345.150 392.900 m 345.150 396.900 l
+stroke
+% text
+337.619 30.1 m
+(30) show
+% line
+435.825 44.100 m 435.825 48.100 l
+stroke
+% line
+435.825 392.900 m 435.825 396.900 l
+stroke
+% text
+427.731 30.1 m
+(40) show
+% text
+518.844 30.1 m
+(50) show
+% text
+296.656 17.1 m
+(n) show
+% text
+47.812 39.1 m
+(0.0) show
+% line
+73.125 114.660 m 77.125 114.660 l
+stroke
+% line
+522.500 114.660 m 526.500 114.660 l
+stroke
+% text
+47.875 109.66 m
+(0.2) show
+% line
+73.125 185.220 m 77.125 185.220 l
+stroke
+% line
+522.500 185.220 m 526.500 185.220 l
+stroke
+% text
+47.125 180.22 m
+(0.4) show
+% line
+73.125 255.780 m 77.125 255.780 l
+stroke
+% line
+522.500 255.780 m 526.500 255.780 l
+stroke
+% text
+47.812 250.78 m
+(0.6) show
+% line
+73.125 326.340 m 77.125 326.340 l
+stroke
+% line
+522.500 326.340 m 526.500 326.340 l
+stroke
+% text
+47.797 321.34 m
+(0.8) show
+% text
+48.062 391.9 m
+(1.0) show
+% polygon
+1.000 setlinewidth
+2 setlinecap
+214.291 51.156 m
+214.291 161.736 l
+385.334 161.736 l
+385.334 51.156 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+230.344 143.521 m
+237.901 143.521 l
+245.457 143.521 l
+253.013 143.521 l
+stroke
+% draw_lines
+0 setlinecap
+[6 6] 0 setdash
+230.344 121.605 m
+237.901 121.605 l
+245.457 121.605 l
+253.013 121.605 l
+stroke
+% draw_lines
+[3 5 1 5] 0 setdash
+230.344 97.688 m
+237.901 97.688 l
+245.457 97.688 l
+253.013 97.688 l
+stroke
+% draw_lines
+[1 3] 0 setdash
+230.344 71.371 m
+237.901 71.371 l
+245.457 71.371 l
+253.013 71.371 l
+stroke
+% text
+/Verdana findfont
+24.000 scalefont
+setfont
+262.081 134.521 m
+(Blackman) show
+% text
+262.081 112.605 m
+(Bartlett) show
+% text
+262.081 86.688 m
+0 5 rmoveto
+(Hanning) show
+% text
+262.081 60.371 m
+0 5 rmoveto
+(Hamming) show
+
+end
+showpage
diff --git a/numpy/doc/numpybook/Figures/fig2.eps b/numpy/doc/numpybook/Figures/fig2.eps
new file mode 100644
index 000000000..20797dc71
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/fig2.eps
@@ -0,0 +1,4921 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: fig2.eps
+%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
+%%CreationDate: Fri Jan 6 00:11:32 2006
+%%BoundingBox: 13 175 598 616
+%%EndComments
+%%BeginProlog
+/mpldict 7 dict def
+mpldict begin
+/m { moveto } bind def
+/l { lineto } bind def
+/r { rlineto } bind def
+/box {
+m
+1 index 0 r
+0 exch r
+neg 0 r
+closepath
+} bind def
+/clipbox {
+box
+clip
+newpath
+} bind def
+/ellipse {
+newpath
+matrix currentmatrix 7 1 roll
+translate
+scale
+0 0 1 5 3 roll arc
+setmatrix
+closepath
+} bind def
+%%BeginFont: Verdana
+%!PS-TrueType-1.0-1.0
+8 dict begin
+/FontName /Verdana def
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 42 def
+/Encoding StandardEncoding def
+/FontBBox [-102 -423 2963 2049] def
+/PaintType 0 def
+/FontInfo 7 dict dup begin
+/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
+/FamilyName (Verdana) def
+/FullName (Verdana) def
+/version (Version 2.35) def
+/isFixedPitch false def
+/UnderlinePosition -180 def
+/UnderlineThickness 120 def
+end readonly def
+/sfnts [
+<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
+00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
+000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
+6670676DEE371553000021740000013867617370001700090000021000000010676C7966
+01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
+0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
+00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
+6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
+C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
+16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
+00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
+00000000000000000000037D00010000037D00620007006B000500020010002F00380000
+0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
+02A70800020B0604030504040204000002870000000000000000000000004D5320200040
+0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
+FFFF00030000002801E60001000000000000004300000001000000000001000700430001
+0000000000020007004A0001000000000003002F00510001000000000004000700800001
+000000000005000C00870001000000000006000700930001000000000007002F009A0003
+000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
+000104070002001000F10003000104080002001001010003000104090000008601110003
+000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
+000104090004000E021100030001040900050018021F0003000104090006000E02370003
+000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
+0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
+000104130002001202E50003000104140002000C02F70003000104150002001003030003
+000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
+0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
+0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
+00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
+61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
+6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
+736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
+6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
+616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
+6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
+6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
+BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
+6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
+66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
+6C0020005200690067006800740073002000520065007300650072007600650064005600
+65007200640061006E00610052006500670075006C00610072004D006900630072006F00
+73006F00660074003A00560065007200640061006E006100200052006500670075006C00
+610072003A00560065007200730069006F006E0020003100200028004D00690063007200
+6F0073006F00660074002900560065007200640061006E00610056006500720073006900
+6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
+61006E006100200069007300200061002000740072006100640065006D00610072006B00
+20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
+6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
+61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
+6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
+6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
+47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
+4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
+740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
+61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
+000001060000010000000000000001020000000200000000000000000000000000000001
+0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
+25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
+494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
+6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
+909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
+B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
+D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
+02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
+1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
+21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
+25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
+03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
+203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
+2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
+FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
+0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
+E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
+DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
+000002380000023800000000000000000000023800000242026800000000000000000000
+000002B203640368037600000000000000000000000000000000036A0000036A00000000
+000000000000000000000000000000000358000003580000000000000000000000000000
+0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
+00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
+00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
+00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
+0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
+0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
+010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
+014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
+015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
+01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
+016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
+00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
+0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
+00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
+01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
+01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
+01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
+01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
+026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
+027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
+03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
+036403650366036703680369036A036B036C036D036E036F037003710191019203740375
+037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
+00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
+0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
+04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
+0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
+122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
+17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
+1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
+2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
+245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
+2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
+316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
+361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
+3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
+3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
+40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
+44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
+48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
+4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
+4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
+54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
+575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
+5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
+5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
+62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
+65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
+67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
+6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
+705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
+73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
+78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
+7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
+82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
+87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
+8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
+9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
+95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
+976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
+98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
+9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
+9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
+9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
+0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
+740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
+110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
+B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
+010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
+01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
+0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
+320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
+111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
+230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
+100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
+010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
+111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
+100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
+11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
+0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
+282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
+0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
+28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
+00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
+000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
+0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
+001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
+0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
+0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
+002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
+0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
+0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
+003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
+0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
+0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
+004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
+0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
+005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
+0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
+0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
+006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
+0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
+0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
+007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
+0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
+008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
+0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
+0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
+009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
+00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
+00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
+00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
+00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
+00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
+00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
+00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
+00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
+00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
+00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
+00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
+00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
+00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
+00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
+00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
+00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
+B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
+026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
+04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
+0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
+B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
+092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
+4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
+8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
+C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
+15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
+480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
+1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
+1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
+BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
+0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
+004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
+B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
+2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
+26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
+45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
+45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
+60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
+042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
+8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
+468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
+8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
+441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
+0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
+00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
+00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
+009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
+006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
+0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
+0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
+006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
+008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
+045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
+0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
+022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
+0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
+0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
+057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
+058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
+04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
+03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
+02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
+04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
+04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
+05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
+04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
+0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
+051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
+0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
+064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
+068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
+03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
+0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
+0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
+03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
+050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
+064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
+05160113051602210516012D05160161051601560516019F05160132047E001802460018
+05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
+04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
+0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
+05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
+062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
+047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
+04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
+04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
+0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
+065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
+047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
+04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
+050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
+051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
+035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
+05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
+036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
+05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
+0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
+07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
+05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
+057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
+057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
+05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
+06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
+04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
+04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
+02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
+05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
+060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
+060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
+0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
+06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
+03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
+059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
+04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
+06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
+02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
+080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
+045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
+0000020900000221000001540000021D0516013605160003051601360516012505160142
+051601420516014205160125051602090516013605160142051601420516014205160142
+051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
+0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
+04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
+050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
+04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000064C007304DB006A064C0073
+04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
+064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
+04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
+060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
+04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
+0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
+070707070707070404070707060A08070808070608080505070609080907090707070808
+090707070404040706060606060606030606030306030906060606040604060607060605
+060506070808080708090806060606060606060606060303030306060606060606060606
+07050707060507060909090606070A090907070707060607070607050507090606050707
+0707070606070808090A0907090404020207070607030604040606070302040E08070807
+070505050509090908080803060606060606060606060603070607050508060706070607
+070505050909090608060507060806080606060308060806080608070607060603060306
+040806080609060704070407060704070408060806070507050609070606050605090606
+050B09060703050B03050303050308060806080607060706070608060806080608060806
+050305030503050305030706060603080608060906090607040706070408060806080608
+06090707060308060A090906040907090709070706020607060909090902060606080809
+060908090308070607070805070809080709080706070707090905070605060306060505
+060603060606060506060506050907030606060707080608070505050A0A070707070807
+070607070906080807070908090807080707070708070909080907080907060606040606
+070506060606070606060606050609060705090907080606080606060406060303030909
+060606060505090B06050505050505050000000009060806000000000606060606060606
+060606060606060806080608060806080608060806080608060806080608060706070607
+060706070607060706070605030503000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000090609060906
+090609060906090609060906090609060906080608060806080608060806080607060706
+07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
+0707070505080808060A070708080606080805050706090709070908070708070B070707
+0505050806060707050707040707030307030B0707070704060407060707060606050608
+070708060709080707070707070507070707030303030707070707070707070707050707
+060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
+06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
+050909090808080306060606060606060606060307060706050806070607070808050505
+0A0A0A060807050706080508050706040707070708070806070607060306030605070707
+0709070804080407060704070408070807070607060609090707050705090606050C0906
+0704060B0306040406040707080508050607060706070807080708070807080705030503
+0503050305030707070603070707070907090708040706070408070807080708070B0707
+060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
+030707070607080507070907070908070707070709090507070507030707070507070307
+0607060507070507060909030707070906080608070505050B0B08070708070707060706
+0906080807070908090807080707090709070B0B080907080A0707070605060707050707
+0706070707070705050609070706090A0708060608060707050606030303090907070607
+06050A0C0705050505050505000000000907080700000000060606060606060606060606
+060606070707070707070707070707070707070707070707070707060706070607060706
+070607060706070503050300000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000009070907090709070907
+090709070907090709070907090708070807080708070807080708070706070607060706
+070007000B110B000404040509070C080305050709040504050707070707070707070705
+05090909060A080809090706090805050806090809070908080708080B08070805050509
+07070707060707040707030407030B070707070506040707090707060705070908080907
+080908070707070707060707070703030303070707070707070707070706070707060707
+0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
+090C0B070B05050303090907070407050507070704030511080708070705050505090909
+08080803070707070707070707070603080608060509070707070709090606060B0B0B07
+090705080609060906070704080708070907090707070706030603060508070807090708
+05080508060704070408070807080608060609090707060705090707060D0A070804060C
+040704040704080709060906070707070707090709070907080708070503050305030503
+05040807070603080708070907090708050806070408070807080708070B090707030807
+0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
+070808050808090807090807070707080909050707060703070707050707030707070706
+07070607070909030707070907090609080505050D0C090808080808080608070B070808
+08080908090807090708090809080B0C090A07090B080707070508070906070707070707
+07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
+070606060606060600000000090708070000000007070707070707070707070707070708
+070807080708070807080708070807080708070807080707070707070707070707070707
+070707050305030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000907090709070907090709070907
+090709070907090709070807080708070807080708070807070707070707070707000700
+0C120C00040405060A080D09030505080904050405080808080808080808080505090909
+070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
+060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
+08080808080608080808030303030808080808080808080808070808080708070C0C0C08
+08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
+0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
+0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
+07090609060808040808080809090908080808070307040706090809080A080805080508
+07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
+070408080906090608080808080809080908090809080908050305030503050305040807
+070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
+050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
+08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
+070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
+0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
+07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
+07070707000000000A080908000000000808080808080808080808080808080808080808
+080808080808080808080808080808080808080808080808080808080808080808080805
+030503000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
+0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
+050505050A080D09030606090905070506080808080808080808080606090909070D0908
+090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
+0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
+080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
+0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
+03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
+08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
+080808050908090809080908080808070307040706090809080A08080508050907090609
+060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
+090809080808080808080908090809080908090805030503050305030604080707070309
+0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
+0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
+080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
+0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
+09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
+09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
+000000000A08090900000000080808080808080808080808080808090809080908090809
+080908090809080908090809080908080808080808080808080808080808080503050300
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
+0A0809080908090909090909090909090908090809080908080008000E150E0005050606
+0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
+0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
+08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
+0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
+0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
+0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
+090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
+0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
+090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
+0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
+090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
+080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
+0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
+090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
+0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
+090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
+0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
+080A080A080A080A080A0809080908090809080908090809080908050305030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
+0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
+0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
+0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
+0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
+0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
+0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
+0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
+0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
+0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
+09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
+09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
+060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
+0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
+0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
+0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
+0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
+0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
+000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
+090A090A090A090909090909090909090909090909090905030503000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
+0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
+0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
+0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
+09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
+0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
+090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
+060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
+070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
+0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
+0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
+0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
+070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
+10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
+0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
+12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
+110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
+0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
+0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
+0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
+0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
+080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
+0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
+0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
+0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
+09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
+0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
+0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
+05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
+080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
+0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
+0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
+0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
+0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
+0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
+0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
+050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
+0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000D0A
+0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
+0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
+0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
+120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
+0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
+0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
+0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
+0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
+0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
+080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
+0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
+080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
+0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
+0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
+0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
+0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
+0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
+0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
+0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
+0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
+0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
+0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
+090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
+0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
+0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
+0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
+080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
+1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
+0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
+0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
+0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
+0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
+060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
+0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
+120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
+0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
+0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
+0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
+0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
+0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
+0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
+091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
+0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
+0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
+1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
+1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
+0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
+100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
+090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
+060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
+09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
+1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
+0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
+0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
+0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
+0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
+0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
+0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
+0C0D0C080608060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
+110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
+152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
+0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
+0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
+0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
+0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
+150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
+0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
+0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
+0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
+0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
+0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
+0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
+0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
+0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
+11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
+0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
+0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
+0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
+060806000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
+120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
+0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
+0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
+0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
+0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
+161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
+0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
+0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
+0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
+09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
+0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
+0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
+1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
+0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
+0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
+0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
+0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
+00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
+0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
+120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
+130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
+12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
+0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
+0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
+0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
+0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
+0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
+100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
+0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
+0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
+0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
+0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
+0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
+0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
+121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
+0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
+130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
+0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
+110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
+060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
+110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
+0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
+06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
+14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
+0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
+100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
+1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
+0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
+0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
+0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
+1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
+15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
+100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
+1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
+140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
+000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
+0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
+12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
+160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
+15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
+0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
+1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
+0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
+0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
+0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
+1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
+11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
+15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
+0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
+1B061111111214180F181419071213131113140B13131714121514101211111318160B11
+110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
+1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
+1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
+0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
+111111111111111111111111111111121012101210121012101210121012101210121012
+101210111011101110111011101110111011100B070B0700000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000015101510151015101510151015101610161016101610161014111411141214121412
+141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
+0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
+141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
+1811110F120D1218141414121617151111111111110F1111111109090909121212121212
+1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
+100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
+14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
+11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
+091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
+0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
+161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
+12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
+12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
+1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
+12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
+110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
+090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
+121212121212121212121214111411141114111411141114111411141114111411141112
+1112111211121112111211121112110D090D090000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000001712
+171217121712171217121712171217121712171217121512151216131613161316131613
+121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
+141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
+201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
+140F141A1616161418191713131313131311131313130909090914131313131314141414
+141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
+141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
+140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
+1A1111112020201419140D16111611161114140C16131613191519141314131209120912
+0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
+11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
+0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
+14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
+111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
+141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
+161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
+1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
+14131314120F20261411111111111111000000001A131815000000001414141414141414
+141414141414141613161316131613161316131613161316131613161316131413141314
+13141314131413141314130D090D09000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000191319131913
+19131913191319131A131A131A131A131A13171417141815181518151815181514131413
+1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
+1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
+0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
+17171715191A181414141414141114141414090909091514141414141515151515121515
+1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
+151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
+0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
+212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
+151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
+180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
+0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
+140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
+091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
+1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
+2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
+141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
+131021271512121212121212000000001B14191600000000151515151515151515151515
+151515171417141714171417141714171417141714171417141714151415141514151415
+141514151415140D090D0900000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000001A141A141A141A141A14
+1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
+15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
+111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
+181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
+1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
+25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
+1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
+1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
+1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
+101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
+0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
+110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
+24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
+17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
+16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
+1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
+1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
+1814141414141414000000001E161C180000000018181818181818181818181818181819
+161916191619161916191619161916191619161916191617161716171617161716171617
+161716100A100A0000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
+1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
+2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
+172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
+161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
+191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
+1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
+2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
+1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
+161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
+161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
+190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
+19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
+132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
+1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
+1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
+2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
+151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
+17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
+191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
+0C120C000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000211921192119211921192119211922192219
+2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
+10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
+20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
+1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
+1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
+2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
+0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
+1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
+181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
+12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
+201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
+1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
+262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
+1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
+1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
+1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
+1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
+00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
+1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
+251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
+292036240D17172029121712172020202020202020202017172929291B3222222327201D
+27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
+1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
+1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
+202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
+1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
+20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
+221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
+20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
+201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
+1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
+1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
+221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
+20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
+26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
+20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
+281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
+1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
+2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
+0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
+251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
+212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
+0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
+2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
+19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
+251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
+2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
+1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
+22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
+17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
+27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
+2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
+251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
+2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
+2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
+000000002222222222222222222222222222222520252025202520252025202520252025
+2025202520252022202220222022202220222022202220170F170F000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
+29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
+2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
+2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
+1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
+2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
+202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
+15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
+1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
+232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
+24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
+2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
+172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
+3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
+241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
+41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
+3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
+1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
+252525252525252525252525252525282328232823282328232823282328232823282328
+23282325232523252325232523252325232523180F180F00000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
+2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
+1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
+2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
+372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
+2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
+251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
+2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
+28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
+122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
+21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
+322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
+2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
+2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
+2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
+29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
+28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
+12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
+282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000003529
+35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
+29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
+3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
+4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
+3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
+302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
+303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
+2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
+3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
+22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
+2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
+1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
+2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
+28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
+2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
+332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
+3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
+2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
+30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
+2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
+3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
+2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
+35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
+26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
+39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
+352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
+36443939415951355326261616444431331E3526263434351E16267E3934393434222222
+224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
+53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
+3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
+3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
+22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
+31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
+1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
+3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
+51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
+31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
+2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
+353535393239323932393239323932393239323932393239323932343134313431343134
+313431343134312218221800000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000041324132413241324132
+41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
+340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
+2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
+3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
+4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
+5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
+48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
+434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
+4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
+2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
+1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
+2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
+5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
+3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
+383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
+40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
+383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
+3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
+373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
+373A37271827180000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000004838483848384838483848384838
+4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
+649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
+37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
+343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
+3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
+4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
+642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
+40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
+34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
+343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
+3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
+3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
+2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
+4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
+3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
+4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
+323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
+3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
+3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
+1B2A1B000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
+513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
+000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
+2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
+0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
+332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
+0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
+5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
+BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
+7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
+0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
+131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
+ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
+C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
+2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
+CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
+8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
+70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
+08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
+312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
+201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
+2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
+5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
+15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
+2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
+7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
+C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
+05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
+260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
+031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
+282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
+2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
+321625012309011406232226353436333216013426232206151416333236013426232206
+1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
+64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
+DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
+004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
+087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
+300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
+1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
+3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
+4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
+2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
+323601151406070123270E01232224353436373E01372E01353436373E01333216151406
+070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
+3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
+0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
+F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
+03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
+822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
+28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
+000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
+070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
+2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
+060306131503151326012603261326154701400340134715500350136003601379007602
+700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
+3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
+4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
+00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
+0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
+0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
+060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
+392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
+8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
+FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
+01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
+FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
+0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
+590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
+012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
+01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
+0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
+3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
+01250138004900440156016701770186010A011202032F02010200010000022F332F003F
+2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
+05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
+4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
+5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
+36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
+02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
+4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
+1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
+3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
+03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
+03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
+0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
+100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
+101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
+373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
+8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
+3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
+290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
+780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
+020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
+E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
+06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
+2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
+6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
+02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
+233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
+240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
+0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
+395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
+3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
+00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
+7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
+1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
+ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
+353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
+6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
+344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
+0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
+0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
+2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
+002322262726023534123736243332161715232E01232200073E01333216171E01073426
+272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
+290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
+E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
+282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
+4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
+0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
+012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
+0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
+592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
+0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
+0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
+ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
+26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
+908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
+92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
+3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
+0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
+294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
+5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
+35331E01333212370E01232226272E01353400333216171612073426272E012322061514
+16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
+012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
+BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
+15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
+2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
+00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
+5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
+5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
+40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
+540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
+080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
+10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
+FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
+09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
+213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
+006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
+2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
+5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
+7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
+40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
+090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
+172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
+070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
+52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
+346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
+0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
+2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
+3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
+510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
+0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
+3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
+23222635341233321617353311333E013534022726242322040706021514121716043332
+3637150E0123222427260235341237362433320417161201112E01232206151416333236
+074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
+010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
+438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
+A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
+A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
+01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
+03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
+010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
+39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
+130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
+0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
+1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
+10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
+171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
+36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
+2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
+1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
+05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
+600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
+3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
+012322242726023534123736243332161715232E01232206070E01151416171E01333236
+373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
+46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
+E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
+03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
+3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
+3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
+B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
+003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
+016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
+21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
+0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
+FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
+C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
+130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
+0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
+3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
+32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
+01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
+23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
+05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
+03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
+11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
+002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
+3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
+A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
+09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
+22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
+02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
+190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
+3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
+0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
+400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
+10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
+FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
+002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
+113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
+023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
+050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
+0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
+30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
+130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
+34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
+0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
+6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
+0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
+002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
+53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
+10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
+373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
+01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
+B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
+001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
+080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
+10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
+3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
+C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
+0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
+59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
+150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
+2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
+305D015D010E01232226270E01232224272602353412373624333216171612151002071E
+01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
+5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
+BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
+3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
+3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
+071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
+031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
+7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
+3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
+B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
+009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
+4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
+86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
+111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
+ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
+2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
+0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
+A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
+152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
+0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
+04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
+4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
+F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
+01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
+4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
+470148020205040507065706860603061400000105070457048604030414030203080144
+014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
+6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
+F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
+01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
+00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
+08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
+0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
+000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
+75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
+10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
+390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
+000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
+09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
+020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
+290839084808050208070A04010406020D00160026003600470050000600660D08090619
+062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
+30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
+FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
+000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
+08270628085606590865066A08080814000100061405040502000D050200010004000703
+040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
+ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
+E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
+000900594036030708060813082608360846085608660876080808B30202030707033506
+03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
+2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
+91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
+0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
+FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
+0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
+003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
+0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
+1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
+3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
+036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
+0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
+0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
+051602FA068C000300244016480159026902790204500360037003030303010000022F33
+2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
+0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
+0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
+001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
+3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
+353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
+BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
+5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
+FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
+3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
+141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
+31305D011406070E012322262707231133113E0133321203342623220607111E01333236
+04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
+2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
+40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
+0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
+3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
+2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
+A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
+006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
+0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
+F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
+3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
+B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
+FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
+6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
+1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
+013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
+E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
+011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
+030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
+0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
+22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
+BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
+006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
+702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
+1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
+3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
+1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
+9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
+276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
+045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
+1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
+22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
+262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
+02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
+003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
+021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
+4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
+FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
+210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
+2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
+011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
+0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
+325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
+015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
+1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
+01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
+006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
+1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
+801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
+2123113426272E01232206071E01151123113426272E012322060711231133153E013332
+16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
+9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
+5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
+040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
+123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
+4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
+047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
+1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
+002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
+C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
+00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
+0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
+32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
+33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
+51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
+D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
+701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
+F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
+321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
+BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
+C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
+05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
+305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
+2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
+091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
+6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
+2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
+07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
+14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
+0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
+393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
+221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
+02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
+0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
+3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
+02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
+FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
+09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
+3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
+B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
+047F045D000600864041260429063604390646044906062905390540055105600505061A
+000100041A03020328002703380037034A00470375017A02080005027503010305020802
+010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
+820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
+2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
+045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
+58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
+0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
+3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
+23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
+5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
+14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
+4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
+084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
+06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
+01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
+395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
+0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
+01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
+0519031705460149035800570179030902071A000100051A040304490046040200030204
+05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
+0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
+30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
+5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
+45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
+1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
+3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
+000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
+09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
+2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
+2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
+AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
+BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
+1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
+0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
+010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
+5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
+37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
+887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
+000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
+4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
+1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
+26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
+5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
+4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
+40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
+0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
+125906561278027703082020211F02870101011400120020210387040104140505067B06
+74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
+114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
+5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
+10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
+C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
+26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
+7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
+02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
+342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
+313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
+2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
+5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
+062322262735331E01333236353426270E01232224272602353412373624333216171523
+2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
+5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
+BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
+B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
+002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
+023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
+075002360032FD000117008E009601750018401103002930295029702904020029240F03
+25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
+24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
+0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
+01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
+011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
+0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
+5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
+3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
+2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
+01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
+0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
+20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
+015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
+003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
+1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
+460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
+D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
+21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
+20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
+20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
+2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
+FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
+0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
+40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
+880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
+023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
+0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
+0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
+2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
+0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
+FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
+FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
+FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
+FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
+2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
+012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
+012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
+012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
+012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
+1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
+0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
+173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
+6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
+0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
+3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
+A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
+FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
+7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
+471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
+2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
+353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
+010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
+0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
+00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
+1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
+190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
+ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
+1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
+0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
+05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
+63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
+10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
+181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
+39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
+07151E01151406070E012322262735331E01333236353426272E01272627263534363735
+2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
+2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
+5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
+845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
+072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
+323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
+563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
+0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
+DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
+0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
+5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
+BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
+39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
+303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
+2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
+333236373E0135342623353236353426272E01232206070E01151123113436373E013332
+1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
+28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
+421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
+000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
+282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
+2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
+06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
+ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
+5D005D011000212000111000212000031000212000111000212000072301231123112132
+16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
+66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
+63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
+FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
+3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
+0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
+146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
+521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
+5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
+2000031000212000111000212000050E012322243534003332161715232E012322061514
+1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
+36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
+0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
+1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
+0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
+000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
+0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
+FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
+03C3068C000300244016470156006600760004500360037003030303010000022F332F00
+2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
+000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
+5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
+04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
+0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
+030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
+2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
+0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
+6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
+000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
+05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
+0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
+5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
+112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
+B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
+0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
+090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
+1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
+0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
+ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
+3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
+63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
+453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
+216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
+E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
+441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
+AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
+ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
+2202353412333216173E01333212052E01232206151416333236373E0125342623220607
+0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
+9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
+010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
+05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
+0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
+5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
+021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
+020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
+00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
+2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
+FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
+000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
+051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
+5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
+350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
+0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
+0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
+0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
+BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
+5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
+015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
+080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
+5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
+363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
+433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
+410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
+19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
+3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
+22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
+F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
+0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
+99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
+08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
+03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
+0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
+012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
+8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
+FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
+050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
+5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
+B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
+093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
+300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
+008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
+10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
+2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
+228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
+0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
+6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
+2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
+0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
+01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
+B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
+300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
+40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
+ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
+3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
+AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
+300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
+1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
+FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
+26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
+A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
+580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
+40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
+6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
+124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
+00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
+10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
+31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
+362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
+<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
+5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
+20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
+242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
+FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
+0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
+04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
+1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
+3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
+22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
+6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
+E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
+03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
+05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
+101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
+331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
+151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
+FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
+05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
+FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
+00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
+00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
+0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
+08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
+308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
+DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
+270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
+020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
+FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
+5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
+3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
+2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
+1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
+050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
+541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
+3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
+26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
+01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
+59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
+607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
+05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
+0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
+5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
+D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
+0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
+000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
+2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
+8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
+0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
+1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
+2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
+82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
+110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
+2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
+3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
+004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
+011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
+0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
+002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
+10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
+FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
+152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
+FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
+B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
+2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
+5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
+0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
+10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
+015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
+321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
+BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
+92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
+A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
+02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
+00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
+FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
+3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
+04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
+F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
+E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
+000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
+2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
+FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
+00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
+000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
+010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
+14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
+0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
+3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
+1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
+4804470658045706680467067F047006087F057007020705000301000330036003900304
+03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
+19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
+C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
+400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
+00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
+35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
+332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
+003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
+4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
+00121203151827190119191D341502002833010133332F34030A272001022320292C0400
+0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
+12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
+331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
+37332E013534363723373312003332161715232E01232204072107210E01151416172107
+211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
+C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
+152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
+02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
+2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
+5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
+400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
+0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
+001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
+0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
+10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
+333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
+6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
+0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
+000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
+3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
+33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
+03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
+0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
+0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
+3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
+01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
+000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
+0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
+0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
+09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
+E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
+0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
+2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
+0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
+073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
+17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
+19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
+01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
+3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
+ED5D3130015D011406232226353436333216250123090114062322263534363332160134
+262322061514163332360134262322061514163332362514062322263534363332160734
+262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
+BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
+586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
+FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
+023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
+0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
+055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
+3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
+012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
+0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
+104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
+000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
+003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
+023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
+08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
+052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
+FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
+00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
+000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
+FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
+5606690566067A0573060601020350056005700503050560030103500060007000030000
+042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
+00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
+0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
+2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
+365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
+29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
+31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
+7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
+03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
+ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
+0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
+2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
+090009300902313009015009600970090309091551030C29200030000200003000600003
+D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
+343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
+065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
+1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
+22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
+A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
+00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
+0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
+8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
+1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
+222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
+790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
+64016B0274017B020606050250036003700303030360020102500060007000030000032F
+332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
+7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
+090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
+332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
+52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
+000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
+050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
+37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
+0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
+03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
+050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
+000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
+FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
+2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
+64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
+0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
+2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
+23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
+66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
+B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
+0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
+542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
+030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
+1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
+00232200353400333216172E01270527372E012735211E01173717071612013E01353426
+272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
+0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
+08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
+2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
+012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
+012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
+0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
+233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
+3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
+3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
+4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
+0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
+1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
+3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
+111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
+88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
+02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
+0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
+0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
+01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
+B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
+0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
+35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
+102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
+651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
+ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
+333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
+022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
+002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
+2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
+2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
+1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
+01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
+0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
+B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
+0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
+010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
+003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
+2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
+002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
+003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
+0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
+0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
+32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
+1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
+8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
+FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
+000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
+0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
+24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
+6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
+0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
+3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
+2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
+14062322262735331E01333236353426270E012322242735331604333236353426272E01
+272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
+9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
+9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
+4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
+28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
+3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
+3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
+0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
+4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
+1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
+262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
+15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
+0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
+4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
+0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
+0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
+068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
+0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
+03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
+04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
+70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
+01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
+1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
+213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
+95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
+9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
+2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
+0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
+FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
+3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
+35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
+0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
+570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
+0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
+20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
+003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
+005D010E012322263534363703210323012101230E0115141633323637330902062B344B
+2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
+90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
+003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
+703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
+3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
+03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
+392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
+3637362437353426272E012322060723353E01333216171E011511230E01151416333236
+373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
+1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
+7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
+24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
+0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
+062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
+34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
+0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
+ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
+33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
+6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
+2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
+04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
+090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
+5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
+3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
+03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
+B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
+34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
+3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
+1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
+31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
+343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
+03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
+5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
+B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
+012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
+012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
+0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
+030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
+005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
+030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
+32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
+C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
+010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
+1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
+0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
+07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
+2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
+05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
+2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
+33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
+0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
+00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
+0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
+00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
+00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
+068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
+059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
+00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
+00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
+FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
+3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
+012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
+012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
+18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
+5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
+3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
+FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
+0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
+18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
+5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
+5D250E01071E011514062322262735331E01333236353426272322263511233533113311
+211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
+B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
+B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
+011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
+0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
+0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
+4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
+322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
+331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
+CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
+00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
+210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
+21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
+3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
+023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
+0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
+FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
+007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
+FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
+3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
+012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
+012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
+10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
+FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
+53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
+27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
+003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
+33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
+5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
+6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
+FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
+65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
+12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
+071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
+0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
+4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
+524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
+363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
+38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
+0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
+3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
+32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
+8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
+4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
+1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
+001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
+113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
+3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
+F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
+FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
+0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
+79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
+2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
+11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
+272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
+3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
+40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
+40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
+0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
+451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
+1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
+232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
+1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
+A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
+0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
+0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
+05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
+ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
+2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
+51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
+4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
+051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
+12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
+03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
+10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
+3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
+2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
+3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
+9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
+00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
+3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
+34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
+4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
+7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
+1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
+332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
+2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
+32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
+E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
+B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
+1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
+45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
+75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
+B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
+60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
+B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
+040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
+ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
+012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
+B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
+0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
+022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
+041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
+0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
+5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
+88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
+481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
+29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
+371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
+1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
+335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
+2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
+220615141633323637330901230901140623222635343633321607342623220615141633
+3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
+B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
+68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
+006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
+120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
+FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
+2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
+3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
+0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
+A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
+05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
+1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
+400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
+CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
+0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
+8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
+00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
+0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
+0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
+CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
+0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
+06232226353436172206151416333236353426016B689393686893926949666748486766
+03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
+011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
+011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
+00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
+00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
+00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
+00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
+049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
+046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
+0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
+068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
+0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
+FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
+05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
+0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
+FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
+FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
+23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
+4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
+40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
+040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
+2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
+002132041715232E01272E012322001110002132363711213521110E01071E0115140623
+22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
+FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
+0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
+A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
+10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
+112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
+603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
+E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
+305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
+321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
+7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
+E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
+BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
+B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
+4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
+001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
+070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
+1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
+11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
+0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
+031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
+02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
+ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
+15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
+04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
+10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
+0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
+332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
+2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
+C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
+FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
+40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
+10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
+ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
+1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
+81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
+0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
+140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
+302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
+98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
+00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
+01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
+00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
+12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
+2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
+232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
+FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
+0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
+0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
+1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
+045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
+13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
+E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
+230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
+1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
+024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
+04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
+FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
+3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
+13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
+0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
+0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
+1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
+5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
+35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
+160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
+FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
+00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
+0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
+021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
+050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
+11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
+7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
+2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
+01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
+ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
+02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
+0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
+01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
+2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
+8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
+FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
+0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
+2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
+7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
+06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
+550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
+0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
+715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
+330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
+000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
+1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
+322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
+062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
+0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
+0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
+03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
+2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
+2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
+FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
+001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
+1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
+332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
+231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
+0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
+5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
+011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
+011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
+004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
+5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
+21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
+528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
+3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
+0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
+3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
+331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
+012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
+251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
+1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
+2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
+2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
+FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
+FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
+00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
+20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
+1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
+302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
+070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
+976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
+037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
+000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
+0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
+1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
+350E01232226351133111416171E0133323637113311230E011514163332363733150E01
+23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
+A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
+FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
+FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
+FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
+FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
+00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
+5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
+67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
+00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
+125906561278027703082020211F02370187010201140012002021033704870402041405
+05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
+F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
+C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
+0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
+0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
+05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
+17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
+5D212303210323012E013534363332161514060727342623220615141633323613090207
+2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
+F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
+CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
+37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
+4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
+01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
+0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
+32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
+5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
+2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
+110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
+5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
+E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
+4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
+5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
+0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
+068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
+08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
+3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
+2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
+ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
+004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
+004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
+008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
+008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
+008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
+355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
+40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
+003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
+003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
+090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
+B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
+010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
+05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
+00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
+1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
+1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
+17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
+393931305D2901353E0137233533352335333534123332161715232E012322061D012115
+21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
+016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
+000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
+07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
+1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
+31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
+06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
+9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
+FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
+040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
+003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
+39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
+3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
+4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
+094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
+003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
+01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
+00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
+010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
+D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
+0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
+010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
+0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
+0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
+090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
+33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
+803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
+00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
+059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
+0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
+0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
+5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
+010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
+0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
+1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
+003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
+4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
+019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
+2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
+0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
+370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
+2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
+BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
+05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
+00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
+4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
+012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
+FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
+05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
+002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
+0902390258020378017703020203020114000600020314040405490546067C0573060405
+030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
+65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
+09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
+0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
+40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
+0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
+213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
+FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
+010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
+2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
+000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
+A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
+0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
+293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
+0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
+D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
+71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
+090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
+061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
+FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
+021B067518011834380948096F090309192209030810030822142311141023071B180714
+108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
+C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
+1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
+359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
+2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
+641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
+041925140204160B341F02261835011608251202191214081502141C272222290F29010F
+291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
+1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
+023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
+CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
+0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
+FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
+000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
+01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
+B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
+014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
+019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
+FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
+019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
+0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
+371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
+90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
+2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
+1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
+F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
+1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
+A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
+01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
+15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
+1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
+0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
+0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
+07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
+2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
+2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
+201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
+664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
+264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
+05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
+3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
+A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
+04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
+2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
+181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
+12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
+072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
+252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
+28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
+8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
+045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
+18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
+10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
+178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
+00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
+FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
+71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
+487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
+0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
+FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
+260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
+04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
+08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
+FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
+0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
+3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
+4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
+047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
+24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
+030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
+400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
+1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
+353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
+06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
+4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
+211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
+2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
+00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
+3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
+F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
+220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
+0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
+03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
+3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
+12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
+3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
+5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
+AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
+045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
+091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
+3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
+5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
+4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
+0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
+3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
+8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
+010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
+53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
+1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
+7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
+5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
+070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
+4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
+343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
+045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
+0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
+291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
+2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
+2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
+01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
+5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
+5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
+7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
+023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
+FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
+00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
+FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
+073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
+1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
+31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
+3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
+BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
+00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
+0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
+0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
+000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
+33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
+243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
+EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
+4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
+0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
+02E207500236002C00000117008EFF240175001940130200104010501060107010050100
+100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
+000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
+28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
+3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
+013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
+2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
+0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
+401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
+052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
+000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
+1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
+FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
+2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
+35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
+C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
+FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
+07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
+5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
+01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
+646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
+07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
+0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
+191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
+1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
+E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
+5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
+8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
+030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
+1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
+09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
+0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
+10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
+FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
+052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
+71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
+011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
+554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
+B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
+021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
+6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
+000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
+0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
+392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
+9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
+9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
+093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
+09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
+35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
+350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
+392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
+2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
+2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
+0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
+912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
+18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
+FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
+3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
+0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
+392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
+0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
+06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
+F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
+A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
+151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
+0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
+FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
+14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
+0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
+40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
+0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
+030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
+10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
+305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
+D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
+000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
+6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
+1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
+4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
+5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
+FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
+0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
+5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
+051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
+01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
+210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
+030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
+FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
+00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
+000100C80000053B05D100070027401703350603010501140078090F0940095009030414
+056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
+DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
+FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
+461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
+03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
+0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
+FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
+010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
+05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
+001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
+150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
+3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
+272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
+0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
+8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
+4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
+B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
+0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
+392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
+FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
+0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
+12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
+EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
+2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
+05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
+31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
+000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
+05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
+32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
+05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
+1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
+0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
+11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
+0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
+2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
+4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
+150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
+002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
+113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
+EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
+23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
+560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
+ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
+3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
+C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
+FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
+34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
+1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
+3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
+01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
+F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
+676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
+000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
+03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
+6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
+2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
+03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
+FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
+04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
+0506060F113440030103030012340F03000519150904060309045F050105120114007821
+0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
+C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
+04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
+026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
+0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
+6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
+223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
+ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
+37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
+4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
+B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
+11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
+00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
+12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
+35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
+302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
+36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
+4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
+045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
+19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
+10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
+FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
+1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
+332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
+3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
+F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
+045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
+E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
+37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
+0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
+0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
+39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
+3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
+33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
+1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
+01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
+631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
+10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
+06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
+5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
+1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
+26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
+49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
+546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
+110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
+0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
+0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
+01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
+0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
+04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
+190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
+2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
+FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
+94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
+1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
+3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
+001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
+2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
+01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
+2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
+003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
+1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
+0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
+201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
+1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
+4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
+030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
+0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
+012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
+023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
+0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
+31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
+006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
+011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
+210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
+FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
+014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
+0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
+013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
+0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
+D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
+003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
+011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
+0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
+0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
+33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
+16171133113E0133321203342623220607111E0133323605112E01232206151416333236
+064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
+2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
+DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
+FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
+08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
+0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
+2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
+0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
+092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
+171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
+CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
+1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
+10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
+045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
+0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
+5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
+1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
+000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
+0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
+FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
+0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
+FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
+2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
+05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
+402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
+3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
+1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
+334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
+0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
+090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
+5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
+037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
+FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
+0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
+061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
+03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
+ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
+2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
+BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
+000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
+3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
+10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
+15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
+D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
+FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
+0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
+09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
+ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
+3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
+AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
+37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
+250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
+59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
+2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
+ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
+0607112311233533353315211521113E01333216171416151406070602070E01232A0127
+35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
+020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
+FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
+0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
+006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
+193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
+090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
+2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
+3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
+0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
+021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
+0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
+30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
+3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
+35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
+31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
+01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
+64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
+183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
+03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
+06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
+FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
+F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
+012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
+3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
+334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
+00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
+010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
+ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
+3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
+63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
+0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
+FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
+0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
+0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
+03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
+0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
+2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
+331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
+FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
+0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
+05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
+330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
+B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
+3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
+000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
+0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
+0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
+2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
+0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
+0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
+C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
+0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
+1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
+0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
+B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
+D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
+000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
+333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
+05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
+ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
+05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
+166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
+2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
+86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
+1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
+0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
+16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
+121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
+0E012322262735331E013332363534262B01353332363534262322060723353E01333216
+15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
+964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
+57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
+05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
+ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
+0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
+1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
+092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
+262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
+75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
+373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
+000100F3023503A505DA000600414025560101030100012A020203630073000200000351
+0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
+8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
+021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
+0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
+04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
+140623222635343637352E0135343633321615140607151E01033426232206151416171E
+01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
+5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
+64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
+304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
+0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
+1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
+5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
+0E01232224272602353412373624333216171E01173E013534262735331E011514060110
+0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
+144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
+630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
+DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
+21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
+2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
+302B011000232200111000333216173332363534262735331E01151406071E0107342623
+22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
+9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
+D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
+0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
+050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
+26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
+052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
+F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
+000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
+051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
+050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
+350E01232226351133111416171E0133323637113332363534262735331E011514062B01
+0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
+8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
+4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
+09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
+353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
+F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
+8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
+001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
+004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
+0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
+392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
+00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
+0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
+103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
+3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
+0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
+0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
+370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
+2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
+30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
+9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
+44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
+200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
+40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
+002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
+2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
+192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
+912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
+0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
+002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
+A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
+0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
+8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
+1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
+010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
+13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
+0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
+D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
+22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
+42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
+03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
+11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
+D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
+33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
+A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
+A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
+00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
+020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
+5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
+4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
+00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
+0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
+0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
+D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
+07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
+F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
+6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
+6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
+11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
+71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
+9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
+001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
+6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
+0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
+222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
+58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
+02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
+CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
+0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
+5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
+06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
+231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
+4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
+1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
+E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
+0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
+5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
+370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
+6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
+2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
+06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
+0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
+143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
+5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
+071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
+211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
+001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
+FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
+FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
+1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
+BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
+00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
+04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
+0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
+030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
+025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
+04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
+3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
+38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
+024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
+041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
+0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
+02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
+0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
+00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
+0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
+055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
+041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
+FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
+FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
+252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
+001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
+FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
+002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
+000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
+B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
+401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
+068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
+2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
+0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
+B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
+400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
+00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
+00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
+FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
+00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
+252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
+2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
+000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
+000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
+01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
+5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
+031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
+0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
+01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
+02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
+018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
+05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
+0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
+080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
+090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
+E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
+0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
+005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
+501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
+024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
+0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
+05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
+252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
+201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
+01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
+FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
+1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
+024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
+3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
+212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
+007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
+0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
+024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
+35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
+002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
+400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
+024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
+008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
+02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
+0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
+006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
+FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
+0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
+080102360038000001170256006201750012400B01502301010023220C00252B35005D35
+FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
+00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
+0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
+28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
+0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
+5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
+27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
+01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
+00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
+011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
+011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
+024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
+FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
+0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
+FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
+2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
+2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
+4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
+401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
+005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
+07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
+FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
+006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
+4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
+2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
+ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
+1123350E01232202113436373E0133321617352135213533153301112E01232206151416
+3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
+B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
+2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
+0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
+24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
+5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
+16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
+1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
+17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
+0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
+01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
+011401150116011701180119011A011B011C011D011E011F012001210122012301240125
+0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
+01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
+014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
+015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
+016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
+0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
+01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
+01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
+01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
+01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
+01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
+01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
+01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
+0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
+02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
+023402350236023702380239023A023B023C023D023E023F024002410242024302440245
+0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
+02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
+026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
+027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
+028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
+02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
+02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
+02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
+02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
+02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
+02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
+030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
+031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
+0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
+03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
+035403550356035703580359035A035B035C035D035E035F036003610362036303640365
+0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
+03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
+038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
+039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
+03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
+03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
+03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
+03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
+03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
+04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
+041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
+042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
+043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
+0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
+04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
+047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
+6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
+7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
+696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
+706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
+6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
+676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
+67726561746572087175657374696F6E0261740141014201430144014501460147014801
+49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
+627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
+7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
+650166016701680169016A016B016C016D016E016F017001710172017301740175017601
+7701780179017A0962726163656C656674036261720A627261636572696768740A617363
+696974696C646509416469657265736973054172696E670843636564696C6C6106456163
+757465064E74696C6465094F646965726573697309556469657265736973066161637574
+65066167726176650B6163697263756D666C657809616469657265736973066174696C64
+65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
+756D666C65780965646965726573697306696163757465066967726176650B6963697263
+756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
+650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
+65067567726176650B7563697263756D666C657809756469657265736973066461676765
+72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
+74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
+707972696768740974726164656D61726B056163757465086469657265736973086E6F74
+657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
+657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
+6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
+0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
+6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
+6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
+656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
+697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
+61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
+740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
+650979646965726573697309596469657265736973086672616374696F6E044575726F0D
+6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
+616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
+73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
+6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
+617665064961637574650B4963697263756D666C65780949646965726573697306496772
+617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
+0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
+6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
+6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
+4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
+6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
+650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
+72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
+6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
+72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
+61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
+76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
+6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
+656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
+7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
+63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
+7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
+65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
+61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
+065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
+0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
+68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
+0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
+6F6E64096166696936313234380961666969363132383906483232303733064831383534
+3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
+6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
+63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
+646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
+740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
+0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
+07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
+656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
+636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
+6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
+67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
+696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
+7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
+6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
+5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
+7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
+757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
+7368616375746509616E6F74656C65696106576772617665067767726176650657616375
+746506776163757465095764696572657369730977646965726573697306596772617665
+067967726176650D71756F74657265766572736564097261646963616C65780961666969
+303839343109657374696D61746564096F6E656569676874680C74687265656569676874
+68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
+656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
+6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
+7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
+730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
+04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
+707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
+69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
+696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
+7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
+6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
+746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
+63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
+610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
+6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
+313030323309616669693130303531096166696931303035320961666969313030353309
+616669693130303534096166696931303035350961666969313030353609616669693130
+303537096166696931303035380961666969313030353909616669693130303630096166
+696931303036310961666969313030363209616669693130313435096166696931303031
+370961666969313030313809616669693130303139096166696931303032300961666969
+313030323109616669693130303232096166696931303032340961666969313030323509
+616669693130303236096166696931303032370961666969313030323809616669693130
+303239096166696931303033300961666969313030333109616669693130303332096166
+696931303033330961666969313030333409616669693130303335096166696931303033
+360961666969313030333709616669693130303338096166696931303033390961666969
+313030343009616669693130303431096166696931303034320961666969313030343309
+616669693130303434096166696931303034350961666969313030343609616669693130
+303437096166696931303034380961666969313030343909616669693130303635096166
+696931303036360961666969313030363709616669693130303638096166696931303036
+390961666969313030373009616669693130303732096166696931303037330961666969
+313030373409616669693130303735096166696931303037360961666969313030373709
+616669693130303738096166696931303037390961666969313030383009616669693130
+303831096166696931303038320961666969313030383309616669693130303834096166
+696931303038350961666969313030383609616669693130303837096166696931303038
+380961666969313030383909616669693130303930096166696931303039310961666969
+313030393209616669693130303933096166696931303039340961666969313030393509
+616669693130303936096166696931303039370961666969313030373109616669693130
+303939096166696931303130300961666969313031303109616669693130313032096166
+696931303130330961666969313031303409616669693130313035096166696931303130
+360961666969313031303709616669693130313038096166696931303130390961666969
+313031313009616669693130313933096166696931303035300961666969313030393809
+616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
+74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
+7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
+696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
+35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
+6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
+096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
+393108676C79706835393208676C79706835393308676C79706835393408676C79706835
+393508676C79706835393608676C79706835393708676C79706835393808676C79706835
+393908676C79706836303008676C79706836303108676C79706836303208676C79706836
+303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
+6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
+63697263756D666C65786163757465104163697263756D666C6578677261766510616369
+7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
+63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
+106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
+77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
+7265766561637574650B41627265766567726176650B61627265766567726176650F4162
+72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
+74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
+657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
+6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
+63756D666C65786163757465106563697263756D666C6578616375746510456369726375
+6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
+6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
+697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
+63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
+49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
+62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
+70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
+74616671616D617473056869726971057473657265057365676F6C057061746168067161
+6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
+0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
+616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
+740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
+6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
+70650270650A66696E616C747361646905747361646903716F660472657368047368696E
+0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
+73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
+740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
+686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
+68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
+7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
+7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
+6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
+676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
+657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
+6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
+0870656461676573680B747361646964616765736809716F666461676573680A72657368
+6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
+62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
+6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
+746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
+380961666969353734303309616669693537343037096166696935373430390961666969
+353734343009616669693537343531096166696935373435320961666969353734353309
+616669693537343534096166696935373435350961666969353734353609616669693537
+343537096166696935373435380961666969353733393209616669693537333933096166
+696935373339340961666969353733393509616669693537333936096166696935373339
+370961666969353733393809616669693537333939096166696935373430300961666969
+353734303109616669693537333831096166696935373436310961666969363331363709
+616669693537343539096166696935373534330961666969353735333409616669693537
+343934096166696936323834330961666969363238343409616669693632383435096166
+696936343234300961666969363432343109616669693633393534096166696935373338
+320961666969363432343209616669693632383831096166696935373530340961666969
+353733363909616669693537333730096166696935373337310961666969353733373209
+616669693537333733096166696935373337340961666969353733373509616669693537
+333931096166696935373437310961666969353734363009616669693532323538096166
+696935373530360961666969363239353809616669693632393536096166696935323935
+370961666969353735303509616669693632383839096166696936323838370961666969
+363238383809616669693537353037096166696936323936310961666969363239353909
+616669693632393630096166696935373530380961666969363239363209616669693537
+353637096166696936323936340961666969353233303509616669693532333036096166
+696935373530390961666969363239363709616669693632393635096166696936323936
+360961666969353735353509616669693532333634096166696936333735330961666969
+363337353409616669693633373539096166696936333736330961666969363337393509
+616669693632383931096166696936333830380961666969363239333809616669693633
+383130096166696936323934320961666969363239343709616669693633383133096166
+696936333832330961666969363338323409616669693633383333096166696936333834
+340961666969363238383209616669693632383833096166696936323838340961666969
+363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
+4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
+7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
+106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
+7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
+696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
+62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
+0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
+6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
+64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
+62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
+<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
+6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
+686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
+55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
+08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
+626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
+696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
+0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
+FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
+FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
+FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
+FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
+FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
+FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
+FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
+FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
+FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
+FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
+FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
+FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
+FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
+FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
+FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
+FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
+FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
+FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
+FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
+FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
+FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
+FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
+FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
+FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
+FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
+FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
+FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
+FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
+FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
+FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
+FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
+FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
+FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
+FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
+FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
+FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
+FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
+FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
+FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
+FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
+FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
+FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
+FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
+FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
+FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
+FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
+FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
+FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
+FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
+FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
+FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
+FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
+FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
+FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
+FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
+0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
+FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
+FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
+FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
+FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
+FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
+FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
+FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
+FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
+FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
+FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
+FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
+FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
+FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
+FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
+FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
+FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
+FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
+FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
+FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
+FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
+FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
+FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
+FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
+FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
+FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
+FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
+FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
+FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
+FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
+FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
+006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
+FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
+FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
+06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
+05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
+801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
+2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
+3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
+010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
+74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
+55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
+526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
+2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
+30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
+5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
+6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
+70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
+4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
+819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
+2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
+B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
+1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
+6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
+3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
+5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
+16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
+C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
+ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
+1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
+55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
+676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
+040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
+695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
+3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
+74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
+72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
+41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
+55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
+657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
+8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
+F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
+D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
+E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
+006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
+2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
+5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
+A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
+7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
+0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
+20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
+536F667477617265205075626C697368657273204341301E170D39383034313630303030
+30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
+65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
+55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
+626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
+6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
+41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
+73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
+207632310B3009060355040613025553311330110603550408130A57617368696E67746F
+6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
+6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
+436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
+8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
+D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
+6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
+DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
+4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
+7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
+A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
+E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
+0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
+CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
+040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
+6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
+0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
+0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
+0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
+636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
+66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
+642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
+6520566572695369676E2043657274696669636174696F6E205072616374696365205374
+6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
+20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
+733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
+50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
+20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
+204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
+6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
+732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
+41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
+473A2054484520555345204F462054484953204345525449464943415445204953205354
+524943544C59205355424A45435420544F205448450A564552495349474E204345525449
+4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
+5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
+504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
+494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
+204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
+4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
+49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
+414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
+656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
+657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
+616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
+7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
+2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
+69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
+80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
+2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
+3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
+43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
+286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
+30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
+25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
+AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
+228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
+2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
+08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
+3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
+65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
+082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
+8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
+1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
+2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
+006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
+727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
+B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
+CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
+E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
+836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
+88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
+86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
+0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
+8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
+0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
+0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
+2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
+132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
+69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
+2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
+0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
+2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
+86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
+BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
+41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
+DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
+] def
+/CharStrings 893 dict dup begin
+/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
+/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
+/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
+/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
+/period 17 def /slash 18 def /zero 19 def /one 20 def
+/two 21 def /three 22 def /four 23 def /five 24 def
+/six 25 def /seven 26 def /eight 27 def /nine 28 def
+/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
+/greater 33 def /question 34 def /at 35 def /A 36 def
+/B 37 def /C 38 def /D 39 def /E 40 def
+/F 41 def /G 42 def /H 43 def /I 44 def
+/J 45 def /K 46 def /L 47 def /M 48 def
+/N 49 def /O 50 def /P 51 def /Q 52 def
+/R 53 def /S 54 def /T 55 def /U 56 def
+/V 57 def /W 58 def /X 59 def /Y 60 def
+/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
+/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
+/b 69 def /c 70 def /d 71 def /e 72 def
+/f 73 def /g 74 def /h 75 def /i 76 def
+/j 77 def /k 78 def /l 79 def /m 80 def
+/n 81 def /o 82 def /p 83 def /q 84 def
+/r 85 def /s 86 def /t 87 def /u 88 def
+/v 89 def /w 90 def /x 91 def /y 92 def
+/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
+/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
+/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
+/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
+/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
+/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
+/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
+/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
+/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
+/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
+/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
+/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
+/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
+/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
+/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
+/summation 153 def /product 154 def /pi1 155 def /integral 156 def
+/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
+/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
+/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
+/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
+/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
+/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
+/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
+/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
+/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
+/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
+/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
+/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
+/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
+/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
+/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
+/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
+/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
+/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
+/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
+/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
+/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
+/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
+/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
+/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
+/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
+/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
+/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
+/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
+/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
+/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
+/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
+/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
+/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
+/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
+/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
+/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
+/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
+/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
+/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
+/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
+/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
+/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
+/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
+/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
+/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
+/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
+/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
+/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
+/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
+/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
+/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
+/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
+/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
+/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
+/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
+/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
+/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
+/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
+/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
+/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
+/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
+/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
+/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
+/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
+/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
+/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
+/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
+/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
+/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
+/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
+/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
+/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
+/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
+/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
+/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
+/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
+/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
+/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
+/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
+/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
+/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
+/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
+/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
+/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
+/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
+/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
+/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
+/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
+/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
+/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
+/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
+/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
+/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
+/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
+/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
+/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
+/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
+/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
+/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
+/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
+/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
+/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
+/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
+/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
+/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
+/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
+/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
+/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
+/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
+/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
+/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
+/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
+/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
+/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
+/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
+/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
+/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
+/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
+/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
+/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
+/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
+/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
+/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
+/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
+/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
+/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
+/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
+/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
+/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
+/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
+/vav 677 def /zayin 678 def /het 679 def /tet 680 def
+/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
+/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
+/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
+/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
+/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
+/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
+/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
+/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
+/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
+/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
+/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
+/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
+/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
+/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
+/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
+/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
+/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
+/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
+/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
+/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
+/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
+/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
+/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
+/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
+/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
+/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
+/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
+/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
+/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
+/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
+/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
+/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
+/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
+/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
+/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
+/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
+/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
+/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
+/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
+/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
+/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
+/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
+/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
+/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
+/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
+/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
+/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
+/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
+/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
+/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
+/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
+/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
+/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
+
+end readonly def
+FontName currentdict end definefont pop
+%%EndFont
+%%EndProlog
+mpldict begin
+13.5 175.5 translate
+585 441 0 0 clipbox
+% polygon
+1.000 setgray
+1.000 setlinewidth
+0 setlinejoin
+2 setlinecap
+[] 0 setdash
+0 0 m
+0 441 l
+585 441 l
+585 0 l
+closepath
+gsave
+fill
+grestore
+stroke
+% polygon
+0.000 setgray
+73.125 44.1 m
+73.125 396.9 l
+526.5 396.9 l
+526.5 44.1 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+0.000 0.000 1.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 341.084 m
+76.667 340.708 l
+80.209 339.574 l
+83.751 337.667 l
+87.293 334.958 l
+90.835 331.405 l
+94.377 326.949 l
+97.919 321.506 l
+101.461 314.959 l
+105.003 307.144 l
+108.545 297.819 l
+112.087 286.607 l
+115.629 272.882 l
+119.171 255.463 l
+122.713 231.623 l
+126.255 191.605 l
+129.797 103.027 l
+133.339 189.379 l
+136.881 202.932 l
+140.423 203.284 l
+143.965 191.777 l
+147.507 147.593 l
+151.049 193.483 l
+154.591 200.946 l
+158.133 199.387 l
+161.675 188.957 l
+165.217 143.486 l
+168.759 180.998 l
+172.301 191.170 l
+175.843 191.200 l
+179.385 183.119 l
+182.927 155.818 l
+186.469 166.661 l
+190.011 181.010 l
+193.553 182.971 l
+197.095 177.076 l
+200.637 157.567 l
+204.179 150.322 l
+207.721 171.053 l
+211.263 175.126 l
+214.805 171.229 l
+218.347 156.530 l
+221.889 128.062 l
+225.431 161.185 l
+228.973 167.631 l
+232.515 165.609 l
+236.057 154.358 l
+239.599 74.463 l
+243.141 151.102 l
+246.683 160.365 l
+250.225 160.169 l
+253.767 151.622 l
+257.309 119.107 l
+260.851 140.326 l
+264.393 153.187 l
+267.935 154.839 l
+271.477 148.556 l
+275.019 126.619 l
+278.561 127.980 l
+282.103 145.946 l
+285.645 149.548 l
+289.187 145.259 l
+292.729 129.081 l
+296.271 111.844 l
+299.812 138.465 l
+303.354 144.220 l
+306.896 141.769 l
+310.438 129.466 l
+313.980 80.114 l
+317.522 130.512 l
+321.064 138.774 l
+324.606 138.087 l
+328.148 128.702 l
+331.690 86.924 l
+335.232 121.741 l
+338.774 133.118 l
+342.316 134.191 l
+345.858 127.176 l
+349.400 101.638 l
+352.942 111.541 l
+356.484 127.140 l
+360.026 130.041 l
+363.568 125.064 l
+367.110 106.776 l
+370.652 98.551 l
+374.194 120.692 l
+377.736 125.577 l
+381.278 122.435 l
+384.820 108.642 l
+388.362 78.089 l
+391.904 113.570 l
+395.446 120.713 l
+398.988 119.291 l
+402.530 108.713 l
+406.072 43.008 l
+409.614 105.462 l
+413.156 115.325 l
+416.698 115.577 l
+420.240 107.501 l
+423.782 76.568 l
+427.324 95.836 l
+430.866 109.233 l
+434.408 111.171 l
+437.950 105.155 l
+441.492 83.904 l
+445.034 83.647 l
+448.576 102.154 l
+452.118 105.845 l
+455.660 101.582 l
+459.202 85.611 l
+462.744 66.167 l
+466.286 93.605 l
+469.828 99.169 l
+473.370 96.397 l
+476.912 83.814 l
+480.454 27.509 l
+483.996 82.648 l
+487.538 90.217 l
+491.080 88.573 l
+494.622 78.102 l
+498.164 37.173 l
+501.706 66.931 l
+505.248 76.324 l
+508.790 74.675 l
+512.332 64.142 l
+515.874 34.431 l
+519.416 35.180 l
+522.958 37.945 l
+stroke
+grestore
+% draw_lines
+1.000 0.000 0.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 344.638 m
+76.667 344.021 l
+80.209 342.148 l
+83.751 338.946 l
+87.293 334.276 l
+90.835 327.903 l
+94.377 319.427 l
+97.919 308.120 l
+101.461 292.475 l
+105.003 268.454 l
+108.545 213.072 l
+112.087 218.519 l
+115.629 259.152 l
+119.171 273.925 l
+122.713 280.520 l
+126.255 282.309 l
+129.797 280.332 l
+133.339 274.683 l
+136.881 264.621 l
+140.423 247.681 l
+143.965 212.929 l
+147.507 184.774 l
+151.049 218.234 l
+154.591 243.484 l
+158.133 254.844 l
+161.675 259.959 l
+165.217 260.773 l
+168.759 257.793 l
+172.301 250.665 l
+175.843 237.757 l
+179.385 212.685 l
+182.927 178.994 l
+186.469 -424.877 l
+190.011 217.746 l
+193.553 235.408 l
+197.095 243.801 l
+200.637 247.028 l
+204.179 246.206 l
+207.721 241.360 l
+211.263 231.429 l
+214.805 212.332 l
+218.347 138.495 l
+221.889 185.787 l
+225.431 183.612 l
+228.973 217.038 l
+232.515 229.873 l
+236.057 235.734 l
+239.599 237.005 l
+243.141 234.198 l
+246.683 226.722 l
+250.225 211.859 l
+253.767 169.476 l
+257.309 186.593 l
+260.851 173.823 l
+264.393 194.732 l
+267.935 216.079 l
+271.477 225.369 l
+275.019 228.930 l
+278.561 228.116 l
+282.103 222.822 l
+285.645 211.246 l
+289.187 183.443 l
+292.729 181.050 l
+296.271 187.513 l
+299.812 178.164 l
+303.354 199.915 l
+306.896 214.825 l
+310.438 221.217 l
+313.980 222.524 l
+317.522 219.301 l
+321.064 210.468 l
+324.606 190.157 l
+328.148 169.944 l
+331.690 189.675 l
+335.232 181.582 l
+338.774 172.547 l
+342.316 202.663 l
+345.858 213.205 l
+349.400 216.995 l
+352.942 215.878 l
+356.484 209.487 l
+360.026 194.151 l
+363.568 141.332 l
+367.110 188.290 l
+370.652 190.018 l
+374.194 168.185 l
+377.736 185.194 l
+381.278 203.994 l
+384.820 211.108 l
+388.362 212.316 l
+391.904 208.247 l
+395.446 196.681 l
+398.988 154.875 l
+402.530 184.658 l
+406.072 192.833 l
+409.614 186.663 l
+413.156 -460.889 l
+416.698 191.640 l
+420.240 204.277 l
+423.782 208.351 l
+427.324 206.663 l
+430.866 198.243 l
+434.408 172.764 l
+437.950 178.651 l
+441.492 193.308 l
+445.034 193.407 l
+448.576 179.767 l
+452.118 167.615 l
+455.660 195.351 l
+459.202 203.595 l
+462.744 204.597 l
+466.286 199.048 l
+469.828 181.359 l
+473.370 168.699 l
+476.912 192.336 l
+480.454 196.765 l
+483.996 191.640 l
+487.538 166.317 l
+491.080 180.819 l
+494.622 197.324 l
+498.164 201.811 l
+501.706 199.150 l
+505.248 186.669 l
+508.790 146.473 l
+512.332 190.158 l
+515.874 198.473 l
+519.416 197.844 l
+522.958 187.711 l
+stroke
+grestore
+% draw_lines
+0.000 0.500 0.000 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 344.646 m
+76.667 344.163 l
+80.209 342.697 l
+83.751 340.206 l
+87.293 336.608 l
+90.835 331.765 l
+94.377 325.450 l
+97.919 317.263 l
+101.461 306.406 l
+105.003 290.855 l
+108.545 260.984 l
+112.087 257.910 l
+115.629 270.113 l
+119.171 268.975 l
+122.713 260.468 l
+126.255 240.233 l
+129.797 221.580 l
+133.339 244.142 l
+136.881 246.939 l
+140.423 241.790 l
+143.965 226.836 l
+147.507 180.268 l
+151.049 224.403 l
+154.591 230.521 l
+158.133 227.898 l
+161.675 216.607 l
+165.217 170.426 l
+168.759 207.344 l
+172.301 217.011 l
+175.843 216.608 l
+179.385 208.152 l
+182.927 180.524 l
+186.469 191.080 l
+190.011 205.174 l
+193.553 206.908 l
+197.095 200.811 l
+200.637 181.119 l
+204.179 173.710 l
+207.721 194.292 l
+211.263 198.229 l
+214.805 194.208 l
+218.347 179.396 l
+221.889 150.824 l
+225.431 183.851 l
+228.973 190.209 l
+232.515 188.106 l
+236.057 176.779 l
+239.599 96.814 l
+243.141 173.388 l
+246.683 182.589 l
+250.225 182.337 l
+253.767 173.737 l
+257.309 141.172 l
+260.851 162.345 l
+264.393 175.162 l
+267.935 176.773 l
+271.477 170.451 l
+275.019 148.477 l
+278.561 149.804 l
+282.103 167.738 l
+285.645 171.309 l
+289.187 166.991 l
+292.729 150.785 l
+296.271 133.522 l
+299.812 160.118 l
+303.354 165.850 l
+306.896 163.377 l
+310.438 151.052 l
+313.980 101.679 l
+317.522 152.059 l
+321.064 160.303 l
+324.606 159.598 l
+328.148 150.196 l
+331.690 108.402 l
+335.232 143.204 l
+338.774 154.567 l
+342.316 155.626 l
+345.858 148.598 l
+349.400 123.046 l
+352.942 132.938 l
+356.484 148.525 l
+360.026 151.416 l
+363.568 146.427 l
+367.110 128.129 l
+370.652 119.895 l
+374.194 142.026 l
+377.736 146.903 l
+381.278 143.752 l
+384.820 129.951 l
+388.362 99.390 l
+391.904 134.864 l
+395.446 141.999 l
+398.988 140.570 l
+402.530 129.986 l
+406.072 64.275 l
+409.614 126.723 l
+413.156 136.580 l
+416.698 136.826 l
+420.240 128.745 l
+423.782 97.807 l
+427.324 117.071 l
+430.866 130.463 l
+434.408 132.397 l
+437.950 126.376 l
+441.492 105.122 l
+445.034 104.861 l
+448.576 123.364 l
+452.118 127.052 l
+455.660 122.786 l
+459.202 106.813 l
+462.744 87.365 l
+466.286 114.801 l
+469.828 120.363 l
+473.370 117.588 l
+476.912 105.003 l
+480.454 48.696 l
+483.996 103.833 l
+487.538 111.400 l
+491.080 109.755 l
+494.622 99.282 l
+498.164 58.352 l
+501.706 88.110 l
+505.248 97.502 l
+508.790 95.852 l
+512.332 85.318 l
+515.874 55.606 l
+519.416 56.356 l
+522.958 59.120 l
+stroke
+grestore
+% draw_lines
+0.750 0.000 0.750 setrgbcolor
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 346.280 m
+76.667 345.676 l
+80.209 343.845 l
+83.751 340.736 l
+87.293 336.248 l
+90.835 330.224 l
+94.377 322.407 l
+97.919 312.371 l
+101.461 299.341 l
+105.003 281.601 l
+108.545 253.253 l
+112.087 220.282 l
+115.629 233.441 l
+119.171 220.121 l
+122.713 198.594 l
+126.255 213.622 l
+129.797 232.741 l
+133.339 242.085 l
+136.881 243.804 l
+140.423 237.025 l
+143.965 203.960 l
+147.507 230.388 l
+151.049 244.073 l
+154.591 246.690 l
+158.133 241.191 l
+161.675 219.125 l
+165.217 223.903 l
+168.759 241.739 l
+172.301 245.662 l
+175.843 241.477 l
+179.385 224.009 l
+182.927 215.555 l
+186.469 238.476 l
+190.011 243.766 l
+193.553 240.795 l
+197.095 226.371 l
+200.637 204.635 l
+204.179 234.918 l
+207.721 241.638 l
+211.263 239.805 l
+214.805 227.701 l
+218.347 187.148 l
+221.889 231.207 l
+225.431 239.460 l
+228.973 238.716 l
+232.515 228.509 l
+236.057 142.756 l
+239.599 227.342 l
+243.141 237.284 l
+246.683 237.602 l
+250.225 229.015 l
+253.767 188.027 l
+257.309 223.261 l
+260.851 235.117 l
+264.393 236.489 l
+267.935 229.330 l
+271.477 199.520 l
+275.019 218.852 l
+278.561 232.949 l
+282.103 235.386 l
+285.645 229.515 l
+289.187 205.946 l
+292.729 213.941 l
+296.271 230.761 l
+299.812 234.290 l
+303.354 229.607 l
+306.896 210.254 l
+310.438 208.235 l
+313.980 228.529 l
+317.522 233.195 l
+321.064 229.626 l
+324.606 213.410 l
+328.148 201.185 l
+331.690 226.226 l
+335.232 232.097 l
+338.774 229.588 l
+342.316 215.852 l
+345.858 191.524 l
+349.400 223.818 l
+352.942 230.985 l
+356.484 229.500 l
+360.026 217.812 l
+363.568 174.865 l
+367.110 221.263 l
+370.652 229.851 l
+374.194 229.371 l
+377.736 219.429 l
+381.278 138.835 l
+384.820 218.509 l
+388.362 228.686 l
+391.904 229.202 l
+395.446 220.789 l
+398.988 179.721 l
+402.530 215.482 l
+406.072 227.478 l
+409.614 228.996 l
+413.156 221.953 l
+416.698 191.902 l
+420.240 212.081 l
+423.782 226.215 l
+427.324 228.754 l
+430.866 222.960 l
+434.408 199.153 l
+437.950 208.147 l
+441.492 224.884 l
+445.034 228.476 l
+448.576 223.841 l
+452.118 204.278 l
+455.660 203.420 l
+459.202 223.466 l
+462.744 228.160 l
+466.286 224.618 l
+469.828 208.221 l
+473.370 197.415 l
+476.912 221.941 l
+480.454 227.805 l
+483.996 225.308 l
+487.538 211.417 l
+491.080 189.040 l
+494.622 220.282 l
+498.164 227.408 l
+501.706 225.922 l
+505.248 214.102 l
+508.790 174.825 l
+512.332 218.457 l
+515.874 226.966 l
+519.416 226.472 l
+522.958 216.418 l
+stroke
+grestore
+% text
+0.000 setgray
+/Verdana findfont
+18.000 scalefont
+setfont
+119.312 403.956 m
+0 4 rmoveto
+(Smoothing window in frequency-domain) show
+% text
+/Verdana findfont
+14.000 scalefont
+setfont
+62.469 30.1 m
+(0.0) show
+% line
+0.500 setlinewidth
+0 setlinecap
+163.800 44.100 m 163.800 48.100 l
+stroke
+% line
+163.800 392.900 m 163.800 396.900 l
+stroke
+% text
+153.175 30.1 m
+(0.1) show
+% line
+254.475 44.100 m 254.475 48.100 l
+stroke
+% line
+254.475 392.900 m 254.475 396.900 l
+stroke
+% text
+243.85 30.1 m
+(0.2) show
+% line
+345.150 44.100 m 345.150 48.100 l
+stroke
+% line
+345.150 392.900 m 345.150 396.900 l
+stroke
+% text
+334.994 30.1 m
+(0.3) show
+% line
+435.825 44.100 m 435.825 48.100 l
+stroke
+% line
+435.825 392.900 m 435.825 396.900 l
+stroke
+% text
+424.825 30.1 m
+(0.4) show
+% text
+515.844 30.1 m
+(0.5) show
+% text
+221.875 11.1 m
+0 3 rmoveto
+(Normalized Frequency) show
+% text
+37.062 39.1 m
+(-100) show
+% line
+73.125 91.140 m 77.125 91.140 l
+stroke
+% line
+522.500 91.140 m 526.500 91.140 l
+stroke
+% text
+47.062 86.14 m
+(-80) show
+% line
+73.125 138.180 m 77.125 138.180 l
+stroke
+% line
+522.500 138.180 m 526.500 138.180 l
+stroke
+% text
+47.062 133.18 m
+(-60) show
+% line
+73.125 185.220 m 77.125 185.220 l
+stroke
+% line
+522.500 185.220 m 526.500 185.220 l
+stroke
+% text
+47.062 180.22 m
+(-40) show
+% line
+73.125 232.260 m 77.125 232.260 l
+stroke
+% line
+522.500 232.260 m 526.500 232.260 l
+stroke
+% text
+47.062 227.26 m
+(-20) show
+% line
+73.125 279.300 m 77.125 279.300 l
+stroke
+% line
+522.500 279.300 m 526.500 279.300 l
+stroke
+% text
+61.812 274.3 m
+(0) show
+% line
+73.125 326.340 m 77.125 326.340 l
+stroke
+% line
+522.500 326.340 m 526.500 326.340 l
+stroke
+% text
+53.062 321.34 m
+(20) show
+% line
+73.125 373.380 m 77.125 373.380 l
+stroke
+% line
+522.500 373.380 m 526.500 373.380 l
+stroke
+% text
+52.938 368.38 m
+(40) show
+% text
+32.062 168.461 m
+gsave
+90 rotate
+0 3 rmoveto
+(Magnitude \(dB\)) show
+grestore
+% polygon
+1.000 setlinewidth
+2 setlinecap
+346.389 279.264 m
+346.389 389.844 l
+517.433 389.844 l
+517.433 279.264 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+0.000 0.000 1.000 setrgbcolor
+362.443 371.629 m
+369.999 371.629 l
+377.555 371.629 l
+385.111 371.629 l
+stroke
+% draw_lines
+1.000 0.000 0.000 setrgbcolor
+362.443 349.712 m
+369.999 349.712 l
+377.555 349.712 l
+385.111 349.712 l
+stroke
+% draw_lines
+0.000 0.500 0.000 setrgbcolor
+362.443 325.795 m
+369.999 325.795 l
+377.555 325.795 l
+385.111 325.795 l
+stroke
+% draw_lines
+0.750 0.000 0.750 setrgbcolor
+362.443 299.479 m
+369.999 299.479 l
+377.555 299.479 l
+385.111 299.479 l
+stroke
+% text
+0.000 setgray
+/Verdana findfont
+24.000 scalefont
+setfont
+394.179 362.629 m
+(Blackman) show
+% text
+394.179 340.712 m
+(Bartlett) show
+% text
+394.179 314.795 m
+0 5 rmoveto
+(Hanning) show
+% text
+394.179 288.479 m
+0 5 rmoveto
+(Hamming) show
+
+end
+showpage
diff --git a/numpy/doc/numpybook/Figures/fig2bw.eps b/numpy/doc/numpybook/Figures/fig2bw.eps
new file mode 100644
index 000000000..f6ab19621
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/fig2bw.eps
@@ -0,0 +1,4919 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: fig2bw.eps
+%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/
+%%CreationDate: Fri Jan 6 00:30:17 2006
+%%BoundingBox: 13 175 598 616
+%%EndComments
+%%BeginProlog
+/mpldict 7 dict def
+mpldict begin
+/m { moveto } bind def
+/l { lineto } bind def
+/r { rlineto } bind def
+/box {
+m
+1 index 0 r
+0 exch r
+neg 0 r
+closepath
+} bind def
+/clipbox {
+box
+clip
+newpath
+} bind def
+/ellipse {
+newpath
+matrix currentmatrix 7 1 roll
+translate
+scale
+0 0 1 5 3 roll arc
+setmatrix
+closepath
+} bind def
+%%BeginFont: Verdana
+%!PS-TrueType-1.0-1.0
+8 dict begin
+/FontName /Verdana def
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 42 def
+/Encoding StandardEncoding def
+/FontBBox [-102 -423 2963 2049] def
+/PaintType 0 def
+/FontInfo 7 dict dup begin
+/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def
+/FamilyName (Verdana) def
+/FullName (Verdana) def
+/version (Version 2.35) def
+/isFixedPitch false def
+/UnderlinePosition -180 def
+/UnderlineThickness 120 def
+end readonly def
+/sfnts [
+<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F
+00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4
+000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198
+6670676DEE371553000021740000013867617370001700090000021000000010676C7966
+01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C
+0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444
+00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC
+6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374
+C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000
+16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801
+00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000
+00000000000000000000037D00010000037D00620007006B000500020010002F00380000
+0495013F0003000100010411019000050000059A053300000125059A0533000003A00078
+02A70800020B0604030504040204000002870000000000000000000000004D5320200040
+0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001
+FFFF00030000002801E60001000000000000004300000001000000000001000700430001
+0000000000020007004A0001000000000003002F00510001000000000004000700800001
+000000000005000C00870001000000000006000700930001000000000007002F009A0003
+000104030002000C00C90003000104050002001000D50003000104060002000C00E50003
+000104070002001000F10003000104080002001001010003000104090000008601110003
+000104090001000E01970003000104090002000E01A50003000104090003005E01B30003
+000104090004000E021100030001040900050018021F0003000104090006000E02370003
+000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003
+0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003
+000104130002001202E50003000104140002000C02F70003000104150002001003030003
+000104160002000C03130003000104190002000E031F00030001041B00020010032D0003
+0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003
+0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003
+00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064
+61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C
+6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F
+736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372
+6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264
+616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270
+6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900
+6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03
+BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400
+6100740061002000A9002000310039003900360020004D006900630072006F0073006F00
+66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00
+6C0020005200690067006800740073002000520065007300650072007600650064005600
+65007200640061006E00610052006500670075006C00610072004D006900630072006F00
+73006F00660074003A00560065007200640061006E006100200052006500670075006C00
+610072003A00560065007200730069006F006E0020003100200028004D00690063007200
+6F0073006F00660074002900560065007200640061006E00610056006500720073006900
+6F006E00200032002E0033003500560065007200640061006E0061005600650072006400
+61006E006100200069007300200061002000740072006100640065006D00610072006B00
+20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000
+6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100
+61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200
+6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100
+6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04
+47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00
+4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00
+740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00
+61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A
+000001060000010000000000000001020000000200000000000000000000000000000001
+0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324
+25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748
+494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B
+6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F
+909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2
+B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5
+D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF
+02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85
+1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116
+21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA
+25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303
+03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026
+203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202
+2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01
+FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000
+0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077
+E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74
+DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000
+000002380000023800000000000000000000023800000242026800000000000000000000
+000002B203640368037600000000000000000000000000000000036A0000036A00000000
+000000000000000000000000000000000358000003580000000000000000000000000000
+0000000000000000034400000000000300A300840085037C009600E60086008E008B009D
+00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3
+00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC
+00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A
+0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A
+0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104
+010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E
+014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A
+015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E
+01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D
+016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9
+00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125
+0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9
+00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B
+01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D
+01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7
+01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5
+01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A
+026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C
+027D027E027F028002810282028302840285028602870288034C034D034E034F03500351
+03520353035403550356035703580359035A035B035C035D035E035F0360036103620363
+036403650366036703680369036A036B036C036D036E036F037003710191019203740375
+037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087
+00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242
+0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE
+04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13
+0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE
+122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747
+17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B
+1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226
+2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C
+245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2
+2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7
+316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD
+361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03
+3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47
+3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF
+40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF
+44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8
+48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E
+4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58
+4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491
+54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8
+575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2
+5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD
+5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1
+62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589
+65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A
+67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48
+6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA
+705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE
+73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA
+78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E
+7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9
+82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD
+87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73
+8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD
+9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7
+95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759
+976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB
+98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF
+98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911
+9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB
+9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22
+9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B
+0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F
+740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4
+110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D
+B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10
+010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101
+01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101
+0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D
+320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C
+111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D
+230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D
+100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01
+010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C
+111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A
+100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22
+11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11
+0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10
+282001010101010101010101010101010101010101320D320D320D320D320D320D320D32
+0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+010101010101010101010101010101010101010101010101010101010101010101010101
+01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B
+28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C
+00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D
+000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013
+0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019
+001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F
+0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025
+0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B
+002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031
+0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037
+0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D
+003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043
+0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049
+0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F
+004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055
+0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B
+005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061
+0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067
+0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D
+006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073
+0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079
+0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F
+007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085
+0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B
+008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091
+0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097
+0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D
+009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3
+00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9
+00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF
+00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5
+00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB
+00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1
+00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7
+00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD
+00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3
+00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9
+00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF
+00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5
+00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB
+00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1
+00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7
+00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD
+00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280
+B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55
+026F54019F54AF54025153170452531604535215044A4952044649370447493204484932
+04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532
+0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3
+B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3
+092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936
+4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590
+8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540
+C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914
+15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314
+480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B
+1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A
+1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10
+BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A
+0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808
+004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861
+B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B
+2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B
+2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736
+26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258
+45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225
+45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C
+60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0
+042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820
+8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320
+468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046
+8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60
+441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010
+0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF
+00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC
+00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098
+009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF
+006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1
+0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072
+0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A
+006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A
+008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000
+045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100
+0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073
+022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2
+0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A
+0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A
+057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C
+058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086
+04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046
+03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A
+02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9
+04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056
+04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A
+05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068
+04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB
+0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1
+051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9
+0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E
+064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB
+068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071
+03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2
+0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096
+0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA
+03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A
+050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073
+064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118
+05160113051602210516012D05160161051601560516019F05160132047E001802460018
+05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D
+04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB
+0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069
+05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068
+062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB
+047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073
+04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E
+04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E
+0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A
+065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5
+047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A
+04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A
+050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8
+051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001
+035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005
+05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8
+036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1
+05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9
+0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056
+07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089
+05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100
+057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A
+057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8
+05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044
+06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1
+04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9
+04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071
+02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073
+05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006
+060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051
+060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8
+0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8
+06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9
+03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D
+059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F
+04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053
+06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005
+02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9
+080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3
+045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1
+0000020900000221000001540000021D0516013605160003051601360516012505160142
+051601420516014205160125051602090516013605160142051601420516014205160142
+051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3
+0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A
+04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A
+050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8
+04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000064C007304DB006A064C0073
+04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A
+064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073
+04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1
+060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006
+04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED
+0516008A0000001F00000380090E09000303050507070B07030404070703050304070707
+070707070707070404070707060A08070808070608080505070609080907090707070808
+090707070404040706060606060606030606030306030906060606040604060607060605
+060506070808080708090806060606060606060606060303030306060606060606060606
+07050707060507060909090606070A090907070707060607070607050507090606050707
+0707070606070808090A0907090404020207070607030604040606070302040E08070807
+070505050509090908080803060606060606060606060603070607050508060706070607
+070505050909090608060507060806080606060308060806080608070607060603060306
+040806080609060704070407060704070408060806070507050609070606050605090606
+050B09060703050B03050303050308060806080607060706070608060806080608060806
+050305030503050305030706060603080608060906090607040706070408060806080608
+06090707060308060A090906040907090709070706020607060909090902060606080809
+060908090308070607070805070809080709080706070707090905070605060306060505
+060603060606060506060506050907030606060707080608070505050A0A070707070807
+070607070906080807070908090807080707070708070909080907080907060606040606
+070506060606070606060606050609060705090907080606080606060406060303030909
+060606060505090B06050505050505050000000009060806000000000606060606060606
+060606060606060806080608060806080608060806080608060806080608060706070607
+060706070607060706070605030503000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000090609060906
+090609060906090609060906090609060906080608060806080608060806080607060706
+07060706060007000A0F0A000404040508070B0703050507080405040507070707070707
+0707070505080808060A070708080606080805050706090709070908070708070B070707
+0505050806060707050707040707030307030B0707070704060407060707060606050608
+070708060709080707070707070507070707030303030707070707070707070707050707
+060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706
+06080707090B0A070A0505030308080607040605050606070403050F0706070606050505
+050909090808080306060606060606060606060307060706050806070607070808050505
+0A0A0A060807050706080508050706040707070708070806070607060306030605070707
+0709070804080407060704070408070807070607060609090707050705090606050C0906
+0704060B0306040406040707080508050607060706070807080708070807080705030503
+0503050305030707070603070707070907090708040706070408070807080708070B0707
+060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909
+030707070607080507070907070908070707070709090507070507030707070507070307
+0607060507070507060909030707070906080608070505050B0B08070708070707060706
+0906080807070908090807080707090709070B0B080907080A0707070605060707050707
+0706070707070705050609070706090A0708060608060707050606030303090907070607
+06050A0C0705050505050505000000000907080700000000060606060606060606060606
+060606070707070707070707070707070707070707070707070707060706070607060706
+070607060706070503050300000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000009070907090709070907
+090709070907090709070907090708070807080708070807080708070706070607060706
+070007000B110B000404040509070C080305050709040504050707070707070707070705
+05090909060A080809090706090805050806090809070908080708080B08070805050509
+07070707060707040707030407030B070707070506040707090707060705070908080907
+080908070707070707060707070703030303070707070707070707070706070707060707
+0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808
+090C0B070B05050303090907070407050507070704030511080708070705050505090909
+08080803070707070707070707070603080608060509070707070709090606060B0B0B07
+090705080609060906070704080708070907090707070706030603060508070807090708
+05080508060704070408070807080608060609090707060705090707060D0A070804060C
+040704040704080709060906070707070707090709070907080708070503050305030503
+05040807070603080708070907090708050806070408070807080708070B090707030807
+0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808
+070808050808090807090807070707080909050707060703070707050707030707070706
+07070607070909030707070907090609080505050D0C090808080808080608070B070808
+08080908090807090708090809080B0C090A07090B080707070508070906070707070707
+07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D
+070606060606060600000000090708070000000007070707070707070707070707070708
+070807080708070807080708070807080708070807080707070707070707070707070707
+070707050305030000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000907090709070907090709070907
+090709070907090709070807080708070807080708070807070707070707070707000700
+0C120C00040405060A080D09030505080904050405080808080808080808080505090909
+070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808
+060808040808030407030B0808080805070508070B0707070805080A08080908090A0908
+08080808080608080808030303030808080808080808080808070808080708070C0C0C08
+08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08
+0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903
+0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508
+07090609060808040808080809090908080808070307040706090809080A080805080508
+07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404
+070408080906090608080808080809080908090809080908050305030503050305040807
+070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08
+050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905
+08080A09080A0908080707080B0A05070806080308070706080803080708070608080608
+070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09
+0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806
+07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707
+07070707000000000A080908000000000808080808080808080808080808080808080808
+080808080808080808080808080808080808080808080808080808080808080808080805
+030503000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08
+0A080A080A0809080908090809080908090809080707070707070707080008000D140D00
+050505050A080D09030606090905070506080808080808080808080606090909070D0908
+090908080909050608070B090A080A08090909090D0909090606060B0808080808080805
+0808030407030B0808080805070608080B0708070807080B09090908090A090808080808
+080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A
+0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603
+03090B080905080606080808050306140908090808050505050A0A0A0909090308080808
+08080808080807030907090707090809080808090B0707070D0D0D080908050907090809
+080808050908090809080908080808070307040706090809080A08080508050907090609
+060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908
+090809080808080808080908090809080908090805030503050305030604080707070309
+0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D
+0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09
+080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03
+0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809
+09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07
+09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707
+000000000A08090900000000080808080808080808080808080808090809080908090809
+080908090809080908090809080908080808080808080808080808080808080503050300
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08
+0A0809080908090909090909090909090908090809080908080008000E150E0005050606
+0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908
+0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305
+08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808
+0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B
+0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08
+0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909
+090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905
+0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A
+090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07
+0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B
+090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09
+080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08
+0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B
+090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A
+0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C
+090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000
+0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A
+080A080A080A080A080A0809080908090809080908090809080908050305030000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09
+0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B
+0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507
+0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09
+0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303
+0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B
+0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07
+0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803
+0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09
+0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A
+09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909
+09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A
+060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A
+0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A
+0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B
+0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10
+0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908
+0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A
+000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A
+090A090A090A090909090909090909090909090909090905030503000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A
+0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A
+0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C
+0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06
+09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A
+0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09
+090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A
+060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09
+070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A
+0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D
+0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A
+0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A
+070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010
+10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B
+0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707
+12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B
+110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A
+0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000
+0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B
+0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B
+0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806
+080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C
+0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A
+0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A
+0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A
+09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A
+0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A
+0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09
+05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B
+080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B
+0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C
+0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B
+0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05
+0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C
+0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A
+0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905
+050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B
+0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000D0A
+0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B
+0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B
+0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C
+120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09
+0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B
+0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F
+0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B
+0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F
+0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A
+080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B
+0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B
+080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D
+0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10
+0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08
+0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C
+0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B
+0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010
+0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B
+0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B
+0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B
+0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B
+0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C
+0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D
+090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10
+0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C
+0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C
+0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808
+080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A
+1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E
+0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C
+0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806
+0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C
+0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11
+060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B
+0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C
+120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C
+0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C
+0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C
+0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C
+0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C
+0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B
+0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09
+091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910
+0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D
+0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C
+1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E
+1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010
+0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D
+100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E
+090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16
+060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806
+09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C
+1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E
+0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A
+0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F
+0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D
+0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417
+0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E
+0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D
+0C0D0C080608060000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000100C100C100C100C100C100C100C
+110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00
+152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111
+0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D
+0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D
+0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D
+0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D
+150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06
+0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E
+0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E
+0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707
+0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C
+0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D
+0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008
+0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D
+0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210
+11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B
+0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B
+0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E
+0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08
+060806000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D
+120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600
+0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F
+0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08
+0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D
+0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511
+161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06
+0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E
+0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F
+0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E
+09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D
+0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610
+0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216
+1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310
+0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206
+0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F
+0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D
+0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C
+00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F
+0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D
+120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B
+130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D
+12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608
+0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E
+0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313
+0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E
+0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F
+0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08
+100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11
+0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C
+0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12
+0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E
+0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E
+0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13
+0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310
+121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414
+0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000
+130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10
+0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F
+110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11
+060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B
+110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F
+0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606
+06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11
+14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B
+0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06
+100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E
+1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10
+0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E
+0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11
+0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F
+1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10
+15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11
+100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919
+1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D
+140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210
+000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10
+0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210
+12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11
+160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714
+15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C
+0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110
+1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F
+0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111
+0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E
+0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511
+1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516
+11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511
+15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11
+0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B
+1B061111111214180F181419071213131113140B13131714121514101211111318160B11
+110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C
+1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213
+1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011
+0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000
+111111111111111111111111111111121012101210121012101210121012101210121012
+101210111011101110111011101110111011100B070B0700000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000015101510151015101510151015101610161016101610161014111411141214121412
+141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B
+0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714
+141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211
+1811110F120D1218141414121617151111111111110F1111111109090909121212121212
+1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12
+100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C
+14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212
+11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110
+091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12
+0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612
+161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215
+12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212
+12141619101A161A091414141214160D14141816131716111412121419180D12120F1209
+1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814
+12161414141016121C12161614151816171611141212181416151E1E171B14141E141112
+110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09
+090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212
+121212121212121212121214111411141114111411141114111411141114111411141112
+1112111211121112111211121112110D090D090000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000001712
+171217121712171217121712171217121712171217121512151216131613161316131613
+121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414
+141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716
+201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311
+140F141A1616161418191713131313131311131313130909090914131313131314141414
+141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A
+141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614
+140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A
+1A1111112020201419140D16111611161114140C16131613191519141314131209120912
+0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414
+11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814
+0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417
+14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C
+111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F
+141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616
+161218141F14181816181B181918131614141A1618172121191D161621171314130F1413
+1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D
+14131314120F20261411111111111111000000001A131815000000001414141414141414
+141414141414141613161316131613161316131613161316131613161316131413141314
+13141314131413141314130D090D09000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000191319131913
+19131913191319131A131A131A131A131A13171417141815181518151815181514131413
+1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515
+1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417
+0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B
+17171715191A181414141414141114141414090909091514141414141515151515121515
+1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815
+151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D
+0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212
+212121151A150D17111711171115150C1714171419151A151415141209120A120F191519
+151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14
+180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09
+0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14
+140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E
+091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914
+1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915
+2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515
+141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415
+131021271512121212121212000000001B14191600000000151515151515151515151515
+151515171417141714171417141714171417141714171417141714151415141514151415
+141514151415140D090D0900000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000001A141A141A141A141A14
+1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414
+15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811
+111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E
+181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17
+1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817
+25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919
+1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D
+1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518
+1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A
+101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528
+0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A
+110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916
+24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A
+17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613
+16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C
+1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18
+1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B
+1814141414141414000000001E161C180000000018181818181818181818181818181819
+161916191619161916191619161916191619161916191617161716171617161716171617
+161716100A100A0000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000001D161D161D161D161D161D161D16
+1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800
+2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222
+172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A
+161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19
+191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B
+1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B
+2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C
+1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D
+161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D
+161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F
+190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19
+19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119
+132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012
+1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B
+1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320
+2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16
+151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717
+17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D
+191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912
+0C120C000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000211921192119211921192119211922192219
+2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00
+10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20
+20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10
+1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C
+1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24
+2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C
+0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D
+1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820
+181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C
+12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C
+201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22
+1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D
+262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722
+1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C
+1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20
+1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B
+1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919
+00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F
+1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C
+251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417
+292036240D17172029121712172020202020202020202017172929291B3222222327201D
+27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11
+1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E
+1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929
+202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E
+1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020
+20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012
+221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025
+20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A
+201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027
+1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F
+1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E
+221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029
+20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922
+26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C
+20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000
+281E262100000000202020202020202020202020202020221E221E221E221E221E221E22
+1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520
+2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27
+0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719
+251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522
+212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F
+0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227
+2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219
+19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F
+251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520
+2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25
+1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220
+22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126
+17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222
+27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125
+2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26
+251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838
+2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E
+2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924
+000000002222222222222222222222222222222520252025202520252025202520252025
+2025202520252022202220222022202220222022202220170F170F000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924
+29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25
+2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B
+2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419
+1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523
+2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520
+202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425
+15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E
+1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25
+232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30
+24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24
+2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24
+172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A
+3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824
+241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A
+41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729
+3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325
+1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000
+252525252525252525252525252525282328232823282328232823282328232823282328
+23282325232523252325232523252325232523180F180F00000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26
+2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18
+1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F
+2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28
+372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929
+2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029
+251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66
+2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929
+28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825
+122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A
+21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A
+322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31
+2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B
+2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12
+2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E
+29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829
+28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312
+12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B
+2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A
+282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000003529
+35293529352935293529352936293629362936293629312A312A332C332C332C332C332C
+29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030
+3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733
+4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27
+3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F
+302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D
+303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F
+2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D
+3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A
+22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F
+2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F
+1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37
+2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841
+28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22
+2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333
+332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D
+3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545
+2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030
+30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F
+2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E
+3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C
+2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535
+35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339
+26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544
+39393A343E413D3232323232322B313131311818181835323232323235353535352D3535
+352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36
+36443939415951355326261616444431331E3526263434351E16267E3934393434222222
+224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D
+53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E
+3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833
+3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218
+22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433
+31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B
+1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831
+3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34
+51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535
+31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135
+2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535
+353535393239323932393239323932393239323932393239323932343134313431343134
+313431343134312218221800000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000041324132413241324132
+41324132433243324332433243323D353D353F373F373F373F373F373331333133313331
+340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A
+2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B
+3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A
+4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39
+5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F
+48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848
+434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A
+4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840
+2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363
+1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718
+2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37
+5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41
+3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E
+383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545
+40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B
+383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C
+3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F
+373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A
+373A37271827180000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000004838483848384838483848384838
+4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00
+649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252
+37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E
+343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C
+3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240
+4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240
+642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B
+40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44
+34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44
+343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323
+3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B
+3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D
+2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A
+4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F
+3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B
+4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35
+323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636
+3636363600000000513D4C4200000000404040404040404040404040404040443C443C44
+3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A
+1B2A1B000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D
+513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100
+000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111
+2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007
+0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED
+332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1
+0304061400030007002640150206060307010F09400902032C0040000100042C072FED33
+5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD
+BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17
+7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E
+0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5
+131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F
+ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0
+C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135
+2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE
+CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178
+8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16
+70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A
+08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18
+312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031
+201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932
+2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130
+5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117
+15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362
+2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101
+7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D
+C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807
+05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908
+260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203
+031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616
+282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33
+2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633
+321625012309011406232226353436333216013426232206151416333236013426232206
+1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59
+64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC
+DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018
+004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576
+087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008
+300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D
+1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D
+3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673
+4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B
+2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633
+323601151406070123270E01232224353436373E01372E01353436373E01333216151406
+070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32
+3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102
+0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71
+F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4
+03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301
+822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803
+28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830
+000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01
+070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01
+2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D
+060306131503151326012603261326154701400340134715500350136003601379007602
+700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F
+3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49
+4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001
+00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554
+0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450
+0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B
+060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217
+392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606
+8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167
+FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D
+01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4
+FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0
+0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500
+590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09
+012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02
+01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270
+0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00
+3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116
+01250138004900440156016701770186010A011202032F02010200010000022F332F003F
+2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F
+05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15
+4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130
+5D011002212002111012212012013E01353426272E01232206070E01151416171E013332
+36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C
+02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52
+4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502
+1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED
+3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098
+03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116
+03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B
+0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F
+100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202
+101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01
+373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0
+8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223
+3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F
+290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C
+780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D
+020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10
+E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514
+06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01
+2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6
+6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C
+02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1
+233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D
+240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F
+0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39
+395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311
+3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001
+00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08
+7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F
+1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F
+ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01
+353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC
+6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3
+344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED
+0022003700644044060D160D3925333133374925423143375F01560D5020502165217531
+0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F
+2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114
+002322262726023534123736243332161715232E01232200073E01333216171E01073426
+272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50
+290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601
+E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014
+282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801
+4B0258027903070301000120020203000002034A050302080F081F087B02030300020204
+0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123
+012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028
+0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B
+592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616
+0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39
+0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F
+ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334
+26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1
+908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F
+92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912
+3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045
+0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914
+294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED
+5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627
+35331E01333212370E01232226272E01353400333216171612073426272E012322061514
+16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859
+012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C
+BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28
+15290002015A00000249045D00030007001E4010015602050656050807002D0600010101
+2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002
+00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806
+5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F
+5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03
+40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306
+540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840
+080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887
+10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75
+FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940
+09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001
+213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006
+006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01
+2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939
+5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB
+7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069
+40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870
+090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000
+172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406
+070E01071523113E01373E013534262322060723353E013332160123353303ED46393892
+52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D
+346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04
+0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05
+2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766
+3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A
+510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37
+0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00
+3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01
+23222635341233321617353311333E013534022726242322040706021514121716043332
+3637150E0123222427260235341237362433320417161201112E01232206151416333236
+074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63
+010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B
+438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A
+A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6
+A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287
+01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06
+03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C
+010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F
+39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121
+130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8
+0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07
+1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D
+10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216
+171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132
+36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E
+2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08
+1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546
+05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28
+600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C
+3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E
+012322242726023534123736243332161715232E01232206070E01151416171E01333236
+373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543
+46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D
+E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408
+03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00
+3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637
+3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE
+B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B
+003B402309350006100602060601053502030A350108040008010800730D0F0D01060914
+016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111
+21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009
+0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6
+FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79
+C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06
+130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734
+0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED
+3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021
+32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770
+01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101
+23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B
+05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D
+03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133
+11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B
+002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4
+3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804
+A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403
+09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623
+22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5
+02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075
+190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901
+3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302
+0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D
+400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87
+10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE
+FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005
+002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901
+113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138
+023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903
+050A020309000410043404440454046A04060404070B0903010708090A0B030502140078
+0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931
+30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001
+130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07
+34074507510761077107077606010F0102061F0115063406440653066B0160067F017006
+0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304
+6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121
+0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017
+002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13
+53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824
+10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412
+373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58
+01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9
+B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010
+001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309
+080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D
+10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107
+3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E
+C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002
+0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D
+59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979
+150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303
+2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31
+305D015D010E01232226270E01232224272602353412373624333216171612151002071E
+01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160
+5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D
+BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201
+3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01
+3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010
+071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019
+031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710
+7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637
+3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD
+B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030
+009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510
+4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D
+86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A
+111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F
+ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127
+2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85
+0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801
+A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28
+152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B
+0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC
+04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03
+4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10
+F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E
+01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A
+4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066
+470148020205040507065706860603061400000105070457048604030414030203080144
+014B02580273017C02060005027503010303020845004A0302020103040024003A005A00
+6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10
+F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309
+01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C
+00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329
+08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A
+0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001
+000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00
+75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187
+10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01
+390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1
+000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557
+09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201
+020514060607050407010A0B0602080302080F0D01060216022602360247020509081908
+290839084808050208070A04010406020D00160026003600470050000600660D08090619
+062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931
+30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5
+FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006
+000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619
+08270628085606590865066A08080814000100061405040502000D050200010004000703
+040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4
+ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104
+E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1
+000900594036030708060813082608360846085608660876080808B30202030707033506
+03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939
+2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603
+91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201
+0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208
+FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A
+0138014B01590168017801890109011200032F000100030100006002700202022F5D332F
+003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614
+0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521
+1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034
+3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F
+036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309
+0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003
+0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154
+051602FA068C000300244016480159026902790204500360037003030303010000022F33
+2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026
+0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A
+0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A
+001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED
+3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437
+353426272E012322060723353E01333216171E011503110E01070E01151416333236041D
+BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944
+5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C
+FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F
+3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08
+141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939
+31305D011406070E012322262707231133113E0133321203342623220607111E01333236
+04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F
+2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057
+40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155
+0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6
+3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123
+2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5
+A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002
+006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912
+0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10
+F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711
+3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E
+B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A
+FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D
+6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103
+1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E
+013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672
+E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D
+011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505
+030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037
+0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123
+22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6
+BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030
+006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05
+702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232
+1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939
+3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332
+1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55
+9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29
+276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000
+045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860
+1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123
+22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87
+262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144
+02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D
+003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59
+021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D
+4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F
+FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335
+210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28
+2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F
+011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A
+0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD
+325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0
+015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC
+1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101
+01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B
+006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110
+1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010
+801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D
+2123113426272E01232206071E01151123113426272E012322060711231133153E013332
+16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372
+9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49
+5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213
+040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED
+123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B
+4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471
+047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C
+1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110
+002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118
+C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002
+00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C
+0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD
+32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01
+33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F
+51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A
+D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20
+701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110
+F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133
+321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0
+BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2
+C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F
+05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931
+305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931
+2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602
+091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F
+6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201
+2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505
+07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01
+14062322262735331E0133323635342726272E01272E01353436373E013332161715232E
+0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B
+393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222
+221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA
+02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02
+0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F
+3333FD322F31305D250E012322263511233533113311211521111416171E013332363733
+02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E
+FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515
+09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED
+3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69
+B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000
+047F045D000600864041260429063604390646044906062905390540055105600505061A
+000100041A03020328002703380037034A00470375017A02080005027503010305020802
+010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403
+820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901
+2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636
+045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701
+58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00
+0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E
+3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901
+23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303
+5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403
+14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407
+4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230
+084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809
+06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600
+01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117
+395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309
+0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A
+01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307
+0519031705460149035800570179030902071A000100051A040304490046040200030204
+05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F
+0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931
+30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04
+5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03
+45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B
+1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F
+3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800
+000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C
+09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105
+2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426
+2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6
+AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B
+BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00
+1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467
+0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C
+010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F
+5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436
+37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B
+887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00
+000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418
+4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16
+1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322
+26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466
+5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD
+4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A
+40130320113011401170118011050200110E060725012B355D350003001A0000055E0801
+0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646
+125906561278027703082020211F02870101011400120020210387040104140505067B06
+74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813
+114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200
+5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D
+10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D
+C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334
+26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672
+7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1
+02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B
+342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D
+313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371
+2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F
+5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514
+062322262735331E01333236353426270E01232224272602353412373624333216171523
+2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A
+5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346
+BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2
+B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236
+002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8
+023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7
+075002360032FD000117008E009601750018401103002930295029702904020029240F03
+25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210
+24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000
+0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000
+01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000
+011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000
+0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35
+5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B
+3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501
+2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B
+01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08
+0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B
+20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D
+015D250E01071E011514062322262735331E01333236353426270E01232226272E013510
+003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09
+1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A
+460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7
+D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022
+21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021
+20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024
+20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330
+2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D
+FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117
+0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D
+40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108
+880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133
+023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003
+0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100
+0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001
+2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9
+0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A
+FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A
+FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A
+FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A
+FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501
+2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025
+012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225
+012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625
+012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625
+012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60
+1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104
+0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED
+173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE
+6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B
+0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00
+3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9
+A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F
+FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901
+7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18
+471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED
+2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600
+353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB
+010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16
+0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021
+00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08
+1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605
+190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239
+ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206
+1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62
+0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468
+05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132
+63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C
+10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D
+181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217
+39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406
+07151E01151406070E012322262735331E01333236353426272E01272627263534363735
+2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627
+2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7
+5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B
+845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237
+072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334
+323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A
+563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688
+0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A
+DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106
+0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F
+5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506
+BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913
+39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B
+303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED
+2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01
+333236373E0135342623353236353426272E01232206070E01151123113436373E013332
+1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C
+28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123
+421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0
+000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314
+282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19
+2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD
+06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F
+ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001
+5D005D011000212000111000212000031000212000111000212000072301231123112132
+16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01
+66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71
+63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC
+FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719
+3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C
+0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064
+146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F
+521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F
+5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021
+2000031000212000111000212000050E012322243534003332161715232E012322061514
+1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701
+36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE
+0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230
+1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379
+0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800
+000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D
+0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3
+FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516
+03C3068C000300244016470156006600760004500360037003030303010000022F332F00
+2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003
+000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F
+5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597
+04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303
+0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08
+030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00
+2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121
+0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999
+6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1
+000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414
+05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35
+0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F
+5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101
+112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68
+B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D
+0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B
+090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70
+1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04
+0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F
+ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433
+3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA
+63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240
+453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601
+216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52
+E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34
+441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821
+AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6
+ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123
+2202353412333216173E01333212052E01232206151416333236373E0125342623220607
+0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A
+9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE
+010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3
+05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB
+0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F
+5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4
+021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403
+020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303
+00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F
+2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482
+FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006
+000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837
+051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F
+5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901
+350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000
+0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10
+0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305
+0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08
+BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B
+5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C
+015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020
+080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C
+5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332
+363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752
+433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B
+410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19
+19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED
+3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623
+22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0
+F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B
+0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91
+99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601
+08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302
+03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A
+0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239
+012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001
+8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288
+FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307
+050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F
+5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD
+B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500
+093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31
+300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001
+008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A
+10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226
+2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C
+228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B
+0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E
+6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B
+2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335
+0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E
+01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D
+B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A
+300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031
+40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33
+ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332
+3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC
+AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403
+300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825
+1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C
+FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135
+26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4
+A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C
+580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9
+40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D
+6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143
+124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304
+00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939
+10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32
+31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637
+362437353426272E012322060723353E01333216173E0133321215272E01272E01232206>
+<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15
+5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525
+20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C
+242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C
+FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008
+0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825
+04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D
+1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117
+3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123
+22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674
+6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D
+E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2
+03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C
+05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303
+101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED
+331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01
+151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04
+FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203
+05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4
+FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001
+00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100
+00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001
+0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829
+08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31
+308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902
+DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C
+270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D
+020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D
+FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001
+5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337
+3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E
+2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E
+1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606
+050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23
+541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED
+3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322
+26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E
+01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C
+59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437
+607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E
+05D100030006004F403148024703025A056A050205041A000003061A010102390236036B
+0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739
+5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105
+D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037
+0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100
+000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B
+2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE
+8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476
+0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040
+1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33
+2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104
+82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01
+110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800
+2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335
+3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117
+004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000
+011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032
+0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016
+002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834
+10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F
+FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121
+152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E
+FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68
+B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C
+2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314
+5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B
+0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538
+10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130
+015D01211416171E013332363733150E01232226270E01232200111000333216173E0133
+321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62
+BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792
+92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B
+A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05
+02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC
+00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002
+FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910
+3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202
+04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE
+F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF
+E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701
+000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B
+2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001
+FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701
+00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F
+000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100
+010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506
+14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407
+0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD
+3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB
+1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B
+4804470658045706680467067F047006087F057007020705000301000330036003900304
+03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A
+19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02
+C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016
+400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C
+00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D
+35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F
+332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC
+003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00
+4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204
+00121203151827190119191D341502002833010133332F34030A272001022320292C0400
+0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED
+12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D
+331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323
+37332E013534363723373312003332161715232E01232204072107210E01151416172107
+211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050
+C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476
+152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC
+02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001
+2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4
+5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0
+400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135
+0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003
+001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14
+0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139
+10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335
+333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C
+6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000
+0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A
+000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F
+3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436
+33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41
+03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A
+0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201
+0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17
+3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D
+01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05
+000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130
+0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037
+0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B
+09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF
+E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701
+0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B
+2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007
+0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C
+073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E
+17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20
+19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016
+01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12
+3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D
+ED5D3130015D011406232226353436333216250123090114062322263534363332160134
+262322061514163332360134262322061514163332362514062322263534363332160734
+262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6
+BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658
+586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787
+FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801
+023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D
+0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000
+055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B
+3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925
+012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04
+0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200
+104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C
+000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236
+003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801
+023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA
+08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1
+052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2
+FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF
+00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500
+000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D
+FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905
+5606690566067A0573060601020350056005700503050560030103500060007000030000
+042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101
+00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952
+0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33
+2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F
+365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724
+29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED
+31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C
+7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00
+03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E
+ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B
+0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00
+2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51
+090009300902313009015009600970090309091551030C29200030000200003000600003
+D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635
+343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875
+065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02
+1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623
+22262735331E0133323635342627331E010370B79225742D091A58326862060399020659
+A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402
+00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204
+0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE
+8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04
+1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123
+222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE
+790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902
+64016B0274017B020606050250036003700303030360020102500060007000030000032F
+332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501
+7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804
+090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11
+332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC
+52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614
+000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A
+050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735
+37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502
+0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5
+03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000
+050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D
+000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A
+FE780228061400030007002940160F094F090201060106050201050B00041F014F050105
+2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8
+64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B
+0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C
+2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01
+23211123353311213204171612073426272E012B011121152111333236373E0105BCB193
+66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE
+B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1
+0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B
+542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E
+030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F
+1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110
+00232200353400333216172E01270527372E012735211E01173717071612013E01353426
+272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D
+0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201
+08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE
+2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025
+012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025
+012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400
+0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F
+233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED
+3130015D011406070E012B011123113311333216171E01073426272E012B011133323637
+3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939
+4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013
+0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01
+1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED
+3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607
+111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C
+88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0
+02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130
+0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7
+0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709
+01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401
+B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01
+0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121
+35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C
+102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10
+651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F
+ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01
+333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42
+022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0
+002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37
+2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A
+2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F
+1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B
+01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A
+0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C
+B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5
+0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02
+010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200
+003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B
+2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600
+002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131
+003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535
+0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510
+0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD
+32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521
+1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF
+8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C
+FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089
+000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001
+0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436
+24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544
+6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40
+0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937
+3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F
+2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115
+14062322262735331E01333236353426270E012322242735331604333236353426272E01
+272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3
+9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3
+9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C
+4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E
+28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B
+3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779
+3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09
+0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F
+4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D
+1112173931305D2B011406071E011514062322262735331E01333236353426270E012322
+262735331E0133323635342726272E01272E01353436373E013332161715232E01232206
+15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46
+0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347
+4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918
+0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801
+0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3
+068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546
+0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7
+03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1
+04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908
+70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A
+01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED
+1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135
+213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE
+95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86
+9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502
+2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003
+0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B
+FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B
+3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B
+35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A
+0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E
+570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01
+0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F
+20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F
+003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D
+005D010E012322263534363703210323012101230E0115141633323637330902062B344B
+2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D
+90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478
+003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25
+703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420
+3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49
+03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112
+392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534
+3637362437353426272E012322060723353E01333216171E011511230E01151416333236
+373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601
+1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474
+7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F
+24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2
+0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1
+062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E
+34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209
+0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F
+ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01
+33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5
+6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025
+2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F
+04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516
+090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32
+5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534
+3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7
+03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7
+B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E
+34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33
+3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301
+1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F
+31305D01211416171E013332363733150E01070E011514163332363733150E0123222635
+343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102
+03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030
+5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2
+B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325
+012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025
+012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702
+0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270
+030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35
+005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102
+030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6
+32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52
+C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D
+010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204
+1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133
+0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E
+07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133
+2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9
+05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807
+2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311
+33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000
+0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051
+00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031
+0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236
+00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236
+00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471
+068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000
+059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9
+00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF
+00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500
+FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B
+3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25
+012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225
+012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01
+18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4
+5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332
+3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521
+FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046
+0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F
+18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6
+5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130
+5D250E01071E011514062322262735331E01333236353426272322263511233533113311
+211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB
+B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10
+B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000
+011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F
+0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E
+0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800
+4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD
+322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637
+331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8
+CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236
+00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00
+210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310
+21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35
+3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1
+023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529
+0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1
+FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF
+007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500
+FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B
+3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625
+012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625
+012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06
+10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073
+FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705
+53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726
+27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F
+003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624
+33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C
+5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566
+6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069
+FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532
+65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11
+12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01
+071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E
+0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F
+4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A
+524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01
+363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C
+38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205
+0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939
+3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633
+32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111
+8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086
+4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21
+1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111
+001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4
+113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637
+3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE
+F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0
+FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3
+0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418
+79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37
+2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D
+11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226
+272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01
+3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41
+40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D
+40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6
+0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15
+451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F
+1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000
+232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01
+1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609
+A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002
+0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717
+0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A
+05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D
+ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127
+2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD
+51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145
+4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59
+051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED
+12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000
+03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005
+10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C
+3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B
+2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311
+3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254
+9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D
+00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037
+3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E
+34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A
+4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33
+7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F
+1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED
+332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127
+2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133
+32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA
+E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486
+B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E
+1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2
+45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D
+75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005
+B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023
+60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065
+B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213
+040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6
+ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E
+012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63
+B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5
+0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1
+022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366
+041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020
+0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F
+5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6
+88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D
+481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F
+29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10
+371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840
+1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D
+335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B
+2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123
+220615141633323637330901230901140623222635343633321607342623220615141633
+3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE
+B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302
+68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B
+006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612
+120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8
+FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B
+2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135
+3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D
+0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B
+A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101
+05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113
+1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017
+400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101
+CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230
+0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703
+8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606
+00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6
+0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017
+0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C
+CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00
+0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514
+06232226353436172206151416333236353426016B689393686893926949666748486766
+03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000
+011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000
+011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117
+00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116
+00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236
+00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236
+00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000
+049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6
+046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D
+0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460
+068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8
+0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A
+FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3
+05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59
+0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500
+FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35
+FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A
+23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E
+4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235
+40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27
+040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33
+2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510
+002132041715232E01272E012322001110002132363711213521110E01071E0115140623
+22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA
+FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061
+0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516
+A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D
+10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020
+112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033
+603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10
+E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31
+305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133
+321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460
+7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE
+E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6
+BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A
+B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A
+4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1
+001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304
+070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED
+1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121
+11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19
+0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030
+031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020
+02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F
+ED393931305D2123113426272E0123220607112311233533353315211521113E01333216
+15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE
+04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B
+10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201
+0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4
+332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335
+2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3
+C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898
+FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054
+40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704
+10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F
+ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617
+1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF
+81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32
+0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A
+140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31
+302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198
+98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202
+00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130
+01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B
+00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329
+12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F
+2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406
+232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898
+FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003
+0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01
+0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533
+1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998
+045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717
+13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210
+E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315
+230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141
+1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F
+024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104
+04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4
+FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534
+3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141
+13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801
+0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35
+0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A
+1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4
+5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627
+35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816
+160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00
+FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF
+00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05
+0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D
+021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802
+050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D
+11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D
+7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102
+2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507
+01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C
+ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426
+02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0
+0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104
+01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F
+2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149
+8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300
+FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016
+0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100
+2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107
+7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776
+06010F0102061F01150626013601340646014406560153066006790170060E0406015A01
+550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802
+0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172
+715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901
+330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00
+000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E
+1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD
+322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114
+062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26
+0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805
+0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F
+03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025
+2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325
+2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35
+FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001
+001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05
+1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11
+332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627
+231133153E013332161715232E012322060711331E011514062322262735333C4E285E52
+0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5
+5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000
+011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000
+011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F
+004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204
+5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111
+21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE
+528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B
+3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C
+0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00
+3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311
+331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C
+012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28
+251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D
+1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625
+2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25
+2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35
+FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35
+FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001
+00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33
+20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36
+1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31
+302B5D053436372206232226272E01351133111416171E01333236373E01351133111406
+070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C
+976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9
+037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00
+000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205
+0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B
+1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437
+350E01232226351133111416171E0133323637113311230E011514163332363733150E01
+23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C
+A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24
+FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35
+FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35
+FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35
+FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001
+00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6
+5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679
+67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E
+00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646
+125906561278027703082020211F02370187010201140012002021033704870402041405
+05060606091226062912370638124606491258127A0675120B24240C702501251651A00C
+F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF
+C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F
+0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C
+0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507
+05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12
+17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00
+5D212303210323012E013534363332161514060727342623220615141633323613090207
+2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D
+F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD
+CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E
+37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F
+4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A
+01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600
+0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD
+32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B
+5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736
+2437353426272E01232206070E010723353E01372E01353436333216151406071E011503
+110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A
+5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56
+E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D
+4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761
+5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000
+0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F
+068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA
+08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D
+3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E
+2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D
+ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117
+004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117
+004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117
+008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117
+008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117
+008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D
+355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0
+40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236
+003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF
+003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B
+090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100
+B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B
+010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000
+05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028
+00934063411253125B1A6312730273129024B603B6240923200551000810082008030808
+1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C
+1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12
+17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED
+393931305D2901353E0137233533352335333534123332161715232E012322061D012115
+21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93
+016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00
+000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37
+07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C
+1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B
+31305D01211416171E013332363733150E0123200011100021320011272E01272E012322
+06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A
+9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100
+FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C
+040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600
+003700BB02910000011702410413FDC600384026040302360A0403023900392039403980
+39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35
+3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038
+4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F
+094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600
+003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103
+01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535
+00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01
+010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD
+D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A
+0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E
+010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001
+0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303
+0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF
+090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D
+33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31
+803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024
+00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000
+059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F
+0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000
+0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F
+5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018
+010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF
+0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227
+1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037
+003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04
+4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117
+019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70
+2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D
+0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F
+370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33
+2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177
+BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E
+05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003
+00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02
+4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239
+012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127
+FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508
+05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216
+002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E
+0902390258020378017703020203020114000600020314040405490546067C0573060405
+030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504
+65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123
+09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030
+0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047
+40130535060609013502030A350908054009133704B8FFC0401609133704050504030204
+0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001
+213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0
+FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603
+010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311
+2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000
+000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B
+A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B
+0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325
+293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403
+0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209
+D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B
+71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135
+090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE
+061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000
+FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E
+021B067518011834380948096F090309192209030810030822142311141023071B180714
+108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910
+C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135
+1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34
+359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D
+2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A
+641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014
+041925140204160B341F02261835011608251202191214081502141C272222290F29010F
+291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED
+1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526
+023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D
+CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A
+0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E
+FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006
+000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05
+01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A
+B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E
+014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116
+019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D
+FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116
+019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037
+0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10
+371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00
+90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239
+2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715
+1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE
+F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120
+1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016
+A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507
+01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505
+15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D
+1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133
+0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6
+0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C
+07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133
+2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426
+2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A
+201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647
+664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828
+264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E
+05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12
+3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D
+A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1
+04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B
+2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25
+181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED
+12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612
+072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A
+252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70
+28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5
+8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8
+045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6
+18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040
+10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736
+178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37
+00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F
+FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D
+71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180
+487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100
+0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8
+FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040
+260910370C001C004B005A006A00790006008D090F090103041304440455046504760406
+04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0
+08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9
+FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C
+0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F
+3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E
+4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000
+047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E
+24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C
+030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0
+400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F
+1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01
+353436373E0137352E01353436373523352115212206070E01151416171E013B01152122
+06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89
+4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467
+211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22
+2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216
+00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315
+3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10
+F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623
+220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0
+0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64
+03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037
+3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B
+12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01
+3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA
+5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057
+AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2
+045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901
+091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133
+3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F
+5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408
+4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606
+0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10
+3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001
+8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906
+010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01
+53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047
+1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010
+7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D
+5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406
+070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360
+4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806
+343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611
+045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28
+0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A
+291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4
+2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627
+2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E
+01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A
+5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462
+5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937
+7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB
+023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500
+FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF
+00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071
+FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8
+0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500
+0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F
+073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D
+1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED
+31305D011406070E012B0135333236373E01353426272E01232111231121352115211121
+3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398
+BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF
+00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804
+0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C
+0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13
+000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D
+33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736
+243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE
+EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010
+4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF
+0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000
+02E207500236002C00000117008EFF240175001940130200104010501060107010050100
+100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1
+000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503
+28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501
+3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D
+013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01
+2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01
+0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24
+401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238
+052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00
+000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120
+1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6
+FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123
+2111213236373E01371406070E0123211121112311331121113311213216171E0107B432
+35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901
+C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001
+FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01
+07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F
+5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E
+01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079
+646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575
+07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002
+0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716
+191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E
+1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF
+E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F
+5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001
+8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901
+030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F
+1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902
+09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B
+0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D
+10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6
+FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000
+052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100
+71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D
+011406070E0123211121152111213216171E01073426272E01232111213236373E01052C
+554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C
+B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1
+021600250000000100C80000048A05D10005001F401003013504030000070F0701021403
+6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002
+000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013
+0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12
+392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705
+9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE
+9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E
+093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116
+09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33
+35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733
+350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112
+392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD
+2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01
+2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01
+0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C
+912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B
+18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051
+FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040
+3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409
+0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217
+392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607
+0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322
+06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63
+F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52
+A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818
+151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023
+0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8
+FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207
+14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133
+0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093
+40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D
+0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308
+030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18
+10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331
+305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB
+D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100
+000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500
+6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02
+1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504
+4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6
+5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A
+FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607
+0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B
+5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD
+051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F
+01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311
+210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6
+030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6
+FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216
+00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000
+000100C80000053B05D100070027401703350603010501140078090F0940095009030414
+056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA
+DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000
+FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801
+461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700
+03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40
+0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710
+FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F
+010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186
+05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1
+001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E
+150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17
+3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01
+272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107
+0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A
+8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC
+4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170
+B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C
+0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED
+392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1
+FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502
+0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33
+12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304
+EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930
+2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814
+05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333
+31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500
+000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814
+05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD
+32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC
+05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B
+1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123
+0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321
+11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01
+0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25
+2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055
+4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040
+150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D
+002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321
+113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD
+EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8
+23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416
+560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B
+ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111
+3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298
+C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061
+FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718
+34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C
+1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F
+3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E
+01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051
+F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF
+676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0
+000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C
+03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F
+6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023
+2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01
+03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC
+FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000
+04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305
+0506060F113440030103030012340F03000519150904060309045F050105120114007821
+0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD
+C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133
+04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0
+026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216
+0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039
+6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A
+223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F
+ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01
+37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE
+4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F
+B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959
+11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9
+00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37
+12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F
+35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931
+302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332
+36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E
+4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A
+045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F
+19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806
+10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009
+FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E
+1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11
+332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111
+3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101
+F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632
+045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF
+E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910
+37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E
+0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07
+0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417
+39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD
+3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711
+33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F
+1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02
+01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159
+631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D
+10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F
+06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B
+5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01
+1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534
+26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D
+49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342
+546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11
+110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02
+0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B
+0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311
+01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017
+0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102
+04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960
+190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33
+2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA
+FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6
+94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635
+1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713
+3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700
+001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239
+2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E
+01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924
+2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021
+003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303
+1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107
+0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307
+201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D
+1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503
+4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02
+030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20
+0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D
+012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2
+023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105
+0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED
+31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF
+006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005
+011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311
+210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A
+FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849
+014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00
+0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E
+013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951
+0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627
+D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000
+4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32
+2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF
+003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622
+011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B
+0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E
+0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B
+33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332
+16171133113E0133321203342623220607111E0133323605112E01232206151416333236
+064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F
+2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D
+DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00
+FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B
+08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188
+0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304
+2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025
+0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902
+092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416
+171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE
+CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809
+1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED
+10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC
+045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108
+0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104
+5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121
+1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002
+000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16
+0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F
+FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E
+0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55
+FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33
+2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617
+05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025
+402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F
+3130013426272E012B0111333236373E01371406070E012321113311333216171E011333
+1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157
+334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000
+0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013
+090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F
+5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01
+037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A
+FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532
+0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313
+061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13
+03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F
+ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521
+2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314
+BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44
+000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03
+3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F
+10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206
+15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC
+D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD
+FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D
+0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603
+09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D
+ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637
+3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01
+AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C
+37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560
+250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28
+59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F
+2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6
+ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322
+0607112311233533353315211521113E01333216171416151406070602070E01232A0127
+35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303
+020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86
+FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682
+0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021
+006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037
+193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340
+090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B
+2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236
+3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E
+0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478
+021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077
+0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900
+30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409
+3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530
+35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED
+31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E
+01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B
+64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A
+183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A
+03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000
+06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8
+FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810
+F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E
+012B0111333236373E01371406070E0123211121112311331121113311333216171E0106
+3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157
+334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001
+00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201
+010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6
+ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123
+3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC
+63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682
+0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D
+FE64047F06150007001500BD404C04063406440650066006700606090307051903170546
+0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B
+0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102
+03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465
+0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933
+2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627
+331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D
+FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027
+0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A
+05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111
+330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B
+B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F
+3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9
+000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F
+0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC
+0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501
+2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015
+0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09
+0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF
+C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006
+0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED
+1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121
+0111330114062322263534363332160734262322061514163332360121152104FFF5FD72
+B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05
+D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D
+000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F
+333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F
+05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F
+ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F
+05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636
+166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130
+2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B
+86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3
+1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455
+0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF
+16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F
+121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607
+0E012322262735331E013332363534262B01353332363534262322060723353E01333216
+15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140
+964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62
+57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C
+05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F
+ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F
+0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D
+1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000
+092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322
+262735331E01333236373E01353426272E012322060711211521153E01333216171E0103
+75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634
+373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F
+000100F3023503A505DA000600414025560101030100012A020203630073000200000351
+0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D
+8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5
+021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B
+0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316
+04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01
+140623222635343637352E0135343633321615140607151E01033426232206151416171E
+01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261
+5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429
+64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D
+304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045
+0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22
+1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED
+5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207
+0E01232224272602353412373624333216171E01173E013534262735331E011514060110
+0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819
+144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863
+630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE
+DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A
+21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F
+2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31
+302B011000232200111000333216173332363534262735331E01151406071E0107342623
+22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA
+9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D
+D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03
+0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D
+050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322
+26272E01351133111416171E01333236373E0135113332363534262735331E0115140623
+052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2
+F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384
+000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509
+051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27
+050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123
+350E01232226351133111416171E0133323637113332363534262735331E011514062B01
+0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD
+8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042
+4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437
+09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523
+353E013534262322060723353E01333216034242426E2F3026211F251803134926516605
+F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144
+8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C
+001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A
+004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560
+0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217
+392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF
+00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510
+0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E
+103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303
+3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752
+0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B
+0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910
+370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104
+2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31
+30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1
+9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15
+44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040
+200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0
+40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED
+002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627
+2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A
+192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788
+912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006
+0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D
+002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2
+A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D
+0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00
+8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533
+1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55
+010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300
+13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A
+0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B
+D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623
+22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21
+42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7
+03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37
+11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED
+D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416
+33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2
+A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC
+A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016
+00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005
+020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E
+5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603
+4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600
+00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701
+0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003
+0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33
+D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327
+07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5
+F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052
+6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010
+6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102
+11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D
+71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E
+9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D
+001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E
+6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00
+0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623
+222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730
+58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022
+02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003
+CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E
+0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E
+5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714
+06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D
+231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805
+4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F
+1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003
+E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B
+0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E
+5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635
+370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C
+6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828
+2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900
+06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A
+0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011
+143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B
+5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406
+071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026
+211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF
+001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068
+FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500
+FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40
+1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A
+BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024
+00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1
+04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100
+0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D
+030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116
+025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1
+04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35
+3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B
+3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229
+38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116
+024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82
+041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025
+0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116
+02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116
+0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236
+00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236
+0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000
+055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1
+041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500
+FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535
+FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00
+252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00
+001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068
+FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B
+002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600
+000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A
+B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C
+401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460
+068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025
+2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901
+0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A
+B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016
+400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048
+00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028
+00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF
+FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF
+00C80000053608010236002800000116025C26000013400D0201101020100200100C0203
+252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024
+2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600
+000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900
+000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026
+01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500
+5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E
+031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117
+0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000
+01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82
+02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82
+018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82
+05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82
+0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA
+080102360032000001170256009601750022400B0250340102503470340234B8FFC04009
+090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A
+E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000
+0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535
+005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C
+501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117
+024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1
+0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1
+05DA08010236003200000117025C009600000015400F0302202850288028030028240F03
+252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C
+201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000
+01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A
+FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500
+1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117
+024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D
+3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300
+212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D
+007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C
+0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236
+024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D
+35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02
+002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012
+400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116
+024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7
+008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236
+02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF
+0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF
+006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2
+FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82
+0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529
+080102360038000001170256006201750012400B01502301010023220C00252B35005D35
+FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF
+00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D
+0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160
+28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000
+0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500
+5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760
+27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062
+01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249
+00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000
+011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000
+011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116
+024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B
+FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4
+0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D
+FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025
+2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125
+2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A
+4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018
+401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236
+005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6
+07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35
+FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003
+006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524
+4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B
+2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632
+ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123
+1123350E01232202113436373E0133321617352135213533153301112E01232206151416
+3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C
+B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279
+2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498
+0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102
+24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F
+5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332
+16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9
+1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619
+17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000
+0002000000000000FF4C00780000000000000000000000000000000000000000037D0000
+01020103010401050106010701080109010A010B010C010D010E010F0110011101120113
+011401150116011701180119011A011B011C011D011E011F012001210122012301240125
+0126012701280129012A012B012C012D012E012F01300131013201330134013501360137
+01380139013A013B013C013D013E013F0140014101420143014401450146014701480149
+014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B
+015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D
+016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F
+0180018101820183018401850186018701880189018A018B018C018D018E018F01900191
+01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3
+01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5
+01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7
+01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9
+01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB
+01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD
+01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F
+0210021102120213021402150216021702180219021A021B021C021D021E021F02200221
+02220223022402250226022702280229022A022B022C022D022E022F0230023102320233
+023402350236023702380239023A023B023C023D023E023F024002410242024302440245
+0246024702480249024A024B024C024D024E024F02500251025202530254025502560257
+02580259025A025B025C025D025E025F0260026102620263026402650266026702680269
+026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B
+027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D
+028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F
+02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1
+02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3
+02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5
+02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7
+02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9
+02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B
+030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D
+031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F
+0330033103320333033403350336033703380339033A033B033C033D033E033F03400341
+03420343034403450346034703480349034A034B034C034D034E034F0350035103520353
+035403550356035703580359035A035B035C035D035E035F036003610362036303640365
+0366036703680369036A036B036C036D036E036F03700371037203730374037503760377
+03780379037A037B037C037D037E037F0380038103820383038403850386038703880389
+038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B
+039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD
+03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF
+03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1
+03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3
+03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5
+03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407
+04080409040A040B040C040D040E040F0410041104120413041404150416041704180419
+041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B
+042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D
+043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F
+0450045104520453045404550456045704580459045A045B045C045D045E045F04600461
+04620463046404650466046704680469046A046B046C046D046E046F0470047104720473
+047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E
+6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572
+7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573
+696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04
+706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03
+6F6E650374776F05746872656504666F757204666976650373697805736576656E056569
+676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07
+67726561746572087175657374696F6E0261740141014201430144014501460147014801
+49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B
+627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61
+7363696963697263756D0A756E64657273636F7265056772617665016101620163016401
+650166016701680169016A016B016C016D016E016F017001710172017301740175017601
+7701780179017A0962726163656C656674036261720A627261636572696768740A617363
+696974696C646509416469657265736973054172696E670843636564696C6C6106456163
+757465064E74696C6465094F646965726573697309556469657265736973066161637574
+65066167726176650B6163697263756D666C657809616469657265736973066174696C64
+65056172696E670863636564696C6C6106656163757465066567726176650B6563697263
+756D666C65780965646965726573697306696163757465066967726176650B6963697263
+756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176
+650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574
+65067567726176650B7563697263756D666C657809756469657265736973066461676765
+72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65
+74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F
+707972696768740974726164656D61726B056163757465086469657265736973086E6F74
+657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C
+657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961
+6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C
+0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C
+6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E
+6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D
+656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C
+697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64
+61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768
+740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67
+650979646965726573697309596469657265736973086672616374696F6E044575726F0D
+6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964
+616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261
+73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66
+6C65780B4563697263756D666C6578064161637574650945646965726573697306456772
+617665064961637574650B4963697263756D666C65780949646965726573697306496772
+617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465
+0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66
+6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E
+6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06
+4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A
+6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574
+650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065
+72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861
+6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762
+72657665066762726576650449646F740853636564696C6C610873636564696C6C610643
+61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F
+76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65
+6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E
+656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375
+7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61
+63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375
+7465065261637574650672616375746506526361726F6E06726361726F6E065361637574
+65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463
+61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465
+065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461
+0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370
+68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72
+0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563
+6F6E64096166696936313234380961666969363132383906483232303733064831383534
+3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761
+6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404
+63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445
+646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F
+740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578
+0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465
+07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E
+656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B
+636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C
+6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E
+67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564
+696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65
+7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D
+6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B
+5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B
+7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163
+757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61
+7368616375746509616E6F74656C65696106576772617665067767726176650657616375
+746506776163757465095764696572657369730977646965726573697306596772617665
+067967726176650D71756F74657265766572736564097261646963616C65780961666969
+303839343109657374696D61746564096F6E656569676874680C74687265656569676874
+68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363
+656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374
+6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F
+7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F
+730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861
+04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61
+707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553
+69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164
+696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65
+7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C
+6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105
+746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69
+63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567
+610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372
+6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969
+313030323309616669693130303531096166696931303035320961666969313030353309
+616669693130303534096166696931303035350961666969313030353609616669693130
+303537096166696931303035380961666969313030353909616669693130303630096166
+696931303036310961666969313030363209616669693130313435096166696931303031
+370961666969313030313809616669693130303139096166696931303032300961666969
+313030323109616669693130303232096166696931303032340961666969313030323509
+616669693130303236096166696931303032370961666969313030323809616669693130
+303239096166696931303033300961666969313030333109616669693130303332096166
+696931303033330961666969313030333409616669693130303335096166696931303033
+360961666969313030333709616669693130303338096166696931303033390961666969
+313030343009616669693130303431096166696931303034320961666969313030343309
+616669693130303434096166696931303034350961666969313030343609616669693130
+303437096166696931303034380961666969313030343909616669693130303635096166
+696931303036360961666969313030363709616669693130303638096166696931303036
+390961666969313030373009616669693130303732096166696931303037330961666969
+313030373409616669693130303735096166696931303037360961666969313030373709
+616669693130303738096166696931303037390961666969313030383009616669693130
+303831096166696931303038320961666969313030383309616669693130303834096166
+696931303038350961666969313030383609616669693130303837096166696931303038
+380961666969313030383909616669693130303930096166696931303039310961666969
+313030393209616669693130303933096166696931303039340961666969313030393509
+616669693130303936096166696931303039370961666969313030373109616669693130
+303939096166696931303130300961666969313031303109616669693130313032096166
+696931303130330961666969313031303409616669693130313035096166696931303130
+360961666969313031303709616669693130313038096166696931303130390961666969
+313031313009616669693130313933096166696931303035300961666969313030393809
+616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C
+74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65
+7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65
+696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068
+35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568
+6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62
+096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835
+393108676C79706835393208676C79706835393308676C79706835393408676C79706835
+393508676C79706835393608676C79706835393708676C79706835393808676C79706835
+393908676C79706836303008676C79706836303108676C79706836303208676C79706836
+303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F
+6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061
+63697263756D666C65786163757465104163697263756D666C6578677261766510616369
+7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461
+63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465
+106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F
+77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162
+7265766561637574650B41627265766567726176650B61627265766567726176650F4162
+72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665
+74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272
+657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F
+6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972
+63756D666C65786163757465106563697263756D666C6578616375746510456369726375
+6D666C65786772617665106563697263756D666C65786772617665144563697263756D66
+6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563
+697263756D666C657874696C6465106563697263756D666C657874696C64651345636972
+63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A
+49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74
+62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79
+70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861
+74616671616D617473056869726971057473657265057365676F6C057061746168067161
+6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166
+0472616665057061736571077368696E646F740673696E646F7408736F66706173757104
+616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865
+740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65
+6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C
+70650270650A66696E616C747361646905747361646903716F660472657368047368696E
+0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265
+73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F
+740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564
+686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73
+68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410
+7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174
+7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461
+6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461
+676573680974657464616765736809796F646461676573680E66696E616C6B6166646167
+657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809
+6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368
+0870656461676573680B747361646964616765736809716F666461676573680A72657368
+6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07
+62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572
+6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674
+746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338
+380961666969353734303309616669693537343037096166696935373430390961666969
+353734343009616669693537343531096166696935373435320961666969353734353309
+616669693537343534096166696935373435350961666969353734353609616669693537
+343537096166696935373435380961666969353733393209616669693537333933096166
+696935373339340961666969353733393509616669693537333936096166696935373339
+370961666969353733393809616669693537333939096166696935373430300961666969
+353734303109616669693537333831096166696935373436310961666969363331363709
+616669693537343539096166696935373534330961666969353735333409616669693537
+343934096166696936323834330961666969363238343409616669693632383435096166
+696936343234300961666969363432343109616669693633393534096166696935373338
+320961666969363432343209616669693632383831096166696935373530340961666969
+353733363909616669693537333730096166696935373337310961666969353733373209
+616669693537333733096166696935373337340961666969353733373509616669693537
+333931096166696935373437310961666969353734363009616669693532323538096166
+696935373530360961666969363239353809616669693632393536096166696935323935
+370961666969353735303509616669693632383839096166696936323838370961666969
+363238383809616669693537353037096166696936323936310961666969363239353909
+616669693632393630096166696935373530380961666969363239363209616669693537
+353637096166696936323936340961666969353233303509616669693532333036096166
+696935373530390961666969363239363709616669693632393635096166696936323936
+360961666969353735353509616669693532333634096166696936333735330961666969
+363337353409616669693633373539096166696936333736330961666969363337393509
+616669693632383931096166696936333830380961666969363239333809616669693633
+383130096166696936323934320961666969363239343709616669693633383133096166
+696936333832330961666969363338323409616669693633383333096166696936333834
+340961666969363238383209616669693632383833096166696936323838340961666969
+363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A
+4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375
+7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665
+106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F
+7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874
+696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74
+62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465
+0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68
+6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C
+64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74
+62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665>
+<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568
+6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75
+686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D
+55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832
+08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61
+626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974
+696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009
+0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6
+FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039
+FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059
+FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0
+FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6
+FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039
+FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A
+FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5
+FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB
+FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2
+FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C
+FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E
+FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052
+FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010
+FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090
+FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052
+FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0
+FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A
+FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037
+FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064
+FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6
+FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D
+FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044
+FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB
+FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037
+FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C
+FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4
+FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059
+FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010
+FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026
+FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046
+FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058
+FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090
+FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0
+FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090
+FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E
+FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C
+FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1
+FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E
+FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058
+FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0
+FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032
+FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064
+FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1
+FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E
+FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A
+FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055
+FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0
+FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2
+FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044
+FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091
+FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2
+FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C
+FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037
+FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010
+FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060
+0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059
+FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1
+FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C
+FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059
+FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C
+FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0
+FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010
+FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F
+FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0
+FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F
+FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1
+FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A
+FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2
+FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047
+FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0
+FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010
+FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054
+FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF
+FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F
+FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB
+FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB
+FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036
+FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D
+FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D
+FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036
+FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D
+FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D
+FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011
+FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056
+FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F
+FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C
+006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039
+FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C
+FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3
+06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205
+05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E
+801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608
+2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0
+3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D
+010104050030819E311F301D060355040A1316566572695369676E205472757374204E65
+74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603
+55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520
+526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544
+2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030
+30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269
+5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967
+6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D
+70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249
+4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30
+819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D
+2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A
+B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881
+1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797
+6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100
+3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F
+5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09
+16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8
+C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43
+ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30
+1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603
+55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369
+676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355
+040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572
+695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331
+3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053
+74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054
+72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920
+41434345505445442C20286329393720566572695369676E2C20496E632E311730150603
+55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E
+657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD
+8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC
+F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B
+D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265
+E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181
+006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508
+2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1
+5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E
+A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210
+7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130
+0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C
+20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20
+536F667477617265205075626C697368657273204341301E170D39383034313630303030
+30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74
+65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603
+55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075
+626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63
+6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49
+41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61
+73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E
+207632310B3009060355040613025553311330110603550408130A57617368696E67746F
+6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73
+6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420
+436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030
+8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0
+D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9
+6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765
+DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C
+4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F
+7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2
+A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64
+E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B
+0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338
+CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355
+040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967
+6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182
+0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116
+0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A
+0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E
+636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469
+66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E
+642069747320757365206973207374726963746C790A7375626A65637420746F2C207468
+6520566572695369676E2043657274696669636174696F6E205072616374696365205374
+6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65
+20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470
+733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043
+50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C
+20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C
+204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967
+6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874
+732052657365727665642E204345525441494E0A57415252414E5449455320444953434C
+41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E
+473A2054484520555345204F462054484953204345525449464943415445204953205354
+524943544C59205355424A45435420544F205448450A564552495349474E204345525449
+4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953
+5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D
+504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544
+494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52
+204649544E45535320464F52204120504152544943554C415220505552504F53452C2041
+4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54
+49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D
+414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74
+656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76
+657269666965645375626A656374417474726962757465730A657874656E73696F6E2076
+616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375
+7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941
+2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73
+69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030
+80060B6086480186F845010701013080302806082B06010505070201161C68747470733A
+2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056
+3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320
+43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20
+286329393720566572695369676E0000000000003016060A2B06010401823702011B0408
+30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B
+25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F
+AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F
+228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728
+2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713
+08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133
+3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172
+65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06
+082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401
+8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630
+1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A
+2B06010401823702010C31443042A01A801800560065007200640061006E006100200046
+006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74
+727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F
+B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7
+CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5
+E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4
+836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF
+88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F
+86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA
+0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030
+8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06
+0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504
+0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E
+2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B
+132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953
+69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608
+2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01
+0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609
+2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648
+86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA
+BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D
+41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342
+DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000>
+] def
+/CharStrings 893 dict dup begin
+/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def
+/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def
+/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def
+/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def
+/period 17 def /slash 18 def /zero 19 def /one 20 def
+/two 21 def /three 22 def /four 23 def /five 24 def
+/six 25 def /seven 26 def /eight 27 def /nine 28 def
+/colon 29 def /semicolon 30 def /less 31 def /equal 32 def
+/greater 33 def /question 34 def /at 35 def /A 36 def
+/B 37 def /C 38 def /D 39 def /E 40 def
+/F 41 def /G 42 def /H 43 def /I 44 def
+/J 45 def /K 46 def /L 47 def /M 48 def
+/N 49 def /O 50 def /P 51 def /Q 52 def
+/R 53 def /S 54 def /T 55 def /U 56 def
+/V 57 def /W 58 def /X 59 def /Y 60 def
+/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def
+/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def
+/b 69 def /c 70 def /d 71 def /e 72 def
+/f 73 def /g 74 def /h 75 def /i 76 def
+/j 77 def /k 78 def /l 79 def /m 80 def
+/n 81 def /o 82 def /p 83 def /q 84 def
+/r 85 def /s 86 def /t 87 def /u 88 def
+/v 89 def /w 90 def /x 91 def /y 92 def
+/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def
+/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def
+/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def
+/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def
+/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def
+/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def
+/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def
+/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def
+/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def
+/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def
+/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def
+/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def
+/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def
+/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def
+/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def
+/summation 153 def /product 154 def /pi1 155 def /integral 156 def
+/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def
+/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def
+/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def
+/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def
+/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def
+/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def
+/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def
+/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def
+/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def
+/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def
+/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def
+/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def
+/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def
+/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def
+/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def
+/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def
+/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def
+/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def
+/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def
+/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def
+/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def
+/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def
+/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def
+/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def
+/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def
+/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def
+/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def
+/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def
+/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def
+/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def
+/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def
+/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def
+/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def
+/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def
+/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def
+/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def
+/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def
+/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def
+/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def
+/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def
+/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def
+/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def
+/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def
+/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def
+/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def
+/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def
+/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def
+/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def
+/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def
+/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def
+/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def
+/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def
+/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def
+/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def
+/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def
+/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def
+/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def
+/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def
+/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def
+/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def
+/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def
+/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def
+/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def
+/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def
+/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def
+/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def
+/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def
+/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def
+/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def
+/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def
+/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def
+/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def
+/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def
+/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def
+/zeta 453 def /eta 454 def /theta 455 def /iota 456 def
+/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def
+/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def
+/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def
+/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def
+/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def
+/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def
+/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def
+/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def
+/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def
+/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def
+/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def
+/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def
+/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def
+/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def
+/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def
+/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def
+/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def
+/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def
+/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def
+/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def
+/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def
+/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def
+/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def
+/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def
+/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def
+/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def
+/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def
+/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def
+/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def
+/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def
+/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def
+/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def
+/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def
+/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def
+/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def
+/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def
+/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def
+/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def
+/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def
+/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def
+/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def
+/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def
+/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def
+/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def
+/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def
+/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def
+/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def
+/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def
+/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def
+/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def
+/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def
+/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def
+/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def
+/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def
+/bet 673 def /gimel 674 def /dalet 675 def /he 676 def
+/vav 677 def /zayin 678 def /het 679 def /tet 680 def
+/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def
+/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def
+/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def
+/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def
+/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def
+/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def
+/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def
+/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def
+/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def
+/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def
+/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def
+/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def
+/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def
+/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def
+/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def
+/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def
+/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def
+/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def
+/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def
+/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def
+/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def
+/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def
+/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def
+/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def
+/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def
+/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def
+/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def
+/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def
+/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def
+/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def
+/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def
+/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def
+/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def
+/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def
+/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def
+/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def
+/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def
+/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def
+/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def
+/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def
+/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def
+/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def
+/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def
+/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def
+/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def
+/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def
+/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def
+/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def
+/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def
+/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def
+/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def
+/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def
+/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def
+
+end readonly def
+FontName currentdict end definefont pop
+%%EndFont
+%%EndProlog
+mpldict begin
+13.5 175.5 translate
+585 441 0 0 clipbox
+% polygon
+1.000 setgray
+1.000 setlinewidth
+0 setlinejoin
+2 setlinecap
+[] 0 setdash
+0 0 m
+0 441 l
+585 441 l
+585 0 l
+closepath
+gsave
+fill
+grestore
+stroke
+% polygon
+0.000 setgray
+73.125 44.1 m
+73.125 396.9 l
+526.5 396.9 l
+526.5 44.1 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 341.084 m
+76.667 340.708 l
+80.209 339.574 l
+83.751 337.667 l
+87.293 334.958 l
+90.835 331.405 l
+94.377 326.949 l
+97.919 321.506 l
+101.461 314.959 l
+105.003 307.144 l
+108.545 297.819 l
+112.087 286.607 l
+115.629 272.882 l
+119.171 255.463 l
+122.713 231.623 l
+126.255 191.605 l
+129.797 103.027 l
+133.339 189.379 l
+136.881 202.932 l
+140.423 203.284 l
+143.965 191.777 l
+147.507 147.593 l
+151.049 193.483 l
+154.591 200.946 l
+158.133 199.387 l
+161.675 188.957 l
+165.217 143.486 l
+168.759 180.998 l
+172.301 191.170 l
+175.843 191.200 l
+179.385 183.119 l
+182.927 155.818 l
+186.469 166.661 l
+190.011 181.010 l
+193.553 182.971 l
+197.095 177.076 l
+200.637 157.567 l
+204.179 150.322 l
+207.721 171.053 l
+211.263 175.126 l
+214.805 171.229 l
+218.347 156.530 l
+221.889 128.062 l
+225.431 161.185 l
+228.973 167.631 l
+232.515 165.609 l
+236.057 154.358 l
+239.599 74.463 l
+243.141 151.102 l
+246.683 160.365 l
+250.225 160.169 l
+253.767 151.622 l
+257.309 119.107 l
+260.851 140.326 l
+264.393 153.187 l
+267.935 154.839 l
+271.477 148.556 l
+275.019 126.619 l
+278.561 127.980 l
+282.103 145.946 l
+285.645 149.548 l
+289.187 145.259 l
+292.729 129.081 l
+296.271 111.844 l
+299.812 138.465 l
+303.354 144.220 l
+306.896 141.769 l
+310.438 129.466 l
+313.980 80.114 l
+317.522 130.512 l
+321.064 138.774 l
+324.606 138.087 l
+328.148 128.702 l
+331.690 86.924 l
+335.232 121.741 l
+338.774 133.118 l
+342.316 134.191 l
+345.858 127.176 l
+349.400 101.638 l
+352.942 111.541 l
+356.484 127.140 l
+360.026 130.041 l
+363.568 125.064 l
+367.110 106.776 l
+370.652 98.551 l
+374.194 120.692 l
+377.736 125.577 l
+381.278 122.435 l
+384.820 108.642 l
+388.362 78.089 l
+391.904 113.570 l
+395.446 120.713 l
+398.988 119.291 l
+402.530 108.713 l
+406.072 43.008 l
+409.614 105.462 l
+413.156 115.325 l
+416.698 115.577 l
+420.240 107.501 l
+423.782 76.568 l
+427.324 95.836 l
+430.866 109.233 l
+434.408 111.171 l
+437.950 105.155 l
+441.492 83.904 l
+445.034 83.647 l
+448.576 102.154 l
+452.118 105.845 l
+455.660 101.582 l
+459.202 85.611 l
+462.744 66.167 l
+466.286 93.605 l
+469.828 99.169 l
+473.370 96.397 l
+476.912 83.814 l
+480.454 27.509 l
+483.996 82.648 l
+487.538 90.217 l
+491.080 88.573 l
+494.622 78.102 l
+498.164 37.173 l
+501.706 66.931 l
+505.248 76.324 l
+508.790 74.675 l
+512.332 64.142 l
+515.874 34.431 l
+519.416 35.180 l
+522.958 37.945 l
+stroke
+grestore
+% draw_lines
+0 setlinecap
+[6 6] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 344.638 m
+76.667 344.021 l
+80.209 342.148 l
+83.751 338.946 l
+87.293 334.276 l
+90.835 327.903 l
+94.377 319.427 l
+97.919 308.120 l
+101.461 292.475 l
+105.003 268.454 l
+108.545 213.072 l
+112.087 218.519 l
+115.629 259.152 l
+119.171 273.925 l
+122.713 280.520 l
+126.255 282.309 l
+129.797 280.332 l
+133.339 274.683 l
+136.881 264.621 l
+140.423 247.681 l
+143.965 212.929 l
+147.507 184.774 l
+151.049 218.234 l
+154.591 243.484 l
+158.133 254.844 l
+161.675 259.959 l
+165.217 260.773 l
+168.759 257.793 l
+172.301 250.665 l
+175.843 237.757 l
+179.385 212.685 l
+182.927 178.994 l
+186.469 -424.877 l
+190.011 217.746 l
+193.553 235.408 l
+197.095 243.801 l
+200.637 247.028 l
+204.179 246.206 l
+207.721 241.360 l
+211.263 231.429 l
+214.805 212.332 l
+218.347 138.495 l
+221.889 185.787 l
+225.431 183.612 l
+228.973 217.038 l
+232.515 229.873 l
+236.057 235.734 l
+239.599 237.005 l
+243.141 234.198 l
+246.683 226.722 l
+250.225 211.859 l
+253.767 169.476 l
+257.309 186.593 l
+260.851 173.823 l
+264.393 194.732 l
+267.935 216.079 l
+271.477 225.369 l
+275.019 228.930 l
+278.561 228.116 l
+282.103 222.822 l
+285.645 211.246 l
+289.187 183.443 l
+292.729 181.050 l
+296.271 187.513 l
+299.812 178.164 l
+303.354 199.915 l
+306.896 214.825 l
+310.438 221.217 l
+313.980 222.524 l
+317.522 219.301 l
+321.064 210.468 l
+324.606 190.157 l
+328.148 169.944 l
+331.690 189.675 l
+335.232 181.582 l
+338.774 172.547 l
+342.316 202.663 l
+345.858 213.205 l
+349.400 216.995 l
+352.942 215.878 l
+356.484 209.487 l
+360.026 194.151 l
+363.568 141.332 l
+367.110 188.290 l
+370.652 190.018 l
+374.194 168.185 l
+377.736 185.194 l
+381.278 203.994 l
+384.820 211.108 l
+388.362 212.316 l
+391.904 208.247 l
+395.446 196.681 l
+398.988 154.875 l
+402.530 184.658 l
+406.072 192.833 l
+409.614 186.663 l
+413.156 -460.889 l
+416.698 191.640 l
+420.240 204.277 l
+423.782 208.351 l
+427.324 206.663 l
+430.866 198.243 l
+434.408 172.764 l
+437.950 178.651 l
+441.492 193.308 l
+445.034 193.407 l
+448.576 179.767 l
+452.118 167.615 l
+455.660 195.351 l
+459.202 203.595 l
+462.744 204.597 l
+466.286 199.048 l
+469.828 181.359 l
+473.370 168.699 l
+476.912 192.336 l
+480.454 196.765 l
+483.996 191.640 l
+487.538 166.317 l
+491.080 180.819 l
+494.622 197.324 l
+498.164 201.811 l
+501.706 199.150 l
+505.248 186.669 l
+508.790 146.473 l
+512.332 190.158 l
+515.874 198.473 l
+519.416 197.844 l
+522.958 187.711 l
+stroke
+grestore
+% draw_lines
+[3 5 1 5] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 344.646 m
+76.667 344.163 l
+80.209 342.697 l
+83.751 340.206 l
+87.293 336.608 l
+90.835 331.765 l
+94.377 325.450 l
+97.919 317.263 l
+101.461 306.406 l
+105.003 290.855 l
+108.545 260.984 l
+112.087 257.910 l
+115.629 270.113 l
+119.171 268.975 l
+122.713 260.468 l
+126.255 240.233 l
+129.797 221.580 l
+133.339 244.142 l
+136.881 246.939 l
+140.423 241.790 l
+143.965 226.836 l
+147.507 180.268 l
+151.049 224.403 l
+154.591 230.521 l
+158.133 227.898 l
+161.675 216.607 l
+165.217 170.426 l
+168.759 207.344 l
+172.301 217.011 l
+175.843 216.608 l
+179.385 208.152 l
+182.927 180.524 l
+186.469 191.080 l
+190.011 205.174 l
+193.553 206.908 l
+197.095 200.811 l
+200.637 181.119 l
+204.179 173.710 l
+207.721 194.292 l
+211.263 198.229 l
+214.805 194.208 l
+218.347 179.396 l
+221.889 150.824 l
+225.431 183.851 l
+228.973 190.209 l
+232.515 188.106 l
+236.057 176.779 l
+239.599 96.814 l
+243.141 173.388 l
+246.683 182.589 l
+250.225 182.337 l
+253.767 173.737 l
+257.309 141.172 l
+260.851 162.345 l
+264.393 175.162 l
+267.935 176.773 l
+271.477 170.451 l
+275.019 148.477 l
+278.561 149.804 l
+282.103 167.738 l
+285.645 171.309 l
+289.187 166.991 l
+292.729 150.785 l
+296.271 133.522 l
+299.812 160.118 l
+303.354 165.850 l
+306.896 163.377 l
+310.438 151.052 l
+313.980 101.679 l
+317.522 152.059 l
+321.064 160.303 l
+324.606 159.598 l
+328.148 150.196 l
+331.690 108.402 l
+335.232 143.204 l
+338.774 154.567 l
+342.316 155.626 l
+345.858 148.598 l
+349.400 123.046 l
+352.942 132.938 l
+356.484 148.525 l
+360.026 151.416 l
+363.568 146.427 l
+367.110 128.129 l
+370.652 119.895 l
+374.194 142.026 l
+377.736 146.903 l
+381.278 143.752 l
+384.820 129.951 l
+388.362 99.390 l
+391.904 134.864 l
+395.446 141.999 l
+398.988 140.570 l
+402.530 129.986 l
+406.072 64.275 l
+409.614 126.723 l
+413.156 136.580 l
+416.698 136.826 l
+420.240 128.745 l
+423.782 97.807 l
+427.324 117.071 l
+430.866 130.463 l
+434.408 132.397 l
+437.950 126.376 l
+441.492 105.122 l
+445.034 104.861 l
+448.576 123.364 l
+452.118 127.052 l
+455.660 122.786 l
+459.202 106.813 l
+462.744 87.365 l
+466.286 114.801 l
+469.828 120.363 l
+473.370 117.588 l
+476.912 105.003 l
+480.454 48.696 l
+483.996 103.833 l
+487.538 111.400 l
+491.080 109.755 l
+494.622 99.282 l
+498.164 58.352 l
+501.706 88.110 l
+505.248 97.502 l
+508.790 95.852 l
+512.332 85.318 l
+515.874 55.606 l
+519.416 56.356 l
+522.958 59.120 l
+stroke
+grestore
+% draw_lines
+[1 3] 0 setdash
+gsave
+453.375 352.800 73.125 44.100 clipbox
+73.125 346.280 m
+76.667 345.676 l
+80.209 343.845 l
+83.751 340.736 l
+87.293 336.248 l
+90.835 330.224 l
+94.377 322.407 l
+97.919 312.371 l
+101.461 299.341 l
+105.003 281.601 l
+108.545 253.253 l
+112.087 220.282 l
+115.629 233.441 l
+119.171 220.121 l
+122.713 198.594 l
+126.255 213.622 l
+129.797 232.741 l
+133.339 242.085 l
+136.881 243.804 l
+140.423 237.025 l
+143.965 203.960 l
+147.507 230.388 l
+151.049 244.073 l
+154.591 246.690 l
+158.133 241.191 l
+161.675 219.125 l
+165.217 223.903 l
+168.759 241.739 l
+172.301 245.662 l
+175.843 241.477 l
+179.385 224.009 l
+182.927 215.555 l
+186.469 238.476 l
+190.011 243.766 l
+193.553 240.795 l
+197.095 226.371 l
+200.637 204.635 l
+204.179 234.918 l
+207.721 241.638 l
+211.263 239.805 l
+214.805 227.701 l
+218.347 187.148 l
+221.889 231.207 l
+225.431 239.460 l
+228.973 238.716 l
+232.515 228.509 l
+236.057 142.756 l
+239.599 227.342 l
+243.141 237.284 l
+246.683 237.602 l
+250.225 229.015 l
+253.767 188.027 l
+257.309 223.261 l
+260.851 235.117 l
+264.393 236.489 l
+267.935 229.330 l
+271.477 199.520 l
+275.019 218.852 l
+278.561 232.949 l
+282.103 235.386 l
+285.645 229.515 l
+289.187 205.946 l
+292.729 213.941 l
+296.271 230.761 l
+299.812 234.290 l
+303.354 229.607 l
+306.896 210.254 l
+310.438 208.235 l
+313.980 228.529 l
+317.522 233.195 l
+321.064 229.626 l
+324.606 213.410 l
+328.148 201.185 l
+331.690 226.226 l
+335.232 232.097 l
+338.774 229.588 l
+342.316 215.852 l
+345.858 191.524 l
+349.400 223.818 l
+352.942 230.985 l
+356.484 229.500 l
+360.026 217.812 l
+363.568 174.865 l
+367.110 221.263 l
+370.652 229.851 l
+374.194 229.371 l
+377.736 219.429 l
+381.278 138.835 l
+384.820 218.509 l
+388.362 228.686 l
+391.904 229.202 l
+395.446 220.789 l
+398.988 179.721 l
+402.530 215.482 l
+406.072 227.478 l
+409.614 228.996 l
+413.156 221.953 l
+416.698 191.902 l
+420.240 212.081 l
+423.782 226.215 l
+427.324 228.754 l
+430.866 222.960 l
+434.408 199.153 l
+437.950 208.147 l
+441.492 224.884 l
+445.034 228.476 l
+448.576 223.841 l
+452.118 204.278 l
+455.660 203.420 l
+459.202 223.466 l
+462.744 228.160 l
+466.286 224.618 l
+469.828 208.221 l
+473.370 197.415 l
+476.912 221.941 l
+480.454 227.805 l
+483.996 225.308 l
+487.538 211.417 l
+491.080 189.040 l
+494.622 220.282 l
+498.164 227.408 l
+501.706 225.922 l
+505.248 214.102 l
+508.790 174.825 l
+512.332 218.457 l
+515.874 226.966 l
+519.416 226.472 l
+522.958 216.418 l
+stroke
+grestore
+% text
+/Verdana findfont
+18.000 scalefont
+setfont
+119.312 403.956 m
+0 4 rmoveto
+(Smoothing window in frequency-domain) show
+% text
+/Verdana findfont
+14.000 scalefont
+setfont
+62.469 30.1 m
+(0.0) show
+% line
+0.500 setlinewidth
+[] 0 setdash
+163.800 44.100 m 163.800 48.100 l
+stroke
+% line
+163.800 392.900 m 163.800 396.900 l
+stroke
+% text
+153.175 30.1 m
+(0.1) show
+% line
+254.475 44.100 m 254.475 48.100 l
+stroke
+% line
+254.475 392.900 m 254.475 396.900 l
+stroke
+% text
+243.85 30.1 m
+(0.2) show
+% line
+345.150 44.100 m 345.150 48.100 l
+stroke
+% line
+345.150 392.900 m 345.150 396.900 l
+stroke
+% text
+334.994 30.1 m
+(0.3) show
+% line
+435.825 44.100 m 435.825 48.100 l
+stroke
+% line
+435.825 392.900 m 435.825 396.900 l
+stroke
+% text
+424.825 30.1 m
+(0.4) show
+% text
+515.844 30.1 m
+(0.5) show
+% text
+221.875 11.1 m
+0 3 rmoveto
+(Normalized Frequency) show
+% text
+37.062 39.1 m
+(-100) show
+% line
+73.125 91.140 m 77.125 91.140 l
+stroke
+% line
+522.500 91.140 m 526.500 91.140 l
+stroke
+% text
+47.062 86.14 m
+(-80) show
+% line
+73.125 138.180 m 77.125 138.180 l
+stroke
+% line
+522.500 138.180 m 526.500 138.180 l
+stroke
+% text
+47.062 133.18 m
+(-60) show
+% line
+73.125 185.220 m 77.125 185.220 l
+stroke
+% line
+522.500 185.220 m 526.500 185.220 l
+stroke
+% text
+47.062 180.22 m
+(-40) show
+% line
+73.125 232.260 m 77.125 232.260 l
+stroke
+% line
+522.500 232.260 m 526.500 232.260 l
+stroke
+% text
+47.062 227.26 m
+(-20) show
+% line
+73.125 279.300 m 77.125 279.300 l
+stroke
+% line
+522.500 279.300 m 526.500 279.300 l
+stroke
+% text
+61.812 274.3 m
+(0) show
+% line
+73.125 326.340 m 77.125 326.340 l
+stroke
+% line
+522.500 326.340 m 526.500 326.340 l
+stroke
+% text
+53.062 321.34 m
+(20) show
+% line
+73.125 373.380 m 77.125 373.380 l
+stroke
+% line
+522.500 373.380 m 526.500 373.380 l
+stroke
+% text
+52.938 368.38 m
+(40) show
+% text
+32.062 168.461 m
+gsave
+90 rotate
+0 3 rmoveto
+(Magnitude \(dB\)) show
+grestore
+% polygon
+1.000 setlinewidth
+2 setlinecap
+346.389 279.264 m
+346.389 389.844 l
+517.433 389.844 l
+517.433 279.264 l
+closepath
+gsave
+1.000 setgray
+fill
+grestore
+stroke
+% draw_lines
+362.443 371.629 m
+369.999 371.629 l
+377.555 371.629 l
+385.111 371.629 l
+stroke
+% draw_lines
+0 setlinecap
+[6 6] 0 setdash
+362.443 349.712 m
+369.999 349.712 l
+377.555 349.712 l
+385.111 349.712 l
+stroke
+% draw_lines
+[3 5 1 5] 0 setdash
+362.443 325.795 m
+369.999 325.795 l
+377.555 325.795 l
+385.111 325.795 l
+stroke
+% draw_lines
+[1 3] 0 setdash
+362.443 299.479 m
+369.999 299.479 l
+377.555 299.479 l
+385.111 299.479 l
+stroke
+% text
+/Verdana findfont
+24.000 scalefont
+setfont
+394.179 362.629 m
+(Blackman) show
+% text
+394.179 340.712 m
+(Bartlett) show
+% text
+394.179 314.795 m
+0 5 rmoveto
+(Hanning) show
+% text
+394.179 288.479 m
+0 5 rmoveto
+(Hamming) show
+
+end
+showpage
diff --git a/numpy/doc/numpybook/Figures/hierarchy.dia b/numpy/doc/numpybook/Figures/hierarchy.dia
new file mode 100644
index 000000000..65379b880
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/hierarchy.dia
Binary files differ
diff --git a/numpy/doc/numpybook/Figures/hierarchy.eps b/numpy/doc/numpybook/Figures/hierarchy.eps
new file mode 100644
index 000000000..f7538c764
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/hierarchy.eps
@@ -0,0 +1,5596 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: hierarchy.dia
+%%Creator: Dia v0.94
+%%CreationDate: Wed Jan 4 16:44:07 2006
+%%For: oliphant
+%%Orientation: Portrait
+%%Magnification: 1.0000
+%%BoundingBox: 0 0 743 584
+%%BeginSetup
+%%EndSetup
+%%EndComments
+%%BeginProlog
+[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E
+/F /G /H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W /X /Y
+/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
+/d /e /f /g /h /i /j /k /l /m
+/n /o /p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
+/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
+/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
+/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
+/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
+/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
+/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
+/cp {closepath} bind def
+/c {curveto} bind def
+/f {fill} bind def
+/a {arc} bind def
+/ef {eofill} bind def
+/ex {exch} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth pop} bind def
+/tr {translate} bind def
+
+/ellipsedict 8 dict def
+ellipsedict /mtrx matrix put
+/ellipse
+{ ellipsedict begin
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc
+ 0 0 1 startangle endangle arc
+ savematrix setmatrix
+ end
+} def
+
+/mergeprocs {
+dup length
+3 -1 roll
+dup
+length
+dup
+5 1 roll
+3 -1 roll
+add
+array cvx
+dup
+3 -1 roll
+0 exch
+putinterval
+dup
+4 2 roll
+putinterval
+} bind def
+/dpi_x 300 def
+/dpi_y 300 def
+/conicto {
+ /to_y exch def
+ /to_x exch def
+ /conic_cntrl_y exch def
+ /conic_cntrl_x exch def
+ currentpoint
+ /p0_y exch def
+ /p0_x exch def
+ /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def
+ /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def
+ /p2_x p1_x to_x p0_x sub 1 3 div mul add def
+ /p2_y p1_y to_y p0_y sub 1 3 div mul add def
+ p1_x p1_y p2_x p2_y to_x to_y curveto
+} bind def
+/start_ol { gsave 1.1 dpi_x div dup scale} bind def
+/end_ol { closepath fill grestore } bind def
+28.346000 -28.346000 scale
+-1.702375 -22.793875 translate
+%%EndProlog
+
+
+0.095250 slw
+[1.000000] 0 sd
+[0.127000] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 11.500000 2.250000 m 11.500000 3.750000 l 14.357500 3.750000 l 14.357500 2.250000 l cp s
+gsave 12.000000 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 12.330200 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 12.660400 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 12.990600 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 13.320800 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 13.507067 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 13.642533 3.250000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 12.500000 6.000000 m 12.500000 7.500000 l 15.357500 7.500000 l 15.357500 6.000000 l cp s
+gsave 13.000000 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 13.330200 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 13.651933 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2008 lineto
+749 2165 930 2266 conicto
+1112 2368 1344 2368 conicto
+1602 2368 1767 2263 conicto
+1932 2159 2001 1979 conicto
+2280 2368 2728 2368 conicto
+3079 2368 3267 2177 conicto
+3456 1986 3456 1589 conicto
+3456 0 lineto
+3057 0 lineto
+3057 1471 lineto
+3057 1709 3018 1813 conicto
+2979 1918 2877 1981 conicto
+2775 2045 2638 2045 conicto
+2390 2045 2226 1881 conicto
+2063 1717 2063 1357 conicto
+2063 0 lineto
+1664 0 lineto
+1664 1517 lineto
+1664 1781 1568 1913 conicto
+1472 2045 1254 2045 conicto
+1088 2045 947 1957 conicto
+807 1869 744 1699 conicto
+681 1530 681 1212 conicto
+681 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 14.143000 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+719 0 moveto
+320 0 lineto
+320 3200 lineto
+747 3200 lineto
+747 2056 lineto
+984 2368 1357 2368 conicto
+1563 2368 1747 2281 conicto
+1931 2194 2050 2038 conicto
+2169 1882 2236 1660 conicto
+2304 1438 2304 1186 conicto
+2304 588 2019 262 conicto
+1735 -64 1337 -64 conicto
+942 -64 719 279 conicto
+719 0 lineto
+719 1170 moveto
+719 751 827 564 conicto
+1003 259 1304 259 conicto
+1549 259 1727 484 conicto
+1905 709 1905 1155 conicto
+1905 1610 1734 1827 conicto
+1563 2045 1320 2045 conicto
+1075 2045 897 1820 conicto
+719 1595 719 1170 conicto
+end_ol grestore
+gsave 14.473200 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 14.803400 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 22.000000 6.000000 m 22.000000 7.500000 l 24.765000 7.500000 l 24.765000 6.000000 l cp s
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 21.500000 9.500000 m 21.500000 11.000000 l 24.357500 11.000000 l 24.357500 9.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 25.000000 9.500000 m 25.000000 10.943875 l 27.857500 10.943875 l 27.857500 9.500000 l cp s
+0.095250 slw
+[1.000000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 6.000000 9.500000 m 6.000000 11.000000 l 8.750000 11.000000 l 8.750000 9.500000 l cp s
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 12.750000 11.500000 m 12.750000 13.000000 l 15.607500 13.000000 l 15.607500 11.500000 l cp s
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 16.700000 11.500000 m 16.700000 13.052375 l 21.227375 13.052375 l 21.227375 11.500000 l cp s
+gsave 22.500000 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+384 0 moveto
+384 1984 lineto
+64 1984 lineto
+64 2307 lineto
+384 2307 lineto
+384 2552 lineto
+384 2785 425 2889 conicto
+481 3029 622 3116 conicto
+764 3203 1018 3203 conicto
+1182 3203 1380 3168 conicto
+1322 2858 lineto
+1201 2880 1096 2880 conicto
+925 2880 854 2804 conicto
+783 2728 783 2520 conicto
+783 2307 lineto
+1216 2307 lineto
+1216 1984 lineto
+783 1984 lineto
+783 0 lineto
+384 0 lineto
+end_ol grestore
+gsave 22.660867 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 22.787867 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 23.118067 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+32 0 moveto
+870 1198 lineto
+95 2304 lineto
+581 2304 lineto
+932 1763 lineto
+1032 1610 1092 1506 conicto
+1187 1649 1267 1759 conicto
+1653 2304 lineto
+2117 2304 lineto
+1325 1219 lineto
+2178 0 lineto
+1701 0 lineto
+1230 716 lineto
+1105 909 lineto
+503 0 lineto
+32 0 lineto
+end_ol grestore
+gsave 23.414400 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 23.549867 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+719 0 moveto
+320 0 lineto
+320 3200 lineto
+747 3200 lineto
+747 2056 lineto
+984 2368 1357 2368 conicto
+1563 2368 1747 2281 conicto
+1931 2194 2050 2038 conicto
+2169 1882 2236 1660 conicto
+2304 1438 2304 1186 conicto
+2304 588 2019 262 conicto
+1735 -64 1337 -64 conicto
+942 -64 719 279 conicto
+719 0 lineto
+719 1170 moveto
+719 751 827 564 conicto
+1003 259 1304 259 conicto
+1549 259 1727 484 conicto
+1905 709 1905 1155 conicto
+1905 1610 1734 1827 conicto
+1563 2045 1320 2045 conicto
+1075 2045 897 1820 conicto
+719 1595 719 1170 conicto
+end_ol grestore
+gsave 23.880067 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 24.007067 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 6.500000 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 6.635467 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 6.965667 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 7.126533 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 7.456733 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 7.786933 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 8.117133 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 13.250000 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+423 0 moveto
+423 2048 lineto
+64 2048 lineto
+64 2379 lineto
+423 2379 lineto
+423 2644 lineto
+423 2894 465 3003 conicto
+522 3148 668 3238 conicto
+814 3328 1076 3328 conicto
+1244 3328 1448 3292 conicto
+1389 2974 lineto
+1265 2997 1157 2997 conicto
+980 2997 906 2915 conicto
+832 2833 832 2608 conicto
+832 2379 lineto
+1280 2379 lineto
+1280 2048 lineto
+832 2048 lineto
+832 0 lineto
+423 0 lineto
+end_ol grestore
+gsave 13.419333 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 3264 lineto
+729 3264 lineto
+729 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 13.554800 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+128 1184 moveto
+128 1847 491 2166 conicto
+794 2432 1230 2432 conicto
+1714 2432 2021 2109 conicto
+2329 1786 2329 1218 conicto
+2329 757 2193 492 conicto
+2057 228 1797 82 conicto
+1537 -64 1230 -64 conicto
+737 -64 432 258 conicto
+128 580 128 1184 conicto
+537 1185 moveto
+537 724 734 495 conicto
+931 267 1230 267 conicto
+1526 267 1723 497 conicto
+1920 727 1920 1198 conicto
+1920 1643 1722 1872 conicto
+1524 2101 1230 2101 conicto
+931 2101 734 1873 conicto
+537 1646 537 1185 conicto
+end_ol grestore
+gsave 13.885000 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1865 298 moveto
+1640 105 1435 20 conicto
+1230 -64 995 -64 conicto
+608 -64 400 129 conicto
+192 323 192 624 conicto
+192 801 269 946 conicto
+347 1091 472 1179 conicto
+597 1268 754 1314 conicto
+869 1345 1109 1374 conicto
+1599 1432 1831 1513 conicto
+1831 1596 1831 1618 conicto
+1831 1864 1716 1964 conicto
+1562 2101 1256 2101 conicto
+971 2101 835 2001 conicto
+700 1902 635 1649 conicto
+258 1703 lineto
+311 1955 434 2110 conicto
+557 2265 788 2348 conicto
+1020 2432 1325 2432 conicto
+1628 2432 1817 2360 conicto
+2006 2289 2095 2181 conicto
+2185 2073 2220 1908 conicto
+2240 1806 2240 1537 conicto
+2240 1001 lineto
+2240 439 2265 289 conicto
+2291 139 2366 0 conicto
+1946 0 lineto
+1883 127 1865 298 conicto
+1831 1197 moveto
+1611 1108 1170 1045 conicto
+920 1010 817 965 conicto
+714 921 657 834 conicto
+601 748 601 643 conicto
+601 482 723 374 conicto
+846 267 1082 267 conicto
+1316 267 1498 369 conicto
+1681 471 1766 648 conicto
+1831 783 1831 1050 conicto
+1831 1197 lineto
+end_ol grestore
+gsave 14.223667 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1152 400 moveto
+1209 37 lineto
+1042 0 909 0 conicto
+694 0 575 70 conicto
+456 141 407 257 conicto
+359 373 359 735 conicto
+359 2101 lineto
+64 2101 lineto
+64 2432 lineto
+359 2432 lineto
+359 3021 lineto
+768 3263 lineto
+768 2432 lineto
+1152 2432 lineto
+1152 2101 lineto
+768 2101 lineto
+768 713 lineto
+768 541 788 491 conicto
+808 442 853 413 conicto
+899 384 984 384 conicto
+1048 384 1152 400 conicto
+end_ol grestore
+gsave 14.384533 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2816 moveto
+320 3264 lineto
+729 3264 lineto
+729 2816 lineto
+320 2816 lineto
+320 0 moveto
+320 2368 lineto
+729 2368 lineto
+729 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 14.520000 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2368 lineto
+704 2368 lineto
+704 2058 lineto
+958 2432 1443 2432 conicto
+1654 2432 1831 2354 conicto
+2008 2277 2095 2151 conicto
+2183 2026 2218 1854 conicto
+2240 1742 2240 1462 conicto
+2240 0 lineto
+1831 0 lineto
+1831 1459 lineto
+1831 1708 1785 1831 conicto
+1740 1955 1624 2028 conicto
+1508 2101 1353 2101 conicto
+1105 2101 924 1936 conicto
+744 1771 744 1310 conicto
+744 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 14.858667 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+183 -196 moveto
+594 -254 lineto
+618 -435 726 -517 conicto
+872 -629 1124 -629 conicto
+1396 -629 1543 -518 conicto
+1691 -407 1743 -206 conicto
+1773 -83 1773 309 conicto
+1516 0 1131 0 conicto
+653 0 390 354 conicto
+128 708 128 1202 conicto
+128 1543 248 1830 conicto
+368 2118 596 2275 conicto
+825 2432 1134 2432 conicto
+1545 2432 1811 2094 conicto
+1811 2368 lineto
+2176 2368 lineto
+2176 321 lineto
+2176 -231 2064 -461 conicto
+1953 -692 1711 -826 conicto
+1470 -960 1117 -960 conicto
+698 -960 440 -769 conicto
+183 -579 183 -196 conicto
+537 1231 moveto
+537 762 718 546 conicto
+900 331 1174 331 conicto
+1444 331 1627 545 conicto
+1811 759 1811 1218 conicto
+1811 1656 1622 1878 conicto
+1433 2101 1167 2101 conicto
+905 2101 721 1882 conicto
+537 1663 537 1231 conicto
+end_ol grestore
+gsave 16.950000 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 17.246333 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 17.568067 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2008 lineto
+749 2165 930 2266 conicto
+1112 2368 1344 2368 conicto
+1602 2368 1767 2263 conicto
+1932 2159 2001 1979 conicto
+2280 2368 2728 2368 conicto
+3079 2368 3267 2177 conicto
+3456 1986 3456 1589 conicto
+3456 0 lineto
+3057 0 lineto
+3057 1471 lineto
+3057 1709 3018 1813 conicto
+2979 1918 2877 1981 conicto
+2775 2045 2638 2045 conicto
+2390 2045 2226 1881 conicto
+2063 1717 2063 1357 conicto
+2063 0 lineto
+1664 0 lineto
+1664 1517 lineto
+1664 1781 1568 1913 conicto
+1472 2045 1254 2045 conicto
+1088 2045 947 1957 conicto
+807 1869 744 1699 conicto
+681 1530 681 1212 conicto
+681 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 18.059133 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 -896 moveto
+320 2304 lineto
+704 2304 lineto
+704 1999 lineto
+827 2178 981 2273 conicto
+1136 2368 1355 2368 conicto
+1641 2368 1860 2214 conicto
+2080 2060 2192 1781 conicto
+2304 1502 2304 1169 conicto
+2304 812 2181 526 conicto
+2058 241 1822 88 conicto
+1586 -64 1327 -64 conicto
+1137 -64 986 19 conicto
+835 102 739 228 conicto
+739 -896 lineto
+320 -896 lineto
+704 1132 moveto
+704 686 877 472 conicto
+1050 259 1297 259 conicto
+1548 259 1726 480 conicto
+1905 701 1905 1164 conicto
+1905 1606 1731 1825 conicto
+1557 2045 1314 2045 conicto
+1074 2045 889 1811 conicto
+704 1577 704 1132 conicto
+end_ol grestore
+gsave 18.389333 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 18.516333 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 18.846533 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+32 0 moveto
+870 1198 lineto
+95 2304 lineto
+581 2304 lineto
+932 1763 lineto
+1032 1610 1092 1506 conicto
+1187 1649 1267 1759 conicto
+1653 2304 lineto
+2117 2304 lineto
+1325 1219 lineto
+2178 0 lineto
+1701 0 lineto
+1230 716 lineto
+1105 909 lineto
+503 0 lineto
+32 0 lineto
+end_ol grestore
+gsave 19.142867 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+384 0 moveto
+384 1984 lineto
+64 1984 lineto
+64 2307 lineto
+384 2307 lineto
+384 2552 lineto
+384 2785 425 2889 conicto
+481 3029 622 3116 conicto
+764 3203 1018 3203 conicto
+1182 3203 1380 3168 conicto
+1322 2858 lineto
+1201 2880 1096 2880 conicto
+925 2880 854 2804 conicto
+783 2728 783 2520 conicto
+783 2307 lineto
+1216 2307 lineto
+1216 1984 lineto
+783 1984 lineto
+783 0 lineto
+384 0 lineto
+end_ol grestore
+gsave 19.303733 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 19.430733 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 19.752467 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 20.074200 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 20.235067 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.370533 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.700733 12.500000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 25.750000 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+132 2432 moveto
+552 2432 lineto
+1308 391 lineto
+2063 2432 lineto
+2484 2432 lineto
+1578 0 lineto
+1038 0 lineto
+132 2432 lineto
+end_ol grestore
+gsave 26.097133 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1362 2157 moveto
+1044 2157 859 1905 conicto
+675 1654 675 1216 conicto
+675 779 858 527 conicto
+1042 275 1362 275 conicto
+1678 275 1863 528 conicto
+2048 781 2048 1216 conicto
+2048 1649 1863 1903 conicto
+1678 2157 1362 2157 conicto
+1362 2496 moveto
+1878 2496 2172 2156 conicto
+2467 1817 2467 1215 conicto
+2467 617 2172 276 conicto
+1878 -64 1361 -64 conicto
+843 -64 549 276 conicto
+256 617 256 1215 conicto
+256 1817 549 2156 conicto
+843 2496 1362 2496 conicto
+end_ol grestore
+gsave 26.452733 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+448 2432 moveto
+867 2432 lineto
+867 0 lineto
+448 0 lineto
+448 2432 lineto
+448 3392 moveto
+867 3392 lineto
+867 2880 lineto
+448 2880 lineto
+448 3392 lineto
+end_ol grestore
+gsave 26.622067 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+2013 2064 moveto
+2013 3392 lineto
+2432 3392 lineto
+2432 0 lineto
+2013 0 lineto
+2013 368 lineto
+1889 150 1698 43 conicto
+1508 -64 1241 -64 conicto
+804 -64 530 288 conicto
+256 641 256 1215 conicto
+256 1791 530 2143 conicto
+804 2496 1241 2496 conicto
+1508 2496 1698 2390 conicto
+1888 2284 2013 2064 conicto
+675 1216 moveto
+675 776 853 525 conicto
+1031 275 1343 275 conicto
+1654 275 1833 525 conicto
+2013 776 2013 1216 conicto
+2013 1656 1833 1906 conicto
+1654 2157 1343 2157 conicto
+1031 2157 853 1906 conicto
+675 1656 675 1216 conicto
+end_ol grestore
+gsave 21.750000 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 22.046333 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 3200 lineto
+719 3200 lineto
+719 2064 lineto
+987 2368 1400 2368 conicto
+1655 2368 1842 2266 conicto
+2029 2165 2110 1986 conicto
+2191 1807 2191 1467 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1478 lineto
+1792 1775 1667 1910 conicto
+1543 2045 1316 2045 conicto
+1146 2045 996 1954 conicto
+846 1863 782 1707 conicto
+719 1551 719 1276 conicto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 22.376533 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 22.698267 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 22.884533 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 23.206267 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 23.502600 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 23.663467 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 23.993667 10.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 5.500000 6.000000 m 5.500000 7.417500 l 8.437500 7.417500 l 8.437500 6.000000 l cp s
+gsave 6.000000 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 6.321733 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+719 0 moveto
+320 0 lineto
+320 3200 lineto
+747 3200 lineto
+747 2056 lineto
+984 2368 1357 2368 conicto
+1563 2368 1747 2281 conicto
+1931 2194 2050 2038 conicto
+2169 1882 2236 1660 conicto
+2304 1438 2304 1186 conicto
+2304 588 2019 262 conicto
+1735 -64 1337 -64 conicto
+942 -64 719 279 conicto
+719 0 lineto
+719 1170 moveto
+719 751 827 564 conicto
+1003 259 1304 259 conicto
+1549 259 1727 484 conicto
+1905 709 1905 1155 conicto
+1905 1610 1734 1827 conicto
+1563 2045 1320 2045 conicto
+1075 2045 897 1820 conicto
+719 1595 719 1170 conicto
+end_ol grestore
+gsave 6.651933 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+-172 -921 moveto
+-98 -606 lineto
+18 -637 85 -637 conicto
+204 -637 262 -557 conicto
+320 -478 320 -160 conicto
+320 2273 lineto
+719 2273 lineto
+719 -168 lineto
+719 -596 606 -756 conicto
+462 -960 134 -960 conicto
+-24 -960 -172 -921 conicto
+end_ol grestore
+gsave 6.787400 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 7.117600 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 7.413933 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 7.574800 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -640 lineto
+2496 -640 lineto
+2496 -896 lineto
+-64 -896 lineto
+end_ol grestore
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 1.750000 6.000000 m 1.750000 7.500000 l 4.627500 7.500000 l 4.627500 6.000000 l cp s
+gsave 2.502510 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+729 0 moveto
+320 0 lineto
+320 3264 lineto
+757 3264 lineto
+757 2112 lineto
+1003 2432 1389 2432 conicto
+1602 2432 1792 2343 conicto
+1983 2254 2106 2093 conicto
+2229 1933 2298 1705 conicto
+2368 1478 2368 1220 conicto
+2368 606 2074 271 conicto
+1781 -64 1369 -64 conicto
+960 -64 729 287 conicto
+729 0 lineto
+729 1202 moveto
+729 771 841 580 conicto
+1024 267 1336 267 conicto
+1590 267 1774 498 conicto
+1959 729 1959 1186 conicto
+1959 1655 1781 1878 conicto
+1604 2101 1353 2101 conicto
+1099 2101 914 1870 conicto
+729 1639 729 1202 conicto
+end_ol grestore
+gsave 2.841177 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1184 moveto
+128 1847 491 2166 conicto
+794 2432 1230 2432 conicto
+1714 2432 2021 2109 conicto
+2329 1786 2329 1218 conicto
+2329 757 2193 492 conicto
+2057 228 1797 82 conicto
+1537 -64 1230 -64 conicto
+737 -64 432 258 conicto
+128 580 128 1184 conicto
+537 1185 moveto
+537 724 734 495 conicto
+931 267 1230 267 conicto
+1526 267 1723 497 conicto
+1920 727 1920 1198 conicto
+1920 1643 1722 1872 conicto
+1524 2101 1230 2101 conicto
+931 2101 734 1873 conicto
+537 1646 537 1185 conicto
+end_ol grestore
+gsave 3.171377 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1184 moveto
+128 1847 491 2166 conicto
+794 2432 1230 2432 conicto
+1714 2432 2021 2109 conicto
+2329 1786 2329 1218 conicto
+2329 757 2193 492 conicto
+2057 228 1797 82 conicto
+1537 -64 1230 -64 conicto
+737 -64 432 258 conicto
+128 580 128 1184 conicto
+537 1185 moveto
+537 724 734 495 conicto
+931 267 1230 267 conicto
+1526 267 1723 497 conicto
+1920 727 1920 1198 conicto
+1920 1643 1722 1872 conicto
+1524 2101 1230 2101 conicto
+931 2101 734 1873 conicto
+537 1646 537 1185 conicto
+end_ol grestore
+gsave 3.501577 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 3264 lineto
+729 3264 lineto
+729 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 3.637043 7.000000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -576 lineto
+2560 -576 lineto
+2560 -896 lineto
+-64 -896 lineto
+end_ol grestore
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 12.928800 3.750000 m 12.928800 4.875000 l 6.968750 4.875000 l 6.968750 5.513197 l s
+[] 0 sd
+0 slj
+0 slc
+n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l ef
+n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 12.928800 3.750000 m 12.928800 4.875000 l 3.188750 4.875000 l 3.188750 5.513197 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l ef
+n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 12.928800 3.750000 m 12.928800 4.875000 l 13.928800 4.875000 l 13.928800 5.513197 l s
+[] 0 sd
+0 slj
+0 slc
+n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l ef
+n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 12.928800 3.750000 m 12.928800 4.875000 l 23.382500 4.875000 l 23.382500 5.513197 l s
+[] 0 sd
+0 slj
+0 slc
+n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l ef
+n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 23.382500 7.500000 m 23.382500 8.500000 l 26.428800 8.500000 l 26.428800 9.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l ef
+n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 13.928800 7.500000 m 13.928800 8.500000 l 7.375000 8.500000 l 7.375000 9.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l ef
+n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 23.382500 7.500000 m 23.382500 8.500000 l 22.928800 8.500000 l 22.928800 9.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l ef
+n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l cp s
+0.095250 slw
+[1.000000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 3.000000 11.500000 m 3.000000 13.002375 l 6.752375 13.002375 l 6.752375 11.500000 l cp s
+0.095250 slw
+[0.127000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 7.750000 11.500000 m 7.750000 13.002375 l 12.102375 13.002375 l 12.102375 11.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 14.200000 15.500000 m 14.200000 16.996250 l 17.057500 16.996250 l 17.057500 15.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 14.200000 17.250000 m 14.200000 18.746250 l 17.057500 18.746250 l 17.057500 17.250000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 14.200000 19.000000 m 14.200000 20.496250 l 17.450000 20.496250 l 17.450000 19.000000 l cp s
+gsave 3.100000 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 3.396333 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 3.531800 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 3.862000 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 4.192200 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 4.522400 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+1752 0 moveto
+1752 281 lineto
+1534 -64 1112 -64 conicto
+838 -64 609 89 conicto
+380 243 254 517 conicto
+128 792 128 1149 conicto
+128 1498 242 1782 conicto
+357 2066 585 2217 conicto
+813 2368 1095 2368 conicto
+1302 2368 1463 2280 conicto
+1625 2192 1726 2052 conicto
+1726 3200 lineto
+2127 3200 lineto
+2127 0 lineto
+1752 0 lineto
+527 1150 moveto
+527 703 711 481 conicto
+896 259 1146 259 conicto
+1399 259 1575 471 conicto
+1752 683 1752 1118 conicto
+1752 1597 1572 1821 conicto
+1392 2045 1129 2045 conicto
+872 2045 699 1829 conicto
+527 1614 527 1150 conicto
+end_ol grestore
+gsave 4.844133 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 4.979600 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.309800 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 5.470667 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 5.800867 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 6.131067 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 6.461267 12.450000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 7.852380 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 8.174113 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 8.504313 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 8.800647 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 8.936113 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 9.266313 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 9.596513 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 9.926713 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1752 0 moveto
+1752 281 lineto
+1534 -64 1112 -64 conicto
+838 -64 609 89 conicto
+380 243 254 517 conicto
+128 792 128 1149 conicto
+128 1498 242 1782 conicto
+357 2066 585 2217 conicto
+813 2368 1095 2368 conicto
+1302 2368 1463 2280 conicto
+1625 2192 1726 2052 conicto
+1726 3200 lineto
+2127 3200 lineto
+2127 0 lineto
+1752 0 lineto
+527 1150 moveto
+527 703 711 481 conicto
+896 259 1146 259 conicto
+1399 259 1575 471 conicto
+1752 683 1752 1118 conicto
+1752 1597 1572 1821 conicto
+1392 2045 1129 2045 conicto
+872 2045 699 1829 conicto
+527 1614 527 1150 conicto
+end_ol grestore
+gsave 10.248447 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.383913 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.714113 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 10.874980 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 11.205180 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 11.535380 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 11.865580 12.502400 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 4.000000 14.250000 m 4.000000 15.746250 l 6.857500 15.746250 l 6.857500 14.250000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 4.000000 16.000000 m 4.000000 17.496250 l 6.857500 17.496250 l 6.857500 16.000000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 4.000000 17.750000 m 4.000000 19.246250 l 6.857500 19.246250 l 6.857500 17.750000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 4.000000 19.500000 m 4.000000 20.996250 l 6.857500 20.996250 l 6.857500 19.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 4.000000 21.250000 m 4.000000 22.746250 l 6.857500 22.746250 l 6.857500 21.250000 l cp s
+gsave 4.750000 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+719 0 moveto
+320 0 lineto
+320 3200 lineto
+747 3200 lineto
+747 2056 lineto
+984 2368 1357 2368 conicto
+1563 2368 1747 2281 conicto
+1931 2194 2050 2038 conicto
+2169 1882 2236 1660 conicto
+2304 1438 2304 1186 conicto
+2304 588 2019 262 conicto
+1735 -64 1337 -64 conicto
+942 -64 719 279 conicto
+719 0 lineto
+719 1170 moveto
+719 751 827 564 conicto
+1003 259 1304 259 conicto
+1549 259 1727 484 conicto
+1905 709 1905 1155 conicto
+1905 1610 1734 1827 conicto
+1563 2045 1320 2045 conicto
+1075 2045 897 1820 conicto
+719 1595 719 1170 conicto
+end_ol grestore
+gsave 5.080200 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+274 -912 moveto
+231 -541 lineto
+358 -576 453 -576 conicto
+583 -576 660 -532 conicto
+738 -489 788 -410 conicto
+824 -352 906 -118 conicto
+917 -86 941 -22 conicto
+71 2297 lineto
+490 2297 lineto
+967 956 lineto
+1060 701 1133 420 conicto
+1200 690 1293 947 conicto
+1783 2297 lineto
+2171 2297 lineto
+1299 -57 lineto
+1159 -439 1081 -583 conicto
+978 -778 844 -869 conicto
+710 -960 524 -960 conicto
+412 -960 274 -912 conicto
+end_ol grestore
+gsave 5.376533 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 5.537400 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 4.750000 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 5.046333 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 3200 lineto
+719 3200 lineto
+719 2064 lineto
+987 2368 1400 2368 conicto
+1655 2368 1842 2266 conicto
+2029 2165 2110 1986 conicto
+2191 1807 2191 1467 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1478 lineto
+1792 1775 1667 1910 conicto
+1543 2045 1316 2045 conicto
+1146 2045 996 1954 conicto
+846 1863 782 1707 conicto
+719 1551 719 1276 conicto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.376533 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 5.698267 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 5.884533 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 4.900000 18.650000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.035467 18.650000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.365667 18.650000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 5.526533 18.650000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 4.700000 20.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 4.835467 20.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.165667 20.500000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 5.326533 20.500000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -640 lineto
+2496 -640 lineto
+2496 -896 lineto
+-64 -896 lineto
+end_ol grestore
+gsave 4.400000 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 4.527000 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 4.848733 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 5.178933 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 5.509133 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 5.636133 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 5.957867 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 6.288067 22.250000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 9.250000 14.250000 m 9.250000 15.746250 l 12.107500 15.746250 l 12.107500 14.250000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 9.250000 16.000000 m 9.250000 17.496250 l 12.107500 17.496250 l 12.107500 16.000000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 9.250000 17.750000 m 9.250000 19.246250 l 12.107500 19.246250 l 12.107500 17.750000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 9.250000 19.500000 m 9.250000 20.996250 l 12.107500 20.996250 l 12.107500 19.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 9.250000 21.250000 m 9.250000 22.746250 l 12.107500 22.746250 l 12.107500 21.250000 l cp s
+gsave 10.000000 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 10.321733 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+719 0 moveto
+320 0 lineto
+320 3200 lineto
+747 3200 lineto
+747 2056 lineto
+984 2368 1357 2368 conicto
+1563 2368 1747 2281 conicto
+1931 2194 2050 2038 conicto
+2169 1882 2236 1660 conicto
+2304 1438 2304 1186 conicto
+2304 588 2019 262 conicto
+1735 -64 1337 -64 conicto
+942 -64 719 279 conicto
+719 0 lineto
+719 1170 moveto
+719 751 827 564 conicto
+1003 259 1304 259 conicto
+1549 259 1727 484 conicto
+1905 709 1905 1155 conicto
+1905 1610 1734 1827 conicto
+1563 2045 1320 2045 conicto
+1075 2045 897 1820 conicto
+719 1595 719 1170 conicto
+end_ol grestore
+gsave 10.651933 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+274 -912 moveto
+231 -541 lineto
+358 -576 453 -576 conicto
+583 -576 660 -532 conicto
+738 -489 788 -410 conicto
+824 -352 906 -118 conicto
+917 -86 941 -22 conicto
+71 2297 lineto
+490 2297 lineto
+967 956 lineto
+1060 701 1133 420 conicto
+1200 690 1293 947 conicto
+1783 2297 lineto
+2171 2297 lineto
+1299 -57 lineto
+1159 -439 1081 -583 conicto
+978 -778 844 -869 conicto
+710 -960 524 -960 conicto
+412 -960 274 -912 conicto
+end_ol grestore
+gsave 10.948267 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 11.109133 15.250000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 10.000000 18.750000 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 10.321733 18.750000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.457200 18.750000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.787400 18.750000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 10.948267 18.750000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 10.202400 20.502400 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 10.524133 20.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.659600 20.502400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.989800 20.502400 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 9.452370 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 9.774103 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 9.901103 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 10.222837 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.553037 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 10.883237 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 11.010237 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 11.331970 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 11.662170 22.252400 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 10.000000 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 10.321733 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 10.618067 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 3200 lineto
+719 3200 lineto
+719 2064 lineto
+987 2368 1400 2368 conicto
+1655 2368 1842 2266 conicto
+2029 2165 2110 1986 conicto
+2191 1807 2191 1467 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1478 lineto
+1792 1775 1667 1910 conicto
+1543 2045 1316 2045 conicto
+1146 2045 996 1954 conicto
+846 1863 782 1707 conicto
+719 1551 719 1276 conicto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 10.948267 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 11.270000 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 2304 lineto
+576 2304 lineto
+576 1986 lineto
+709 2209 822 2288 conicto
+936 2368 1072 2368 conicto
+1268 2368 1471 2237 conicto
+1337 1898 lineto
+1195 1984 1053 1984 conicto
+925 1984 823 1905 conicto
+722 1827 679 1689 conicto
+614 1477 614 1226 conicto
+614 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 11.456267 17.000000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 14.600000 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 14.896333 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 15.031800 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 15.362000 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 15.692200 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 15.819200 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 14.700000 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+384 0 moveto
+384 1984 lineto
+64 1984 lineto
+64 2307 lineto
+384 2307 lineto
+384 2552 lineto
+384 2785 425 2889 conicto
+481 3029 622 3116 conicto
+764 3203 1018 3203 conicto
+1182 3203 1380 3168 conicto
+1322 2858 lineto
+1201 2880 1096 2880 conicto
+925 2880 854 2804 conicto
+783 2728 783 2520 conicto
+783 2307 lineto
+1216 2307 lineto
+1216 1984 lineto
+783 1984 lineto
+783 0 lineto
+384 0 lineto
+end_ol grestore
+gsave 14.860867 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 14.987867 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 15.309600 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 15.631333 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+gsave 15.792200 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -640 lineto
+2496 -640 lineto
+2496 -896 lineto
+-64 -896 lineto
+end_ol grestore
+gsave 14.650000 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 14.777000 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 15.098733 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 15.428933 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 15.759133 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+384 0 moveto
+384 1984 lineto
+64 1984 lineto
+64 2307 lineto
+384 2307 lineto
+384 2552 lineto
+384 2785 425 2889 conicto
+481 3029 622 3116 conicto
+764 3203 1018 3203 conicto
+1182 3203 1380 3168 conicto
+1322 2858 lineto
+1201 2880 1096 2880 conicto
+925 2880 854 2804 conicto
+783 2728 783 2520 conicto
+783 2307 lineto
+1216 2307 lineto
+1216 1984 lineto
+783 1984 lineto
+783 0 lineto
+384 0 lineto
+end_ol grestore
+gsave 15.920000 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 16.047000 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 16.368733 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 16.690467 19.950000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 14.998100 l 3.513197 14.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l ef
+n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 16.748100 l 3.513197 16.748100 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l ef
+n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 18.498100 l 3.513197 18.498100 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l ef
+n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 20.248100 l 3.513197 20.248100 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l ef
+n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 21.998100 l 3.513197 21.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l ef
+n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 14.998100 l 8.763197 14.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l ef
+n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 16.748100 l 8.763197 16.748100 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l ef
+n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 18.498100 l 8.763197 18.498100 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l ef
+n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 20.248100 l 8.763197 20.248100 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l ef
+n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 21.998100 l 8.763197 21.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l ef
+n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 16.248100 l 13.713197 16.248100 l s
+[] 0 sd
+0 slj
+0 slc
+n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l ef
+n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 17.998100 l 13.713197 17.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l ef
+n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 19.748100 l 13.713197 19.748100 l s
+[] 0 sd
+0 slj
+0 slc
+n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l ef
+n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 16.248100 l 18.713197 16.248100 l s
+[] 0 sd
+0 slj
+0 slc
+n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l ef
+n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 17.998100 l 18.713197 17.998100 l s
+[] 0 sd
+0 slj
+0 slc
+n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l ef
+n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 19.748100 l 18.713197 19.748100 l s
+[] 0 sd
+0 slj
+0 slc
+n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l ef
+n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 22.928800 11.000000 m 22.928800 12.498100 l 24.013197 12.498100 l s
+[] 0 sd
+0 slj
+0 slc
+n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l ef
+n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 22.928800 11.000000 m 22.928800 14.248100 l 24.013197 14.248100 l s
+[] 0 sd
+0 slj
+0 slc
+n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l ef
+n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 24.500000 11.750000 m 24.500000 13.246250 l 27.357500 13.246250 l 27.357500 11.750000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 24.500000 13.500000 m 24.500000 14.996250 l 27.357500 14.996250 l 27.357500 13.500000 l cp s
+gsave 24.800000 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+1792 0 moveto
+1792 314 lineto
+1521 -64 1053 -64 conicto
+847 -64 668 11 conicto
+489 87 402 201 conicto
+316 316 280 490 conicto
+256 606 256 859 conicto
+256 2304 lineto
+655 2304 lineto
+655 1010 lineto
+655 701 679 593 conicto
+717 437 837 348 conicto
+957 259 1135 259 conicto
+1312 259 1467 350 conicto
+1622 441 1686 598 conicto
+1751 755 1751 1054 conicto
+1751 2304 lineto
+2112 2304 lineto
+2112 0 lineto
+1792 0 lineto
+end_ol grestore
+gsave 25.121733 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 25.451933 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 25.587400 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 25.883733 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 26.205467 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+1752 0 moveto
+1752 281 lineto
+1534 -64 1112 -64 conicto
+838 -64 609 89 conicto
+380 243 254 517 conicto
+128 792 128 1149 conicto
+128 1498 242 1782 conicto
+357 2066 585 2217 conicto
+813 2368 1095 2368 conicto
+1302 2368 1463 2280 conicto
+1625 2192 1726 2052 conicto
+1726 3200 lineto
+2127 3200 lineto
+2127 0 lineto
+1752 0 lineto
+527 1150 moveto
+527 703 711 481 conicto
+896 259 1146 259 conicto
+1399 259 1575 471 conicto
+1752 683 1752 1118 conicto
+1752 1597 1572 1821 conicto
+1392 2045 1129 2045 conicto
+872 2045 699 1829 conicto
+527 1614 527 1150 conicto
+end_ol grestore
+gsave 26.527200 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 26.857400 14.500000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -640 lineto
+2496 -640 lineto
+2496 -896 lineto
+-64 -896 lineto
+end_ol grestore
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 19.200000 15.500000 m 19.200000 16.996250 l 22.057500 16.996250 l 22.057500 15.500000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 19.200000 17.250000 m 19.200000 18.746250 l 22.057500 18.746250 l 22.057500 17.250000 l cp s
+0.095250 slw
+[] 0 sd
+[] 0 sd
+0 slj
+n 19.200000 19.000000 m 19.200000 20.496250 l 22.700000 20.496250 l 22.700000 19.000000 l cp s
+gsave 19.650000 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 19.946333 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+127 682 moveto
+531 744 lineto
+566 509 713 384 conicto
+861 259 1125 259 conicto
+1391 259 1520 370 conicto
+1649 481 1649 630 conicto
+1649 764 1536 841 conicto
+1456 893 1140 974 conicto
+715 1084 542 1164 conicto
+370 1244 281 1385 conicto
+192 1527 192 1698 conicto
+192 1853 266 1986 conicto
+341 2119 469 2207 conicto
+566 2274 722 2321 conicto
+878 2368 1057 2368 conicto
+1325 2368 1528 2289 conicto
+1732 2211 1828 2076 conicto
+1925 1941 1962 1716 conicto
+1582 1663 lineto
+1557 1843 1433 1944 conicto
+1310 2045 1085 2045 conicto
+819 2045 705 1955 conicto
+591 1865 591 1744 conicto
+591 1668 638 1606 conicto
+685 1543 786 1501 conicto
+844 1479 1128 1400 conicto
+1537 1288 1700 1216 conicto
+1863 1145 1955 1009 conicto
+2048 874 2048 672 conicto
+2048 475 1934 300 conicto
+1820 126 1604 31 conicto
+1389 -64 1116 -64 conicto
+665 -64 429 124 conicto
+193 313 127 682 conicto
+end_ol grestore
+gsave 20.242667 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.378133 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.708333 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 21.038533 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 21.165533 16.500000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 19.529300 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 19.825633 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 20.147367 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2008 lineto
+749 2165 930 2266 conicto
+1112 2368 1344 2368 conicto
+1602 2368 1767 2263 conicto
+1932 2159 2001 1979 conicto
+2280 2368 2728 2368 conicto
+3079 2368 3267 2177 conicto
+3456 1986 3456 1589 conicto
+3456 0 lineto
+3057 0 lineto
+3057 1471 lineto
+3057 1709 3018 1813 conicto
+2979 1918 2877 1981 conicto
+2775 2045 2638 2045 conicto
+2390 2045 2226 1881 conicto
+2063 1717 2063 1357 conicto
+2063 0 lineto
+1664 0 lineto
+1664 1517 lineto
+1664 1781 1568 1913 conicto
+1472 2045 1254 2045 conicto
+1088 2045 947 1957 conicto
+807 1869 744 1699 conicto
+681 1530 681 1212 conicto
+681 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.638433 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+320 -896 moveto
+320 2304 lineto
+704 2304 lineto
+704 1999 lineto
+827 2178 981 2273 conicto
+1136 2368 1355 2368 conicto
+1641 2368 1860 2214 conicto
+2080 2060 2192 1781 conicto
+2304 1502 2304 1169 conicto
+2304 812 2181 526 conicto
+2058 241 1822 88 conicto
+1586 -64 1327 -64 conicto
+1137 -64 986 19 conicto
+835 102 739 228 conicto
+739 -896 lineto
+320 -896 lineto
+704 1132 moveto
+704 686 877 472 conicto
+1050 259 1297 259 conicto
+1548 259 1726 480 conicto
+1905 701 1905 1164 conicto
+1905 1606 1731 1825 conicto
+1557 2045 1314 2045 conicto
+1074 2045 889 1811 conicto
+704 1577 704 1132 conicto
+end_ol grestore
+gsave 20.968633 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 21.095633 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 21.425833 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+32 0 moveto
+870 1198 lineto
+95 2304 lineto
+581 2304 lineto
+932 1763 lineto
+1032 1610 1092 1506 conicto
+1187 1649 1267 1759 conicto
+1653 2304 lineto
+2117 2304 lineto
+1325 1219 lineto
+2178 0 lineto
+1701 0 lineto
+1230 716 lineto
+1105 909 lineto
+503 0 lineto
+32 0 lineto
+end_ol grestore
+gsave 21.722167 18.250000 translate 0.035278 -0.035278 scale
+start_ol
+-64 -896 moveto
+-64 -640 lineto
+2496 -640 lineto
+2496 -896 lineto
+-64 -896 lineto
+end_ol grestore
+gsave 19.550000 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 19.846333 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 19.973333 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 20.295067 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 20.625267 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+204 -201 moveto
+583 -259 lineto
+607 -441 714 -525 conicto
+859 -637 1109 -637 conicto
+1379 -637 1526 -526 conicto
+1673 -415 1724 -215 conicto
+1755 -93 1755 298 conicto
+1500 -3 1120 -3 conicto
+646 -3 387 342 conicto
+128 687 128 1169 conicto
+128 1501 247 1781 conicto
+366 2062 591 2215 conicto
+817 2368 1122 2368 conicto
+1528 2368 1792 2038 conicto
+1792 2304 lineto
+2176 2304 lineto
+2176 297 lineto
+2176 -245 2066 -471 conicto
+1956 -697 1717 -828 conicto
+1479 -960 1130 -960 conicto
+714 -960 459 -771 conicto
+204 -582 204 -201 conicto
+527 1198 moveto
+527 740 707 530 conicto
+887 320 1158 320 conicto
+1427 320 1609 529 conicto
+1792 738 1792 1185 conicto
+1792 1611 1604 1828 conicto
+1417 2045 1151 2045 conicto
+891 2045 709 1831 conicto
+527 1618 527 1198 conicto
+end_ol grestore
+gsave 20.955467 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+384 0 moveto
+384 1984 lineto
+64 1984 lineto
+64 2307 lineto
+384 2307 lineto
+384 2552 lineto
+384 2785 425 2889 conicto
+481 3029 622 3116 conicto
+764 3203 1018 3203 conicto
+1182 3203 1380 3168 conicto
+1322 2858 lineto
+1201 2880 1096 2880 conicto
+925 2880 854 2804 conicto
+783 2728 783 2520 conicto
+783 2307 lineto
+1216 2307 lineto
+1216 1984 lineto
+783 1984 lineto
+783 0 lineto
+384 0 lineto
+end_ol grestore
+gsave 21.116333 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+256 0 moveto
+256 3200 lineto
+655 3200 lineto
+655 0 lineto
+256 0 lineto
+end_ol grestore
+gsave 21.243333 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+128 1152 moveto
+128 1798 479 2109 conicto
+771 2368 1192 2368 conicto
+1661 2368 1958 2053 conicto
+2255 1739 2255 1184 conicto
+2255 735 2123 477 conicto
+1992 220 1740 78 conicto
+1489 -64 1192 -64 conicto
+715 -64 421 249 conicto
+128 562 128 1152 conicto
+527 1154 moveto
+527 705 716 482 conicto
+905 259 1192 259 conicto
+1478 259 1667 483 conicto
+1856 707 1856 1167 conicto
+1856 1599 1666 1822 conicto
+1476 2045 1192 2045 conicto
+905 2045 716 1823 conicto
+527 1601 527 1154 conicto
+end_ol grestore
+gsave 21.565067 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 21.886800 20.000000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 6.000000 10.250000 m 4.876190 10.250000 l 4.876190 11.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l ef
+n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 8.750000 10.250000 m 9.926190 10.250000 l 9.926190 11.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l ef
+n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l cp s
+0.095250 slw
+[1.000000] 0 sd
+[0.127000] 0 sd
+0 slj
+n 15.202400 9.535000 m 15.202400 11.102375 l 17.752400 11.102375 l 17.752400 9.535000 l cp s
+gsave 15.555000 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+320 2752 moveto
+320 3200 lineto
+719 3200 lineto
+719 2752 lineto
+320 2752 lineto
+320 0 moveto
+320 2304 lineto
+719 2304 lineto
+719 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 15.690467 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+320 0 moveto
+320 2304 lineto
+640 2304 lineto
+640 2003 lineto
+898 2368 1387 2368 conicto
+1600 2368 1778 2292 conicto
+1956 2217 2045 2095 conicto
+2134 1973 2168 1805 conicto
+2191 1696 2191 1424 conicto
+2191 0 lineto
+1792 0 lineto
+1792 1421 lineto
+1792 1662 1746 1782 conicto
+1700 1903 1581 1974 conicto
+1463 2045 1303 2045 conicto
+1048 2045 863 1884 conicto
+679 1724 679 1275 conicto
+679 0 lineto
+320 0 lineto
+end_ol grestore
+gsave 16.020667 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+1877 721 moveto
+2278 672 lineto
+2184 322 1928 129 conicto
+1673 -64 1277 -64 conicto
+777 -64 484 250 conicto
+192 564 192 1132 conicto
+192 1719 487 2043 conicto
+782 2368 1254 2368 conicto
+1710 2368 1999 2043 conicto
+2289 1719 2289 1132 conicto
+2289 1096 2289 1024 conicto
+591 1024 lineto
+591 654 784 456 conicto
+978 259 1268 259 conicto
+1484 259 1636 369 conicto
+1788 479 1877 721 conicto
+610 1347 moveto
+1881 1347 lineto
+1855 1654 1734 1807 conicto
+1549 2045 1251 2045 conicto
+979 2045 794 1855 conicto
+610 1665 610 1347 conicto
+end_ol grestore
+gsave 16.350867 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+32 0 moveto
+870 1198 lineto
+95 2304 lineto
+581 2304 lineto
+932 1763 lineto
+1032 1610 1092 1506 conicto
+1187 1649 1267 1759 conicto
+1653 2304 lineto
+2117 2304 lineto
+1325 1219 lineto
+2178 0 lineto
+1701 0 lineto
+1230 716 lineto
+1105 909 lineto
+503 0 lineto
+32 0 lineto
+end_ol grestore
+gsave 16.647200 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+1746 289 moveto
+1529 102 1331 19 conicto
+1133 -64 905 -64 conicto
+530 -64 329 124 conicto
+128 312 128 605 conicto
+128 777 203 919 conicto
+278 1062 399 1148 conicto
+521 1234 672 1278 conicto
+785 1309 1017 1337 conicto
+1490 1394 1713 1472 conicto
+1713 1553 1713 1575 conicto
+1713 1814 1603 1912 conicto
+1453 2045 1158 2045 conicto
+884 2045 753 1948 conicto
+622 1851 560 1605 conicto
+192 1657 lineto
+243 1902 362 2053 conicto
+481 2204 705 2286 conicto
+930 2368 1225 2368 conicto
+1519 2368 1702 2298 conicto
+1886 2229 1972 2124 conicto
+2058 2019 2093 1858 conicto
+2112 1758 2112 1496 conicto
+2112 973 lineto
+2112 427 2137 281 conicto
+2162 135 2235 0 conicto
+1825 0 lineto
+1763 123 1746 289 conicto
+1713 1165 moveto
+1501 1078 1076 1017 conicto
+835 982 735 938 conicto
+635 895 581 811 conicto
+527 727 527 624 conicto
+527 468 645 363 conicto
+763 259 991 259 conicto
+1216 259 1391 358 conicto
+1567 457 1650 630 conicto
+1713 762 1713 1021 conicto
+1713 1165 lineto
+end_ol grestore
+gsave 16.968933 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+1806 840 moveto
+2188 790 lineto
+2125 389 1867 162 conicto
+1610 -64 1234 -64 conicto
+764 -64 478 248 conicto
+192 560 192 1143 conicto
+192 1520 315 1802 conicto
+438 2085 689 2226 conicto
+941 2368 1236 2368 conicto
+1610 2368 1847 2176 conicto
+2084 1985 2151 1633 conicto
+1774 1573 lineto
+1720 1808 1583 1926 conicto
+1446 2045 1251 2045 conicto
+958 2045 774 1831 conicto
+591 1617 591 1155 conicto
+591 685 768 472 conicto
+945 259 1230 259 conicto
+1458 259 1611 401 conicto
+1765 544 1806 840 conicto
+end_ol grestore
+gsave 17.265267 10.535000 translate 0.035278 -0.035278 scale
+start_ol
+1152 399 moveto
+1209 37 lineto
+1034 0 895 0 conicto
+670 0 545 71 conicto
+421 142 370 257 conicto
+320 373 320 724 conicto
+320 2045 lineto
+64 2045 lineto
+64 2368 lineto
+320 2368 lineto
+320 2942 lineto
+719 3177 lineto
+719 2368 lineto
+1152 2368 lineto
+1152 2045 lineto
+719 2045 lineto
+719 702 lineto
+719 535 742 487 conicto
+765 440 816 412 conicto
+868 384 963 384 conicto
+1035 384 1152 399 conicto
+end_ol grestore
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 13.928800 7.500000 m 13.928800 8.517500 l 16.477400 8.517500 l 16.477400 9.048197 l s
+[] 0 sd
+0 slj
+0 slc
+n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l ef
+n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 15.202400 10.318700 m 14.178700 10.318700 l 14.178700 11.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l ef
+n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 17.752400 10.318700 m 18.963700 10.318700 l 18.963700 11.013197 l s
+[] 0 sd
+0 slj
+0 slc
+n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l ef
+n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l cp s
+gsave 25.352400 12.802400 translate 0.035278 -0.035278 scale
+start_ol
+2034 2424 moveto
+2034 2034 lineto
+1849 2123 1665 2167 conicto
+1482 2212 1285 2212 conicto
+985 2212 835 2118 conicto
+685 2025 685 1839 conicto
+685 1697 791 1615 conicto
+898 1534 1219 1462 conicto
+1355 1430 lineto
+1785 1337 1971 1166 conicto
+2157 995 2157 690 conicto
+2157 342 1882 139 conicto
+1608 -64 1128 -64 conicto
+928 -64 710 -24 conicto
+493 15 253 94 conicto
+253 519 lineto
+483 402 701 343 conicto
+920 284 1133 284 conicto
+1420 284 1574 383 conicto
+1728 482 1728 661 conicto
+1728 829 1618 917 conicto
+1509 1006 1138 1088 conicto
+999 1121 lineto
+622 1201 439 1367 conicto
+256 1533 256 1823 conicto
+256 2176 509 2368 conicto
+762 2560 1226 2560 conicto
+1457 2560 1660 2526 conicto
+1863 2492 2034 2424 conicto
+end_ol grestore
+gsave 25.665667 12.802400 translate 0.035278 -0.035278 scale
+start_ol
+832 3213 moveto
+832 2524 lineto
+1664 2524 lineto
+1664 2176 lineto
+832 2176 lineto
+832 825 lineto
+832 521 914 434 conicto
+997 348 1249 348 conicto
+1664 348 lineto
+1664 0 lineto
+1241 0 lineto
+765 0 584 179 conicto
+403 359 403 826 conicto
+403 2176 lineto
+128 2176 lineto
+128 2524 lineto
+403 2524 lineto
+403 3213 lineto
+832 3213 lineto
+end_ol grestore
+gsave 25.902733 12.802400 translate 0.035278 -0.035278 scale
+start_ol
+1853 2133 moveto
+1787 2174 1706 2193 conicto
+1626 2212 1529 2212 conicto
+1183 2212 998 1983 conicto
+813 1755 813 1328 conicto
+813 0 lineto
+384 0 lineto
+384 2496 lineto
+813 2496 lineto
+813 2129 lineto
+941 2347 1146 2453 conicto
+1352 2560 1647 2560 conicto
+1689 2560 1740 2553 conicto
+1791 2547 1853 2536 conicto
+1853 2133 lineto
+end_ol grestore
+gsave 26.148267 12.802400 translate 0.035278 -0.035278 scale
+start_ol
+2304 -740 moveto
+2304 -1088 lineto
+-64 -1088 lineto
+-64 -740 lineto
+2304 -740 lineto
+end_ol grestore
+showpage
diff --git a/numpy/doc/numpybook/Figures/hierarchy.fig b/numpy/doc/numpybook/Figures/hierarchy.fig
new file mode 100644
index 000000000..178555da0
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/hierarchy.fig
Binary files differ
diff --git a/numpy/doc/numpybook/Figures/hierarchy.pdf b/numpy/doc/numpybook/Figures/hierarchy.pdf
new file mode 100644
index 000000000..7ab56ee97
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/hierarchy.pdf
Binary files differ
diff --git a/numpy/doc/numpybook/Figures/hierarchy.png b/numpy/doc/numpybook/Figures/hierarchy.png
new file mode 100644
index 000000000..50dd7474d
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/hierarchy.png
Binary files differ
diff --git a/numpy/doc/numpybook/Figures/threefundamental.eps b/numpy/doc/numpybook/Figures/threefundamental.eps
new file mode 100644
index 000000000..22eedc4f1
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/threefundamental.eps
@@ -0,0 +1,246 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: threefundamental.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Jan 16 15:40:51 2006
+%%For: oliphant@den.local.net (Travis Oliphant)
+%%BoundingBox: 0 0 438 162
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 162 moveto 0 0 lineto 438 0 lineto 438 162 lineto closepath clip newpath
+-30.8 237.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
+/Times-Bold /Times-Bold-iso isovec ReEncode
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+n 1950 2850 m 4350 2850 l 4350 3450 l 1950 3450 l
+ cp gs col0 s gr
+% Polyline
+n 2550 2850 m
+ 2550 3450 l gs col0 s gr
+% Polyline
+n 3150 2850 m
+ 3150 3450 l gs col0 s gr
+% Polyline
+n 3750 2850 m
+ 3750 3450 l gs col0 s gr
+% Polyline
+n 5100 2850 m 7500 2850 l 7500 3450 l 5100 3450 l
+ cp gs col0 s gr
+% Polyline
+n 5700 2850 m
+ 5700 3450 l gs col0 s gr
+% Polyline
+n 6300 2850 m
+ 6300 3450 l gs col0 s gr
+% Polyline
+n 6900 2850 m
+ 6900 3450 l gs col0 s gr
+% Polyline
+n 630 2700 m 525 2700 525 3495 105 arcto 4 {pop} repeat
+ 525 3600 7695 3600 105 arcto 4 {pop} repeat
+ 7800 3600 7800 2805 105 arcto 4 {pop} repeat
+ 7800 2700 630 2700 105 arcto 4 {pop} repeat
+ cp gs col0 s gr
+% Polyline
+n 675 2850 m 1725 2850 l 1725 3450 l 675 3450 l
+ cp gs col0 s gr
+% Polyline
+45.000 slw
+n 5700 2850 m 6300 2850 l 6300 3450 l 5700 3450 l
+ cp gs col0 s gr
+% Polyline
+n 5700 1725 m 6300 1725 l 6300 2325 l 5700 2325 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 5655 1275 m 5550 1275 5550 2370 105 arcto 4 {pop} repeat
+ 5550 2475 6345 2475 105 arcto 4 {pop} repeat
+ 6450 2475 6450 1380 105 arcto 4 {pop} repeat
+ 6450 1275 5655 1275 105 arcto 4 {pop} repeat
+ cp gs col0 s gr
+% Polyline
+n 5700 1350 m 6300 1350 l 6300 1575 l 5700 1575 l
+ cp gs col0 s gr
+% Polyline
+gs clippath
+1590 1905 m 1590 1845 l 1405 1845 l 1555 1875 l 1405 1905 l cp
+eoclip
+n 900 2850 m 900 1875 l
+ 1575 1875 l gs col0 s gr gr
+
+% arrowhead
+n 1405 1905 m 1555 1875 l 1405 1845 l 1435 1875 l 1405 1905 l
+ cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+5565 1830 m 5565 1770 l 5380 1770 l 5530 1800 l 5380 1830 l cp
+eoclip
+n 3375 1800 m
+ 5550 1800 l gs col0 s gr gr
+
+% arrowhead
+n 5380 1830 m 5530 1800 l 5380 1770 l 5410 1800 l 5380 1830 l
+ cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6030 2310 m 5970 2310 l 5970 2495 l 6000 2345 l 6030 2495 l cp
+eoclip
+n 6000 2850 m
+ 6000 2325 l gs col0 s gr gr
+
+% arrowhead
+n 6030 2495 m 6000 2345 l 5970 2495 l 6000 2465 l 6030 2495 l
+ cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 1680 1575 m 1575 1575 1575 1995 105 arcto 4 {pop} repeat
+ 1575 2100 3270 2100 105 arcto 4 {pop} repeat
+ 3375 2100 3375 1680 105 arcto 4 {pop} repeat
+ 3375 1575 1680 1575 105 arcto 4 {pop} repeat
+ cp gs col0 s gr
+/Helvetica-Bold-iso ff 210.00 scf sf
+825 3225 m
+gs 1 -1 sc (header) col0 sh gr
+/Times-Bold-iso ff 600.00 scf sf
+4500 3225 m
+gs 1 -1 sc (...) col0 sh gr
+/Helvetica-Bold-iso ff 210.00 scf sf
+3600 3900 m
+gs 1 -1 sc (ndarray) col0 sh gr
+/Helvetica-Bold-iso ff 210.00 scf sf
+6600 2175 m
+gs 1 -1 sc (scalar) col0 sh gr
+/Helvetica-Bold-iso ff 210.00 scf sf
+6600 1950 m
+gs 1 -1 sc (array) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5775 1500 m
+gs 1 -1 sc (head) col0 sh gr
+/Helvetica-Bold-iso ff 210.00 scf sf
+1950 1875 m
+gs 1 -1 sc (data-type) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
diff --git a/numpy/doc/numpybook/Figures/threefundamental.fig b/numpy/doc/numpybook/Figures/threefundamental.fig
new file mode 100644
index 000000000..79760c410
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/threefundamental.fig
@@ -0,0 +1,57 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+6 1950 2850 4350 3450
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 1950 2850 4350 2850 4350 3450 1950 3450 1950 2850
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 2550 2850 2550 3450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3150 2850 3150 3450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3750 2850 3750 3450
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5100 2850 7500 2850 7500 3450 5100 3450 5100 2850
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 5700 2850 5700 3450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6300 2850 6300 3450
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6900 2850 6900 3450
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 7800 3600 7800 2700 525 2700 525 3600 7800 3600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 675 2850 1725 2850 1725 3450 675 3450 675 2850
+2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5700 2850 6300 2850 6300 3450 5700 3450 5700 2850
+2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5700 1725 6300 1725 6300 2325 5700 2325 5700 1725
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 6450 2475 6450 1275 5550 1275 5550 2475 6450 2475
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5700 1350 6300 1350 6300 1575 5700 1575 5700 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+ 2 1 1.00 60.00 120.00
+ 900 2850 900 1875 1575 1875
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 3375 1800 5550 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 6000 2850 6000 2325
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 3375 2100 3375 1575 1575 1575 1575 2100 3375 2100
+4 0 0 50 -1 18 14 0.0000 4 165 720 825 3225 header\001
+4 0 0 50 -1 2 40 0.0000 4 105 450 4500 3225 ...\001
+4 0 0 50 -1 18 14 0.0000 4 210 810 3600 3900 ndarray\001
+4 0 0 50 -1 18 14 0.0000 4 165 630 6600 2175 scalar\001
+4 0 0 50 -1 18 14 0.0000 4 165 540 6600 1950 array\001
+4 0 0 50 -1 16 12 0.0000 4 135 420 5775 1500 head\001
+4 0 0 50 -1 18 14 0.0000 4 210 975 1950 1875 data-type\001
diff --git a/numpy/doc/numpybook/Figures/threefundamental.png b/numpy/doc/numpybook/Figures/threefundamental.png
new file mode 100644
index 000000000..f4d4d950d
--- /dev/null
+++ b/numpy/doc/numpybook/Figures/threefundamental.png
Binary files differ
diff --git a/numpy/doc/numpybook/capi.lyx b/numpy/doc/numpybook/capi.lyx
new file mode 100644
index 000000000..04522d13d
--- /dev/null
+++ b/numpy/doc/numpybook/capi.lyx
@@ -0,0 +1,24232 @@
+#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
+\lyxformat 276
+\begin_document
+\begin_header
+\textclass mybook
+\language english
+\inputencoding auto
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+\graphics default
+\paperfontsize default
+\spacing onehalf
+\papersize default
+\use_geometry true
+\use_amsmath 2
+\use_esint 0
+\cite_engine basic
+\use_bibtopic false
+\paperorientation portrait
+\leftmargin 1in
+\topmargin 1in
+\rightmargin 1in
+\bottommargin 1in
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\author ""
+\author ""
+\end_header
+
+\begin_body
+
+\begin_layout Part
+C-API
+\end_layout
+
+\begin_layout Chapter
+New Python Types and C-Structures
+\end_layout
+
+\begin_layout Quotation
+Beware of the man who won't be bothered with details.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+William Feather, Sr.
+\end_layout
+
+\begin_layout Quotation
+The truth is out there.
+\end_layout
+
+\begin_layout Right Address
+---Chris Carter, The X Files
+\end_layout
+
+\begin_layout Standard
+NumPy provides a C-API to enable users to extend the system and get access
+ to the array object for use in other routines.
+ The best way to truly understand the C-API is to read the source code.
+ If you are unfamiliar with (C) source code, however, this can be a daunting
+ experience at first.
+ Be assured that the task becomes easier with practice, and you may be surprised
+ at how simple the C-code can be to understand.
+ Even if you don't think you can write C-code from scratch, it is much easier
+ to understand and modify already-written source code then create it
+\emph on
+de novo
+\emph default
+.
+
+\end_layout
+
+\begin_layout Standard
+Python extensions are especially straightforward to understand because they
+ all have a very similar structure.
+ Admittedly, NumPy is not a trivial extension to Python, and may take a
+ little more snooping to grasp.
+ This is especially true because of the code-generation techniques, which
+ simplify maintenance of very similar code, but can make the code a little
+ less readable to beginners.
+ Still, with a little persistence, the code can be opened to your understanding.
+ It is my hope, that this guide to the C-API can assist in the process of
+ becoming familiar with the compiled-level work that can be done with NumPy
+ in order to squeeze that last bit of necessary speed out of your code.
+\end_layout
+
+\begin_layout Standard
+Several new types are defined in the C-code.
+ Most of these are accessible from Python, but a few are not exposed due
+ to their limited use.
+ Every new Python type has an associated PyObject * with an internal structure
+ that includes a pointer to a
+\begin_inset Quotes eld
+\end_inset
+
+method table
+\begin_inset Quotes erd
+\end_inset
+
+ that defines how the new object behaves in Python.
+ When you receive a Python object into C code, you always get a pointer
+ to a
+\family typewriter
+PyObject
+\family default
+ structure.
+ Because a
+\family typewriter
+PyObject
+\family default
+ structure is very generic and defines only
+\family typewriter
+PyObject_HEAD
+\family default
+, by itself it is not very interesting.
+ However, different objects contain more details after the
+\family typewriter
+PyObject_HEAD
+\family default
+ (but you have to cast to the correct type to access them --- or use accessor
+ functions or macros).
+
+\end_layout
+
+\begin_layout Section
+New Python Types Defined
+\end_layout
+
+\begin_layout Standard
+Python types are the functional equivalent in C of classes in Python.
+ By constructing a new Python type you make available a new object for Python.
+ The ndarray object is an example of a new type defined in C.
+ New types are defined in C by two basic steps:
+\end_layout
+
+\begin_layout Enumerate
+creating a C-structure (usually named Py<Name>Object) that is binary-compatible
+ with the
+\family typewriter
+PyObject
+\family default
+ structure itself but holds the additional information needed for that particula
+r object;
+\end_layout
+
+\begin_layout Enumerate
+populating the
+\family typewriter
+PyTypeObject
+\family default
+ table (pointed to by the ob_type member of the
+\family typewriter
+PyObject
+\family default
+ structure) with pointers to functions that implement the desired behavior
+ for the type.
+
+\end_layout
+
+\begin_layout Standard
+Instead of special method names which define behavior for Python classes,
+ there are
+\begin_inset Quotes eld
+\end_inset
+
+function tables
+\begin_inset Quotes erd
+\end_inset
+
+ which point to functions that implement the desired results.
+ Since Python 2.2, the PyTypeObject itself has become dynamic which allows
+ C types that can be
+\begin_inset Quotes eld
+\end_inset
+
+sub-typed
+\begin_inset Quotes erd
+\end_inset
+
+ from other C-types in C, and sub-classed in Python.
+ The children types inherit the attributes and methods from their parent(s).
+
+\end_layout
+
+\begin_layout Standard
+There are two major new types: the ndarray (
+\family typewriter
+PyArray_Type
+\family default
+) and the ufunc (
+\family typewriter
+PyUFunc_Type
+\family default
+).
+ Additional types play a supportive role: the
+\family typewriter
+PyArrayIter_Type
+\family default
+, the
+\family typewriter
+PyArrayMultiIter_Type
+\family default
+, and the
+\family typewriter
+PyArrayDescr_Type
+\family default
+.
+ The
+\family typewriter
+PyArrayIter_Type
+\family default
+ is the type for a flat iterator for an ndarray (the object that is returned
+ when getting the flat attribute).
+ The
+\family typewriter
+PyArrayMultiIter_Type
+\family default
+ is the type of the object returned when calling
+\family typewriter
+broadcast
+\family default
+().
+ It handles iteration and broadcasting over a collection of nested sequences.
+ Also, the
+\family typewriter
+PyArrayDescr_Type
+\family default
+ is the data-type-descriptor type whose instances describe the data.
+ Finally, there are 21 new scalar-array types which are new Python scalars
+ corresponding to each of the fundamental data types available for arrays.
+ An additional 10 other types are place holders that allow the array scalars
+ to fit into a hierarchy of actual Python types.
+
+\end_layout
+
+\begin_layout Subsection
+PyArray_Type
+\end_layout
+
+\begin_layout Standard
+The Python type of the ndarray is
+\family typewriter
+PyArray_Type
+\family default
+
+\begin_inset LatexCommand index
+name "PyArray\\_Type"
+
+\end_inset
+
+.
+ In C, every ndarray is a pointer to a
+\family typewriter
+PyArrayObject
+\family default
+ structure.
+ The ob_type member of this structure contains a pointer to the
+\family typewriter
+PyArray_Type
+\family default
+ typeobject.
+
+\end_layout
+
+\begin_layout Standard
+The
+\family typewriter
+PyArrayObject
+\family default
+ C-structure contains all of the required information for an array.
+ All instances of an ndarray (and its subclasses) will have this structure.
+ For future compatibility, these structure members should normally be accessed
+ using the provided macros.
+ If you need a shorter name, then you can make use of
+\family typewriter
+NPY_AO
+\family default
+ which is defined to be equivalent to
+\family typewriter
+PyArrayObject
+\family default
+.
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct PyArrayObject {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char *
+\emph default
+data;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nd;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp *
+\emph default
+dimensions;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp *
+\emph default
+strides;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject *
+\emph default
+base;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_Descr *
+\emph default
+descr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ flags;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject *
+\emph default
+weakreflist;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArrayObject
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+PyObject_HEAD This is needed by all Python objects.
+ It consists of (at least) a reference count member (
+\family typewriter
+ob_refcnt
+\family default
+) and a pointer to the typeobject (
+\family typewriter
+ob_type
+\family default
+).
+ (Other elements may also be present if Python was compiled with special
+ options see Include/object.h in the Python source tree for more information).
+ The ob_type member points to a Python type object.
+
+\end_layout
+
+\begin_layout Description
+data A pointer to the first element of the array.
+ This pointer can (and normally should) be recast to the data type of the
+ array.
+
+\end_layout
+
+\begin_layout Description
+nd An integer providing the number of dimensions for this array.
+ When nd is 0, the array is sometimes called a rank-0 array.
+ Such arrays have undefined dimensions and strides and cannot be accessed.
+
+\family typewriter
+NPY_MAXDIMS
+\family default
+ is the largest number of dimensions for any array.
+\end_layout
+
+\begin_layout Description
+dimensions An array of integers providing the shape in each dimension as
+ long as nd
+\begin_inset Formula $\geq$
+\end_inset
+
+1.
+ The integer is always large enough to hold a pointer on the platform, so
+ the dimension size is only limited by memory.
+
+\end_layout
+
+\begin_layout Description
+strides An array of integers providing for each dimension the number of
+ bytes that must be skipped to get to the next element in that dimension.
+
+\end_layout
+
+\begin_layout Description
+base This member is used to hold a pointer to another Python object that
+ is related to this array.
+ There are two use cases: 1) If this array does not own its own memory,
+ then base points to the Python object that owns it (perhaps another array
+ object), 2) If this array has the
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+ flag set, then this array is a working copy of a
+\begin_inset Quotes eld
+\end_inset
+
+misbehaved
+\begin_inset Quotes erd
+\end_inset
+
+ array.
+ As soon as this array is deleted, the array pointed to by base will be
+ updated with the contents of this array.
+
+\end_layout
+
+\begin_layout Description
+descr A pointer to a data-type descriptor object (see below).
+ The data-type descriptor object is an instance of a new built-in type which
+ allows a generic description of memory.
+ There is a descriptor structure for each data type supported.
+ This descriptor structure contains useful information about the type as
+ well as a pointer to a table of function pointers to implement specific
+ functionality.
+\end_layout
+
+\begin_layout Description
+flags Flags indicating how the memory pointed to by data is to be interpreted.
+ Possible flags are
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_OWNDATA
+\family default
+,
+\family typewriter
+NPY_ALIGNED
+\family default
+,
+\family typewriter
+NPY_WRITEABLE
+\family default
+, and
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+.
+\end_layout
+
+\begin_layout Description
+weakreflist This member allows array objects to have weak references (using
+ the weakref module).
+
+\end_layout
+
+\begin_layout Subsection
+PyArrayDescr_Type
+\end_layout
+
+\begin_layout Standard
+The
+\family typewriter
+PyArrayDescr_Type
+\family default
+
+\begin_inset LatexCommand index
+name "PyArrayDescr\\_Type"
+
+\end_inset
+
+ is the built-in type of the data-type-descriptor objects used to describe
+ how the bytes comprising the array are to be interpreted.
+ There are 21 statically-defined
+\family typewriter
+PyArray_Descr
+\family default
+ objects for the built-in data-types.
+ While these participate in reference counting, their reference count should
+ never reach zero.
+ There is also a dynamic table of user-defined
+\family typewriter
+PyArray_Descr
+\family default
+ objects that is also maintained.
+ Once a data-type-descriptor object is
+\begin_inset Quotes eld
+\end_inset
+
+registered
+\begin_inset Quotes erd
+\end_inset
+
+ it should never be deallocated either.
+ The function
+\family typewriter
+PyArray_DescrFromType
+\family default
+(...) can be used to retrieve a
+\family typewriter
+PyArray_Descr
+\family default
+ object from an enumerated type-number (either built-in or user-defined).
+ The format of the structure that lies at the heart of the
+\family typewriter
+PyArrayDescr_Type
+\family default
+ is.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyTypeObject *
+\emph default
+typeobj;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char
+\emph default
+ kind;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char
+\emph default
+ type;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char
+\emph default
+ byteorder;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char
+\emph default
+ hasobject;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ type_num;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ elsize;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ alignment;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ArrayDescr
+\emph default
+ *subarray;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject
+\emph default
+ *fields;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ArrFuncs
+\emph default
+ *f;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArray_Descr
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+typeobj Pointer to a typeobject that is the corresponding Python type for
+ the elements of this array.
+ For the builtin types, this points to the corresponding array scalar.
+ For user-defined types, this should point to a user-defined typeobject.
+ This typeobject can either inherit from array scalars or not.
+ If it does not inherit from array scalars, then the
+\family typewriter
+NPY_USE_GETITEM
+\family default
+ and
+\family typewriter
+NPY_USE_SETITEM
+\family default
+ flags should be set in the
+\family typewriter
+hasobject
+\family default
+ flag.
+\end_layout
+
+\begin_layout Description
+kind A character code indicating the kind of array (using the array interface
+ typestring notation).
+ A 'b' represents Boolean, a 'i' represents signed integer, a 'u' represents
+ unsigned integer, 'f' represents floating point, 'c' represents complex
+ floating point, 'S' represents 8-bit character string, 'U' represents 32-bit/ch
+aracter unicode string, and 'V' repesents arbitrary.
+
+\end_layout
+
+\begin_layout Description
+type A traditional character code indicating the data type.
+
+\end_layout
+
+\begin_layout Description
+byteorder A character indicating the byte-order: '>' (big-endian), '<' (little-e
+ndian), '=' (native), '|' (irrelevant, ignore).
+ All builtin data-types have byteorder '='.
+
+\end_layout
+
+\begin_layout Description
+hasobject A data-type bit-flag that determines if the data-type exhibits
+ object-array like behavior.
+ Each bit in this member is a flag which are named as:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_ITEM_REFCOUNT\InsetSpace ~
+(NPY_ITEM_HASOBJECT) Indicates that items of this data-type
+ must be reference counted (using
+\family typewriter
+Py_INCREF
+\family default
+ and
+\family typewriter
+Py_DECREF
+\family default
+).
+
+\end_layout
+
+\begin_layout Description
+NPY_ITEM_LISTPICKLE Indicates arrays of this data-type must be converted
+ to a list before pickling.
+
+\end_layout
+
+\begin_layout Description
+NPY_ITEM_IS_POINTER Indicates the item is a pointer to some other data-type
+\end_layout
+
+\begin_layout Description
+NPY_NEEDS_INIT Indicates memory for this data-type must be initialized (set
+ to 0) on creation.
+
+\end_layout
+
+\begin_layout Description
+NPY_NEEDS_PYAPI Indicates this data-type requires the Python C-API during
+ access (so don't give up the GIL if array access is going to be needed).
+
+\end_layout
+
+\begin_layout Description
+NPY_USE_GETITEM On array access use the
+\family typewriter
+f->getitem
+\family default
+ function pointer instead of the standard conversion to an array scalar.
+ Must use if you don't define an array scalar to go along with the data-type.
+
+\end_layout
+
+\begin_layout Description
+NPY_USE_SETITEM When creating a 0-d array from an array scalar use
+\family typewriter
+f->setitem
+\family default
+ instead of the standard copy from an array scalar.
+ Must use if you don't define an array scalar to go along with the data-type.
+
+\end_layout
+
+\begin_layout Description
+NPY_FROM_FIELDS The bits that are inherited for the parent data-type if
+ these bits are set in any field of the data-type.
+ Currently (
+\family typewriter
+NPY_NEEDS_INIT
+\family default
+ |
+\family typewriter
+NPY_LIST_PICKLE
+\family default
+ |
+\family typewriter
+NPY_ITEM_REFCOUNT
+\family default
+ |
+\family typewriter
+NPY_NEEDS_PYAPI
+\family default
+).
+
+\end_layout
+
+\begin_layout Description
+NPY_OBJECT_DTYPE_FLAGS Bits set for the object data-type: (
+\family typewriter
+NPY_LIST_PICKLE
+\family default
+ |
+\family typewriter
+NPY_USE_GETITEM
+\family default
+ |
+\family typewriter
+NPY_ITEM_IS_POINTER
+\family default
+ |
+\family typewriter
+NPY_REFCOUNT
+\family default
+ |
+\family typewriter
+NPY_NEEDS_INIT
+\family default
+ |
+\family typewriter
+NPY_NEEDS_PYAPI
+\family default
+).
+
+\end_layout
+
+\begin_layout Description
+PyDataType_FLAGCHK (
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ flags) Return true if all the given flags are set for the data-type object.
+
+\end_layout
+
+\begin_layout Description
+PyDataType_REFCHK (
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype) Equivalent to
+\family typewriter
+PyDataType_FLAGCHK
+\family default
+(
+\emph on
+dtype
+\emph default
+,
+\family typewriter
+NPY_ITEM_REFCOUNT
+\family default
+).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+type_num A number that uniquely identifies the data type.
+ For new data-types, this number is assigned when the data-type is registered.
+\end_layout
+
+\begin_layout Description
+elsize For data types that are always the same size (such as long), this
+ holds the size of the data type.
+ For flexible data types where different arrays can have a different elementsize
+, this should be 0.
+\end_layout
+
+\begin_layout Description
+alignment A number providing alignment information for this data type.
+ Specifically, it shows how far from the start of a 2-element structure
+ (whose first element is a
+\family typewriter
+char
+\family default
+), the compiler places an item of this type:
+\family typewriter
+offsetof(struct {char c; type v;}, v)
+\end_layout
+
+\begin_layout Description
+subarray If this is non-
+\family typewriter
+NULL
+\family default
+, then this data-type descriptor is a C-style contiguous array of another
+ data-type descriptor.
+ In other-words, each element that this descriptor describes is actually
+ an array of some other base descriptor.
+ This is most useful as the data-type descriptor for a field in another
+ data-type descriptor.
+ The fields member should be
+\family typewriter
+NULL
+\family default
+ if this is non-
+\family typewriter
+NULL
+\family default
+ (the fields member of the base descriptor can be non-
+\family typewriter
+NULL
+\family default
+ however).
+ The
+\family typewriter
+PyArray_ArrayDescr
+\family default
+ structure is defined using
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_Descr
+\emph default
+ *base;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject
+\emph default
+ *shape;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArray_ArrayDescr;
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The elements of this structure are:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+base The data-type-descriptor object of the base-type.
+
+\end_layout
+
+\begin_layout Description
+shape The shape (always C-style contiguous) of the sub-array as a Python
+ tuple.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+fields If this is non-NULL, then this data-type-descriptor has fields described
+ by a Python dictionary whose keys are names (and also titles if given)
+ and whose values are tuples that describe the fields.
+ Recall that a data-type-descriptor always describes a fixed-length set
+ of bytes.
+ A field is a named sub-region of that total, fixed-length collection.
+ A field is described by a tuple composed of another data-type-descriptor
+ and a byte offset.
+ Optionally, the tuple may contain a title which is normally a Python string.
+ These tuples are placed in this dictionary keyed by name (and also title
+ if given).
+
+\end_layout
+
+\begin_layout Description
+f A pointer to a structure containing functions that the type needs to implement
+ internal features.
+ These functions are not the same thing as the universal functions (ufuncs)
+ described later.
+ Their signatures can vary arbitrarily.
+ Not all of these function pointers must be defined for a given type.
+ The required members are
+\family typewriter
+nonzero
+\family default
+,
+\family typewriter
+copyswap
+\family default
+,
+\family typewriter
+copyswapn
+\family default
+,
+\family typewriter
+setitem
+\family default
+,
+\family typewriter
+getitem
+\family default
+, and
+\family typewriter
+cast
+\family default
+.
+ These are assumed to be non-
+\family typewriter
+NULL
+\family default
+ and
+\family typewriter
+NULL
+\family default
+ entries will cause a program crash.
+ The other functions may be
+\family typewriter
+NULL
+\family default
+ which will just mean reduced functionality for that data-type.
+ (Also, the nonzero function will be filled in with a default function if
+ it is
+\family typewriter
+NULL
+\family default
+ when you register a user-defined data-type).
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+ PyArray_VectorUnaryFunc
+\emph default
+
+\emph on
+*
+\emph default
+cast[PyArray_NTYPES];
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_GetItemFunc *
+\emph default
+getitem;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_SetItemFunc *
+\emph default
+setitem;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_CopySwapNFunc *
+\emph default
+copyswapn;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_CopySwapFunc *
+\emph default
+copyswap;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_CompareFunc *
+\emph default
+compare;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ArgFunc *
+\emph default
+argmax;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_DotFunc *
+\emph default
+dotfunc;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ScanFunc *
+\emph default
+scanfunc;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_FromStrFunc
+\emph default
+ *fromstr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_NonzeroFunc *
+\emph default
+nonzero;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_FillFunc
+\emph default
+ *fill;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_FillWithScalarFunc
+\emph default
+ *fillwithscalar;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_SortFunc
+\emph default
+ *sort[PyArray_NSORTS];
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ArgSortFunc
+\emph default
+ *argsort[PyArray_NSORTS];
+\newline
+
+\emph on
+PyObject
+\emph default
+ *castdict;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArray_ScalarKindFunc
+\emph default
+ *scalarkind;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ **cancastscalarkindto;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ *cancastto;
+\end_layout
+
+\begin_layout LyX-Code
+
+\shape italic
+int
+\shape default
+ listpickle
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArray_ArrFuncs
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The concept of a behaved segment is used in the description of the function
+ pointers.
+ A behaved segment is one that is aligned and in native machine byte-order
+ for the data-type.
+ The
+\family typewriter
+nonzero
+\family default
+,
+\family typewriter
+copyswap
+\family default
+,
+\family typewriter
+copyswapn
+\family default
+,
+\family typewriter
+getitem
+\family default
+, and
+\family typewriter
+setitem
+\family default
+ functions can (and must) deal with mis-behaved arrays.
+ The other functions require behaved memory segments.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+cast (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ from,
+\family typewriter
+void*
+\family default
+ to,
+\family typewriter
+npy_intp
+\family default
+ n,
+\family typewriter
+void*
+\family default
+ fromarr,
+\family typewriter
+void*
+\family default
+ toarr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ An array of function pointers to cast from the current type to all of the
+ other builtin types.
+ Each function casts a contiguous, aligned, and notswapped buffer pointed
+ at by
+\emph on
+from
+\emph default
+ to a contiguous, aligned, and notswapped buffer pointed at by
+\emph on
+to
+\emph default
+ The number of items to cast is given by
+\emph on
+n
+\emph default
+, and the arguments
+\emph on
+fromarr
+\emph default
+ and
+\emph on
+toarr
+\emph default
+ are interpreted as PyArrayObjects for flexible arrays to get itemsize informati
+on.
+\end_layout
+
+\begin_layout Description
+getitem (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that returns a standard Python object from a single
+ element of the array object
+\emph on
+arr
+\emph default
+ pointed to by
+\emph on
+data
+\emph default
+.
+ This function must be able to deal with
+\begin_inset Quotes eld
+\end_inset
+
+misbehaved
+\begin_inset Quotes erd
+\end_inset
+
+ (misaligned and/or swapped) arrays correctly.
+
+\end_layout
+
+\begin_layout Description
+setitem (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ item,
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that sets the Python object
+\emph on
+item
+\emph default
+ into the array,
+\emph on
+arr
+\emph default
+, at the position pointed to by
+\emph on
+data
+\emph default
+.
+ This function deals with
+\begin_inset Quotes eld
+\end_inset
+
+misbehaved
+\begin_inset Quotes erd
+\end_inset
+
+ arrays.
+ If successful, a zero is returned, otherwise, a negative one is returned
+ (and a Python error set).
+
+\end_layout
+
+\begin_layout Description
+copyswapn (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ dest,
+\family typewriter
+npy_intp
+\family default
+ dstride,
+\family typewriter
+void*
+\family default
+ src,
+\family typewriter
+npy_intp
+\family default
+ sstride,
+\family typewriter
+npy_intp
+\family default
+ n,
+\family typewriter
+int
+\family default
+ swap, void *arr)
+\end_layout
+
+\begin_layout Description
+copyswap (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ dest,
+\family typewriter
+void*
+\family default
+ src,
+\family typewriter
+int
+\family default
+ swap, void *arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These members are both pointers to functions to copy data from
+\emph on
+src
+\emph default
+ to
+\emph on
+dest
+\emph default
+ and
+\emph on
+swap
+\emph default
+ if indicated.
+ The value of arr is only used for flexible (
+\family typewriter
+NPY_STRING
+\family default
+,
+\family typewriter
+NPY_UNICODE
+\family default
+, and
+\family typewriter
+NPY_VOID
+\family default
+) arrays (and is obtained from
+\family typewriter
+arr->descr->elsize
+\family default
+).
+ The second function copies a single value, while the first loops over n
+ values with the provided strides.
+ These functions can deal with misbehaved
+\emph on
+src
+\emph default
+ data.
+ If
+\emph on
+src
+\emph default
+ is NULL then no copy is performed.
+ If
+\emph on
+swap
+\emph default
+ is 0, then no byteswapping occurs.
+ It is assumed that
+\emph on
+dest
+\emph default
+ and
+\emph on
+src
+\emph default
+ do not overlap.
+ If they overlap, then use
+\family typewriter
+memmove
+\family default
+(...) first followed by
+\family typewriter
+copyswap(n)
+\family default
+ with NULL valued
+\family typewriter
+src
+\family default
+.
+\end_layout
+
+\begin_layout Description
+compare (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+const void*
+\family default
+ d1,
+\family typewriter
+const void*
+\family default
+ d2,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that compares two elements of the array,
+\family typewriter
+arr
+\family default
+, pointed to by
+\family typewriter
+d1
+\family default
+ and
+\family typewriter
+d2
+\family default
+.
+ This function requires behaved arrays.
+ The return value is 1 if *
+\family typewriter
+d1
+\family default
+ > *
+\family typewriter
+d2
+\family default
+, 0 if *
+\family typewriter
+d1
+\family default
+ == *
+\family typewriter
+d2
+\family default
+, and -1 if *
+\family typewriter
+d1
+\family default
+ < *
+\family typewriter
+d2
+\family default
+.
+ The array object arr is used to retrieve itemsize and field information
+ for flexible arrays.
+\end_layout
+
+\begin_layout Description
+argmax (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+npy_intp
+\family default
+ n,
+\family typewriter
+npy_intp*
+\family default
+ max_ind,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that retrieves the index of the largest of
+\family typewriter
+n
+\family default
+ elements in
+\family typewriter
+arr
+\family default
+ beginning at the element pointed to by
+\family typewriter
+data
+\family default
+.
+ This function requires that the memory segment be contiguous and behaved.
+ The return value is always 0.
+ The index of the largest element is returned in
+\family typewriter
+max_ind
+\family default
+.
+\end_layout
+
+\begin_layout Description
+dotfunc (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ ip1,
+\family typewriter
+npy_intp
+\family default
+ is1,
+\family typewriter
+void*
+\family default
+ ip2,
+\family typewriter
+npy_intp
+\family default
+ is2,
+\family typewriter
+void*
+\family default
+ op,
+\family typewriter
+npy_intp
+\family default
+ n,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that multiplies two
+\family typewriter
+n
+\family default
+-length sequences together, adds them, and places the result in element
+ pointed to by
+\family typewriter
+op
+\family default
+ of
+\family typewriter
+arr
+\family default
+.
+ The start of the two sequences are pointed to by
+\family typewriter
+ip1
+\family default
+ and
+\family typewriter
+ip2
+\family default
+.
+ To get to the next element in each sequence requires a jump of
+\family typewriter
+is1
+\family default
+ and
+\family typewriter
+is2
+\family default
+
+\emph on
+bytes
+\emph default
+, respectively.
+ This function requires behaved (though not necessarily contiguous) memory.
+
+\end_layout
+
+\begin_layout Description
+scanfunc (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+FILE*
+\family default
+ fd,
+\family typewriter
+void*
+\family default
+ ip ,
+\family typewriter
+void*
+\family default
+ sep ,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that scans (scanf style) one element of the correspondi
+ng type from the file descriptor
+\family typewriter
+fd
+\family default
+ into the array memory pointed to by
+\family typewriter
+ip
+\family default
+.
+ The array is assumed to be behaved.
+ If
+\family typewriter
+sep
+\family default
+ is not NULL, then a separator string is also scanned from the file before
+ returning.
+ The last argument
+\family typewriter
+arr
+\family default
+ is the array to be scanned into.
+ A 0 is returned if the scan is successful.
+ A negative number indicates something went wrong: -1 means the end of file
+ was reached before the separator string could be scanned, -4 means that
+ the end of file was reached before the element could be scanned, and -3
+ means that the element could not be interpreted from the format string.
+ Requires a behaved array.
+\end_layout
+
+\begin_layout Description
+fromstr (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+char*
+\family default
+ str,
+\family typewriter
+void*
+\family default
+ ip,
+\family typewriter
+char**
+\family default
+ endptr,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that converts the string pointed to by
+\family typewriter
+str
+\family default
+ to one element of the corresponding type and places it in the memory location
+ pointed to by
+\family typewriter
+ip
+\family default
+.
+ After the conversion is completed,
+\family typewriter
+*endptr
+\family default
+ points to the rest of the string.
+ The last argument
+\family typewriter
+arr
+\family default
+ is the array into which ip points (needed for variable-size data-types).
+ Returns 0 on success or -1 on failure.
+ Requires a behaved array.
+\end_layout
+
+\begin_layout Description
+nonzero (
+\family typewriter
+Bool
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that returns TRUE if the item of
+\family typewriter
+arr
+\family default
+ pointed to by
+\family typewriter
+data
+\family default
+ is nonzero.
+ This function can deal with misbehaved arrays.
+
+\end_layout
+
+\begin_layout Description
+fill (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+npy_intp
+\family default
+ length,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that fills a contiguous array of given length with
+ data.
+ The first two elements of the array must already be filled-in.
+ From these two values, a delta will be computed and the values from item
+ 3 to the end will be computed by repeatedly adding this computed delta.
+ The data buffer must be well-behaved.
+\end_layout
+
+\begin_layout Description
+fillwithscalar (
+\family typewriter
+void
+\family default
+)(
+\family typewriter
+void*
+\family default
+ buffer,
+\family typewriter
+npy_intp
+\family default
+ length,
+\family typewriter
+void*
+\family default
+ value,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to a function that fills a contiguous
+\family typewriter
+buffer
+\family default
+ of the given
+\family typewriter
+length
+\family default
+ with a single scalar
+\family typewriter
+value
+\family default
+ whose address is given.
+ The final argument is the array which is needed to get the itemsize for
+ variable-length arrays.
+
+\end_layout
+
+\begin_layout Description
+sort (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+void*
+\family default
+ start,
+\family typewriter
+npy_intp
+\family default
+ length,
+\family typewriter
+void*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ An array of function pointers to a particular sorting algorithms.
+ A particular sorting algorithm is obtained using a key (so far
+\family typewriter
+PyArray_QUICKSORT
+\family default
+,
+\family typewriter
+PyArray_HEAPSORT
+\family default
+, and
+\family typewriter
+PyArray_MERGESORT
+\family default
+ are defined).
+ These sorts are done in-place assuming contiguous and aligned data.
+
+\end_layout
+
+\begin_layout Description
+argsort (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+void*
+\family default
+ start,
+\family typewriter
+npy_intp*
+\family default
+ result,
+\family typewriter
+npy_intp
+\family default
+ length, void *arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ An array of function pointers to sorting algorithms for this data type.
+ The same sorting algorithms as for sort are available.
+ The indices producing the sort are returned in result (which must be initialize
+d with indices 0 to length-1 inclusive).
+
+\end_layout
+
+\begin_layout Description
+castdict
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Either
+\family typewriter
+NULL
+\family default
+ or a dictionary containing low-level casting functions for user-defined
+ data-types.
+ Each function is wrapped in a
+\family typewriter
+PyCObject*
+\family default
+ and keyed by the data-type number.
+
+\end_layout
+
+\begin_layout Description
+scalarkind (
+\family typewriter
+PyArray_SCALARKIND
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A function to determine how scalars of this type should be interpreted.
+ The argument is
+\family typewriter
+NULL
+\family default
+ or a 0-dimensional array containing the data (if that is needed to determine
+ the kind of scalar).
+ The return value must be of type
+\family typewriter
+PyArray_SCALARKIND
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+cancastscalarkindto
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Either
+\family typewriter
+NULL
+\family default
+ or an array of
+\family typewriter
+PyArray_NSCALARKINDS
+\family default
+ pointers.
+ These pointers should each be either
+\family typewriter
+NULL
+\family default
+ or a pointer to an array of integers (terminated by
+\family typewriter
+PyArray_NOTYPE
+\family default
+) indicating data-types that a scalar of this data-type of the specified
+ kind can be cast to safely (this usually means without losing precision).
+\end_layout
+
+\begin_layout Description
+cancastto
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Either
+\family typewriter
+NULL
+\family default
+ or an array of integers (terminated by
+\family typewriter
+PyArray_NOTYPE
+\family default
+) indicated data-types that this data-type can be cast to safely (this usually
+ means without losing precision).
+\end_layout
+
+\begin_layout Description
+listpickle
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Unused.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+The
+\family typewriter
+PyArray_Type
+\family default
+ typeobject implements many of the features of Python objects including
+ the tp_as_number, tp_as_sequence, tp_as_mapping, and tp_as_buffer interfaces.
+ The rich comparison (tp_richcompare) is also used along with new-style
+ attribute lookup for methods (tp_methods) and properties (tp_getset).
+ The
+\family typewriter
+PyArray_Type
+\family default
+ can also be sub-typed.
+
+\end_layout
+
+\begin_layout Tip
+The tp_as_number methods use a generic approach to call whatever function
+ has been registered for handling the operation.
+ The function PyNumeric_SetOps(..) can be used to register functions to handle
+ particular mathematical operations (for all arrays).
+ When the umath module is imported, it sets the numeric operations for all
+ arrays to the corresponding ufuncs.
+
+\newline
+The tp_str and tp_repr methods can also be altered using PyString_SetStringFunc
+tion(...).
+\end_layout
+
+\begin_layout Subsection
+PyUFunc_Type
+\end_layout
+
+\begin_layout Standard
+The ufunc object is implemented by creation of the
+\family typewriter
+PyUFunc_Type
+\family default
+
+\begin_inset LatexCommand index
+name "PyUFunc\\_Type"
+
+\end_inset
+
+.
+ It is a very simple type that implements only basic getattribute behavior,
+ printing behavior, and has call behavior which allows these objects to
+ act like functions.
+ The basic idea behind the ufunc is to hold a reference to fast 1-dimensional
+ (vector) loops for each data type that supports the operation.
+ These one-dimensional loops all have the same signature and are the key
+ to creating a new ufunc.
+ They are called by the generic looping code as appropriate to implement
+ the N-dimensional function.
+ There are also some generic 1-d loops defined for floating and complexfloating
+ arrays that allow you to define a ufunc using a single scalar function
+ (
+\emph on
+e.g.
+
+\emph default
+ atanh).
+
+\end_layout
+
+\begin_layout Standard
+The core of the ufunc is the
+\family typewriter
+PyUFuncObject
+\family default
+ which contains all the information needed to call the underlying C-code
+ loops that perform the actual work.
+ It has the following structure.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nin;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nout;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nargs;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ identity;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyUFuncGenericFunction *
+\emph default
+functions;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+void **
+\emph default
+data;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ ntypes;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ check_return;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char *
+\emph default
+name;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char *
+\emph default
+types;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char *
+\emph default
+doc;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+void *
+\emph default
+ptr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject *
+\emph default
+obj;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject *
+\emph default
+userloops;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyUFuncObject
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+PyObject_HEAD required for all Python objects.
+\end_layout
+
+\begin_layout Description
+nin The number of input arguments.
+\end_layout
+
+\begin_layout Description
+nout The number of output arguments.
+\end_layout
+
+\begin_layout Description
+nargs The total number of arguments (
+\emph on
+nin
+\emph default
++
+\emph on
+nout
+\emph default
+).
+ This must be less than
+\family typewriter
+NPY_MAXARGS
+\family default
+.
+\end_layout
+
+\begin_layout Description
+identity Either
+\family typewriter
+PyUFunc_One
+\family default
+,
+\family typewriter
+PyUFunc_Zero
+\family default
+, or
+\family typewriter
+PyUFunc_None
+\family default
+ to indicate the identity for this operation.
+ It is only used for a reduce-like call on an empty array.
+\end_layout
+
+\begin_layout Description
+functions (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ extradata )
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ An array of function pointers --- one for each data type supported by the
+ ufunc.
+ This is the vector loop that is called to implement the underlying function
+
+\emph on
+dims
+\emph default
+[0] times.
+ The first argument,
+\emph on
+args
+\emph default
+, is an array of
+\emph on
+nargs
+\emph default
+ pointers to behaved memory.
+ Pointers to the data for the input arguments are first, followed by the
+ pointers to the data for the output arguments.
+ How many bytes must be skipped to get to the next element in the sequence
+ is specified by the corresponding entry in the
+\emph on
+steps
+\emph default
+ array.
+ The last argument allows the loop to receive extra information.
+ This is commonly used so that a single, generic vector loop can be used
+ for multiple functions.
+ In this case, the actual scalar function to call is passed in as
+\emph on
+extradata
+\emph default
+.
+ The size of this function pointer array is ntypes.
+
+\end_layout
+
+\begin_layout Description
+data Extra data to be passed to the 1-d vector loops or
+\family typewriter
+NULL
+\family default
+ if no extra-data is needed.
+ This C-array must be the same size (
+\emph on
+i.e.
+
+\emph default
+ ntypes) as the functions array.
+
+\family typewriter
+NULL
+\family default
+ is used if extra_data is not needed.
+ Several C-API calls for UFuncs are just 1-d vector loops that make use
+ of this extra data to receive a pointer to the actual function to call.
+
+\end_layout
+
+\begin_layout Description
+ntypes The number of supported data types for the ufunc.
+ This number specifies how many different 1-d loops (of the builtin data
+ types) are available.
+
+\end_layout
+
+\begin_layout Description
+check_return Obsolete and unused.
+ However, it is set by the corresponding entry in the main ufunc creation
+ routine:
+\family typewriter
+PyUFunc_FromFuncAndData
+\family default
+(...).
+\end_layout
+
+\begin_layout Description
+name A string name for the ufunc.
+ This is used dynamically to build the __doc__ attribute of ufuncs.
+\end_layout
+
+\begin_layout Description
+types An array of
+\emph on
+nargs
+\series bold
+\emph default
+
+\begin_inset Formula $\times$
+\end_inset
+
+
+\series default
+\emph on
+ntypes
+\emph default
+ 8-bit type_numbers which contains the type signature for the function for
+ each of the supported (builtin) data types.
+ For each of the
+\emph on
+ntypes
+\emph default
+ functions, the corresponding set of type numbers in this array shows how
+ the
+\emph on
+args
+\emph default
+ argument should be interpreted in the 1-d vector loop.
+ These type numbers do not have to be the same type and mixed-type ufuncs
+ are supported.
+
+\end_layout
+
+\begin_layout Description
+doc Documentation for the ufunc.
+ Should not contain the function signature as this is generated dynamically
+ when __doc__ is retrieved.
+\end_layout
+
+\begin_layout Description
+ptr Any dynamically allocated memory.
+ Currently, this is used for dynamic ufuncs created from a python function
+ to store room for the types, data, and name members.
+\end_layout
+
+\begin_layout Description
+obj For ufuncs dynamically created from python functions, this member holds
+ a reference to the underlying Python function.
+\end_layout
+
+\begin_layout Description
+userloops A dictionary of user-defined 1-d vector loops (stored as CObject
+ ptrs) for user-defined types.
+ A loop may be registered by the user for any user-defined type.
+ It is retrieved by type number.
+ User defined type numbers are always larger than
+\family typewriter
+NPY_USERDEF
+\family default
+.
+
+\end_layout
+
+\begin_layout Subsection
+PyArrayIter_Type
+\end_layout
+
+\begin_layout Standard
+This
+\begin_inset LatexCommand index
+name "PyArrayIter\\_Type"
+
+\end_inset
+
+ is an iterator object that makes it easy to loop over an N-dimensional
+ array.
+ It is the object returned from the flat attribute of an ndarray.
+ It is also used extensively throughout the implementation internals to
+ loop over an N-dimensional array.
+ The tp_as_mapping interface is implemented so that the iterator object
+ can be indexed (using 1-d indexing), and a few methods are implemented
+ through the tp_methods table.
+ This object implements the next method and can be used anywhere an iterator
+ can be used in Python.
+\end_layout
+
+\begin_layout Standard
+The C-structure corresponding to an object of
+\family typewriter
+PyArrayIter_Type
+\family default
+ is the
+\family typewriter
+PyArrayIterObject
+\family default
+.
+ The
+\family typewriter
+PyArrayIterObject
+\family default
+ is used to keep track of a pointer into an N-dimensional array.
+ It contains associated information used to quickly march through the array.
+ The pointer can be adjusted in three basic ways: 1) advance to the
+\begin_inset Quotes eld
+\end_inset
+
+next
+\begin_inset Quotes erd
+\end_inset
+
+ position in the array in a C-style contiguous fashion, 2) advance to an
+ arbitrary N-dimensional coordinate in the array, and 3) advance to an arbitrary
+ one-dimensional index into the array.
+ The members of the
+\family typewriter
+PyArrayIterObject
+\family default
+ structure are used in these calculations.
+ Iterator objects keep their own dimension and strides information about
+ an array.
+ This can be adjusted as needed for
+\begin_inset Quotes eld
+\end_inset
+
+broadcasting,
+\begin_inset Quotes erd
+\end_inset
+
+ or to loop over only specific dimensions.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nd_m1;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ index;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ size;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ coordinates
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ dims_m1
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ strides
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ backstrides
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ factors
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArrayObject *
+\emph default
+ao;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char *
+\emph default
+dataptr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+Bool
+\emph default
+ contiguous;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArrayIterObject
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+nd_m1
+\begin_inset Formula $N-1$
+\end_inset
+
+ where
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of dimensions in the underlying array.
+\end_layout
+
+\begin_layout Description
+index The current 1-d index into the array.
+\end_layout
+
+\begin_layout Description
+size The total size of the underlying array.
+\end_layout
+
+\begin_layout Description
+coordinates An
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index into the array.
+\end_layout
+
+\begin_layout Description
+dims_m1 The size of the array minus 1 in each dimension.
+\end_layout
+
+\begin_layout Description
+strides The strides of the array.
+ How many bytes needed to jump to the next element in each dimension.
+
+\end_layout
+
+\begin_layout Description
+backstrides How many bytes needed to jump from the end of a dimension back
+ to its beginning.
+ Note that
+\emph on
+backstrides
+\emph default
+[k]=
+\emph on
+strides
+\emph default
+[k]*d
+\emph on
+ims_m1
+\emph default
+[k], but it is stored here as an optimization.
+\end_layout
+
+\begin_layout Description
+factors This array is used in computing an N-d index from a 1-d index.
+ It contains needed products of the dimensions.
+
+\end_layout
+
+\begin_layout Description
+ao A pointer to the underlying ndarray this iterator was created to represent.
+\end_layout
+
+\begin_layout Description
+dataptr This member points to an element in the ndarray indicated by the
+ index.
+\end_layout
+
+\begin_layout Description
+contiguous This flag is true if the underlying array is
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+.
+ It is used to simplify calculations when possible.
+
+\end_layout
+
+\begin_layout Standard
+How to use an array iterator on a C-level is explained more fully in later
+ sections.
+ Typically, you do not need to concern yourself with the internal structure
+ of the iterator object, and merely interact with it through the use of
+ the macros
+\family typewriter
+PyArray_ITER_NEXT
+\family default
+(it),
+\family typewriter
+PyArray_ITER_GOTO
+\family default
+(it, dest), or
+\family typewriter
+PyArray_ITER_GOTO1D
+\family default
+(it, index).
+ All of these macros require the argument
+\emph on
+it
+\emph default
+ to be a
+\family typewriter
+PyArrayIterObject*
+\family default
+.
+
+\end_layout
+
+\begin_layout Subsection
+PyArrayMultiIter_Type
+\end_layout
+
+\begin_layout Standard
+This type provides an iterator that encapsulates the concept of broadcasting.
+ It allows
+\begin_inset Formula $N$
+\end_inset
+
+ arrays to be broadcast together so that the loop progresses in C-style
+ contiguous fashion over the broadcasted array.
+ The corresponding C-structure is the
+\family typewriter
+PyArrayMultiIterObject
+\family default
+ whose memory layout must begin any object,
+\emph on
+obj
+\emph default
+, passed in to the
+\family typewriter
+PyArray_Broadcast
+\family default
+(obj) function.
+ Broadcasting is performed by adjusting array iterators so that each iterator
+ represents the broadcasted shape and size, but has its strides adjusted
+ so that the correct element from the array is used at each iteration.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ numiter;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ size;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ index;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nd;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ dimensions
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyArrayIterObject *
+\emph default
+iters
+\emph on
+[NPY_MAXDIMS]
+\emph default
+;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArrayMultiIterObject
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+PyObject_HEAD Needed at the start of every Python object (holds reference
+ count and type identification).
+\end_layout
+
+\begin_layout Description
+numiter The number of arrays that need to be broadcast to the same shape.
+\end_layout
+
+\begin_layout Description
+size The total broadcasted size.
+\end_layout
+
+\begin_layout Description
+index The current (1-d) index into the broadcasted result.
+\end_layout
+
+\begin_layout Description
+nd The number of dimensions in the broadcasted result.
+\end_layout
+
+\begin_layout Description
+dimensions The shape of the broadcasted result (only
+\family typewriter
+nd
+\family default
+ slots are used).
+\end_layout
+
+\begin_layout Description
+iters An array of iterator objects that holds the iterators for the arrays
+ to be broadcast together.
+ On return, the iterators are adjusted for broadcasting.
+
+\end_layout
+
+\begin_layout Subsection
+PyArrayFlags_Type
+\end_layout
+
+\begin_layout Standard
+When the flags attribute is retrieved from Python, a special builtin object
+ of this type is constructed.
+ This special type makes it easier to work with the different flags by accessing
+ them as attributes or by accessing them as if the object were a dictionary
+ with the flag names as entries.
+
+\end_layout
+
+\begin_layout Subsection
+ScalarArrayTypes
+\end_layout
+
+\begin_layout Standard
+There is a Python type for each of the different built-in data types that
+ can be present in the array Most of these are simple wrappers around the
+ corresponding data type in C.
+ The C-names for these types are
+\series bold
+Py
+\series default
+<TYPE>
+\series bold
+ArrType_Type
+\series default
+ where <TYPE> can be
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+Bool
+\series default
+,
+\series bold
+Byte
+\series default
+,
+\series bold
+Short
+\series default
+,
+\series bold
+Int
+\series default
+,
+\series bold
+Long
+\series default
+,
+\series bold
+LongLong
+\series default
+,
+\series bold
+UByte
+\series default
+,
+\series bold
+UShort
+\series default
+,
+\series bold
+UInt
+\series default
+,
+\series bold
+ULong
+\series default
+,
+\series bold
+ULongLong
+\series default
+,
+\series bold
+Float
+\series default
+,
+\series bold
+Double
+\series default
+,
+\series bold
+LongDouble
+\series default
+,
+\series bold
+CFloat
+\series default
+,
+\series bold
+CDouble
+\series default
+,
+\series bold
+CLongDouble
+\series default
+,
+\series bold
+String
+\series default
+,
+\series bold
+Unicode
+\series default
+,
+\series bold
+Void
+\series default
+, and
+\series bold
+Object
+\series default
+.
+
+\end_layout
+
+\begin_layout Standard
+These type names are part of the C-API and can therefore be created in extension
+ C-code.
+ There is also a
+\family typewriter
+PyIntpArrType_Type
+\family default
+ and a
+\family typewriter
+PyUIntpArrType_Type
+\family default
+ that are simple substitutes for one of the integer types that can hold
+ a pointer on the platform.
+ The structure of these scalar objects is not exposed to C-code.
+ The function
+\family typewriter
+PyArray_ScalarAsCtype
+\family default
+(..) can be used to extract the C-type value from the array scalar and the
+ function
+\family typewriter
+PyArray_Scalar
+\family default
+(...) can be used to construct an array scalar from a C-value.
+
+\end_layout
+
+\begin_layout Section
+Other C-Structures
+\end_layout
+
+\begin_layout Standard
+A few new C-structures were found to be useful in the development of NumPy.
+ These C-structures are used in at least one C-API call and are therefore
+ documented here.
+ The main reason these structures were defined is to make it easy to use
+ the Python ParseTuple C-API to convert from Python objects to a useful
+ C-Object.
+
+\end_layout
+
+\begin_layout Subsection
+PyArray_Dims
+\end_layout
+
+\begin_layout Standard
+This structure is very useful when shape and/or strides information is supposed
+ to be interpreted.
+ The structure is
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp *
+\emph default
+ptr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ len;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArray_Dims
+\emph default
+;
+\end_layout
+
+\begin_layout Standard
+The members of this structure are
+\end_layout
+
+\begin_layout Description
+ptr A pointer to a list of (
+\family typewriter
+npy_intp
+\family default
+) integers which usually represent array shape or array strides.
+
+\end_layout
+
+\begin_layout Description
+len The length of the list of integers.
+ It is assumed safe to access
+\emph on
+ptr
+\emph default
+[0] to
+\emph on
+ptr
+\emph default
+[len-1].
+
+\end_layout
+
+\begin_layout Subsection
+PyArray_Chunk
+\end_layout
+
+\begin_layout Standard
+This is equivalent to the buffer object structure in Python up to the ptr
+ member.
+ On 32-bit platforms (
+\emph on
+i.e.
+
+\emph default
+ if
+\family typewriter
+NPY_SIZEOF_INT
+\family default
+==
+\family typewriter
+NPY_SIZEOF_INTP
+\family default
+) or in Python 2.5, the len member also matches an equivalent member of the
+ buffer object.
+ It is useful to represent a generic single-segment chunk of memory.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+PyObject *
+\emph default
+base;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+void *
+\emph default
+ptr;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp
+\emph default
+ len;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ flags;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArray_Chunk
+\emph default
+;
+\end_layout
+
+\begin_layout Standard
+The members are
+\end_layout
+
+\begin_layout Description
+PyObject_HEAD Necessary for all Python objects.
+ Included here so that the
+\family typewriter
+PyArray_Chunk
+\family default
+ structure matches that of the buffer object (at least to the len member).
+
+\end_layout
+
+\begin_layout Description
+base The Python object this chunk of memory comes from.
+ Needed so that memory can be accounted for properly.
+\end_layout
+
+\begin_layout Description
+ptr A pointer to the start of the single-segment chunk of memory.
+
+\end_layout
+
+\begin_layout Description
+len The length of the segment in bytes.
+\end_layout
+
+\begin_layout Description
+flags Any data flags (
+\emph on
+e.g.
+
+\emph default
+
+\family typewriter
+NPY_WRITEABLE
+\family default
+) that should be used to interpret the memory.
+
+\end_layout
+
+\begin_layout Subsection
+PyArrayInterface
+\end_layout
+
+\begin_layout Standard
+The
+\family typewriter
+PyArrayInterface
+\family default
+
+\begin_inset LatexCommand index
+name "PyArrayInterface"
+
+\end_inset
+
+ structure is defined so that NumPy and other extension modules can use
+ the rapid array interface protocol.
+ The
+\series bold
+__array_struct__
+\series default
+ method of an object that supports the rapid array interface protocol should
+ return a
+\family typewriter
+PyCObject
+\family default
+ that contains a pointer to a
+\family typewriter
+PyArrayInterface
+\family default
+ structure with the relevant details of the array.
+ After the new array is created, the attribute should be
+\family typewriter
+DECREF
+\family default
+'d which will free the
+\family typewriter
+PyArrayInterface
+\family default
+ structure.
+ Remember to
+\family typewriter
+INCREF
+\family default
+ the object (whose
+\series bold
+__array_struct__
+\series default
+ attribute was retrieved) and point the base member of the new
+\family typewriter
+PyArrayObject
+\family default
+ to this same object.
+ In this way the memory for the array will be managed correctly.
+
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ two;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ nd;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+char
+\emph default
+ typekind;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ itemsize;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+int
+\emph default
+ flags;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp *
+\emph default
+shape;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+npy_intp *
+\emph default
+strides;
+\end_layout
+
+\begin_layout LyX-Code
+
+\emph on
+void *
+\emph default
+data;
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject *descr;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\emph on
+PyArrayInterface
+\emph default
+;
+\end_layout
+
+\begin_layout Description
+two the integer 2 as a sanity check.
+\end_layout
+
+\begin_layout Description
+nd the number of dimensions in the array.
+\end_layout
+
+\begin_layout Description
+typekind A character indicating what kind of array is present according
+ to the typestring convention with 't' -> bitfield, 'b' -> Boolean, 'i'
+ -> signed integer, 'u' -> unsigned integer, 'f' -> floating point, 'c'
+ -> complex floating point, 'O' -> object, 'S' -> string, 'U' -> unicode,
+ 'V' -> void.
+\end_layout
+
+\begin_layout Description
+itemsize the number of bytes each item in the array requires.
+\end_layout
+
+\begin_layout Description
+flags any of the bits
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ (1),
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ (2),
+\family typewriter
+NPY_ALIGNED
+\family default
+ (0x100),
+\family typewriter
+NPY_NOTSWAPPED
+\family default
+ (0x200), or
+\family typewriter
+NPY_WRITEABLE
+\family default
+ (0x400) to indicate something about the data.
+ The
+\family typewriter
+NPY_ALIGNED
+\family default
+,
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+, and
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ flags can actually be determined from the other parameters.
+ The flag
+\family typewriter
+NPY_ARR_HAS_DESCR
+\family default
+ (0x800) can also be set to indicate to objects consuming the version 3
+ array interface that the descr member of the structure is present (it will
+ be ignored by objects consuming version 2 of the array interface).
+
+\end_layout
+
+\begin_layout Description
+shape An array containing the size of the array in each dimension.
+\end_layout
+
+\begin_layout Description
+strides An array containing the number of bytes to jump to get to the next
+ element in each dimension.
+\end_layout
+
+\begin_layout Description
+data A pointer
+\emph on
+to
+\emph default
+ the first element of the array.
+\end_layout
+
+\begin_layout Description
+descr A Python object describing the data-type in more detail (currently
+ an array_description list of tuples).
+ This can be
+\family typewriter
+NULL
+\family default
+ if
+\emph on
+typekind
+\emph default
+ and
+\emph on
+itemsize
+\emph default
+ provide enough information.
+
+\end_layout
+
+\begin_layout Subsection
+Internally used structures
+\end_layout
+
+\begin_layout Standard
+Internally, the code uses some additional Python objects primarily for memory
+ management.
+ These types are not accessible directly from Python, and are not exposed
+ to the C-API.
+ They are included here only for completeness and assistance in understanding
+ the code.
+
+\end_layout
+
+\begin_layout Subsubsection
+PyUFuncLoopObject
+\end_layout
+
+\begin_layout Standard
+A loose wrapper for a C-structure that contains the information needed for
+ looping.
+ This is useful if you are trying to understand the ufunc looping code.
+ The
+\family typewriter
+PyUFuncLoopObject
+\family default
+ is the associated C-structure.
+ It is defined in the
+\family typewriter
+ufuncobject.h
+\family default
+ header.
+\end_layout
+
+\begin_layout Subsubsection
+PyUFuncReduceObject
+\end_layout
+
+\begin_layout Standard
+A loose wrapper for the C-structure that contains the information needed
+ for reduce-like methods of ufuncs.
+ This is useful if you are trying to understand the reduce, accumulate,
+ and reduce-at code.
+ The
+\family typewriter
+PyUFuncReduceObject
+\family default
+ is the associated C-structure.
+ It is defined in the
+\family typewriter
+ufuncobject.h
+\family default
+ header.
+\end_layout
+
+\begin_layout Subsubsection
+PyUFunc_Loop1d
+\end_layout
+
+\begin_layout Standard
+A simple linked-list of C-structures containing the information needed to
+ define a 1-d loop for a ufunc for every defined signature of a user-defined
+ data-type.
+
+\end_layout
+
+\begin_layout Subsubsection
+PyArrayMapIter_Type
+\end_layout
+
+\begin_layout Standard
+Advanced indexing is handled with this Python type.
+ It is simply a loose wrapper around the C-structure containing the variables
+ needed for advanced array indexing.
+ The associated C-structure,
+\family typewriter
+PyArrayMapIterObject
+\family default
+, is useful if you are trying to understand the advanced-index mapping code.
+ It is defined in the
+\family typewriter
+arrayobject.h
+\family default
+ header.
+ This type is not exposed to Python and could be replaced with a C-structure.
+ As a Python type it takes advantage of reference-counted memory management.
+\end_layout
+
+\begin_layout Chapter
+Complete API
+\end_layout
+
+\begin_layout Quotation
+The test of a first-rate intelligence is the ability to hold two opposed
+ ideas in the mind at the same time, and still retain the ability to function.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+F.
+ Scott Fitzgerald
+\end_layout
+
+\begin_layout Quotation
+For a successful technology, reality must take precedence over public relations,
+ for Nature cannot be fooled.
+
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Richard P.
+ Feynman
+\end_layout
+
+\begin_layout Section
+Configuration defines
+\end_layout
+
+\begin_layout Standard
+When NumPy is built, a configuration file is constructed and placed as config.h
+ in the NumPy include directory.
+ This configuration file ensures that specific macros are defined and defines
+ other macros based on whether or not your system has certain features.
+ It is included by the arrayobject.h file.
+
+\end_layout
+
+\begin_layout Subsection
+Guaranteed to be defined
+\end_layout
+
+\begin_layout Standard
+The
+\series bold
+SIZEOF_
+\series default
+<CTYPE> constants are defined so that sizeof information is available to
+ the pre-processor.
+
+\end_layout
+
+\begin_layout Description
+CHAR_BIT The number of bits of a char.
+ The char is the unit of all sizeof definitions
+\end_layout
+
+\begin_layout Description
+SIZEOF_SHORT sizeof(short)
+\end_layout
+
+\begin_layout Description
+SIZEOF_INT sizeof(int)
+\end_layout
+
+\begin_layout Description
+SIZEOF_LONG sizeof(long)
+\end_layout
+
+\begin_layout Description
+SIZEOF_LONG_LONG sizeof(longlong) where longlong is defined appropriately
+ on the platform (A macro defines
+\series bold
+SIZEOF_LONGLONG
+\series default
+ as well.)
+\end_layout
+
+\begin_layout Description
+SIZEOF_PY_LONG_LONG
+\end_layout
+
+\begin_layout Description
+SIZEOF_FLOAT sizeof(float)
+\end_layout
+
+\begin_layout Description
+SIZEOF_DOUBLE sizeof(double)
+\end_layout
+
+\begin_layout Description
+SIZEOF_LONG_DOUBLE sizeof(longdouble) (A macro defines
+\series bold
+SIZEOF_LONGDOUBLE
+\series default
+ as well.)
+\end_layout
+
+\begin_layout Description
+SIZEOF_PY_INTPTR_T Size of a pointer on this platform (sizeof(void *)) (A
+ macro defines SIZEOF_INTP as well.)
+\end_layout
+
+\begin_layout Subsection
+Possible defines
+\end_layout
+
+\begin_layout Standard
+These defines will cause the compilation to ignore compatibility code that
+ is placed in NumPy and use the system code instead.
+ If they are not defined, then the system does not have that capability.
+\end_layout
+
+\begin_layout Description
+HAVE_LONGDOUBLE_FUNCS System has C99 long double math functions.
+\end_layout
+
+\begin_layout Description
+HAVE_FLOAT_FUNCS System has C99 float math functions.
+\end_layout
+
+\begin_layout Description
+HAVE_INVERSE_HYPERBOLIC System has inverse hyperbolic functions: asinh,
+ acosh, and atanh.
+\end_layout
+
+\begin_layout Description
+HAVE_INVERSE_HYPERBOLIC_FLOAT System has C99 float extensions to inverse
+ hyperbolic functions: asinhf, acoshf, atanhf
+\end_layout
+
+\begin_layout Description
+HAVE_INVERSE_HYPERBOLIC_LONGDOUBLE System has C99 long double extensions
+ to inverse hyperbolic functions: asinhl, acoshl, atanhl.
+\end_layout
+
+\begin_layout Description
+HAVE_ISNAN System has an isnan function.
+\end_layout
+
+\begin_layout Description
+HAVE_ISINF System has an isinf function.
+
+\end_layout
+
+\begin_layout Description
+HAVE_LOG1P System has the log1p function:
+\begin_inset Formula $\log\left(x+1\right)$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+HAVE_EXPM1 System has the expm1 function:
+\begin_inset Formula $\exp\left(x\right)-1$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+HAVE_RINT System has the rint function.
+
+\end_layout
+
+\begin_layout Section
+Array Data Types
+\end_layout
+
+\begin_layout Standard
+The standard array can have 21 different data types (and has some support
+ for adding your own types).
+ These data types all have an enumerated type, an enumerated type-character,
+ and a corresponding array scalar Python type object (placed in a hierarchy).
+ There are also standard C typedefs to make it easier to manipulate elements
+ of the given data type.
+ For the numeric types, there are also bit-width equivalent C typedefs and
+ named typenumbers that make it easier to select the precision desired.
+
+\end_layout
+
+\begin_layout Warning
+The names for the types in c code follows c naming conventions more closely.
+ The Python names for these types follow Python conventions.
+ Thus, NPY_FLOAT picks up a 32-bit float in C, but
+\begin_inset Quotes eld
+\end_inset
+
+float_
+\begin_inset Quotes erd
+\end_inset
+
+ in python corresponds to a 64-bit double.
+ The bit-width names can be used in both Python and C for clarity.
+\end_layout
+
+\begin_layout Subsection
+Enumerated Types
+\end_layout
+
+\begin_layout Standard
+There is a list of enumerated types defined providing the basic 21 data
+ types plus some useful generic names.
+ Whenever the code requires a type number, one of these enumerated types
+ is requested.
+ The types are all called
+\series bold
+NPY_
+\series default
+<NAME> where <NAME> can be
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+BOOL
+\series default
+,
+\series bold
+BYTE
+\series default
+,
+\series bold
+UBYTE
+\series default
+,
+\series bold
+SHORT
+\series default
+,
+\series bold
+USHORT
+\series default
+,
+\series bold
+INT
+\series default
+,
+\series bold
+UINT
+\series default
+,
+\series bold
+LONG
+\series default
+,
+\series bold
+ULONG
+\series default
+,
+\series bold
+LONGLONG
+\series default
+,
+\series bold
+ULONGLONG
+\series default
+,
+\series bold
+FLOAT
+\series default
+,
+\series bold
+DOUBLE
+\series default
+,
+\series bold
+LONGDOUBLE
+\series default
+,
+\series bold
+CFLOAT
+\series default
+,
+\series bold
+CDOUBLE
+\series default
+,
+\series bold
+CLONGDOUBLE
+\series default
+,
+\series bold
+OBJECT
+\series default
+,
+\series bold
+STRING
+\series default
+,
+\series bold
+UNICODE
+\series default
+,
+\series bold
+VOID
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+NTYPES
+\series default
+,
+\series bold
+NOTYPE
+\series default
+,
+\series bold
+USERDEF
+\series default
+,
+\series bold
+DEFAULT_TYPE
+\end_layout
+
+\begin_layout Standard
+The various character codes indicating certain types are also part of an
+ enumerated list.
+ References to type characters (should they be needed at all) should always
+ use these enumerations.
+ The form of them is
+\series bold
+NPY_
+\series default
+<NAME>
+\series bold
+LTR
+\series default
+ where <NAME> can be
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+BOOL
+\series default
+,
+\series bold
+BYTE
+\series default
+,
+\series bold
+UBYTE
+\series default
+,
+\series bold
+SHORT
+\series default
+,
+\series bold
+USHORT
+\series default
+,
+\series bold
+INT
+\series default
+,
+\series bold
+UINT
+\series default
+,
+\series bold
+LONG
+\series default
+,
+\series bold
+ULONG
+\series default
+,
+\series bold
+LONGLONG
+\series default
+,
+\series bold
+ULONGLONG
+\series default
+,
+\series bold
+FLOAT
+\series default
+,
+\series bold
+DOUBLE
+\series default
+,
+\series bold
+LONGDOUBLE
+\series default
+,
+\series bold
+CFLOAT
+\series default
+,
+\series bold
+CDOUBLE
+\series default
+,
+\series bold
+CLONGDOUBLE
+\series default
+,
+\series bold
+OBJECT
+\series default
+,
+\series bold
+STRING
+\series default
+,
+\series bold
+VOID
+\series default
+
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+INTP
+\series default
+,
+\series bold
+UINTP
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+GENBOOL
+\series default
+,
+\series bold
+SIGNED
+\series default
+,
+\series bold
+UNSIGNED
+\series default
+,
+\series bold
+FLOATING
+\series default
+,
+\series bold
+COMPLEX
+\end_layout
+
+\begin_layout Standard
+The latter group of <NAME>s corresponds to letters used in the array interface
+ typestring specification.
+
+\end_layout
+
+\begin_layout Subsection
+Defines
+\end_layout
+
+\begin_layout Subsubsection
+Max and min values for integers
+\end_layout
+
+\begin_layout Description
+NPY_MAX_INT
+\series medium
+<bits>
+\end_layout
+
+\begin_layout Description
+NPY_MAX_UINT
+\series medium
+<bits>
+\end_layout
+
+\begin_layout Description
+NPY_MIN_INT
+\series medium
+<bits>
+\series default
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These are defined for <bits> = 8, 16, 32, 64, 128, and 256 and provide
+ the maximum (minimum) value of the corresponding (unsigned) integer type.
+ Note: the actual integer type may not be available on all platforms (i.e.
+ 128-bit and 256-bit integers are rare).
+
+\end_layout
+
+\begin_layout Description
+NPY_MIN_
+\series medium
+<type>
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is defined for <type> =
+\series bold
+BYTE
+\series default
+,
+\series bold
+SHORT
+\series default
+,
+\series bold
+INT
+\series default
+,
+\series bold
+LONG
+\series default
+,
+\series bold
+LONGLONG
+\series default
+,
+\series bold
+INTP
+\end_layout
+
+\begin_layout Description
+NPY_MAX_
+\series medium
+<type>
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is defined for all defined for <type> =
+\series bold
+BYTE
+\series default
+,
+\series bold
+UBYTE
+\series default
+,
+\series bold
+SHORT
+\series default
+,
+\series bold
+USHORT
+\series default
+,
+\series bold
+INT
+\series default
+,
+\series bold
+UINT
+\series default
+,
+\series bold
+LONG
+\series default
+,
+\series bold
+ULONG
+\series default
+,
+\series bold
+LONGLONG
+\series default
+,
+\series bold
+ULONGLONG
+\series default
+,
+\series bold
+INTP
+\series default
+,
+\series bold
+UINTP
+\end_layout
+
+\begin_layout Subsubsection
+Number of bits in data types
+\end_layout
+
+\begin_layout Standard
+All
+\series bold
+NPY_SIZEOF_
+\series default
+<CTYPE> constants have corresponding
+\series bold
+NPY_BITSOF_
+\series default
+<CTYPE> constants defined.
+ The
+\series bold
+NPY_BITSOF_
+\series default
+<CTYPE> constants provide the number of bits in the data type.
+ Specifically, the available <CTYPE>s are
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+BOOL
+\series default
+,
+\series bold
+CHAR
+\series default
+,
+\series bold
+SHORT
+\series default
+,
+\series bold
+INT
+\series default
+,
+\series bold
+LONG
+\series default
+,
+\series bold
+LONGLONG
+\series default
+,
+\series bold
+FLOAT
+\series default
+,
+\series bold
+DOUBLE
+\series default
+,
+\series bold
+LONGDOUBLE
+\end_layout
+
+\begin_layout Subsubsection
+Bit-width references to enumerated typenums
+\end_layout
+
+\begin_layout Standard
+All of the numeric data types (integer, floating point, and complex) have
+ constants that are defined to be a specific enumerated type number.
+ Exactly which enumerated type a bit-width type refers to is platform dependent.
+ In particular, the constants available are
+\series bold
+PyArray_
+\series default
+<NAME><BITS> where <NAME> is
+\series bold
+INT
+\series default
+,
+\series bold
+UINT
+\series default
+,
+\series bold
+FLOAT
+\series default
+,
+\series bold
+COMPLEX
+\series default
+ and <BITS> can be 8, 16, 32, 64, 80, 96, 128, 160, 192, 256, and 512.
+ Obviously not all bit-widths are available on all platforms for all the
+ kinds of numeric types.
+ Commonly 8-, 16-, 32-, 64-bit integers; 32-, 64-bit floats; and 64-, 128-bit
+ complex types are available.
+
+\end_layout
+
+\begin_layout Subsubsection
+Integer that can hold a pointer
+\end_layout
+
+\begin_layout Standard
+The constants
+\series bold
+PyArray_INTP
+\series default
+ and
+\series bold
+PyArray_UINTP
+\series default
+ refer to an enumerated integer type that is large enough to hold a pointer
+ on the platform.
+ Index arrays should always be converted to
+\series bold
+PyArray_INTP
+\series default
+, because the dimension of the array is of type npy_intp.
+
+\end_layout
+
+\begin_layout Subsection
+C-type names
+\end_layout
+
+\begin_layout Standard
+There are standard variable types for each of the numeric data types and
+ the bool data type.
+ Some of these are already available in the C-specification.
+ You can create variables in extension code with these types.
+
+\end_layout
+
+\begin_layout Subsubsection
+Boolean
+\end_layout
+
+\begin_layout Description
+npy_bool unsigned char; The constants NPY_FALSE and NPY_TRUE are also defined.
+
+\end_layout
+
+\begin_layout Subsubsection
+(Un)Signed Integer
+\end_layout
+
+\begin_layout Standard
+Unsigned versions of the integers can be defined by pre-pending a 'u' to
+ the front of the integer name.
+
+\end_layout
+
+\begin_layout Description
+npy_(u)byte (unsigned) char
+\end_layout
+
+\begin_layout Description
+npy_(u)short (unsigned) short
+\end_layout
+
+\begin_layout Description
+npy_(u)int (unsigned) int
+\end_layout
+
+\begin_layout Description
+npy_(u)long (unsigned) long int
+\end_layout
+
+\begin_layout Description
+npy_(u)longlong (unsigned long long int)
+\end_layout
+
+\begin_layout Description
+npy_(u)intp (unsigned) Py_intptr_t (an integer that is the size of a pointer
+ on the platform).
+
+\end_layout
+
+\begin_layout Subsubsection
+(Complex) Floating point
+\end_layout
+
+\begin_layout Description
+npy_(c)float float
+\end_layout
+
+\begin_layout Description
+npy_(c)double double
+\end_layout
+
+\begin_layout Description
+npy_(c)longdouble long double
+\end_layout
+
+\begin_layout Standard
+complex types are structures with
+\series bold
+.real
+\series default
+ and
+\series bold
+.imag
+\series default
+ members (in that order).
+\end_layout
+
+\begin_layout Subsubsection
+Bit-width names
+\end_layout
+
+\begin_layout Standard
+There are also typedefs for signed integers, unsigned integers, floating
+ point, and complex floating point types of specific bit-widths.
+ The available type names are
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+npy_int
+\series default
+<bits>,
+\series bold
+npy_uint
+\series default
+<bits>,
+\series bold
+npy_float
+\series default
+<bits>, and
+\series bold
+npy_complex
+\series default
+<bits>
+\end_layout
+
+\begin_layout Standard
+where <bits> is the number of bits in the type and can be
+\series bold
+8
+\series default
+,
+\series bold
+16
+\series default
+,
+\series bold
+32
+\series default
+,
+\series bold
+64
+\series default
+, 128, and 256 for integer types; 16,
+\series bold
+32
+\series default
+,
+\series bold
+64
+\series default
+, 80, 96, 128, and 256 for floating-point types; and 32,
+\series bold
+64
+\series default
+,
+\series bold
+128
+\series default
+, 160, 192, and 512 for complex-valued types.
+ Which bit-widths are available is platform dependent.
+ The bolded bit-widths are usually available on all platforms.
+
+\end_layout
+
+\begin_layout Subsection
+Printf Formatting
+\end_layout
+
+\begin_layout Standard
+For help in printing, the following strings are defined as the correct format
+ specifier in printf and related commands.
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+NPY_LONGLONG_FMT
+\series default
+,
+\series bold
+NPY_ULONGLONG_FMT
+\series default
+,
+\series bold
+NPY_INTP_FMT
+\series default
+,
+\series bold
+NPY_UINTP_FMT
+\series default
+,
+\series bold
+NPY_LONGDOUBLE_FMT
+\end_layout
+
+\begin_layout Section
+Array API
+\begin_inset LatexCommand index
+name "ndarray!C-API|("
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "C-API!array|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Array structure and data access
+\end_layout
+
+\begin_layout Standard
+These macros all access the PyArrayObject structure members.
+ The input argument, obj, can be any
+\family typewriter
+PyObject*
+\family default
+ that is directly interpretable as a
+\family typewriter
+PyArrayObject*
+\family default
+ (any instance of the
+\series bold
+PyArray_Type
+\series default
+ and its sub-types).
+
+\end_layout
+
+\begin_layout Description
+PyArray_DATA (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+PyArray_BYTES (
+\family typewriter
+char*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These two macros are similar and obtain the pointer to the data-buffer
+ for the array.
+ The first macro can (and should be) assigned to a particular pointer where
+ the second is for generic processing.
+ If you have not guaranteed a contiguous and/or aligned array then be sure
+ you understand how to access the data in the array to avoid memory and/or
+ alignment problems.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DIMS (
+\family typewriter
+npy_intp*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+PyArray_STRIDES (
+\family typewriter
+npy_intp*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+PyArray_DIM (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+int
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the shape in the
+\emph on
+n
+\emph default
+
+\begin_inset Formula $^{\textrm{th}}$
+\end_inset
+
+ dimension.
+\end_layout
+
+\begin_layout Description
+PyArray_STRIDE (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+int
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the stride in the
+\emph on
+n
+\emph default
+
+\begin_inset Formula $^{\textrm{th}}$
+\end_inset
+
+ dimension.
+\end_layout
+
+\begin_layout Description
+PyArray_BASE (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+PyArray_DESCR (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+PyArray_FLAGS (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+PyArray_ITEMSIZE (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the itemsize for the elements of this array.
+\end_layout
+
+\begin_layout Description
+PyArray_TYPE (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (builtin) typenumber for the elements of this array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_GETITEM (
+\family typewriter
+PyObject
+\family default
+ *) (
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+void*
+\family default
+ itemptr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Get a Python object from the ndarray,
+\emph on
+arr
+\emph default
+, at the location pointed to by itemptr.
+ Return
+\family typewriter
+NULL
+\family default
+ on failure.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SETITEM (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+void*
+\family default
+ itemptr,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert obj and place it in the ndarray,
+\emph on
+arr
+\emph default
+, at the place pointed to by itemptr.
+ Return -1 if an error occurs or 0 on success.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SIZE (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the total size (in number of elements) of the array.
+\end_layout
+
+\begin_layout Description
+PyArray_Size (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns 0 if
+\emph on
+obj
+\emph default
+ is not a sub-class of bigndarray.
+ Otherwise, returns the total number of elements in the array.
+ Safer version of
+\family typewriter
+PyArray_SIZE
+\family default
+(
+\emph on
+obj
+\emph default
+).
+\end_layout
+
+\begin_layout Description
+PyArray_NBYTES (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the total number of bytes consumed by the array.
+
+\end_layout
+
+\begin_layout Subsubsection
+Data access
+\end_layout
+
+\begin_layout Standard
+These functions and macros provide easy access to elements of the ndarray
+ from C.
+ These work for all arrays.
+ You may need to take care when accessing the data in the array, however,
+ if it is not in machine byte-order, misaligned, or not writeable.
+ In other words, be sure to respect the state of the flags unless you know
+ what you are doing, or have previously guaranteed an array that is writeable,
+ aligned, and in machine byte-order using PyArray_FromAny.
+ If you wish to handle all types of arrays, the copyswap function for each
+ type is useful for handling misbehaved arrays.
+ Some platforms (e.g.
+ Solaris) do not like misaligned data and will crash if you de-reference
+ a misaligned pointer.
+ Other platforms (e.g.
+ x86 Linux) will just work more slowly with misaligned data.
+
+\end_layout
+
+\begin_layout Description
+PyArray_GetPtr (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ aobj,
+\family typewriter
+npy_intp*
+\family default
+ ind)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a pointer to the data of the ndarray,
+\emph on
+aobj
+\emph default
+, at the N-dimensional index given by the c-array,
+\emph on
+ind
+\emph default
+, (which must be at least
+\emph on
+aobj
+\emph default
+->nd in size).
+ You may want to typecast the returned pointer to the data type of the ndarray.
+\end_layout
+
+\begin_layout Description
+PyArray_GETPTR1 (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+<npy_intp>
+\family default
+ i)
+\end_layout
+
+\begin_layout Description
+PyArray_GETPTR2 (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+<npy_intp>
+\family default
+ i,
+\family typewriter
+<npy_intp>
+\family default
+ j)
+\end_layout
+
+\begin_layout Description
+PyArray_GETPTR3 (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+<npy_intp>
+\family default
+ i,
+\family typewriter
+<npy_intp>
+\family default
+ j,
+\family typewriter
+<npy_intp>
+\family default
+ k)
+\end_layout
+
+\begin_layout Description
+PyArray_GETPTR4 (
+\family typewriter
+void*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+<npy_intp>
+\family default
+ i,
+\family typewriter
+<npy_intp>
+\family default
+ j,
+\family typewriter
+<npy_intp>
+\family default
+ k,
+\family typewriter
+<npy_intp>
+\family default
+ l)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Quick, inline access to the element at the given coordinates in the ndarray,
+
+\emph on
+obj
+\emph default
+, which must have respectively 1, 2, 3, or 4 dimensions (this is not checked).
+ The corresponding
+\emph on
+i
+\emph default
+,
+\emph on
+j
+\emph default
+,
+\emph on
+k
+\emph default
+, and
+\emph on
+l
+\emph default
+ coordinates can be any integer but will be interpreted as
+\family typewriter
+npy_intp
+\family default
+.
+ You may want to typecast the returned pointer to the data type of the ndarray.
+
+\end_layout
+
+\begin_layout Subsection
+Creating arrays
+\end_layout
+
+\begin_layout Subsubsection
+From scratch
+\end_layout
+
+\begin_layout Description
+PyArray_NewFromDescr (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyTypeObject*
+\family default
+ subtype,
+\family typewriter
+PyArray_Descr*
+\family default
+ descr,
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+npy_intp*
+\family default
+ strides,
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+int
+\family default
+ flags,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is the main array creation function.
+ Most new arrays are created with this flexible function.
+ The returned object is an object of Python-type
+\emph on
+subtype
+\emph default
+, which must be a subtype of
+\family typewriter
+PyArray_Type
+\family default
+.
+ The array has
+\emph on
+nd
+\emph default
+ dimensions, described by
+\emph on
+dims
+\emph default
+.
+ The data-type descriptor of the new array is
+\emph on
+descr
+\emph default
+.
+ If
+\emph on
+subtype
+\emph default
+ is not
+\family typewriter
+&PyArray_Type
+\family default
+ (
+\emph on
+e.g.
+
+\emph default
+ a Python subclass of the ndarray), then
+\emph on
+obj
+\emph default
+ is the object to pass to the
+\series bold
+__array_finalize__
+\series default
+ method of the subclass.
+ If
+\emph on
+data
+\emph default
+ is
+\family typewriter
+NULL
+\family default
+, then new memory will be allocated and
+\emph on
+flags
+\emph default
+ can be non-zero to indicate a Fortran-style contiguous array.
+ If
+\emph on
+data
+\emph default
+ is not
+\family typewriter
+NULL
+\family default
+, then it is assumed to point to the memory to be used for the array and
+ the
+\emph on
+flags
+\emph default
+ argument is used as the new flags for the array (except the state of
+\family typewriter
+NPY_OWNDATA
+\family default
+ and
+\family typewriter
+UPDATEIFCOPY
+\family default
+ flags of the new array will be reset).
+ In addition, if
+\emph on
+data
+\emph default
+ is non-NULL, then
+\emph on
+strides
+\emph default
+ can also be provided.
+ If
+\emph on
+strides
+\emph default
+ is
+\family typewriter
+NULL
+\family default
+, then the array strides are computed as C-style contiguous (default) or
+ Fortran-style contiguous (
+\emph on
+flags
+\emph default
+ is nonzero for
+\emph on
+data
+\emph default
+=
+\family typewriter
+NULL
+\family default
+ or
+\emph on
+flags
+\emph default
+ &
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ is nonzero non-NULL
+\emph on
+data
+\emph default
+).
+ Any provided
+\emph on
+dims
+\emph default
+ and
+\emph on
+strides
+\emph default
+ are copied into newly allocated dimension and strides arrays for the new
+ array object.
+\end_layout
+
+\begin_layout Description
+PyArray_New (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyTypeObject*
+\family default
+ subtype,
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ type_num,
+\family typewriter
+npy_intp*
+\family default
+ strides,
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+int
+\family default
+ itemsize,
+\family typewriter
+int
+\family default
+ flags,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is similar to
+\family typewriter
+PyArray
+\family default
+\series bold
+_
+\family typewriter
+\series default
+DescrNew
+\family default
+(...) except you specify the data-type descriptor with
+\emph on
+type_num
+\emph default
+ and
+\emph on
+itemsize
+\emph default
+, where
+\emph on
+type_num
+\emph default
+ corresponds to a builtin (or user-defined) type.
+ If the type always has the same number of bytes, then itemsize is ignored.
+ Otherwise, itemsize specifies the particular size of this array.
+
+\end_layout
+
+\begin_layout Warning
+If data is passed to
+\family typewriter
+PyArray_NewFromDescr
+\family default
+ or
+\family typewriter
+PyArray_New
+\family default
+, this memory must not be deallocated until the new array is deleted.
+ If this data came from another Python object, this can be accomplished
+ using
+\family typewriter
+Py_INCREF
+\family default
+ on that object and setting the base member of the new array to point to
+ that object.
+ If strides are passed in they must be consistent with the dimensions, the
+ itemsize, and the data of the array.
+\end_layout
+
+\begin_layout Description
+PyArray_SimpleNew (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new unitialized array of type,
+\emph on
+typenum
+\emph default
+, whose size in each of
+\emph on
+nd
+\emph default
+ dimensions is given by the integer array,
+\emph on
+dims
+\emph default
+.
+ This function cannot be used to create a flexible-type array (no itemsize
+ given).
+\end_layout
+
+\begin_layout Description
+PyArray_SimpleNewFromData (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+void*
+\family default
+ data)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create an array wrapper around
+\emph on
+data
+\emph default
+ pointed to by the given pointer.
+ The array flags will have a default that the data area is well-behaved
+ and C-style contiguous.
+ The shape of the array is given by the
+\emph on
+dims
+\emph default
+ c-array of length
+\emph on
+nd
+\emph default
+.
+ The data-type of the array is indicated by
+\emph on
+typenum
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SimpleNewFromDescr (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+PyArray_Descr*
+\family default
+ descr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new array with the provided data-type descriptor,
+\emph on
+descr
+\emph default
+, of the shape deteremined by
+\emph on
+nd
+\emph default
+ and
+\emph on
+dims
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_FILLWBYTE (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ val)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Fill the array pointed to by
+\emph on
+obj
+\emph default
+---which must be a (subclass of) bigndarray---with the contents of
+\emph on
+val
+\emph default
+ (evaluated as a byte).
+\end_layout
+
+\begin_layout Description
+PyArray_Zeros (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new
+\emph on
+nd
+\emph default
+-dimensional array with shape given by
+\emph on
+dims
+\emph default
+ and data type given by
+\emph on
+dtype
+\emph default
+.
+ If
+\emph on
+fortran
+\emph default
+ is non-zero, then a Fortran-order array is created, otherwise a C-order
+ array is created.
+ Fill the memory with zeros (or the 0 object if
+\emph on
+dtype
+\emph default
+ corresponds to
+\family typewriter
+PyArray_OBJECT
+\family default
+).
+
+\end_layout
+
+\begin_layout Description
+PyArray_ZEROS (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ type_num,
+\family typewriter
+int
+\family default
+ fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Macro form of
+\family typewriter
+PyArray_Zeros
+\family default
+ which takes a type-number instead of a data-type object.
+\end_layout
+
+\begin_layout Description
+PyArray_Empty (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new
+\emph on
+nd
+\emph default
+-dimensional array with shape given by
+\emph on
+dims
+\emph default
+ and data type given by
+\emph on
+dtype
+\emph default
+.
+ If
+\emph on
+fortran
+\emph default
+ is non-zero, then a Fortran-order array is created, otherwise a C-order
+ array is created.
+ The array is uninitialized unless the data type corresponds to
+\family typewriter
+PyArray_OBJECT
+\family default
+ in which case the array is filled with
+\family typewriter
+Py_None
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_EMPTY (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Macro form of
+\family typewriter
+PyArray_Empty
+\family default
+ which takes a type-number,
+\emph on
+typenum
+\emph default
+, instead of a data-type object.
+\end_layout
+
+\begin_layout Description
+PyArray_Arange (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+double
+\family default
+ start,
+\family typewriter
+double
+\family default
+ stop,
+\family typewriter
+double
+\family default
+ step,
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new 1-dimensional array of data-type,
+\emph on
+typenum
+\emph default
+, that ranges from
+\emph on
+start
+\emph default
+ to
+\emph on
+stop
+\emph default
+ (exclusive) in increments of
+\emph on
+step
+\emph default
+.
+ Equivalent to
+\series bold
+arange
+\series default
+(
+\emph on
+start
+\emph default
+,
+\emph on
+stop
+\emph default
+,
+\emph on
+step
+\emph default
+, dtype).
+\end_layout
+
+\begin_layout Description
+PyArray_ArangeObj (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ start,
+\family typewriter
+PyObject*
+\family default
+ stop,
+\family typewriter
+PyObject*
+\family default
+ step,
+\family typewriter
+PyArray_Descr*
+\family default
+ descr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new 1-dimensional array of data-type determined by
+\family typewriter
+descr
+\family default
+, that ranges from
+\family typewriter
+start
+\family default
+ to
+\family typewriter
+stop
+\family default
+ (exclusive) in increments of
+\family typewriter
+step
+\family default
+.
+ Equivalent to arange(
+\family typewriter
+start
+\family default
+,
+\family typewriter
+stop
+\family default
+,
+\family typewriter
+step
+\family default
+,
+\family typewriter
+typenum
+\family default
+).
+
+\end_layout
+
+\begin_layout Subsubsection
+From other objects
+\end_layout
+
+\begin_layout Description
+PyArray_FromAny (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ min_depth,
+\family typewriter
+int
+\family default
+ max_depth,
+\family typewriter
+int
+\family default
+ requirements,
+\family typewriter
+PyObject*
+\family default
+ context)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is the main function used to obtain an array from any nested sequence,
+ or object that exposes the array interface,
+\family typewriter
+op
+\family default
+.
+ The parameters allow specification of the required
+\emph on
+type
+\emph default
+, the minimum (
+\emph on
+min_depth
+\emph default
+) and maximum (
+\emph on
+max_depth
+\emph default
+) number of dimensions acceptable, and other
+\emph on
+requirements
+\emph default
+ for the array.
+ The
+\emph on
+dtype
+\emph default
+ argument needs to be a
+\family typewriter
+PyArray_Descr
+\family default
+ structure indicating the desired data-type (including required byteorder).
+ The
+\emph on
+dtype
+\emph default
+ argument may be NULL, indicating that any data-type (and byteorder) is
+ acceptable.
+ If you want to use
+\family typewriter
+NULL
+\family default
+ for the
+\emph on
+dtype
+\emph default
+ and ensure the array is notswapped then use
+\family typewriter
+PyArray_CheckFromAny
+\family default
+.
+ A value of 0 for either of the depth parameters causes the parameter to
+ be ignored.
+ Any of the following array flags can be added (
+\emph on
+e.g.
+
+\emph default
+ using |) to get the
+\emph on
+requirements
+\emph default
+ argument.
+ If your code can handle general (
+\emph on
+e.g.
+
+\emph default
+ strided, byte-swapped, or unaligned arrays) then
+\emph on
+requirements
+\emph default
+ may be 0.
+ Also, if
+\emph on
+op
+\emph default
+ is not already an array (or does not expose the array interface), then
+ a new array will be created (and filled from
+\emph on
+op
+\emph default
+ using the sequence protocol).
+ The new array will have
+\family typewriter
+NPY_DEFAULT
+\family default
+ as its flags member.
+ The
+\emph on
+context
+\emph default
+ argument is passed to the
+\series bold
+__array__
+\series default
+ method of
+\emph on
+op
+\emph default
+ and is only used if the array is constructed that way.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_C_CONTIGUOUS Make sure the returned array is C-style contiguous
+\end_layout
+
+\begin_layout Description
+NPY_F_CONTIGUOUS Make sure the returned array is Fortran-style contiguous.
+
+\end_layout
+
+\begin_layout Description
+NPY_ALIGNED Make sure the returned array is aligned on proper boundaries
+ for its data type.
+ An aligned array has the data pointer and every strides factor as a multiple
+ of the alignment factor for the data-type-descriptor.
+\end_layout
+
+\begin_layout Description
+NPY_WRITEABLE Make sure the returned array can be written to.
+
+\end_layout
+
+\begin_layout Description
+NPY_ENSURECOPY Make sure a copy is made of
+\emph on
+op
+\emph default
+.
+ If this flag is not present, data is not copied if it can be avoided.
+
+\end_layout
+
+\begin_layout Description
+NPY_ENSUREARRAY Make sure the result is a base-class ndarray or bigndarray.
+ By default, if
+\emph on
+op
+\emph default
+ is an instance of a subclass of the bigndarray, an instance of that same
+ subclass is returned.
+ If this flag is set, an ndarray object will be returned instead.
+\end_layout
+
+\begin_layout Description
+NPY_FORCECAST Force a cast to the output type even if it cannot be done
+ safely.
+ Without this flag, a data cast will occur only if it can be done safely,
+ otherwise an error is reaised.
+
+\end_layout
+
+\begin_layout Description
+NPY_UPDATEIFCOPY If
+\emph on
+op
+\emph default
+ is already an array, but does not satisfy the requirements, then a copy
+ is made (which will satisfy the requirements).
+ If this flag is present and a copy (of an object that is already an array)
+ must be made, then the corresponding
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+ flag is set in the returned copy and
+\emph on
+op
+\emph default
+ is made to be read-only.
+ When the returned copy is deleted (presumably after your calculations are
+ complete), its contents will be copied back into
+\emph on
+op
+\emph default
+ and the
+\emph on
+op
+\emph default
+ array will be made writeable again.
+ If
+\emph on
+op
+\emph default
+ is not writeable to begin with, then an error is raised.
+ If
+\emph on
+op
+\emph default
+ is not already an array, then this flag has no effect.
+\end_layout
+
+\begin_layout Description
+NPY_BEHAVED
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\end_layout
+
+\begin_layout Description
+NPY_CARRAY
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_BEHAVED
+\end_layout
+
+\begin_layout Description
+NPY_CARRAY_RO
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_FARRAY
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_BEHAVED
+\end_layout
+
+\begin_layout Description
+NPY_FARRAY_RO
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_DEFAULT
+\family typewriter
+NPY_CARRAY
+\end_layout
+
+\begin_layout Description
+NPY_IN_ARRAY
+\family typewriter
+NPY_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_IN_FARRAY
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_INOUT_ARRAY
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_INOUT_FARRAY
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_OUT_ARRAY
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+NPY_UPDATEIFCOPY
+\end_layout
+
+\begin_layout Description
+NPY_OUT_FARRAY
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+UPDATEIFCOPY
+\end_layout
+
+\end_deeper
+\begin_layout Description
+PyArray_CheckFromAny (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ min_depth,
+\family typewriter
+int
+\family default
+ max_depth,
+\family typewriter
+int
+\family default
+ requirements,
+\family typewriter
+PyObject*
+\family default
+ context)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Nearly identical to
+\family typewriter
+PyArray_FromAny
+\family default
+(...) except
+\emph on
+requirements
+\emph default
+ can contain
+\family typewriter
+NPY_NOTSWAPPED
+\family default
+ (over-riding the specification in
+\emph on
+dtype
+\emph default
+) and
+\family typewriter
+NPY_ELEMENTSTRIDES
+\family default
+ which indicates that the array should be aligned in the sense that the
+ strides are multiples of the element size.
+
+\end_layout
+
+\begin_layout Description
+NPY_NOTSWAPPED Make sure the returned array has a data-type descriptor that
+ is in machine byte-order, over-riding any specification in the
+\emph on
+dtype
+\emph default
+ argument.
+ Normally, the byte-order requirement is determined by the
+\emph on
+dtype
+\emph default
+ argument.
+ If this flag is set and the dtype argument does not indicate a machine
+ byte-order descriptor (or is NULL and the object is already an array with
+ a data-type descriptor that is not in machine byte-order), then a new data-type
+ descriptor is created and used with its byte-order field set to native.
+\end_layout
+
+\begin_layout Description
+NPY_BEHAVED_NS
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_NOTSWAPPED
+\end_layout
+
+\begin_layout Description
+NPY_ELEMENTSTRIDES Make sure the returned array has strides that are multiples
+ of the element size.
+
+\end_layout
+
+\begin_layout Description
+PyArray_FromArray (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ newtype,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Special case of
+\family typewriter
+PyArray_FromAny
+\family default
+ for when
+\emph on
+op
+\emph default
+ is already an array but it needs to be of a specific
+\emph on
+newtype
+\emph default
+ (including byte-order) or has certain
+\emph on
+requirements
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_FromStructInterface (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an ndarray object from a Python object that exposes the
+\series bold
+__array_struct__
+\series default
+ method and follows the array interface protocol.
+ If the object does not contain this method then a borrowed reference to
+
+\family typewriter
+Py_NotImplemented
+\family default
+ is returned.
+\end_layout
+
+\begin_layout Description
+PyArray_FromInterface (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an ndarray object from a Python object that exposes the
+\series bold
+__array_shape__
+\series default
+ and
+\series bold
+__array_typestr__
+\series default
+ methods following the array interface protocol.
+ If the object does not contain one of these method then a borrowed reference
+ to
+\family typewriter
+Py_NotImplemented
+\family default
+ is returned.
+\end_layout
+
+\begin_layout Description
+PyArray_FromArrayAttr (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+PyObject*
+\family default
+ context)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an ndarray object from a Python object that exposes the
+\series bold
+__array__
+\series default
+ method.
+ The
+\series bold
+__array__
+\series default
+ method can take 0, 1, or 2 arguments ([dtype, context]) where
+\emph on
+context
+\emph default
+ is used to pass information about where the
+\series bold
+__array__
+\series default
+ method is being called from (currently only used in ufuncs).
+
+\end_layout
+
+\begin_layout Description
+PyArray_ContiguousFromAny (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ min_depth,
+\family typewriter
+int
+\family default
+ max_depth)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function returns a (C-style) contiguous and behaved function array
+ from any nested sequence or array interface exporting object,
+\emph on
+op
+\emph default
+, of (non-flexible) type given by the enumerated
+\emph on
+typenum
+\emph default
+, of minimum depth
+\emph on
+min_depth
+\emph default
+, and of maximum depth
+\emph on
+max_depth
+\emph default
+.
+ Equivalent to a call to
+\family typewriter
+PyArray_FromAny
+\family default
+ with requirements set to
+\family typewriter
+NPY_DEFAULT
+\family default
+ and the type_num member of the type argument set to
+\emph on
+typenum
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_FromObject (PyObject *) (PyObject * op, int typenum, int min_depth,
+ int max_depth)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an aligned and in native-byteorder array from any nested sequence
+ or array-interface exporting object, op, of a type given by the enumerated
+ typenum.
+ The minimum number of dimensions the array can have is given by min_depth
+ while the maximum is max_depth.
+ This is equivalent to a call to PyArray_FromAny with requirements set to
+ BEHAVED.
+
+\end_layout
+
+\begin_layout Description
+PyArray_EnsureArray (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function
+\series bold
+steals a reference
+\series default
+ to
+\family typewriter
+op
+\family default
+ and makes sure that
+\family typewriter
+op
+\family default
+ is a base-class ndarray.
+ It special cases array scalars, but otherwise calls
+\series bold
+PyArray_FromAny
+\series default
+(
+\family typewriter
+op
+\family default
+, NULL, 0, 0, NPY_ENSUREARRAY).
+\end_layout
+
+\begin_layout Description
+PyArray_FromString (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+char*
+\family default
+ string,
+\family typewriter
+npy_intp
+\family default
+ slen,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+npy_intp
+\family default
+ num,
+\family typewriter
+char*
+\family default
+ sep)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a one-dimensional ndarray of a single type from a binary or (ASCII)
+ text
+\family typewriter
+string
+\family default
+ of length
+\family typewriter
+slen
+\family default
+.
+ The data-type of the array to-be-created is given by
+\family typewriter
+dtype
+\family default
+.
+ If num is -1, then
+\series bold
+copy
+\series default
+ the entire string and return an appropriately sized array, otherwise,
+\family typewriter
+num
+\family default
+ is the number of items to
+\series bold
+copy
+\series default
+ from the string.
+ If
+\family typewriter
+sep
+\family default
+ is NULL (or
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+), then interpret the string as bytes of binary data, otherwise convert
+ the sub-strings separated by
+\family typewriter
+sep
+\family default
+ to items of data-type
+\family typewriter
+dtype
+\family default
+.
+ Some data-types may not be readable in text mode and an error will be raised
+ if that occurs.
+ All errors return NULL.
+
+\end_layout
+
+\begin_layout Description
+PyArray_FromFile (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+FILE*
+\family default
+ fp,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+npy_intp
+\family default
+ num,
+\family typewriter
+char*
+\family default
+ sep)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a one-dimensional ndarray of a single type from a binary or text
+ file.
+ The open file pointer is
+\family typewriter
+fp
+\family default
+, the data-type of the array to be created is given by
+\family typewriter
+dtype
+\family default
+.
+ This must match the data in the file.
+ If
+\family typewriter
+num
+\family default
+ is -1, then read until the end of the file and return an appropriately
+ sized array, otherwise,
+\family typewriter
+num
+\family default
+ is the number of items to read.
+ If
+\family typewriter
+sep
+\family default
+ is NULL (or
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+), then read from the file in binary mode, otherwise read from the file
+ in text mode with
+\family typewriter
+sep
+\family default
+ providing the item separator.
+ Some array types cannot be read in text mode in which case an error is
+ raised.
+\end_layout
+
+\begin_layout Description
+PyArray_FromBuffer (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ buf,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+npy_intp
+\family default
+ count,
+\family typewriter
+npy_intp
+\family default
+ offset)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a one-dimensional ndarray of a single type from an object,
+\family typewriter
+buf
+\family default
+, that exports the (single-segment) buffer protocol (or has an attribute
+ __buffer__ that returns an object that exports the buffer protocol).
+ A writeable buffer will be tried first followed by a read-only buffer.
+ The NPY_WRITEABLE flag of the returned array will reflect which one was
+ successful.
+ The data is assumed to start at
+\family typewriter
+offset
+\family default
+ bytes from the start of the memory location for the object.
+ The type of the data in the buffer will be interpreted depending on the
+ data-type descriptor,
+\family typewriter
+dtype.
+
+\family default
+ If
+\family typewriter
+count
+\family default
+ is negative then it will be determined from the size of the buffer and
+ the requested itemsize, otherwise,
+\family typewriter
+count
+\family default
+ represents how many elements should be converted from the buffer.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CopyInto (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ dest,
+\family typewriter
+PyArrayObject*
+\family default
+ src)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Copy from the source array,
+\family typewriter
+src
+\family default
+, into the destination array,
+\family typewriter
+dest
+\family default
+, performing a data-type conversion if necessary.
+ If an error occurs return -1 (otherwise 0).
+ The shape of
+\family typewriter
+src
+\family default
+ must be broadcastable to the shape of
+\family typewriter
+dest
+\family default
+.
+ The data areas of dest and src must not overlap.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MoveInto (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ dest,
+\family typewriter
+PyArrayObject*
+\family default
+ src)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Move data from the source array,
+\family typewriter
+src
+\family default
+, into the destination array,
+\family typewriter
+dest
+\family default
+, performing a data-type conversion if necessary.
+ If an error occurs return -1 (otherwise 0).
+ The shape of
+\family typewriter
+src
+\family default
+ must be broadcastable to the shape of
+\family typewriter
+dest
+\family default
+.
+ The data areas of dest and src may overlap.
+
+\end_layout
+
+\begin_layout Description
+PyArray_GETCONTIGUOUS (
+\family typewriter
+PyArrayObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If
+\family typewriter
+op
+\family default
+ is already (C-style) contiguous and well-behaved then just return a reference,
+ otherwise return a (contiguous and well-behaved) copy of the array.
+ The parameter op must be a (sub-class of an) ndarray and no checking for
+ that is done.
+\end_layout
+
+\begin_layout Description
+PyArray_FROM_O (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert
+\family typewriter
+obj
+\family default
+ to an ndarray.
+ The argument can be any nested sequence or object that exports the array
+ interface.
+ This is a macro form of
+\family typewriter
+PyArray_FromAny
+\family default
+ using
+\family typewriter
+NULL
+\family default
+, 0, 0, 0 for the other arguments.
+ Your code must be able to handle any data-type descriptor and any combination
+ of data-flags to use this macro.
+
+\end_layout
+
+\begin_layout Description
+PyArray_FROM_OF (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Similar to
+\family typewriter
+PyArray_FROM_O
+\family default
+ except it can take an argument of
+\emph on
+requirements
+\emph default
+ indicating properties the resulting array must have.
+ Available requirements that can be enforced are
+\family typewriter
+NPY_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_ALIGNED
+\family default
+,
+\family typewriter
+NPY_WRITEABLE
+\family default
+,
+\family typewriter
+NPY_NOTSWAPPED
+\family default
+,
+\family typewriter
+NPY_ENSURECOPY
+\family default
+,
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+,
+\family typewriter
+NPY_FORCECAST
+\family default
+, and
+\family typewriter
+NPY_ENSUREARRAY
+\family default
+.
+ Standard combinations of flags can also be used:
+\end_layout
+
+\begin_layout Description
+PyArray_FROM_OT (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Similar to
+\family typewriter
+PyArray_FROM_O
+\family default
+ except it can take an argument of
+\emph on
+typenum
+\emph default
+ specifying the type-number the returned array.
+\end_layout
+
+\begin_layout Description
+PyArray_FROM_OTF (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Combination of
+\family typewriter
+PyArray_FROM_OF
+\family default
+ and
+\family typewriter
+PyArray_FROM_OT
+\family default
+ allowing both a
+\emph on
+typenum
+\emph default
+ and a
+\emph on
+flags
+\emph default
+ argument to be provided..
+\end_layout
+
+\begin_layout Description
+PyArray_FROMANY (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ min,
+\family typewriter
+int
+\family default
+ max,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Similar to
+\family typewriter
+PyArray_FromAny
+\family default
+ except the data-type is specified using a typenumber.
+
+\family typewriter
+PyArray_DescrFromType
+\family default
+(
+\emph on
+typenum
+\emph default
+) is passed directly to
+\family typewriter
+PyArray_FromAny
+\family default
+.
+ This macro also adds
+\family typewriter
+NPY_DEFAULT
+\family default
+ to requirements if
+\family typewriter
+NPY_ENSURECOPY
+\family default
+ is passed in as requirements.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CheckAxis (
+\family typewriter
+PyObject*
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int*
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Encapsulate the functionality of functions and methods that take the axis=
+ keyword and work properly with None as the axis argument.
+ The input array is
+\family typewriter
+obj
+\family default
+, while
+\family typewriter
+*axis
+\family default
+ is a converted integer (so that >=MAXDIMS is the None value), and
+\family typewriter
+requirements
+\family default
+ gives the needed properties of
+\family typewriter
+obj
+\family default
+.
+ The output is a converted version of the input so that requirements are
+ met and if needed a flattening has occurred.
+ On output negative values of
+\family typewriter
+*axis
+\family default
+ are converted and the new value is checked to ensure consistency with the
+ shape of
+\family typewriter
+obj
+\family default
+.
+\end_layout
+
+\begin_layout Subsection
+Dealing with types
+\end_layout
+
+\begin_layout Subsubsection
+General check of Python Type
+\end_layout
+
+\begin_layout Description
+PyArray_Check (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is a Python object whose type is a sub-type of
+\family typewriter
+PyArray_Type
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CheckExact (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is a Python object with type
+\family typewriter
+PyArray_Type
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_HasArrayInterface (op, out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If
+\family typewriter
+op
+\family default
+ implements any part of the array interface, then
+\family typewriter
+out
+\family default
+ will contain a new reference to the newly created ndarray using the interface
+ or
+\family typewriter
+out
+\family default
+ will contain
+\family typewriter
+NULL
+\family default
+ if an error during conversion occurs.
+ Otherwise, out will contain a borrowed reference to
+\family typewriter
+Py_NotImplemented
+\family default
+ and no error condition is set.
+
+\end_layout
+
+\begin_layout Description
+PyArray_HasArrayInterfaceType (op, type, context, out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If
+\family typewriter
+op
+\family default
+ implements any part of the array interface, then
+\family typewriter
+out
+\family default
+ will contain a new reference to the newly created ndarray using the interface
+ or
+\family typewriter
+out
+\family default
+ will contain
+\family typewriter
+NULL
+\family default
+ if an error during conversion occurs.
+ Otherwise, out will contain a borrowed reference to Py_NotImplemented and
+ no error condition is set.
+ This version allows setting of the type and context in the part of the
+ array interface that looks for the
+\series bold
+__array__
+\series default
+ attribute.
+
+\end_layout
+
+\begin_layout Description
+PyArray_IsZeroDim (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is an instance of (a subclass of)
+\family typewriter
+PyArray_Type
+\family default
+ and has 0 dimensions.
+\end_layout
+
+\begin_layout Description
+PyArray_IsScalar (op, cls)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is an instance of
+\family typewriter
+Py<cls>ArrType_Type
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_CheckScalar (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is either an array scalar (an instance of a sub-type of
+\family typewriter
+PyGenericArr_Type
+\family default
+), or an instance of (a sub-class of)
+\family typewriter
+PyArray_Type
+\family default
+ whose dimensionality is 0.
+\end_layout
+
+\begin_layout Description
+PyArray_IsPythonScalar (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is a builtin Python
+\begin_inset Quotes eld
+\end_inset
+
+scalar
+\begin_inset Quotes erd
+\end_inset
+
+ object (int, float, complex, str, unicode, long, bool).
+\end_layout
+
+\begin_layout Description
+PyArray_IsAnyScalar (op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is either a Python scalar or an array scalar (an instance of a sub-type
+ of
+\family typewriter
+PyGenericArr_Type
+\family default
+).
+
+\end_layout
+
+\begin_layout Subsubsection
+Data-type checking
+\end_layout
+
+\begin_layout Standard
+For the typenum macros, the argument is an integer representing an enumerated
+ array data type.
+ For the array type checking macros the argument must be a
+\family typewriter
+PyObject*
+\family default
+ that can be directly interpreted as a
+\family typewriter
+PyArrayObject*
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISUNSIGNED (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISUNSIGNED (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISUNSIGNED (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents an unsigned integer.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISSIGNED (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISSIGNED (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISSIGNED (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents a signed integer.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISINTEGER (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISINTEGER (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISINTEGER (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents any integer.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISFLOAT (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISFLOAT (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISFLOAT (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents any floating point number.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISCOMPLEX (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISCOMPLEX (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISCOMPLEX (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents any complex floating point number.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISNUMBER (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISNUMBER (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISNUMBER (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents any integer, floating point, or complex floating point
+ number.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISSTRING (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISSTRING (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISSTRING (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents a string data type.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISPYTHON (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISPYTHON (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISPYTHON (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents an enumerated type corresponding to one of the standard
+ Python scalar (bool, int, float, or complex).
+
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISFLEXIBLE (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISFLEXIBLE (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISFLEXIBLE (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents one of the flexible array types (
+\family typewriter
+NPY_STRING
+\family default
+,
+\family typewriter
+NPY_UNICODE
+\family default
+, or
+\family typewriter
+NPY_VOID
+\family default
+).
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISUSERDEF (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISUSERDEF (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISUSERDEF (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents a user-defined type.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISEXTENDED (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISEXTENDED (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISEXTENDED (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type is either flexible or user-defined.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISOBJECT (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISOBJECT (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISOBJECT (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents object data type.
+\end_layout
+
+\begin_layout Description
+PyTypeNum_ISBOOL (num)
+\end_layout
+
+\begin_layout Description
+PyDataType_ISBOOL (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_ISBOOL (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type represents Boolean data type.
+\end_layout
+
+\begin_layout Description
+PyDataType_HASFIELDS (descr)
+\end_layout
+
+\begin_layout Description
+PyArray_HASFIELDS (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type has fields associated with it.
+\end_layout
+
+\begin_layout Description
+PyArray_ISNOTSWAPPED (m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of the ndarray
+\emph on
+m
+\emph default
+ is in machine byte-order according to the array's data-type descriptor.
+\end_layout
+
+\begin_layout Description
+PyArray_ISBYTESWAPPED (m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of the ndarray
+\emph on
+m
+\emph default
+ is
+\series bold
+not
+\series default
+ in machine byte-order according to the array's data-type descriptor.
+
+\end_layout
+
+\begin_layout Description
+PyArray_EquivTypes (
+\family typewriter
+Bool
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ type1,
+\family typewriter
+PyArray_Descr*
+\family default
+ type2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return
+\family typewriter
+NPY_TRUE
+\family default
+ if
+\emph on
+type1
+\emph default
+ and
+\emph on
+type2
+\emph default
+ actually represent equivalent types for this platform (the fortran member
+ of each type is ignored).
+ For example, on 32-bit platforms,
+\family typewriter
+NPY_LONG
+\family default
+ and
+\family typewriter
+NPY_INT
+\family default
+ are equivalent.
+ Otherwise return
+\family typewriter
+NPY_FALSE
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_EquivArrTypes (
+\family typewriter
+Bool
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ a1,
+\family typewriter
+PyArrayObject
+\family default
+* a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return
+\family typewriter
+NPY_TRUE
+\family default
+ if
+\emph on
+a1
+\emph default
+ and
+\emph on
+a2
+\emph default
+ are arrays with equivalent types for this platform.
+
+\end_layout
+
+\begin_layout Description
+PyArray_EquivTypenums (
+\family typewriter
+Bool
+\family default
+) (
+\family typewriter
+int
+\family default
+ typenum1,
+\family typewriter
+int
+\family default
+ typenum2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Special case of
+\family typewriter
+PyArray_EquivTypes
+\family default
+(...) that does not accept flexible data types but may be easier to call.
+
+\end_layout
+
+\begin_layout Description
+PyArray_EquivByteorders (int) (<byteorder> b1, <byteorder> b2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if byteorder characters (
+\family typewriter
+NPY_LITTLE
+\family default
+,
+\family typewriter
+NPY_BIG
+\family default
+,
+\family typewriter
+NPY_NATIVE
+\family default
+,
+\family typewriter
+NPY_IGNORE
+\family default
+) are either equal or equivalent as to their specification of a native byte
+ order.
+ Thus, on a little-endian machine
+\family typewriter
+NPY_LITTLE
+\family default
+ and
+\family typewriter
+NPY_NATIVE
+\family default
+ are equivalent where they are not equivalent on a big-endian machine.
+
+\end_layout
+
+\begin_layout Subsubsection
+Converting data types
+\end_layout
+
+\begin_layout Description
+PyArray_Cast (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr,
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Mainly for backwards compatibility to the Numeric C-API and for simple
+ casts to non-flexible types.
+ Return a new array object with the elements of
+\emph on
+arr
+\emph default
+ cast to the data-type
+\emph on
+typenum
+\emph default
+ which must be one of the enumerated types and not a flexible type.
+\end_layout
+
+\begin_layout Description
+PyArray_CastToType (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr,
+\family typewriter
+PyArray_Descr*
+\family default
+ type,
+\family typewriter
+int
+\family default
+ fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array of the
+\emph on
+type
+\emph default
+ specified, casting the elements of
+\emph on
+arr
+\emph default
+ as appropriate.
+ The fortran argument specifies the ordering of the output array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CastTo (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ out,
+\family typewriter
+PyArrayObject*
+\family default
+ in)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Cast the elements of the array
+\emph on
+in
+\emph default
+ into the array
+\emph on
+out
+\emph default
+.
+ The output array should be writeable, have an integer-multiple of the number
+ of elements in the input array (more than one copy can be placed in out),
+ and have a data type that is one of the builtin types.
+ Returns 0 on success and -1 if an error occurs.
+\end_layout
+
+\begin_layout Description
+PyArray_GetCastFunc (
+\family typewriter
+PyArray_VectorUnaryFunc*
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ from,
+\family typewriter
+int
+\family default
+ totype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the low-level casting function to cast from the given descriptor
+ to the builtin type number.
+ If no casting function exists return
+\family typewriter
+NULL
+\family default
+ and set an error.
+ Using this function instead of direct access to
+\emph on
+from
+\emph default
+->f->cast will allow support of any user-defined casting functions added
+ to a descriptors casting dictionary.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CanCastSafely (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+int
+\family default
+ fromtype,
+\family typewriter
+int
+\family default
+ totype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns non-zero if an array of data type
+\emph on
+fromtype
+\emph default
+ can be cast to an array of data type
+\emph on
+totype
+\emph default
+ without losing information.
+ An exception is that 64-bit integers are allowed to be cast to 64-bit floating
+ point values even though this can lose precision on large integers so as
+ not to proliferate the use of long doubles without explict requests.
+ Flexible array types are not checked according to their lengths with this
+ function.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CanCastTo (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ fromtype,
+\family typewriter
+PyArray_Descr*
+\family default
+ totype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns non-zero if an array of data type
+\emph on
+fromtype
+\emph default
+ (which can include flexible types) can be cast safely to an array of data
+ type
+\emph on
+totype
+\emph default
+ (which can include flexible types).
+ This is basically a wrapper around
+\family typewriter
+PyArray_CanCastSafely
+\family default
+ with additional support for size checking if
+\emph on
+fromtype
+\emph default
+ and
+\emph on
+totype
+\emph default
+ are
+\family typewriter
+NPY_STRING
+\family default
+ or
+\family typewriter
+NPY_UNICODE
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_ObjectType (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+int
+\family default
+ mintype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function is useful for determining a common type that two or more
+ arrays can be converted to.
+ It only works for non-flexible array types as no itemsize information is
+ passed.
+ The
+\emph on
+mintype
+\emph default
+ argument represents the minimum type acceptable, and
+\emph on
+op
+\emph default
+ represents the object that will be converted to an array.
+ The return value is the enumerated typenumber that represents the data-type
+ that
+\emph on
+op
+\emph default
+ should have.
+\end_layout
+
+\begin_layout Description
+PyArray_ArrayType (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ mintype,
+\family typewriter
+PyArray_Descr*
+\family default
+ outtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function works similarly to
+\family typewriter
+PyArray_ObjectType
+\family default
+(...) except it handles flexible arrays.
+ The
+\emph on
+mintype
+\emph default
+ argument can have an itemsize member and the
+\emph on
+outtype
+\emph default
+ argument will have an itemsize member at least as big but perhaps bigger
+ depending on the object
+\emph on
+op
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ConvertToCommonType (
+\family typewriter
+PyArrayObject**
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+int*
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert a sequence of Python objects contained in
+\emph on
+op
+\emph default
+ to an array of ndarrays each having the same data type.
+ The type is selected based on the typenumber (larger type number is chosen
+ over a smaller one) ignoring objects that are only scalars.
+ The length of the sequence is returned in
+\emph on
+n
+\emph default
+, and an
+\emph on
+n
+\emph default
+-length array of
+\family typewriter
+PyArrayObject
+\family default
+ pointers is the return value (or
+\family typewriter
+NULL
+\family default
+ if an error occurs).
+ The returned array must be freed by the caller of this routine (using
+\family typewriter
+PyDataMem_FREE
+\family default
+) and all the array objects in it
+\family typewriter
+DECREF
+\family default
+'d or a memory-leak will occur.
+ The example template-code below shows a typically usage.
+\end_layout
+
+\begin_layout LyX-Code
+mps = PyArray_ConvertToCommonType(obj, &n);
+\end_layout
+
+\begin_layout LyX-Code
+if (mps==NULL) return NULL;
+\end_layout
+
+\begin_layout LyX-Code
+<code>
+\end_layout
+
+\begin_layout LyX-Code
+<before return>
+\end_layout
+
+\begin_layout LyX-Code
+for (i=0; i<n; i++) Py_DECREF(mps[i]);
+\end_layout
+
+\begin_layout LyX-Code
+PyDataMem_FREE(mps);
+\end_layout
+
+\begin_layout LyX-Code
+<return>
+\end_layout
+
+\begin_layout Description
+PyArray_Zero (
+\family typewriter
+char*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to newly created memory of size
+\emph on
+arr
+\emph default
+->itemsize that holds the representation of 0 for that type.
+ The returned pointer,
+\emph on
+ret
+\emph default
+,
+\series bold
+must be freed
+\series default
+ using
+\family typewriter
+\emph on
+PyDataMem_FREE
+\family default
+\emph default
+(ret) when it is not needed anymore.
+\end_layout
+
+\begin_layout Description
+PyArray_One (
+\family typewriter
+char*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to newly created memory of size
+\emph on
+arr
+\emph default
+->itemsize that holds the representation of 1 for that type.
+ The returned pointer,
+\emph on
+ret
+\emph default
+,
+\series bold
+must be freed
+\series default
+ using
+\family typewriter
+PyDataMem_FREE
+\family default
+(ret) when it is not needed anymore.
+\end_layout
+
+\begin_layout Description
+PyArray_ValidType (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns
+\family typewriter
+NPY_TRUE
+\family default
+ if
+\family typewriter
+\emph on
+typenum
+\family default
+\emph default
+ represents a valid type-number (builtin or user-defined or character code).
+ Otherwise, this function returns
+\family typewriter
+NPY_FALSE
+\family default
+.
+\end_layout
+
+\begin_layout Subsubsection
+New data types
+\end_layout
+
+\begin_layout Description
+PyArray_InitArrFuncs (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyArray_ArrFuncs*
+\family default
+ f)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Initialize all function pointers and members to
+\family typewriter
+NULL
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_RegisterDataType (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Register a data-type as a new user-defined data type for arrays.
+ The type must have most of its entries filled in.
+ This is not always checked and errors can produce segfaults.
+ In particular, the typeobj member of the
+\family typewriter
+dtype
+\family default
+ structure must be filled with a Python type that has a fixed-size element-size
+ that corresponds to the elsize member of
+\emph on
+dtype
+\emph default
+.
+ Also the
+\family typewriter
+f
+\family default
+ member must have the required functions: nonzero, copyswap, copyswapn,
+ getitem, setitem, and cast (some of the cast functions may be
+\family typewriter
+NULL
+\family default
+ if no support is desired).
+ To avoid confusion, you should choose a unique character typecode but this
+ is not enforced and not relied on internally.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A user-defined type number is returned that uniquely identifies the type.
+ A pointer to the new structure can then be obtained from
+\family typewriter
+PyArray_DescrFromType
+\family default
+ using the returned type number.
+ A -1 is returned if an error occurs.
+ If this
+\family typewriter
+\emph on
+dtype
+\family default
+\emph default
+ has already been registered (checked only by the address of the pointer),
+ then return the previously-assigned type-number.
+
+\end_layout
+
+\begin_layout Description
+PyArray_RegisterCastFunc (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ descr,
+\family typewriter
+int
+\family default
+ totype,
+\family typewriter
+PyArray_VectorUnaryFunc*
+\family default
+ castfunc)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Register a low-level casting function,
+\emph on
+castfunc
+\emph default
+, to convert from the data-type,
+\emph on
+descr
+\emph default
+, to the given data-type number,
+\emph on
+totype
+\emph default
+.
+ Any old casting function is over-written.
+ A
+\family typewriter
+0
+\family default
+ is returned on success or a
+\family typewriter
+-1
+\family default
+ on failure.
+
+\end_layout
+
+\begin_layout Description
+PyArray_RegisterCanCast (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ descr,
+\family typewriter
+int
+\family default
+ totype,
+\family typewriter
+PyArray_SCALARKIND
+\family default
+ scalar)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Register the data-type number,
+\emph on
+totype
+\emph default
+, as castable from data-type object,
+\emph on
+descr
+\emph default
+, of the given
+\emph on
+scalar
+\emph default
+ kind.
+ Use
+\emph on
+scalar
+\emph default
+ =
+\family typewriter
+NPY_NOSCALAR
+\family default
+ to register that an array of data-type
+\emph on
+descr
+\emph default
+ can be cast safely to a data-type whose type_number is
+\emph on
+totype
+\emph default
+.
+
+\end_layout
+
+\begin_layout Subsubsection
+Special functions for PyArray_OBJECT
+\end_layout
+
+\begin_layout Description
+PyArray_INCREF (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Used for an array,
+\emph on
+op
+\emph default
+, that contains any Python objects.
+ It increments the reference count of every object in the array according
+ to the data-type of
+\emph on
+op
+\emph default
+.
+ A -1 is returned if an error occurs, otherwise 0 is returned.
+\end_layout
+
+\begin_layout Description
+PyArray_Item_INCREF (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char*
+\family default
+ ptr,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A function to INCREF all the objects at the location
+\emph on
+ptr
+\emph default
+ according to the data-type
+\emph on
+dtype
+\emph default
+.
+ If
+\emph on
+ptr
+\emph default
+ is the start of a record with an object at any offset, then this will (recursiv
+ely) increment the reference count of all object-like items in the record.
+\end_layout
+
+\begin_layout Description
+PyArray_XDECREF (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Used for an array,
+\emph on
+op
+\emph default
+, that contains any Python objects.
+ It decrements the reference count of every object in the array according
+ to the data-type of
+\emph on
+op
+\emph default
+.
+ Normal return value is 0.
+ A -1 is returned if an error occurs.
+\end_layout
+
+\begin_layout Description
+PyArray_Item_XDECREF (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char*
+\family default
+ ptr,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A function to XDECREF all the object-like items at the loacation
+\emph on
+ptr
+\emph default
+ as recorded in the data-type,
+\emph on
+dtype
+\emph default
+.
+ This works recursively so that if
+\family typewriter
+dtype
+\family default
+ itself has fields with data-types that contain object-like items, all the
+ object-like fields will be XDECREF
+\family typewriter
+'d
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_FillObjectArray (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Fill a newly created array with a single value obj at all locations in
+ the structure with object data-types.
+ No checking is performed but
+\emph on
+arr
+\emph default
+ must be of data-type
+\family typewriter
+PyArray_OBJECT
+\family default
+ and be single-segment and uninitialized (no previous objects in position).
+ Use
+\family typewriter
+PyArray_DECREF
+\family default
+(
+\emph on
+arr
+\emph default
+) if you need to decrement all the items in the object array prior to calling
+ this function.
+
+\end_layout
+
+\begin_layout Subsection
+Array flags
+\end_layout
+
+\begin_layout Subsubsection
+Basic Array Flags
+\end_layout
+
+\begin_layout Standard
+An ndarray can have a data segment that is not a simple contiguous chunk
+ of well-behaved memory you can manipulate.
+ It may not be aligned with word boundaries (very important on some platforms).
+ It might have its data in a different byte-order than the machine recognizes.
+ It might not be writeable.
+ It might be in Fortan-contiguous order.
+ The array flags are used to indicate what can be said about data associated
+ with an array.
+\end_layout
+
+\begin_layout Description
+NPY_C_CONTIGUOUS The data area is in C-style contiguous order (last index
+ varies the fastest).
+\end_layout
+
+\begin_layout Description
+NPY_F_CONTIGUOUS The data area is in Fortran-style contiguous order (first
+ index varies the fastest).
+\end_layout
+
+\begin_layout Description
+NPY_OWNDATA The data area is owned by this array.
+\end_layout
+
+\begin_layout Description
+NPY_ALIGNED The data area is aligned appropriately (for all strides).
+\end_layout
+
+\begin_layout Description
+NPY_WRITEABLE The data area can be written to.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Notice that the above 3 flags are are defined so that a new, well-behaved
+ array has these flags defined as true.
+
+\end_layout
+
+\begin_layout Description
+NPY_UPDATEIFCOPY The data area represents a (well-behaved) copy whose informatio
+n should be transferred back to the original when this array is deleted.
+\end_layout
+
+\begin_layout Subsubsection
+Combinations of array flags
+\end_layout
+
+\begin_layout Description
+NPY_BEHAVED
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\end_layout
+
+\begin_layout Description
+NPY_CARRAY
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_BEHAVED
+\end_layout
+
+\begin_layout Description
+NPY_CARRAY_RO
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_FARRAY
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_BEHAVED
+\end_layout
+
+\begin_layout Description
+NPY_FARRAY_RO
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Description
+NPY_DEFAULT
+\family typewriter
+NPY_CARRAY
+\end_layout
+
+\begin_layout Description
+NPY_UPDATE_ALL
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ |
+\family typewriter
+NPY_ALIGNED
+\end_layout
+
+\begin_layout Subsubsection
+Flag-like constants
+\end_layout
+
+\begin_layout Standard
+These constants are used in PyArray_FromAny (and its macro forms) to specify
+ desired properties of the new array.
+\end_layout
+
+\begin_layout Description
+NPY_FORCECAST Cast to the desired type, even if it can't be done without
+ losing information.
+\end_layout
+
+\begin_layout Description
+NPY_ENSURECOPY Make sure the resulting array is a copy of the original.
+\end_layout
+
+\begin_layout Description
+NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray (or
+ bigndarray), and not a sub-class.
+\end_layout
+
+\begin_layout Description
+NPY_NOTSWAPPED Only used in
+\family typewriter
+PyArray_CheckFromAny
+\family default
+ to over-ride the byteorder of the data-type object passed in.
+
+\end_layout
+
+\begin_layout Description
+NPY_BEHAVED_NS
+\family typewriter
+NPY_ALIGNED
+\family default
+ |
+\family typewriter
+NPY_WRITEABLE
+\family default
+ |
+\family typewriter
+NPY_NOTSWAPPED
+\end_layout
+
+\begin_layout Subsubsection
+Flag checking
+\end_layout
+
+\begin_layout Standard
+For all of these macros
+\emph on
+arr
+\emph default
+ must be an instance of a (subclass of)
+\family typewriter
+PyArray_Type
+\family default
+, but no checking is done.
+\end_layout
+
+\begin_layout Description
+PyArray_CHKFLAGS (arr, flags)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The first parameter, arr, must be an ndarray or subclass.
+ The parameter,
+\emph on
+flags
+\emph default
+, should be an integer consisting of bitwise combinations of the possible
+ flags an array can have:
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_OWNDATA
+\family default
+,
+\family typewriter
+NPY_ALIGNED
+\family default
+,
+\family typewriter
+NPY_WRITEABLE
+\family default
+,
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_ISCONTIGUOUS (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+arr
+\emph default
+ is C-style contiguous.
+\end_layout
+
+\begin_layout Description
+PyArray_ISFORTRAN (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+arr
+\emph default
+ is Fortran-style contiguous.
+\end_layout
+
+\begin_layout Description
+PyArray_ISWRITEABLE (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ can be written to
+\end_layout
+
+\begin_layout Description
+PyArray_ISALIGNED (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is properly aligned on the machine.
+\end_layout
+
+\begin_layout Description
+PyArray_ISBEHAVED (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evalutes true if the data area of
+\emph on
+arr
+\emph default
+ is aligned and writeable and in machine byte-order according to its descriptor.
+\end_layout
+
+\begin_layout Description
+PyArray_ISBEHAVED_RO (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is aligned and in machine byte-order.
+\end_layout
+
+\begin_layout Description
+PyArray_ISCARRAY (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is C-style contiguous, and
+\family typewriter
+PyArray_ISBEHAVED
+\family default
+(
+\emph on
+arr
+\emph default
+) is true.
+\end_layout
+
+\begin_layout Description
+PyArray_ISFARRAY (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is Fortran-style contiguous and
+\family typewriter
+PyArray_ISBEHAVED
+\family default
+(
+\emph on
+arr
+\emph default
+) is true.
+\end_layout
+
+\begin_layout Description
+PyArray_ISCARRAY_RO (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is C-style contiguous, aligned, and in machine byte-order.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ISFARRAY_RO (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ is Fortran-style contiguous, aligned, and in machine byte-order
+\series bold
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ISONESEGMENT (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if the data area of
+\emph on
+arr
+\emph default
+ consists of a single (C-style or Fortran-style) contiguous segment.
+\end_layout
+
+\begin_layout Description
+PyArray_UpdateFlags (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr,
+\family typewriter
+int
+\family default
+ flagmask)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The
+\family typewriter
+NPY_C_CONTIGUOUS
+\family default
+,
+\family typewriter
+NPY_ALIGNED
+\family default
+, and
+\family typewriter
+NPY_F_CONTIGUOUS
+\family default
+ array flags can be
+\begin_inset Quotes eld
+\end_inset
+
+calculated
+\begin_inset Quotes erd
+\end_inset
+
+ from the array object itself.
+ This routine updates one or more of these flags of
+\emph on
+arr
+\emph default
+ as specified in
+\emph on
+flagmask
+\emph default
+ by performing the required calculation.
+
+\end_layout
+
+\begin_layout Warning
+It is important to keep the flags updated (using PyArray_UpdateFlags can
+ help) whenever a manipulation with an array is performed that might cause
+ them to change.
+ Later calculations in NumPy that rely on the state of these flags do not
+ repeat the calculation to update them.
+
+\end_layout
+
+\begin_layout Subsection
+Array method alternative API
+\end_layout
+
+\begin_layout Subsubsection
+Conversion
+\end_layout
+
+\begin_layout Description
+PyArray_GetField (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ offset)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+getfield
+\series default
+(
+\emph on
+dtype
+\emph default
+,
+\emph on
+offset
+\emph default
+).
+ Return a new array of the given
+\emph on
+dtype
+\emph default
+ using the data in the current array at a specified
+\emph on
+offset
+\emph default
+ in bytes.
+ The
+\emph on
+offset
+\emph default
+ plus the itemsize of the new array type must be less than
+\emph on
+self
+\emph default
+->descr->elsize or an error is raised.
+ The same shape and strides as the original array are used.
+ Therefore, this function has the effect of returning a field from a record
+ array.
+ But, it can also be used to select specific bytes or groups of bytes from
+ any array type.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SetField (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+int
+\family default
+ offset,
+\family typewriter
+PyObject*
+\family default
+ val)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+setfield
+\series default
+(
+\emph on
+val
+\emph default
+,
+\emph on
+dtype
+\emph default
+,
+\emph on
+offset
+\emph default
+).
+ Set the field starting at
+\emph on
+offset
+\emph default
+ in bytes and of the given
+\emph on
+dtype
+\emph default
+ to
+\emph on
+val
+\emph default
+.
+ The
+\emph on
+offset
+\emph default
+ plus
+\emph on
+dtype
+\emph default
+->elsize must be less than
+\emph on
+self
+\emph default
+->descr->elsize or an error is raised.
+ Otherwise, the
+\emph on
+val
+\emph default
+ argument is converted to an array and copied into the field pointed to.
+ If necessary, the elements of
+\emph on
+val
+\emph default
+ are repeated to fill the destination array, But, the number of elements
+ in the destination must be an integer multiple of the number of elements
+ in
+\emph on
+val
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Byteswap (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+Bool
+\family default
+ inplace)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+byteswap
+\series default
+(
+\emph on
+inplace
+\emph default
+).
+ Return an array whose data area is byteswapped.
+ If
+\emph on
+inplace
+\emph default
+ is non-zero, then do the byteswap inplace and return a reference to self.
+ Otherwise, create a byteswapped copy and leave self unchanged.
+\end_layout
+
+\begin_layout Description
+PyArray_NewCopy (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ old,
+\family typewriter
+NPY_ORDER
+\family default
+ order)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+copy
+\series default
+(
+\emph on
+fortran
+\emph default
+).
+ Make a copy of the
+\emph on
+old
+\emph default
+ array.
+ The returned array is always aligned and writeable with data interpreted
+ the same as the old array.
+ If
+\emph on
+order
+\emph default
+ is
+\family typewriter
+NPY_CORDER
+\family default
+, then a C-style contiguous array is returned.
+ If
+\emph on
+order
+\emph default
+ is
+\family typewriter
+NPY_FORTRANORDER
+\family default
+, then a Fortran-style contiguous array is returned.
+ If
+\emph on
+order is
+\emph default
+
+\family typewriter
+NPY_ANYORDER
+\family default
+, then the array returned is Fortran-style contiguous only if the old one
+ is; otherwise, it is C-style contiguous.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ToList (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+tolist
+\series default
+().
+ Return a nested Python list from
+\emph on
+self
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ToString (PyObject*) (PyArrayObject* self, NPY_ORDER order)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+tostring
+\series default
+(
+\emph on
+order
+\emph default
+).
+ Return the bytes of this array in a Python string.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ToFile (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+FILE*
+\family default
+ fp,
+\family typewriter
+char*
+\family default
+ sep,
+\family typewriter
+char*
+\family default
+ format)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Write the contents of
+\emph on
+self
+\emph default
+ to the file pointer
+\emph on
+fp
+\emph default
+ in C-style contiguous fashion.
+ Write the data as binary bytes if
+\family typewriter
+\emph on
+sep
+\family default
+\emph default
+ is the string
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+ or
+\family typewriter
+NULL
+\family default
+.
+ Otherwise, write the contents of
+\emph on
+self
+\emph default
+ as text using the
+\family typewriter
+\emph on
+sep
+\family default
+\emph default
+ string as the item separator.
+ Each item will be printed to the file.
+ If the
+\emph on
+format
+\emph default
+ string is not
+\family typewriter
+NULL
+\family default
+ or
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+, then it is a Python print statement format string showing how the items
+ are to be written.
+\end_layout
+
+\begin_layout Description
+PyArray_Dump (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ file,
+\family typewriter
+int
+\family default
+ protocol)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Pickle the object in
+\emph on
+self
+\emph default
+ to the given
+\emph on
+file
+\emph default
+ (either a string or a Python file object).
+ If
+\emph on
+file
+\emph default
+ is a Python string it is considered to be the name of a file which is then
+ opened in binary mode.
+ The given
+\emph on
+protocol
+\emph default
+ is used (if
+\emph on
+protocol
+\emph default
+ is negative, or the highest available is used).
+ This is a simple wrapper around cPickle.dump(
+\emph on
+self
+\emph default
+,
+\emph on
+file
+\emph default
+,
+\emph on
+protocol
+\emph default
+).
+\end_layout
+
+\begin_layout Description
+PyArray_Dumps (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ protocol)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Pickle the object in
+\emph on
+self
+\emph default
+ to a Python string and return it.
+ Use the Pickle
+\emph on
+protocol
+\emph default
+ provided (or the highest available if
+\emph on
+protocol
+\emph default
+ is negative).
+
+\end_layout
+
+\begin_layout Description
+PyArray_FillWithScalar (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Fill the array,
+\emph on
+arr
+\emph default
+, with the given scalar object,
+\emph on
+obj
+\emph default
+.
+ The object is first converted to the data type of
+\emph on
+arr
+\emph default
+, and then copied into every location.
+ A -1 is returned if an error occurs, otherwise 0 is returned.
+\end_layout
+
+\begin_layout Description
+PyArray_View (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+view
+\series default
+(
+\emph on
+dtype
+\emph default
+).
+ Return a new view of the array
+\emph on
+self
+\emph default
+ as possibly a different data-type,
+\emph on
+dtype
+\emph default
+.
+ If
+\emph on
+dtype
+\emph default
+ is
+\family typewriter
+NULL
+\family default
+, then the returned array will have the same data type as
+\emph on
+self
+\emph default
+.
+ The new data-type must be consistent with the size of
+\emph on
+self
+\emph default
+.
+ Either the itemsizes must be identical, or
+\emph on
+self
+\emph default
+ must be single-segment and the total number of bytes must be the same.
+ In the latter case the dimensions of the returned array will be altered
+ in the last (or first for Fortran-style contiguous arrays) dimension.
+ The data area of the returned array and self is exactly the same.
+\end_layout
+
+\begin_layout Subsubsection
+Shape Manipulation
+\end_layout
+
+\begin_layout Description
+PyArray_Newshape (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Dims*
+\family default
+ newshape)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Result will be a new array (pointing to the same memory location as
+\emph on
+self
+\emph default
+ if possible), but having a shape given by
+\emph on
+newshape
+\emph default
+.
+ If the new shape is not compatible with the strides of
+\emph on
+self
+\emph default
+, then a copy of the array with the new specified shape will be returned.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Reshape (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ shape)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\family typewriter
+\emph on
+self
+\family default
+\emph default
+.
+\series bold
+reshape
+\series default
+(
+\family typewriter
+\emph on
+shape
+\family default
+\emph default
+) where
+\emph on
+shape
+\emph default
+ is a sequence.
+ Converts
+\emph on
+shape
+\emph default
+ to a
+\family typewriter
+PyArray_Dims
+\family default
+ structure and calls
+\family typewriter
+PyArray_Newshape
+\family default
+ internally.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Squeeze (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+squeeze
+\series default
+().
+ Return a new view of
+\emph on
+self
+\emph default
+ with all of the dimensions of length 1 removed from the shape.
+
+\end_layout
+
+\begin_layout Warning
+matrix objects are always 2-dimensional.
+ Therefore,
+\family typewriter
+PyArray_Squeeze
+\family default
+ has no effect on arrays of matrix sub-class.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SwapAxes (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ a1,
+\family typewriter
+int
+\family default
+ a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+swapaxes
+\series default
+(
+\emph on
+a1
+\emph default
+,
+\emph on
+a2
+\emph default
+).
+ The returned array is a new view of the data in
+\emph on
+self
+\emph default
+ with the given axes,
+\emph on
+a1
+\emph default
+ and
+\emph on
+a2
+\emph default
+, swapped.
+\end_layout
+
+\begin_layout Description
+PyArray_Resize (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Dims*
+\family default
+ newshape,
+\family typewriter
+int
+\family default
+ refcheck, NPY_ORDER fortran)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+resize
+\series default
+(
+\emph on
+newshape
+\emph default
+, refcheck
+\family typewriter
+=
+\family default
+\emph on
+refcheck
+\emph default
+, order=
+\shape italic
+fortran
+\shape default
+).
+ This function only works on single-segment arrays.
+ It changes the shape of
+\emph on
+self
+\emph default
+ inplace and will reallocate the memory for
+\emph on
+self
+\emph default
+ if
+\emph on
+newshape
+\emph default
+ has a different total number of elements then the old shape.
+ If reallocation is necessary, then
+\emph on
+self
+\emph default
+ must own its data, have
+\emph on
+self
+\emph default
+-
+\family typewriter
+>base==NULL
+\family default
+, have
+\emph on
+self
+\emph default
+-
+\family typewriter
+>weakrefs==NULL
+\family default
+, and (unless refcheck is 0) not be referenced by any other array.
+ A reference to the new array is returned.
+ The
+\shape italic
+fortran
+\shape default
+ argument can be NPY_ANYORDER, NPY_CORDER, or NPY_FORTRANORDER.
+ This argument is used if the number of dimension is (or is being resized
+ to be) greater than 2.
+ It currently has no effect.
+ Eventually it could be used to determine how the resize operation should
+ view the data when constructing a differently-dimensioned array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Transpose (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyArray_Dims*
+\family default
+ permute)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+transpose
+\series default
+(
+\emph on
+permute
+\emph default
+).
+ Permute the axes of the ndarray object
+\emph on
+self
+\emph default
+ according to the data structure
+\emph on
+permute
+\emph default
+ and return the result.
+ If
+\emph on
+permute
+\emph default
+ is
+\family typewriter
+NULL
+\family default
+, then the resulting array has its axes reversed.
+ For example if
+\emph on
+self
+\emph default
+ has shape
+\begin_inset Formula $10\times20\times30$
+\end_inset
+
+, and
+\emph on
+permute
+\family typewriter
+\emph default
+.ptr
+\family default
+ is (0,2,1) the shape of the result is
+\begin_inset Formula $10\times30\times20.$
+\end_inset
+
+ If
+\emph on
+permute
+\emph default
+ is
+\family typewriter
+NULL
+\family default
+, the shape of the result is
+\begin_inset Formula $30\times20\times10.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+PyArray_Flatten (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+NPY_ORDER
+\family default
+ order)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+flatten
+\series default
+(
+\emph on
+order
+\emph default
+).
+ Return a 1-d copy of the array.
+ If
+\emph on
+order
+\emph default
+ is
+\family typewriter
+NPY_FORTRANORDER
+\family default
+ the elements are scanned out in Fortran order (first-dimension varies the
+ fastest).
+ If
+\emph on
+order
+\emph default
+ is
+\family typewriter
+NPY_CORDER
+\family default
+, the elements of
+\family typewriter
+self
+\family default
+ are scanned in C-order (last dimension varies the fastest).
+ If
+\emph on
+order
+\emph default
+
+\family typewriter
+NPY_ANYORDER
+\family default
+, then the result of
+\family typewriter
+PyArray_ISFORTRAN
+\family default
+(
+\emph on
+self
+\emph default
+) is used to determine which order to flatten.
+\end_layout
+
+\begin_layout Description
+PyArray_Ravel (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+NPY_ORDER
+\family default
+ order)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.ravel(
+\emph on
+order
+\emph default
+).
+ Same basic functionality as
+\family typewriter
+PyArray_Flatten
+\family default
+(
+\emph on
+self
+\emph default
+,
+\emph on
+order
+\emph default
+) except if
+\emph on
+order
+\emph default
+ is 0 and
+\emph on
+self
+\emph default
+ is C-style contiguous, the shape is altered but no copy is performed.
+\end_layout
+
+\begin_layout Subsubsection
+Item selection and manipulation
+\end_layout
+
+\begin_layout Description
+PyArray_TakeFrom (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ indices,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ ret,
+\family typewriter
+NPY_CLIPMODE
+\family default
+ clipmode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+take
+\series default
+(
+\emph on
+indices
+\emph default
+,
+\emph on
+axis
+\emph default
+,
+\emph on
+ret
+\emph default
+,
+\emph on
+clipmode
+\emph default
+) except
+\emph on
+axis
+\emph default
+=None in Python is obtained by setting
+\emph on
+axis
+\emph default
+=
+\family typewriter
+NPY_MAXDIMS
+\family default
+ in C.
+ Extract the items from self indicated by the integer-valued
+\emph on
+indices
+\emph default
+ along the given
+\emph on
+axis.
+
+\emph default
+ The clipmode argument can be
+\family typewriter
+NPY_RAISE
+\family default
+,
+\family typewriter
+NPY_WRAP
+\family default
+, or
+\family typewriter
+NPY_CLIP
+\family default
+ to indicate what to do with out-of-bound indices.
+ The
+\emph on
+ret
+\emph default
+ argument can specify an output array rather than having one created internally.
+
+\end_layout
+
+\begin_layout Description
+PyArray_PutTo (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ values,
+\family typewriter
+PyObject*
+\family default
+ indices,
+\family typewriter
+NPY_CLIPMODE
+\family default
+ clipmode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.put(
+\emph on
+values
+\emph default
+,
+\emph on
+indices
+\emph default
+,
+\emph on
+clipmode
+\emph default
+).
+ Put
+\emph on
+values
+\emph default
+ into
+\emph on
+self
+\emph default
+ at the corresponding (flattened)
+\emph on
+indices
+\emph default
+.
+ If
+\emph on
+values
+\emph default
+ is too small it will be repeated as necessary.
+
+\end_layout
+
+\begin_layout Description
+PyArray_PutMask (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ values,
+\family typewriter
+PyObject*
+\family default
+ mask)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Place the
+\emph on
+values
+\emph default
+ in
+\emph on
+self
+\emph default
+ wherever corresponding positions (using a flattened context) in
+\emph on
+mask
+\emph default
+ are true.
+ The
+\emph on
+mask
+\emph default
+ and
+\emph on
+self
+\emph default
+ arrays must have the same total number of elements.
+ If
+\emph on
+values
+\emph default
+ is too small, it will be repeated as necessary.
+\end_layout
+
+\begin_layout Description
+PyArray_Repeat (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+repeat
+\series default
+(
+\emph on
+op
+\emph default
+,
+\emph on
+axis
+\emph default
+).
+ Copy the elements of
+\emph on
+self
+\emph default
+,
+\emph on
+op
+\emph default
+ times along the given
+\emph on
+axis
+\emph default
+.
+ Either
+\emph on
+op
+\emph default
+ is a scalar integer or a sequence of length
+\emph on
+self
+\emph default
+->dimensions[
+\emph on
+axis
+\emph default
+] indicating how many times to repeat each item along the axis.
+\end_layout
+
+\begin_layout Description
+PyArray_Choose (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArrayObject*
+\family default
+ ret,
+\family typewriter
+NPY_CLIPMODE
+\family default
+ clipmode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+choose
+\series default
+(
+\emph on
+op
+\emph default
+,
+\emph on
+ret
+\emph default
+,
+\emph on
+clipmode
+\emph default
+).
+ Create a new array by selecting elements from the sequence of arrays in
+
+\emph on
+op
+\emph default
+ based on the integer values in
+\emph on
+self
+\emph default
+.
+ The arrays must all be broadcastable to the same shape and the entries
+ in
+\emph on
+self
+\emph default
+ should be between 0 and len(
+\emph on
+op
+\emph default
+).
+ The output is placed in
+\emph on
+ret
+\emph default
+ unless it is
+\family typewriter
+NULL
+\family default
+ in which case a new output is created.
+ The
+\emph on
+clipmode
+\emph default
+ argument determines behavior for when entries in
+\emph on
+self
+\emph default
+ are not between 0 and len(
+\emph on
+op
+\emph default
+).
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_RAISE raise a ValueError;
+\end_layout
+
+\begin_layout Description
+NPY_WRAP wrap values <0 by adding len(
+\emph on
+op
+\emph default
+) and values >=len(
+\emph on
+op
+\emph default
+) by subtracting len(
+\emph on
+op
+\emph default
+) until they are in range;
+\end_layout
+
+\begin_layout Description
+NPY_CLIP all values are clipped to the region [0, len(
+\emph on
+op
+\emph default
+) ).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+PyArray_Sort (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+sort
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return an array with the items of
+\emph on
+self
+\emph default
+ sorted along
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_ArgSort (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+argsort
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return an array of indices such that selection of these indices along the
+ given
+\family typewriter
+axis
+\family default
+ would return a sorted version of
+\emph on
+self
+\emph default
+.
+ If
+\emph on
+self
+\emph default
+->descr is a data-type with fields defined, then self->descr->names is used
+ to determine the sort order.
+ A comparison where the first field is equal will use the second field and
+ so on.
+ To alter the sort order of a record array, create a new data-type with
+ a different order of names and construct a view of the array with that
+ new data-type.
+
+\end_layout
+
+\begin_layout Description
+PyArray_LexSort (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ sort_keys,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Given a sequence of arrays (
+\emph on
+sort_keys
+\emph default
+) of the same shape, return an array of indices (similar to
+\family typewriter
+PyArray_ArgSort
+\family default
+(...)) that would sort the arrays lexicographically.
+ A lexicographic sort specifies that when two keys are found to be equal,
+ the order is based on comparison of subsequent keys.
+ A merge sort (which leaves equal entries unmoved) is required to be defined
+ for the types.
+ The sort is accomplished by sorting the indices first using the first
+\emph on
+sort_key
+\emph default
+ and then using the second
+\emph on
+sort_key
+\emph default
+ and so forth.
+ This is equivalent to the lexsort(
+\emph on
+sort_keys
+\emph default
+,
+\emph on
+axis
+\emph default
+) Python command.
+ Because of the way the merge-sort works, be sure to understand the order
+ the
+\emph on
+sort_keys
+\emph default
+ must be in (reversed from the order you would use when comparing two elements).
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If these arrays are all collected in a record array, then
+\family typewriter
+PyArray_Sort
+\family default
+(...) can also be used to sort the array directly.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SearchSorted (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ values)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+searchsorted
+\series default
+(
+\emph on
+values
+\emph default
+).
+ Assuming
+\emph on
+self
+\emph default
+ is a 1-d array in ascending order representing bin boundaries then the
+ output is an array the same shape as
+\emph on
+values
+\emph default
+ of bin numbers, giving the bin into which each item in
+\emph on
+values
+\emph default
+ would be placed.
+ No checking is done on whether or not self is in ascending order.
+\end_layout
+
+\begin_layout Description
+PyArray_Diagonal (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ offset,
+\family typewriter
+int
+\family default
+ axis1,
+\family typewriter
+int
+\family default
+ axis2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+diagonal
+\series default
+(
+\emph on
+offset
+\emph default
+,
+\emph on
+axis1
+\emph default
+,
+\emph on
+axis2
+\emph default
+).
+ Return the
+\emph on
+offset
+\emph default
+ diagonals of the 2-d arrays defined by
+\emph on
+axis1
+\emph default
+ and
+\emph on
+axis2
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Nonzero (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+nonzero
+\series default
+().
+ Returns a tuple of index arrays that select elements of
+\emph on
+self
+\emph default
+ that are nonzero.
+ If (nd=
+\family typewriter
+PyArray_NDIM
+\family default
+(
+\family typewriter
+self
+\family default
+))==1, then a single index array is returned.
+ The index arrays have data type
+\family typewriter
+NPY_INTP
+\family default
+.
+ If a tuple is returned (nd
+\begin_inset Formula $\neq$
+\end_inset
+
+1), then its length is nd.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Compress (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ condition,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+compress
+\series default
+(
+\emph on
+condition
+\emph default
+,
+\emph on
+axis
+\emph default
+).
+ Return the elements along
+\emph on
+axis
+\emph default
+ corresponding to elements of
+\emph on
+condition
+\emph default
+ that are true.
+
+\end_layout
+
+\begin_layout Subsubsection
+Calculation
+\end_layout
+
+\begin_layout Tip
+Pass in NPY_MAXDIMS for axis in order to achieve the same effect that is
+ obtained by passing in axis = None in Python (treating the array as a 1-d
+ array).
+
+\end_layout
+
+\begin_layout Description
+PyArray_ArgMax (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+argmax
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return the index of the largest element of
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_ArgMin (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+argmin
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return the index of the smallest element of
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Max (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+max
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return the largest element of
+\emph on
+self
+\emph default
+ along the given
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Min (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+min
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return the smallest element of
+\emph on
+self
+\emph default
+ along the given
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Ptp (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+ptp
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return the difference between the largest element of
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+ and the smallest element of
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+\end_layout
+
+\begin_layout Note
+The rtype argument specifies the data-type the reduction should take place
+ over.
+ This is important if the data-type of the array is not
+\begin_inset Quotes eld
+\end_inset
+
+large
+\begin_inset Quotes erd
+\end_inset
+
+ enough to handle the output.
+ By default, all integer data-types are made at least as large as NPY_LONG
+ for the
+\begin_inset Quotes eld
+\end_inset
+
+add
+\begin_inset Quotes erd
+\end_inset
+
+ and
+\begin_inset Quotes eld
+\end_inset
+
+multiply
+\begin_inset Quotes erd
+\end_inset
+
+ ufuncs (which form the basis for mean, sum, cumsum, prod, and cumprod functions
+).
+\end_layout
+
+\begin_layout Description
+PyArray_Mean (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+mean
+\series default
+(
+\emph on
+axis
+\emph default
+,
+\emph on
+rtype
+\emph default
+).
+ Returns the mean of the elements along the given
+\emph on
+axis
+\emph default
+, using the enumerated type
+\emph on
+rtype
+\emph default
+ as the data type to sum in.
+ Default sum behavior is obtained using
+\family typewriter
+PyArray_NOTYPE
+\family default
+ for
+\emph on
+rtype
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Trace (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ offset,
+\family typewriter
+int
+\family default
+ axis1,
+\family typewriter
+int
+\family default
+ axis2,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+trace
+\series default
+(
+\emph on
+offset
+\emph default
+,
+\emph on
+axis1
+\emph default
+,
+\emph on
+axis2
+\emph default
+,
+\emph on
+rtype
+\emph default
+).
+ Return the sum (using
+\emph on
+rtype
+\emph default
+ as the data type of summation) over the
+\emph on
+offset
+\emph default
+ diagonal elements of the 2-d arrays defined by
+\emph on
+axis1
+\emph default
+ and
+\emph on
+axis2
+\emph default
+ variables.
+ A positive offset chooses diagonals above the main diagonal.
+ A negative offset selects diagonals below the main diagonal.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Clip (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ min,
+\family typewriter
+PyObject*
+\family default
+ max)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+clip
+\series default
+(
+\emph on
+min
+\emph default
+,
+\emph on
+max
+\emph default
+).
+ Clip an array,
+\emph on
+self
+\emph default
+, so that values larger than
+\emph on
+max
+\emph default
+ are fixed to
+\emph on
+max
+\emph default
+ and values less than
+\emph on
+min
+\emph default
+ are fixed to
+\emph on
+min
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Conjugate (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+conjugate
+\series default
+() and
+\emph on
+self
+\emph default
+.
+\series bold
+conj
+\series default
+() Return the complex conjugate of
+\emph on
+self
+\emph default
+.
+ If
+\emph on
+self
+\emph default
+ is not of complex data type, then return
+\emph on
+self
+\emph default
+ with an reference.
+\end_layout
+
+\begin_layout Description
+PyArray_Round (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ decimals,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+round
+\series default
+(
+\emph on
+decimals
+\emph default
+,
+\emph on
+out
+\emph default
+).
+ Returns the array with elements rounded to the nearest decimal place.
+ The decimal place is defined as the
+\begin_inset Formula $10^{-\textrm{decimals}}$
+\end_inset
+
+ digit so that negative
+\emph on
+decimals
+\emph default
+ cause rounding to the nearest 10's, 100's, etc.
+ If out is
+\family typewriter
+NULL
+\family default
+, then the output array is created, otherwise the output is placed in
+\family typewriter
+\emph on
+out
+\family default
+\emph default
+ which must be the correct size and type.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Std (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+std
+\series default
+(
+\emph on
+axis
+\emph default
+,
+\emph on
+rtype
+\emph default
+).
+ Return the standard deviation using data along
+\emph on
+axis
+\emph default
+ converted to data type
+\emph on
+rtype
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Sum (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+sum
+\series default
+(
+\family typewriter
+\emph on
+axis
+\family default
+\emph default
+,
+\family typewriter
+\emph on
+rtype
+\family default
+\emph default
+).
+ Return 1-d vector sums of elements in
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+ Perform the sum after converting data to data type
+\emph on
+rtype
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_CumSum (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+cumsum
+\series default
+(
+\family typewriter
+\emph on
+axis
+\family default
+\emph default
+,
+\family typewriter
+\emph on
+rtype
+\family default
+\emph default
+).
+ Return cumulative 1-d sums of elements in
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+ Perform the sum after converting data to data type
+\emph on
+rtype
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Prod (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+prod
+\series default
+(
+\emph on
+axis
+\emph default
+,
+\emph on
+rtype
+\emph default
+).
+ Return 1-d products of elements in
+\emph on
+self
+\emph default
+ along
+\emph on
+axis
+\emph default
+.
+ Perform the product after converting data to data type
+\emph on
+rtype
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_CumProd (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+int
+\family default
+ rtype,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+cumprod
+\series default
+(
+\emph on
+axis
+\emph default
+,
+\emph on
+rtype
+\emph default
+).
+ Return 1-d cumulative products of elements in
+\family typewriter
+self
+\family default
+ along
+\family typewriter
+axis
+\family default
+.
+ Perform the product after converting data to data type
+\family typewriter
+rtype
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_All (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+all
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return an array with True elements for every 1-d sub-array of
+\family typewriter
+self
+\family default
+ defined by
+\family typewriter
+axis
+\family default
+ in which all the elements are True.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Any (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ self,
+\family typewriter
+int
+\family default
+ axis,
+\family typewriter
+PyArrayObject*
+\family default
+ out)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\emph on
+self
+\emph default
+.
+\series bold
+any
+\series default
+(
+\emph on
+axis
+\emph default
+).
+ Return an array with True elements for every 1-d sub-array of
+\emph on
+self
+\emph default
+ defined by
+\emph on
+axis
+\emph default
+ in which any of the elements are True.
+
+\end_layout
+
+\begin_layout Subsection
+Functions
+\end_layout
+
+\begin_layout Subsubsection
+Array Functions
+\end_layout
+
+\begin_layout Description
+PyArray_AsCArray (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject**
+\family default
+ op,
+\family typewriter
+void*
+\family default
+ ptr,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ itemsize)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Sometimes it is useful to access a multidimensional array as a C-style
+ multi-dimensional array so that algorithms can be implemented using C's
+ a[i][j][k] syntax.
+ This routine returns a pointer,
+\emph on
+ptr
+\emph default
+, that simulates this kind of C-style array, for 1-, 2-, and 3-d ndarrays.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+op The address to any Python object.
+ This Python object will be replaced with an equivalent well-behaved, C-style
+ contiguous, ndarray of the given data type specifice by the last two arguments.
+ Be sure that stealing a reference in this way to the input object is justified.
+
+\end_layout
+
+\begin_layout Description
+ptr The address to a (ctype* for 1-d, ctype** for 2-d or ctype*** for 3-d)
+ variable where ctype is the equivalent C-type for the data type.
+ On return,
+\emph on
+ptr
+\emph default
+ will be addressable as a 1-d, 2-d, or 3-d array.
+
+\end_layout
+
+\begin_layout Description
+dims An output array that contains the shape of the array object.
+ This array gives boundaries on any looping that will take place.
+
+\end_layout
+
+\begin_layout Description
+nd The dimensionality of the array (1, 2, or 3).
+
+\end_layout
+
+\begin_layout Description
+typenum The expected data type of the array.
+
+\end_layout
+
+\begin_layout Description
+itemsize This argument is only needed when
+\emph on
+typenum
+\emph default
+ represents a flexible array.
+ Otherwise it should be 0.
+
+\end_layout
+
+\end_deeper
+\begin_layout Note
+The simulation of a C-style array is not complete for 2-d and 3-d arrays.
+ For example, the simulated arrays of pointers cannot be passed to subroutines
+ expecting specific, statically-defined 2-d and 3-d arrays.
+ To pass to functions requiring those kind of inputs, you must statically
+ define the required array and copy data.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Free (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+void*
+\family default
+ ptr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Must be called with the same objects and memory locations returned from
+
+\family typewriter
+PyArray_AsCArray
+\family default
+(...).
+ This function cleans up memory that otherwise would get leaked.
+\end_layout
+
+\begin_layout Description
+PyArray_Concatenate (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Join the sequence of objects in
+\emph on
+obj
+\emph default
+ together along
+\emph on
+axis
+\emph default
+ into a single array.
+ If the dimensions or types are not compatible an error is raised.
+\end_layout
+
+\begin_layout Description
+PyArray_InnerProduct (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj1,
+\family typewriter
+PyObject*
+\family default
+ obj2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute a product-sum over the last dimensions of
+\emph on
+obj1
+\emph default
+ and
+\emph on
+obj2
+\emph default
+.
+ Neither array is conjugated.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MatrixProduct (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj1,
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute a product-sum over the last dimension of
+\emph on
+obj1
+\emph default
+ and the second-to-last dimension of
+\emph on
+obj2
+\emph default
+.
+ For 2-d arrays this is a matrix-product.
+ Neither array is conjugated.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CopyAndTranspose (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject
+\family default
+* op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A specialized copy and transpose function that works only for 2-d arrays.
+ The returned array is a transposed copy of
+\emph on
+op
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_Correlate (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op1,
+\family typewriter
+PyObject*
+\family default
+ op2,
+\family typewriter
+int
+\family default
+ mode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the 1-d correlation of the 1-d arrays
+\emph on
+op1
+\emph default
+ and
+\emph on
+op2
+\emph default
+.
+ The correlation is computed at each output point by multiplying
+\emph on
+op1
+\emph default
+ by a shifted version of
+\emph on
+op2
+\emph default
+ and summing the result.
+ As a result of the shift, needed values outside of the defined range of
+
+\emph on
+op1
+\emph default
+ and
+\emph on
+op2
+\emph default
+ are interpreted as zero.
+ The mode determines how many shifts to return: 0 - return only shifts that
+ did not need to assume zero-values; 1 - return an object that is the same
+ size as
+\emph on
+op1
+\emph default
+, 2 - return all possible shifts (any overlap at all is accepted).
+
+\end_layout
+
+\begin_layout Description
+PyArray_Where (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ condition,
+\family typewriter
+PyObject*
+\family default
+ x,
+\family typewriter
+PyObject*
+\family default
+ y)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If both
+\family typewriter
+x
+\family default
+ and
+\family typewriter
+y
+\family default
+ are
+\family typewriter
+NULL
+\family default
+, then return
+\family typewriter
+PyArray_Nonzero
+\family default
+(
+\family typewriter
+\emph on
+condition
+\family default
+\emph default
+).
+ Otherwise, both
+\emph on
+x
+\emph default
+ and
+\emph on
+y
+\emph default
+ must be given and the object returned is shaped like
+\emph on
+condition
+\emph default
+ and has elements of
+\emph on
+x
+\emph default
+ and
+\emph on
+y
+\emph default
+ where
+\emph on
+condition
+\emph default
+ is respectively True or False.
+
+\end_layout
+
+\begin_layout Subsubsection
+Other functions
+\end_layout
+
+\begin_layout Description
+PyArray_CheckStrides (
+\family typewriter
+Bool
+\family default
+) (
+\family typewriter
+int
+\family default
+ elsize,
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp
+\family default
+ numbytes,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+npy_intp*
+\family default
+ newstrides)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Determine if
+\emph on
+newstrides
+\emph default
+ is a strides array consistent with the memory of an
+\emph on
+nd
+\emph default
+-dimensional array with shape
+\family typewriter
+dims
+\family default
+ and element-size,
+\emph on
+elsize
+\emph default
+.
+ The
+\emph on
+newstrides
+\emph default
+ array is checked to see if jumping by the provided number of bytes in each
+ direction will ever mean jumping more than
+\emph on
+numbytes
+\emph default
+ which is the assumed size of the available memory segment.
+ If
+\emph on
+numbytes
+\emph default
+ is 0, then an equivalent
+\emph on
+numbytes
+\emph default
+ is computed assuming
+\emph on
+nd
+\emph default
+,
+\emph on
+dims
+\emph default
+, and
+\emph on
+elsize
+\emph default
+ refer to a single-segment array.
+ Return
+\family typewriter
+NPY_TRUE
+\family default
+ if
+\emph on
+newstrides
+\emph default
+ is acceptable, otherwise return
+\family typewriter
+NPY_FALSE
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_MultiplyList (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+npy_intp*
+\family default
+ seq,
+\family typewriter
+int
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+PyArray_MultiplyIntList (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+int*
+\family default
+ seq,
+\family typewriter
+int
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Both of these routines multiply an
+\emph on
+n
+\emph default
+-length array,
+\emph on
+seq
+\emph default
+, of integers and return the result.
+ No overflow checking is performed.
+\end_layout
+
+\begin_layout Description
+PyArray_CompareLists (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+npy_intp*
+\family default
+ l1,
+\family typewriter
+npy_intp*
+\family default
+ l2,
+\family typewriter
+int
+\family default
+ n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Given two
+\emph on
+n
+\emph default
+-length arrays of integers,
+\emph on
+l1
+\emph default
+, and
+\emph on
+l2
+\emph default
+, return 1 if the lists are identical; otherwise, return 0.
+
+\end_layout
+
+\begin_layout Subsection
+Array Iterators
+\end_layout
+
+\begin_layout Standard
+An array iterator is a simple way to access the elements of an N-dimensional
+ array quickly and efficiently.
+ Section
+\begin_inset LatexCommand ref
+reference "sec:array_iterator"
+
+\end_inset
+
+ provides more description and examples of this useful approach to looping
+ over an array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_IterNew (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array iterator object from the array,
+\emph on
+arr
+\emph default
+.
+ This is equivalent to
+\emph on
+arr
+\emph default
+.
+\series bold
+flat
+\series default
+.
+ The array iterator object makes it easy to loop over an N-dimensional non-conti
+guous array in C-style contiguous fashion.
+
+\end_layout
+
+\begin_layout Description
+PyArray_IterAllButAxis (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+int
+\family default
+ *axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array iterator that will iterate over all axes but the one provided
+ in
+\emph on
+*axis
+\emph default
+.
+ The returned iterator cannot be used with
+\family typewriter
+PyArray_ITER_GOTO1D
+\family default
+.
+ This iterator could be used to write something similar to what ufuncs do
+ wherein the loop over the largest axis is done by a separate sub-routine.
+ If
+\emph on
+*axis
+\emph default
+ is negative then
+\emph on
+*axis
+\emph default
+ will be set to the axis having the smallest stride and that axis will be
+ used.
+
+\end_layout
+
+\begin_layout Description
+PyArray_BroadcastToShape (
+\family typewriter
+PyObject*
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ arr,
+\family typewriter
+npy_intp
+\family default
+ *dimensions,
+\family typewriter
+int
+\family default
+ nd)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array iterator that is broadcast to iterate as an array of the
+ shape provided by
+\emph on
+dimensions
+\emph default
+ and
+\emph on
+nd
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArrayIter_Check (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates true if
+\emph on
+op
+\emph default
+ is an array iterator (or instance of a subclass of the array iterator type).
+
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_RESET (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ iterator)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Reset an
+\emph on
+iterator
+\emph default
+ to the beginning of the array.
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_NEXT (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ iterator)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Incremement the index and the dataptr members of the
+\emph on
+iterator
+\emph default
+ to point to the next element of the array.
+ If the array is not (C-style) contiguous, also increment the N-dimensional
+ coordinates array.
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_DATA (
+\family typewriter
+void*
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ iterator)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A pointer to the current element of the array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_GOTO (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ iterator,
+\family typewriter
+npy_intp*
+\family default
+ destination)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the
+\emph on
+iterator
+\emph default
+ index, dataptr, and coordinates members to the location in the array indicated
+ by the N-dimensional c-array,
+\emph on
+destination
+\emph default
+, which must have size at least
+\emph on
+iterator
+\emph default
+->nd_m1+1.
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_GOTO1D (
+\family typewriter
+PyObject*
+\family default
+ iterator,
+\family typewriter
+npy_intp
+\family default
+ index)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the
+\emph on
+iterator
+\emph default
+ index and dataptr to the location in the array indicated by the integer
+
+\emph on
+index
+\emph default
+ which points to an element in the C-styled flattened array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ITER_NOTDONE (
+\family typewriter
+int
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ iterator)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates TRUE as long as the iterator has not looped through all of the
+ elements, otherwise it evaluates FALSE.
+
+\end_layout
+
+\begin_layout Subsection
+Broadcasting (multi-iterators)
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIterNew (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ num, ...)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A simplified interface to broadcasting.
+ This function takes the number of arrays to broadcast and then
+\emph on
+num
+\emph default
+ extra (
+\family typewriter
+PyObject*
+\family default
+) arguments.
+ These arguments are converted to arrays and iterators are created.
+
+\family typewriter
+PyArray_Broadcast
+\family default
+ is then called on the resulting multi-iterator object.
+ The resulting, broadcasted mult-iterator object is then returned.
+ A broadcasted operation can then be performed using a single loop and using
+
+\family typewriter
+PyArray_MultiIter_NEXT
+\family default
+(..)
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_RESET (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ multi)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Reset all the iterators to the beginning in a multi-iterator object,
+\emph on
+multi
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_NEXT (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ multi)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Advance each iterator in a multi-iterator object,
+\emph on
+multi
+\emph default
+, to its next (broadcasted) element.
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_DATA (
+\family typewriter
+void*
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ multi,
+\family typewriter
+int
+\family default
+ i)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the data-pointer of the
+\emph on
+i
+\emph default
+
+\begin_inset Formula $^{\textrm{th}}$
+\end_inset
+
+ iterator in a multi-iterator object.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_NEXTi (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ multi,
+\family typewriter
+int
+\family default
+ i)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Advance the pointer of only the
+\emph on
+i
+\emph default
+
+\begin_inset Formula $^{\textrm{th}}$
+\end_inset
+
+ iterator.
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_GOTO (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ multi,
+\family typewriter
+npy_intp*
+\family default
+ destination)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Advance each iterator in a multi-iterator object,
+\emph on
+multi
+\emph default
+, to the given
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional
+\emph on
+destination
+\emph default
+ where
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of dimensions in the broadcasted array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_GOTO1D (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ multi,
+\family typewriter
+npy_intp
+\family default
+ index)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Advance each iterator in a multi-iterator object,
+\emph on
+multi
+\emph default
+, to the corresponding location of the
+\emph on
+index
+\emph default
+ into the flattened broadcasted array.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MultiIter_NOTDONE (
+\family typewriter
+int
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ multi)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates TRUE as long as the multi-iterator has not looped through all
+ of the elements (of the broadcasted result), otherwise it evaluates FALSE.
+
+\end_layout
+
+\begin_layout Description
+PyArray_Broadcast (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayMultiIterObject*
+\family default
+ mit)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function encapsulates the broadcasting rules.
+ The
+\emph on
+mit
+\emph default
+ container should already contain iterators for all the arrays that need
+ to be broadcast.
+ On return, these iterators will be adjusted so that iteration over each
+ simultaneously will accomplish the broadcasting.
+ A negative number is returned if an error occurs.
+
+\end_layout
+
+\begin_layout Description
+PyArray_RemoveSmallest (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyArrayMultiIterObject*
+\family default
+ mit)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function takes a multi-iterator object that has been previously
+\begin_inset Quotes eld
+\end_inset
+
+broadcasted,
+\begin_inset Quotes erd
+\end_inset
+
+ finds the dimension with the smallest
+\begin_inset Quotes eld
+\end_inset
+
+sum of strides
+\begin_inset Quotes erd
+\end_inset
+
+ in the broadcasted result and adapts all the iterators so as not to iterate
+ over that dimension (by effectively making them of length-1 in that dimension).
+ The corresponding dimension is returned unless
+\emph on
+mit
+\emph default
+->nd is 0, then -1 is returned.
+ This function is useful for constructing ufunc-like routines that broadcast
+ their inputs correctly and then call a strided 1-d version of the routine
+ as the inner-loop.
+ This 1-d version is usually optimized for speed and for this reason the
+ loop should be performed over the axis that won't require large stride
+ jumps.
+
+\end_layout
+
+\begin_layout Subsection
+Array Scalars
+\end_layout
+
+\begin_layout Description
+PyArray_Return (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyArrayObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function checks to see if
+\emph on
+arr
+\emph default
+ is a 0-dimensional array and, if so, returns the appropriate array scalar.
+ It should be used whenever 0-dimensional arrays could be returned to Python.
+\end_layout
+
+\begin_layout Description
+PyArray_Scalar (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype,
+\family typewriter
+PyObject*
+\family default
+ itemsize)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array scalar object of the given enumerated
+\emph on
+typenum
+\emph default
+ and
+\emph on
+itemsize
+\emph default
+ by
+\series bold
+copying
+\series default
+ from memory pointed to by
+\emph on
+data
+\emph default
+.
+ If
+\emph on
+swap
+\emph default
+ is nonzero then this function will byteswap the data if appropriate to
+ the data-type because array scalars are always in correct machine-byte
+ order.
+\end_layout
+
+\begin_layout Description
+PyArray_ToScalar (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+void*
+\family default
+ data,
+\family typewriter
+PyArrayObject*
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array scalar object of the type and itemsize indicated by the
+ array object
+\emph on
+arr
+\emph default
+ copied from the memory pointed to by
+\emph on
+data
+\emph default
+ and swapping if the data in
+\emph on
+arr
+\emph default
+ is not in machine byte-order.
+\end_layout
+
+\begin_layout Description
+PyArray_FromScalar (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ scalar,
+\family typewriter
+PyArray_Descr*
+\family default
+ outcode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 0-dimensional array of type determined by
+\emph on
+outcode
+\emph default
+ from
+\emph on
+scalar
+\emph default
+ which should be an array-scalar object.
+ If
+\emph on
+outcode
+\emph default
+ is NULL, then the type is determined from
+\family typewriter
+\emph on
+scalar
+\family default
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_ScalarAsCtype (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ scalar,
+\family typewriter
+void*
+\family default
+ ctypeptr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return in
+\emph on
+ctypeptr
+\emph default
+ a pointer to the actual value in an array scalar.
+ There is no error checking so
+\emph on
+scalar
+\emph default
+ must be an array-scalar object, and ctypeptr must have enough space to
+ hold the correct type.
+ For flexible-sized types, a pointer to the data is copied into the memory
+ of
+\emph on
+ctypeptr
+\emph default
+, for all other types, the actual data is copied into the address pointed
+ to by
+\emph on
+ctypeptr
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CastScalarToCtype (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ scalar,
+\family typewriter
+void*
+\family default
+ ctypeptr,
+\family typewriter
+PyArray_Descr*
+\family default
+ outcode)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the data (cast to the data type indicated by
+\emph on
+outcode
+\emph default
+) from the array-scalar,
+\emph on
+scalar
+\emph default
+, into the memory pointed to by
+\emph on
+ctypeptr
+\emph default
+ (which must be large enough to handle the incoming memory).
+
+\end_layout
+
+\begin_layout Description
+PyArray_TypeObjectFromType (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ type)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a scalar type-object from a type-number,
+\emph on
+type
+\emph default
+.
+ Equivalent to
+\family typewriter
+PyArray_DescrFromType
+\family default
+(
+\emph on
+type
+\emph default
+)->typeobj except for reference counting and error-checking.
+ Returns a new reference to the typeobject on success or
+\family typewriter
+NULL
+\family default
+ on failure.
+\end_layout
+
+\begin_layout Description
+PyArray_ScalarKind (
+\family typewriter
+NPY_SCALARKIND
+\family default
+) (
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+PyArrayObject**
+\family default
+ arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the kind of scalar represented by
+\emph on
+typenum
+\emph default
+ and the array in
+\emph on
+*arr
+\emph default
+ (if
+\emph on
+arr
+\emph default
+ is not
+\family typewriter
+NULL
+\family default
+).
+ The array is assumed to be rank-0 and only used if
+\emph on
+typenum
+\emph default
+ represents a signed integer.
+ If
+\emph on
+arr
+\emph default
+ is not
+\family typewriter
+NULL
+\family default
+ and the first element is negative then
+\family typewriter
+NPY_INTNEG_SCALAR
+\family default
+ is returned, otherwise
+\family typewriter
+NPY_INTPOS_SCALAR
+\family default
+ is returned.
+ The possible return values are
+\family typewriter
+NPY_
+\family default
+<kind>
+\family typewriter
+_SCALAR
+\family default
+ where <kind> can be
+\series bold
+INTPOS
+\series default
+,
+\series bold
+INTNEG
+\series default
+,
+\series bold
+FLOAT
+\series default
+,
+\series bold
+COMPLEX
+\series default
+,
+\series bold
+BOOL
+\series default
+, or
+\series bold
+OBJECT
+\series default
+.
+
+\family typewriter
+NPY_NOSCALAR
+\family default
+ is also an enumerated value
+\family typewriter
+NPY_SCALARKIND
+\family default
+ variables can take on.
+
+\end_layout
+
+\begin_layout Description
+PyArray_CanCoerceScalar (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+char
+\family default
+ thistype,
+\family typewriter
+char
+\family default
+ neededtype,
+\family typewriter
+NPY_SCALARKIND
+\family default
+ scalar)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Implements the rules for scalar coercion.
+ Scalars are only silently coerced from thistype to neededtype if this function
+ returns nonzero.
+ If scalar is
+\family typewriter
+NPY_NOSCALAR
+\family default
+, then this function is equivalent to
+\family typewriter
+PyArray_CanCastSafely
+\family default
+.
+ The rule is that scalars of the same KIND can be coerced into arrays of
+ the same KIND.
+ This rule means that high-precision scalars will never cause low-precision
+ arrays of the same KIND to be upcast.
+
+\end_layout
+
+\begin_layout Subsection
+Data-type descriptors
+\end_layout
+
+\begin_layout Warning
+Data-type objects must be reference counted so be aware of the action on
+ the data-type reference of different C-API calls.
+ The standard rule is that when a data-type object is returned it is a new
+ reference.
+ Functions that take
+\family typewriter
+PyArray_Descr*
+\family default
+ objects and return arrays steal references to the data-type their inputs
+ unless otherwise noted.
+ Therefore, you must own a reference to any data-type object used as input
+ to such a function.
+
+\end_layout
+
+\begin_layout Description
+PyArrayDescr_Check (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates as true if
+\emph on
+obj
+\emph default
+ is a data-type object (
+\family typewriter
+PyArray_Descr*
+\family default
+).
+\end_layout
+
+\begin_layout Description
+PyArray_DescrNew (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new data-type object copied from
+\emph on
+obj
+\emph default
+ (the fields reference is just updated so that the new object points to
+ the same fields dictionary if any).
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrNewFromType (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new data-type object from the built-in (or user-registered) data-type
+ indicated by
+\emph on
+typenum
+\emph default
+.
+ All builtin types should not have any of their fields changed.
+ This creates a new copy of the
+\family typewriter
+PyArray_Descr
+\family default
+ structure so that you can fill it in as appropriate.
+ This function is especially needed for flexible data-types which need to
+ have a new elsize member in order to be meaningful in array construction.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrNewByteorder (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+PyArray_Descr*
+\family default
+ obj,
+\family typewriter
+char
+\family default
+ newendian)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new data-type object with the byteorder set according to
+\emph on
+newendian
+\emph default
+.
+ All referenced data-type objects (in subdescr and fields members of the
+ data-type object) are also changed (recursively).
+ If a byteorder of
+\family typewriter
+NPY_IGNORE
+\family default
+ is encountered it is left alone.
+ If newendian is
+\family typewriter
+NPY_SWAP
+\family default
+, then all byte-orders are swapped.
+ Other valid newendian values are
+\family typewriter
+NPY_NATIVE
+\family default
+,
+\family typewriter
+NPY_LITTLE
+\family default
+, and
+\family typewriter
+NPY_BIG
+\family default
+ which all cause the returned data-typed descriptor (and all it's referenced
+ data-type descriptors) to have the corresponding byte-order.
+\end_layout
+
+\begin_layout Description
+PyArray_DescrFromObject (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+PyArray_Descr*
+\family default
+ mintype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Determine an appropriate data-type object from the object
+\emph on
+op
+\emph default
+ (which should be a
+\begin_inset Quotes eld
+\end_inset
+
+nested
+\begin_inset Quotes erd
+\end_inset
+
+ sequence object) and the minimum data-type descriptor mintype (which can
+ be
+\family typewriter
+NULL
+\family default
+).
+ Similar in behavior to array(
+\emph on
+op
+\emph default
+).dtype.
+ Don't confuse this function with
+\family typewriter
+PyArray_DescrConverter
+\family default
+.
+ This function essentially looks at all the objects in the (nested) sequence
+ and determines the data-type from the elements it finds.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrFromScalar (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ scalar)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a data-type object from an array-scalar object.
+ No checking is done to be sure that
+\emph on
+scalar
+\emph default
+ is an array scalar.
+ If no suitable data-type can be determined, then a data-type of NPY_OBJECT
+ is returned by default.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrFromType (
+\family typewriter
+PyArray_Descr*
+\family default
+) (
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a data-type object corresponding to
+\emph on
+typenum
+\emph default
+.
+ The
+\emph on
+typenum
+\emph default
+ can be one of the enumerated types, a character code for one of the enumerated
+ types, or a user-defined type.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Descr**
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any compatible Python object,
+\emph on
+obj
+\emph default
+, to a data-type object in
+\emph on
+dtype
+\emph default
+.
+ A large number of Python objects can be converted to data-type objects.
+ See Chapter
+\begin_inset LatexCommand ref
+reference "cha:Data-descriptor-objects"
+
+\end_inset
+
+ for a complete description.
+ This version of the converter converts None objects to a
+\family typewriter
+NPY_DEFAULT_TYPE
+\family default
+ data-type object.
+ This function can be used with the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ character code in PyArg_ParseTuple processing.
+
+\end_layout
+
+\begin_layout Description
+PyArray_DescrConverter2 (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Descr**
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any compatible Python object,
+\emph on
+obj
+\emph default
+, to a data-type object in
+\emph on
+dtype
+\emph default
+.
+ This version of the converter converts None objects so that the returned
+ data-type is
+\family typewriter
+NULL
+\family default
+.
+ This function can also be used with the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ character in PyArg_ParseTuple processing.
+\end_layout
+
+\begin_layout Description
+Pyarray_DescrAlignConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Descr**
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Like
+\family typewriter
+PyArray_DescrConverter
+\family default
+ except it aligns C-struct-like objects on word-boundaries as the compiler
+ would.
+\end_layout
+
+\begin_layout Description
+Pyarray_DescrAlignConverter2 (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Descr**
+\family default
+ dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Like
+\family typewriter
+PyArray_DescrConverter2
+\family default
+ except it aligns C-struct-like objects on word-boundaries as the compiler
+ would.
+\end_layout
+
+\begin_layout Description
+PyArray_FieldNames (
+\family typewriter
+PyObject*
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ dict)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Take the fields dictionary,
+\family typewriter
+\emph on
+dict
+\family default
+\emph default
+, such as the one attached to a data-type object and construct an ordered-list
+ of field names such as is stored in the names field of the
+\family typewriter
+PyArray_Descr
+\family default
+ object.
+
+\end_layout
+
+\begin_layout Subsection
+Conversion Utilities
+\end_layout
+
+\begin_layout Subsubsection
+For use with
+\family typewriter
+PyArg_ParseTuple
+\end_layout
+
+\begin_layout Standard
+All of these functions can be used in
+\family typewriter
+PyArg_ParseTuple
+\family default
+(...) with the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ format specifier to automatically convert any Python object to the required
+ C-object.
+ All of these functions return
+\family typewriter
+NPY_SUCCEED
+\family default
+ if successful and
+\family typewriter
+NPY_FAIL
+\family default
+ if not.
+ The first argument to all of these function is a Python object.
+ The second argument is the
+\series bold
+address
+\series default
+ of the C-type to convert the Python object to.
+
+\end_layout
+
+\begin_layout Warning
+Be sure to understand what steps you should take to manage the memory when
+ using these conversion functions.
+ These functions can require freeing memory, and/or altering the reference
+ counts of specific objects based on your use.
+\end_layout
+
+\begin_layout Description
+PyArray_Converter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyObject**
+\family default
+ address)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any Python object to a
+\family typewriter
+PyArrayObject
+\family default
+.
+ If
+\family typewriter
+PyArray_Check
+\family default
+(
+\family typewriter
+\emph on
+obj
+\family default
+\emph default
+) is TRUE then its reference count is incremented and a reference placed
+ in
+\emph on
+address
+\emph default
+.
+ If
+\emph on
+obj
+\emph default
+ is not an array, then convert it to an array using
+\family typewriter
+PyArray_FromAny
+\family default
+.
+ No matter what is returned, you must DECREF the object returned by this
+ routine in
+\emph on
+address
+\emph default
+ when you are done with it.
+
+\end_layout
+
+\begin_layout Description
+PyArray_OutputConverter (
+\family typewriter
+int
+\family default
+)(
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArrayObject**
+\family default
+ address)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is a default converter for output arrays given to functions.
+ If
+\emph on
+obj
+\emph default
+ is
+\family typewriter
+Py_None
+\family default
+ or
+\family typewriter
+NULL
+\family default
+, then
+\emph on
+*address
+\emph default
+ will be
+\family typewriter
+NULL
+\family default
+ but the call will succeed.
+ If
+\family typewriter
+PyArray_Check
+\family default
+(
+\emph on
+obj
+\emph default
+) is TRUE then it is returned in
+\emph on
+*address
+\emph default
+ without incrementing its reference count.
+
+\end_layout
+
+\begin_layout Description
+PyArray_IntpConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Dims*
+\family default
+ seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any Python sequence,
+\emph on
+obj
+\emph default
+, smaller than
+\family typewriter
+NPY_MAXDIMS
+\family default
+ to a C-array of
+\family typewriter
+npy_intp
+\family default
+.
+ The Python object could also be a single number.
+ The
+\emph on
+seq
+\emph default
+ variable is a pointer to a structure with members ptr and len.
+ On successful return,
+\emph on
+seq
+\emph default
+->ptr contains a pointer to memory that must be freed to avoid a memory
+ leak.
+ The restriction on memory size allows this converter to be conveniently
+ used for sequences intended to be interpreted as array shapes.
+
+\end_layout
+
+\begin_layout Description
+PyArray_BufferConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+PyArray_Chunk*
+\family default
+ buf)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any Python object,
+\emph on
+obj
+\emph default
+, with a (single-segment) buffer interface to a variable with members that
+ detail the object's use of its chunk of memory.
+ The
+\emph on
+buf
+\emph default
+ variable is a pointer to a structure with base, ptr, len, and flags members.
+ The
+\family typewriter
+PyArray_Chunk
+\family default
+ structure is binary compatibile with the Python's buffer object (through
+ its len member on 32-bit platforms and its ptr member on 64-bit platforms
+ or in Python 2.5).
+ On return, the base member is set to
+\emph on
+obj
+\emph default
+ (or its base if
+\emph on
+obj
+\emph default
+ is already a buffer object pointing to another object).
+ If you need to hold on to the memory be sure to INCREF the base member.
+ The chunk of memory is pointed to by
+\emph on
+buf
+\emph default
+->ptr member and has length
+\emph on
+buf
+\emph default
+->len.
+ The flags member of
+\emph on
+buf
+\emph default
+ is
+\family typewriter
+NPY_BEHAVED_RO
+\family default
+ with the
+\family typewriter
+NPY_WRITEABLE
+\family default
+ flag set if
+\emph on
+obj
+\emph default
+ has a writeable buffer interface.
+
+\end_layout
+
+\begin_layout Description
+PyArray_AxisConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject
+\family default
+* obj,
+\family typewriter
+int*
+\family default
+ axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert a Python object,
+\emph on
+obj
+\emph default
+, representing an axis argument to the proper value for passing to the functions
+ that take an integer axis.
+ Specifically, if
+\emph on
+obj
+\emph default
+ is None,
+\emph on
+axis
+\emph default
+ is set to
+\family typewriter
+NPY_MAXDIMS
+\family default
+ which is interpreted correctly by the C-API functions that take axis arguments.
+\end_layout
+
+\begin_layout Description
+PyArray_BoolConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+Bool*
+\family default
+ value)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any Python object,
+\emph on
+obj
+\emph default
+, to
+\family typewriter
+NPY_TRUE
+\family default
+ or
+\family typewriter
+NPY_FALSE
+\family default
+, and place the result in
+\emph on
+value
+\emph default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_ByteorderConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+char*
+\family default
+ endian)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert Python strings into the corresponding byte-order character: '>',
+ '<', 's', '=', or '|'.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SortkindConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+NPY_SORTKIND*
+\family default
+ sort)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert Python strings into one of
+\family typewriter
+NPY_QUICKSORT
+\family default
+ (starts with 'q' or 'Q') ,
+\family typewriter
+NPY_HEAPSORT
+\family default
+ (starts with 'h' or 'H'), or
+\family typewriter
+NPY_MERGESORT
+\family default
+ (starts with 'm' or 'M').
+
+\end_layout
+
+\begin_layout Description
+PyArray_SearchsideConverter (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+NPY_SEARCHSIDE*
+\family default
+ side)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert Python strings into one of
+\family typewriter
+NPY_SEARCHLEFT
+\family default
+ (starts with 'l' or 'L'), or
+\family typewriter
+NPY_SEARCHRIGHT
+\family default
+ (starts with 'r' or 'R').
+
+\end_layout
+
+\begin_layout Subsubsection
+Other conversions
+\end_layout
+
+\begin_layout Description
+PyArray_PyIntAsInt (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert all kinds of Python objects (including arrays and array scalars)
+ to a standard integer.
+ On error, -1 is returned and an exception set.
+ You may find useful the macro:
+\end_layout
+
+\begin_layout LyX-Code
+#define error_converting(x) (((x) == -1) && PyErr_Occurred()
+\end_layout
+
+\begin_layout Description
+PyArray_PyIntAsIntp (
+\family typewriter
+npy_intp
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert all kinds of Python objects (including arrays and array scalars)
+ to a (platform-pointer-sized) integer.
+ On error, -1 is returned and an exception set.
+
+\end_layout
+
+\begin_layout Description
+PyArray_IntpFromSequence (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ seq,
+\family typewriter
+npy_intp*
+\family default
+ vals,
+\family typewriter
+int
+\family default
+ maxvals)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert any Python sequence (or single Python number) passed in as
+\emph on
+seq
+\emph default
+ to (up to)
+\emph on
+maxvals
+\emph default
+ pointer-sized integers and place them in the
+\emph on
+vals
+\emph default
+ array.
+ The sequence can be smaller then
+\emph on
+maxvals
+\emph default
+ as the number of converted objects is returned.
+
+\end_layout
+
+\begin_layout Description
+PyArray_TypestrConvert (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+int
+\family default
+ itemsize,
+\family typewriter
+int
+\family default
+ gentype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert typestring characters (with
+\emph on
+itemsize
+\emph default
+) to basic enumerated data types.
+ The typestring character corresponding to signed and unsigned integers,
+ floating point numbers, and complex-floating point numbers are recognized
+ and converted.
+ Other values of gentype are returned.
+ This function can be used to convert, for example, the string 'f4' to
+\family typewriter
+NPY_FLOAT32
+\family default
+.
+
+\end_layout
+
+\begin_layout Subsection
+Miscellaneous
+\end_layout
+
+\begin_layout Subsubsection
+Importing the API
+\end_layout
+
+\begin_layout Standard
+In order to make use of the C-API from another extension module, the
+\family typewriter
+import_array
+\family default
+() command must be used.
+ If the extension module is self-contained in a single .c file, then that
+ is all that needs to be done.
+ If, however, the extension module involves multiple files where the C-API
+ is needed then some additional steps must be taken.
+\end_layout
+
+\begin_layout Description
+import_array (void) (void)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function must be called in the initialization section of a module
+ that will make use of the C-API.
+ It imports the module where the function-pointer table is stored and points
+ the correct variable to it.
+
+\end_layout
+
+\begin_layout Description
+PY_ARRAY_UNIQUE_SYMBOL
+\end_layout
+
+\begin_layout Description
+NO_IMPORT_ARRAY
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Using these #defines you can use the C-API in multiple files for a single
+ extension module.
+ In each file you must define
+\family typewriter
+PY_ARRAY_UNIQUE_SYMBOL
+\family default
+ to some name that will hold the C-API (
+\emph on
+e.g.
+
+\emph default
+ myextension_ARRAY_API).
+ This must be done
+\series bold
+before
+\series default
+ including the numpy/arrayobject.h file.
+ In the module intialization routine you call
+\family typewriter
+import_array
+\family default
+().
+ In addition, in the files that do not have the module initialization sub_routin
+e define
+\family typewriter
+NO_IMPORT_ARRAY
+\family default
+ prior to including numpy/arrayobject.h.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Suppose I have two files coolmodule.c and coolhelper.c which need to be compiled
+ and linked into a single extension module.
+ Suppose coolmodule.c contains the required initcool module initialization
+ function (with the import_array() function called).
+ Then, coolmodule.c would have at the top:
+\end_layout
+
+\begin_layout LyX-Code
+#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API
+\end_layout
+
+\begin_layout LyX-Code
+#include numpy/arrayobject.h
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ On the other hand, coolhelper.c would contain at the top:
+\end_layout
+
+\begin_layout LyX-Code
+#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API
+\end_layout
+
+\begin_layout LyX-Code
+#define NO_IMPORT_ARRAY
+\end_layout
+
+\begin_layout LyX-Code
+#include numpy/arrayobject.h
+\end_layout
+
+\begin_layout Description
+PyArray_GetNDArrayCVersion (
+\family typewriter
+unsigned
+\family default
+
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+void
+\family default
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This just returns the value
+\family typewriter
+NPY_VERSION
+\family default
+.
+ Because it is in the C-API, however, comparing the output of this function
+ from the value defined in the current header gives a way to test if the
+ C-API has changed thus requiring a re-compilation of extension modules
+ that use the C-API.
+
+\end_layout
+
+\begin_layout Subsubsection
+Internal Flexibility
+\end_layout
+
+\begin_layout Description
+PyArray_SetNumericOps (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ dict)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ NumPy stores an internal table of Python callable objects that are used
+ to implement arithmetic operations for arrays as well as certain array
+ calculation methods.
+ This function allows the user to replace any or all of these Python objects
+ with their own versions.
+ The keys of the dictionary,
+\emph on
+dict
+\emph default
+, are the named functions to replace and the paired value is the Python
+ callable object to use.
+ Care should be taken that the function used to replace an internal array
+ operation does not itself call back to that internal array operation (unless
+ you have designed the function to handle that), or an unchecked infinite
+ recursion can result (possibly causing program crash).
+ The key names that represent operations that can be replaced are:
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+add
+\series default
+,
+\series bold
+subtract
+\series default
+,
+\series bold
+multiply
+\series default
+,
+\series bold
+divide
+\series default
+,
+\series bold
+remainder
+\series default
+,
+\series bold
+power
+\series default
+,
+\series bold
+square, reciprocal, ones_like, sqrt
+\series default
+,
+\series bold
+negative
+\series default
+,
+\series bold
+absolute
+\series default
+,
+\series bold
+invert
+\series default
+,
+\series bold
+left_shift
+\series default
+,
+\series bold
+right_shift
+\series default
+,
+\series bold
+bitwise_and
+\series default
+,
+\series bold
+bitwise_xor
+\series default
+,
+\series bold
+bitwise_or
+\series default
+,
+\series bold
+less
+\series default
+,
+\series bold
+less_equal
+\series default
+,
+\series bold
+equal
+\series default
+,
+\series bold
+not_equal
+\series default
+,
+\series bold
+greater
+\series default
+,
+\series bold
+greater_equal
+\series default
+,
+\series bold
+floor_divide
+\series default
+,
+\series bold
+true_divide
+\series default
+,
+\series bold
+logical_or
+\series default
+,
+\series bold
+logical_and
+\series default
+,
+\series bold
+floor
+\series default
+,
+\series bold
+ceil
+\series default
+,
+\series bold
+maximum
+\series default
+,
+\series bold
+minimum
+\series default
+,
+\series bold
+rint
+\series default
+.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions are included here because they are used at least once in
+ the array object's methods.
+ The function returns -1 (without setting a Python Error) if one of the
+ objects being assigned is not callable.
+\end_layout
+
+\begin_layout Description
+PyArray_GetNumericOps (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+void
+\family default
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a Python dictionary containing the callable Python objects stored
+ in the the internal arithmetic operation table.
+ The keys of this dictionary are given in the explanation for
+\family typewriter
+PyArray_SetNumericOps
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyArray_SetStringFunction (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ op,
+\family typewriter
+int
+\family default
+ repr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function allows you to alter the tp_str and tp_repr methods of the
+ array object to any Python function.
+ Thus you can alter what happens for all arrays when str(arr) or repr(arr)
+ is called from Python.
+ The function to be called is passed in as
+\emph on
+op
+\emph default
+.
+ If
+\emph on
+repr
+\emph default
+ is non-zero, then this function will be called in response to repr(arr),
+ otherwise the function will be called in response to str(arr).
+ No check on whether or not
+\emph on
+op
+\emph default
+ is callable is performed.
+ The callable passed in to
+\emph on
+op
+\emph default
+ should expect an array argument and should return a string to be printed.
+\end_layout
+
+\begin_layout Subsubsection
+Memory management
+\end_layout
+
+\begin_layout Description
+PyDataMem_NEW (
+\family typewriter
+char*
+\family default
+) (
+\family typewriter
+size_t
+\family default
+ nbytes)
+\end_layout
+
+\begin_layout Description
+PyDataMem_FREE (
+\family typewriter
+char*
+\family default
+ ptr)
+\end_layout
+
+\begin_layout Description
+PyDataMem_RENEW (
+\family typewriter
+char*
+\family default
+) (
+\family typewriter
+void *
+\family default
+ ptr,
+\family typewriter
+size_t
+\family default
+ newbytes)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Macros to allocate, free, and reallocate memory.
+ These macros are used internally to create arrays.
+\end_layout
+
+\begin_layout Description
+PyDimMem_NEW (
+\family typewriter
+npy_intp*
+\family default
+) (nd)
+\end_layout
+
+\begin_layout Description
+PyDimMem_FREE (
+\family typewriter
+npy_intp*
+\family default
+ ptr)
+\end_layout
+
+\begin_layout Description
+PyDimMem_RENEW (
+\family typewriter
+npy_intp*
+\family default
+) (
+\family typewriter
+npy_intp*
+\family default
+ ptr,
+\family typewriter
+npy_intp
+\family default
+ newnd)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Macros to allocate, free, and reallocate dimension and strides memory.
+\end_layout
+
+\begin_layout Description
+PyArray_malloc (nbytes)
+\end_layout
+
+\begin_layout Description
+PyArray_free (ptr)
+\end_layout
+
+\begin_layout Description
+PyArray_realloc (ptr, nbytes)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These macros use different memory allocators, depending on the constant
+
+\family typewriter
+NPY_USE_PYMEM
+\family default
+.
+ The system malloc is used when NPY_USE_PYMEM is 0, if NPY_USE_PYMEM is
+ 1, then the Python memory allocator is used.
+
+\end_layout
+
+\begin_layout Subsubsection
+Threading support
+\end_layout
+
+\begin_layout Standard
+These macros are only meaningful if
+\family typewriter
+NPY_ALLOW_THREADS
+\family default
+ evaluates True during compilation of the extension module.
+ Otherwise, these macros are equivalent to whitespace.
+ Python uses a single Global Interpreter Lock (GIL) for each Python process
+ so that only a single thread may excecute at a time (even on multi-cpu
+ machines).
+ When calling out to a compiled function that may take time to compute (and
+ does not have side-effects for other threads like updated global variables),
+ the GIL should be released so that other Python threads can run while the
+ time-consuming calculations are performed.
+ This can be accomplished using two groups of macros.
+ Typically, if one macro in a group is used in a code block, all of them
+ must be used in the same code block.
+ Currently,
+\family typewriter
+NPY_ALLOW_THREADS
+\family default
+ is defined to the python-defined
+\family typewriter
+WITH_THREADS
+\family default
+ constant unless the environment variable
+\family typewriter
+NPY_NOSMP
+\family default
+ is set in which case
+\family typewriter
+NPY_ALLOW_THREADS
+\family default
+ is defined to be 0.
+
+\end_layout
+
+\begin_layout Description
+Group\InsetSpace ~
+1 This group is used to call code that may take some time but does
+ not use any Python C-API calls.
+ Thus, the GIL should be released during its calculation.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_BEGIN_ALLOW_THREADS Equivalent to
+\family typewriter
+Py_BEGIN_ALLOW_THREADS
+\family default
+ except it uses
+\family typewriter
+NPY_ALLOW_THREADS
+\family default
+ to determine if the macro if replaced with white-space or not.
+
+\end_layout
+
+\begin_layout Description
+NPY_END_ALLOW_THREADS Equivalent to
+\family typewriter
+Py_END_ALLOW_THREADS
+\family default
+ except it uses
+\family typewriter
+NPY_ALLOW_THREADS
+\family default
+ to determine if the macro if replaced with white-space or not.
+
+\end_layout
+
+\begin_layout Description
+NPY_BEGIN_THREADS_DEF Place in the variable declaration area.
+ This macro sets up the variable needed for storing the Python state.
+\end_layout
+
+\begin_layout Description
+NPY_BEGIN_THREADS Place right before code that does not need the Python
+ interpreter (no Python C-API calls).
+ This macro saves the Python state and releases the GIL.
+\end_layout
+
+\begin_layout Description
+NPY_END_THREADS Place right after code that does not need the Python interpreter.
+ This macro acquires the GIL and restores the Python state from the saved
+ variable.
+\end_layout
+
+\begin_layout Description
+NPY_BEGIN_THREADS_DESCR (
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype) Useful to release the GIL only if
+\emph on
+dtype
+\emph default
+ does not contain arbitrary Python objects which may need the Python interpreter
+ during execution of the loop.
+ Equivalent to
+\end_layout
+
+\begin_layout Description
+NPY_END_THREADS_DESCR (
+\family typewriter
+PyArray_Descr*
+\family default
+ dtype) Useful to regain the GIL in situations where it was released using
+ the BEGIN form of this macro.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+Group\InsetSpace ~
+2 This group is used to re-acquire the Python GIL after it has been
+ released.
+ For example, suppose the GIL has been released (using the previous calls),
+ and then some path in the code (perhaps in a different subroutine) requires
+ use of the Python C-API, then these macros are useful to acquire the GIL.
+ These macros accomplish essentially a reverse of the previous three (acquire
+ the LOCK saving what state it had) and then re-release it with the saved
+ state.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_ALLOW_C_API_DEF Place in the variable declaration area to set up the
+ necessary variable.
+
+\end_layout
+
+\begin_layout Description
+NPY_ALLOW_C_API Place before code that needs to call the Python C-API (when
+ it is known that the GIL has already been released).
+
+\end_layout
+
+\begin_layout Description
+NPY_DISABLE_C_API Place after code that needs to call the Python C-API (to
+ re-release the GIL).
+
+\end_layout
+
+\end_deeper
+\begin_layout Tip
+Never use semicolons after the threading support macros.
+\end_layout
+
+\begin_layout Subsubsection
+Priority
+\end_layout
+
+\begin_layout Description
+NPY_PRIOIRTY Default priority for arrays.
+\end_layout
+
+\begin_layout Description
+NPY_SUBTYPE_PRIORITY Default subtype priority.
+\end_layout
+
+\begin_layout Description
+NPY_SCALAR_PRIORITY Default scalar priority (very small)
+\end_layout
+
+\begin_layout Description
+PyArray_GetPriority (
+\family typewriter
+double
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+double
+\family default
+ def)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the
+\series bold
+__array_priority__
+\series default
+ attribute (converted to a double) of
+\emph on
+obj
+\emph default
+ or
+\emph on
+def
+\emph default
+ if no attribute of that name exists.
+ Fast returns that avoid the attribute lookup are provided for objects of
+ type
+\family typewriter
+PyArray_Type
+\family default
+.
+
+\end_layout
+
+\begin_layout Subsubsection
+Default buffers
+\end_layout
+
+\begin_layout Description
+NPY_BUFSIZE Default size of the user-settable internal buffers.
+\end_layout
+
+\begin_layout Description
+NPY_MIN_BUFSIZE Smallest size of user-settable internal buffers.
+\end_layout
+
+\begin_layout Description
+NPY_MAX_BUFSIZE Largest size allowed for the user-settable buffers.
+\end_layout
+
+\begin_layout Subsubsection
+Other constants
+\end_layout
+
+\begin_layout Description
+NPY_NUM_FLOATTYPE The number of floating-point types
+\end_layout
+
+\begin_layout Description
+NPY_MAXDIMS The maximum number of dimensions allowed in arrays.
+\end_layout
+
+\begin_layout Description
+NPY_VERSION The current version of the ndarray object (check to see if this
+ variable is defined to guarantee the numpy/arrayobject.h header is being
+ used).
+
+\end_layout
+
+\begin_layout Description
+NPY_FALSE Defined as 0 for use with Bool.
+\end_layout
+
+\begin_layout Description
+NPY_TRUE Defined as 1 for use with Bool.
+\end_layout
+
+\begin_layout Description
+NPY_FAIL The return value of failed converter functions which are called
+ using the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ syntax in PyArg_ParseTuple-like functions.
+\end_layout
+
+\begin_layout Description
+NPY_SUCCEED The return value of successful converter functions which are
+ called using the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ syntax in PyArg_ParseTuple-like functions.
+\end_layout
+
+\begin_layout Subsubsection
+Miscellaneous Macros
+\end_layout
+
+\begin_layout Description
+PyArray_SAMESHAPE (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluates as True if arrays
+\emph on
+a1
+\emph default
+ and
+\emph on
+a2
+\emph default
+ have the same shape.
+
+\end_layout
+
+\begin_layout Description
+PyArray_MAX (a,b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the maximum of
+\emph on
+a
+\emph default
+ and
+\emph on
+b
+\emph default
+.
+ If (
+\emph on
+a
+\emph default
+) or (
+\emph on
+b
+\emph default
+) are expressions they are evaluated twice.
+\end_layout
+
+\begin_layout Description
+PyArray_MIN (a,b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the minimum of
+\emph on
+a
+\emph default
+ and
+\emph on
+b
+\emph default
+.
+ If (
+\emph on
+a
+\emph default
+) or (
+\emph on
+b
+\emph default
+) are expressions they are evaluated twice.
+\end_layout
+
+\begin_layout Description
+PyArray_CLT (a,b)
+\end_layout
+
+\begin_layout Description
+PyArray_CGT (a,b)
+\end_layout
+
+\begin_layout Description
+PyArray_CLE (a,b)
+\end_layout
+
+\begin_layout Description
+PyArray_CGE (a,b)
+\end_layout
+
+\begin_layout Description
+PyArray_CEQ (a,b)
+\end_layout
+
+\begin_layout Description
+PyArray_CNE (a,b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Implements the complex comparisons between two complex numbers (structures
+ with a real and imag member) using NumPy's definition of the ordering which
+ is lexicographic: comparing the real parts first and then the complex parts
+ if the real parts are equal.
+
+\end_layout
+
+\begin_layout Description
+PyArray_REFCOUNT (
+\family typewriter
+PyObject*
+\family default
+ op)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the reference count of any Python object.
+
+\end_layout
+
+\begin_layout Description
+PyArray_XDECREF_ERR (PyObject *obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ DECREF's an array object which may have the
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+ flag set without causing the contents to be copied back into the original
+ array.
+ Resets the
+\family typewriter
+NPY_WRITEABLE
+\family default
+ flag on the base object.
+ This is useful for recovering from an error condition when
+\family typewriter
+NPY_UPDATEIFCOPY
+\family default
+ is used.
+
+\end_layout
+
+\begin_layout Subsubsection
+Enumerated Types
+\end_layout
+
+\begin_layout Description
+NPY_SORTKIND A special variable-type which can take on the values
+\series bold
+NPY_
+\series default
+<KIND> where <KIND> is
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+QUICKSORT
+\series default
+,
+\series bold
+HEAPSORT
+\series default
+,
+\series bold
+MERGESORT
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\series bold
+NPY_NSORTS
+\series default
+ is defined to be the number of sorts.
+\end_layout
+
+\begin_layout Description
+NPY_SCALARKIND A special variable type indicating the number of
+\begin_inset Quotes eld
+\end_inset
+
+kinds
+\begin_inset Quotes erd
+\end_inset
+
+ of scalars distinguished in determining scalar-coercion rules.
+ This variable can take on the values NPY_<KIND> where <KIND> can be
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+NOSCALAR
+\series default
+,
+\series bold
+BOOL_SCALAR
+\series default
+,
+\series bold
+INTPOS_SCALAR
+\series default
+,
+\series bold
+INTNEG_SCALAR
+\series default
+,
+\series bold
+FLOAT_SCALAR
+\series default
+,
+\series bold
+COMPLEX_SCALAR
+\series default
+,
+\series bold
+OBJECT_SCALAR
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\series bold
+NPY_NSCALARKINDS
+\series default
+ is defined to be the number of scalar kinds (not including
+\family typewriter
+NPY_NOSCALAR
+\family default
+).
+
+\end_layout
+
+\begin_layout Description
+NPY_ORDER A variable type indicating the order that an array should be interpret
+ed in.
+ The value of a variable of this type can be
+\series bold
+NPY_
+\series default
+<ORDER> where <ORDER> is
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+ANYORDER
+\series default
+,
+\series bold
+CORDER
+\series default
+,
+\series bold
+FORTRANORDER
+\end_layout
+
+\begin_layout Description
+NPY_CLIPMODE A variable type indicating the kind of clipping that should
+ be applied in certain functions.
+ The value of a variable of this type can be
+\series bold
+NPY_
+\series default
+<MODE> where <MODE> is
+\end_layout
+
+\begin_layout Quote
+
+\series bold
+CLIP
+\series default
+,
+\series bold
+WRAP
+\series default
+,
+\series bold
+RAISE
+\begin_inset LatexCommand index
+name "ndarray!C-API|)"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "C-API!array|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+UFunc API
+\begin_inset LatexCommand index
+name "ufunc!C-API|("
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "C-API!ufunc|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Constants
+\end_layout
+
+\begin_layout Description
+UFUNC_ERR_<HANDLER>
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ <HANDLER> can be
+\series bold
+IGNORE
+\series default
+,
+\series bold
+WARN
+\series default
+,
+\series bold
+RAISE
+\series default
+, or
+\series bold
+CALL
+\end_layout
+
+\begin_layout Description
+UFUNC_<THING>_<ERR>
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ <THING> can be
+\series bold
+MASK
+\series default
+,
+\series bold
+SHIFT
+\series default
+, or
+\series bold
+FPE
+\series default
+, and <ERR> can be
+\series bold
+DIVIDEBYZERO
+\series default
+,
+\series bold
+OVERFLOW
+\series default
+,
+\series bold
+UNDERFLOW
+\series default
+, and
+\series bold
+INVALID
+\series default
+.
+\end_layout
+
+\begin_layout Description
+PyUFunc_<VALUE> <VALUE> can be
+\series bold
+One
+\series default
+ (1),
+\series bold
+Zero
+\series default
+ (0), or
+\series bold
+None
+\series default
+ (-1)
+\end_layout
+
+\begin_layout Subsection
+Macros
+\end_layout
+
+\begin_layout Description
+NPY_LOOP_BEGIN_THREADS
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Used in universal function code to only release the Python GIL if loop->obj
+ is not true (
+\emph on
+i.e.
+
+\emph default
+ this is not an OBJECT array loop).
+ Requires use of
+\family typewriter
+NPY_BEGIN_THREADS_DEF
+\family default
+ in variable declaration area.
+\end_layout
+
+\begin_layout Description
+NPY_LOOP_END_THREADS
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Used in universal function code to re-acquire the Python GIL if it was
+ released (because loop->obj was not true).
+
+\end_layout
+
+\begin_layout Description
+UFUNC_CHECK_ERROR (loop)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A macro used internally to check for errors and goto fail if found.
+ This macro requires a fail label in the current code block.
+ The
+\emph on
+loop
+\emph default
+ variable must have at least members (obj, errormask, and errorobj).
+ If
+\emph on
+loop
+\emph default
+->obj is nonzero, then
+\family typewriter
+PyErr_Occurred
+\family default
+() is called (meaning the GIL must be held).
+ If
+\emph on
+loop
+\emph default
+->obj is zero, then if
+\emph on
+loop
+\emph default
+->errormask is nonzero,
+\family typewriter
+PyUFunc_checkfperr
+\family default
+ is called with arguments
+\emph on
+loop
+\emph default
+->errormask and
+\emph on
+loop
+\emph default
+->errobj.
+ If the result of this check of the IEEE floating point registers is true
+ then the code redirects to the fail label which must be defined.
+\end_layout
+
+\begin_layout Description
+UFUNC_CHECK_STATUS (
+\emph on
+ret
+\emph default
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A macro that expands to platform-dependent code.
+ The
+\emph on
+ret
+\emph default
+ variable can can be any integer.
+ The
+\family typewriter
+UFUNC_FPE_
+\family default
+<ERR> bits are set in
+\emph on
+ret
+\emph default
+ according to the status of the corresponding error flags of the floating
+ point processor.
+
+\end_layout
+
+\begin_layout Subsection
+Functions
+\end_layout
+
+\begin_layout Description
+PyUFunc_FromFuncAndData (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyUFuncGenericFunction*
+\family default
+ func,
+\family typewriter
+void**
+\family default
+ data,
+\family typewriter
+char*
+\family default
+ types,
+\family typewriter
+int
+\family default
+ ntypes,
+\family typewriter
+int
+\family default
+ nin,
+\family typewriter
+int
+\family default
+ nout,
+\family typewriter
+int
+\family default
+ identity,
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+char*
+\family default
+ doc,
+\family typewriter
+int
+\family default
+ check_return)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new broadcasting universal function from required variables.
+ Each ufunc builds around the notion of an element-by-element operation.
+ Each ufunc object contains pointers to 1-d loops implementing the basic
+ functionality for each supported type.
+
+\end_layout
+
+\begin_layout Description
+nin The number of inputs to this operation.
+\end_layout
+
+\begin_layout Description
+nout The number of outputs
+\end_layout
+
+\begin_layout Description
+ntypes How many different data-type
+\begin_inset Quotes eld
+\end_inset
+
+signatures
+\begin_inset Quotes erd
+\end_inset
+
+ the ufunc has implemented.
+
+\end_layout
+
+\begin_layout Description
+func Must to an array of length
+\emph on
+ntypes
+\emph default
+ containing
+\family typewriter
+PyUFuncGenericFunction
+\family default
+ items.
+ These items are pointers to functions that acutally implement the underlying
+ (element-by-element) function
+\begin_inset Formula $N$
+\end_inset
+
+ times.
+ T
+\end_layout
+
+\begin_layout Description
+types Must be of length (
+\emph on
+nin
+\emph default
++
+\emph on
+nout
+\emph default
+)
+\emph on
+*ntypes
+\emph default
+, and it contains the data-types (built-in only) that the corresponding
+ function in the
+\emph on
+func
+\emph default
+ array can deal with.
+
+\end_layout
+
+\begin_layout Description
+data Should be
+\family typewriter
+NULL
+\family default
+ or a pointer to an array of size
+\emph on
+ntypes
+\emph default
+.
+ This array may contain arbitrary extra-data to be passed to the corresponding
+ 1-d loop function in the func array.
+
+\end_layout
+
+\begin_layout Description
+name The name for the ufunc.
+
+\end_layout
+
+\begin_layout Description
+doc Allows passing in a documentation string to be stored with the ufunc.
+ The documentation string should not contain the name of the function or
+ the calling signature as that will be dynamically determined from the object
+ and available when accessing the
+\series bold
+__doc__
+\series default
+ attribute of the ufunc.
+
+\end_layout
+
+\begin_layout Description
+check_return Unused and present for backwards compatibility of the C-API.
+ A corresponding
+\emph on
+check_return
+\emph default
+ integer does exist in the ufunc structure and it does get set with this
+ value when the ufunc object is created.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_RegisterLoopForType (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyUFuncObject*
+\family default
+ ufunc,
+\family typewriter
+int
+\family default
+ usertype,
+\family typewriter
+PyUFuncGenericFunction
+\family default
+ function,
+\family typewriter
+int*
+\family default
+ arg_types,
+\family typewriter
+void*
+\family default
+ data)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function allows the user to register a 1-d loop with an already-created
+ ufunc to be used whenever the ufunc is called with any of its input arguments
+ as the user-defined data-type.
+ This is needed in order to make ufuncs work with built-in data-types.
+ The data-type must have been previously registered with the numpy system.
+ The loop is passed in as
+\emph on
+function
+\emph default
+.
+ This loop can take arbitrary data which should be passed in as
+\emph on
+data
+\emph default
+.
+ The data-types the loop requires are passed in as
+\emph on
+arg_types
+\emph default
+ which must be a pointer to memory at least as large as ufunc->nargs.
+\end_layout
+
+\begin_layout Description
+PyUFunc_ReplaceLoopBySignature (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyUFuncObject*
+\family default
+ ufunc,
+\family typewriter
+PyUFuncGenericFunction
+\family default
+ newfunc,
+\family typewriter
+int*
+\family default
+ signature,
+\family typewriter
+PyUFuncGenericFunction*
+\family default
+ oldfunc)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Replace a 1-d loop matching the given
+\emph on
+signature
+\emph default
+ in the already-created
+\emph on
+ufunc
+\emph default
+ with the new 1-d loop newfunc.
+ Return the old 1-d loop function in
+\emph on
+oldfunc
+\emph default
+.
+ Return 0 on success and -1 on failure.
+ This function works only with built-in types (use
+\family typewriter
+PyUFunc_RegisterLoopForType
+\family default
+ for user-defined types).
+ A signature is an array of data-type numbers indicating the inputs followed
+ by the outputs assumed by the 1-d loop.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_GenericFunction (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyUFuncObject*
+\family default
+ self,
+\family typewriter
+PyObject*
+\family default
+ args,
+\family typewriter
+PyArrayObject**
+\family default
+ mps)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A generic ufunc call.
+ The ufunc is passed in as
+\emph on
+self
+\emph default
+, the arguments to the ufunc as
+\emph on
+args
+\emph default
+.
+ The
+\emph on
+mps
+\emph default
+ argument is an array of
+\family typewriter
+PyArrayObject
+\family default
+ pointers containing the converted input arguments as well as the ufunc
+ outputs on return.
+ The user is responsible for managing this array and receives a new reference
+ for each array in
+\emph on
+mps
+\emph default
+.
+ The total number of arrays in
+\emph on
+mps
+\emph default
+ is given by
+\emph on
+self
+\emph default
+->nin +
+\emph on
+self
+\emph default
+->nout.
+\end_layout
+
+\begin_layout Description
+PyUFunc_checkfperr (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+int
+\family default
+ errmask,
+\family typewriter
+PyObject*
+\family default
+ errobj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A simple interface to the IEEE error-flag checking support.
+ The
+\emph on
+errmask
+\emph default
+ argument is a mask of
+\family typewriter
+UFUNC_MASK_<ERR>
+\family default
+ bitmasks indicating which errors to check for (and how to check for them).
+ The
+\emph on
+errobj
+\emph default
+ must be a Python tuple with two elements: a string containing the name
+ which will be used in any communication of error and either a callable
+ Python object (call-back function) or
+\family typewriter
+Py_None
+\family default
+.
+ The callable object will only be used if
+\family typewriter
+UFUNC_ERR_CALL
+\family default
+ is set as the desired error checking method.
+ This routine manages the GIL and is safe to call even after releasing the
+ GIL.
+ If an error in the IEEE-compatibile hardware is determined a -1 is returned,
+ otherwise a 0 is returned.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_clearfperr (
+\family typewriter
+void
+\family default
+) ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Clear the IEEE error flags.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_GetPyValues (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+int*
+\family default
+ bufsize,
+\family typewriter
+int*
+\family default
+ errmask,
+\family typewriter
+PyObject**
+\family default
+ errobj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Get the Python values used for ufunc processing from the thread-local storage
+ area unless the defaults have been set in which case the name lookup is
+ bypassed.
+ The name is placed as a string in the first element of
+\emph on
+*errobj
+\emph default
+.
+ The second element is the looked-up function to call on error callback.
+ The value of the looked-up buffer-size to use is passed into
+\emph on
+bufsize
+\emph default
+, and the value of the error mask is placed into
+\emph on
+errmask
+\emph default
+.
+
+\end_layout
+
+\begin_layout Subsection
+Generic functions
+\end_layout
+
+\begin_layout Standard
+At the core of every ufunc is a collection of type-specific functions that
+ defines the basic functionality for each of the supported types.
+ These functions must evaluate the underlying function
+\begin_inset Formula $N\geq1$
+\end_inset
+
+ times.
+ Extra-data may be passed in that may be used during the calculation.
+ This feature allows some general functions to be used as these basic looping
+ functions.
+ The general function has all the code needed to point variables to the
+ right place and set up a function call.
+ The general function assumes that the actual function to call is passed
+ in as the extra data and calls it with the correct values.
+ All of these functions are suitable for placing directly in the array of
+ functions stored in the functions member of the PyUFuncObject structure.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_f_f_As_d_d (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_d_d (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_f_f (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_g_g (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_F_F_As_D_D (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_F_F (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_D_D (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_G_G (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type specific, core 1-d functions for ufuncs where each calculation is
+ obtained by calling a function taking one input argument and returning
+ one output.
+ This function is passed in
+\family typewriter
+func
+\family default
+.
+ The letters correspond to dtypechar's of the supported data types (
+\family typewriter
+f
+\family default
+ - float,
+\family typewriter
+d
+\family default
+ - double,
+\family typewriter
+g
+\family default
+ - long double,
+\family typewriter
+F
+\family default
+ - cfloat,
+\family typewriter
+D
+\family default
+ - cdouble,
+\family typewriter
+G
+\family default
+ - clongdouble).
+ The argument
+\emph on
+func
+\emph default
+ must support the same signature.
+ The _As_X_X variants assume ndarray's of one data type but cast the values
+ to use an underlying function that takes a different data type.
+ Thus,
+\family typewriter
+PyUFunc_f_f_As_d_d
+\family default
+ uses ndarrays of data type
+\family typewriter
+NPY_FLOAT
+\family default
+ but calls out to a C-function that takes double and returns double.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_ff_f_As_dd_d (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_ff_f (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_dd_d (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_gg_g (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_FF_F_As_DD_D (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_DD_D (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_FF_F (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_GG_G (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Type specific, core 1-d functions for ufuncs where each calculation is
+ obtained by calling a function taking two input arguments and returning
+ one output.
+ The underlying function to call is passed in as
+\emph on
+func
+\emph default
+.
+ The letters correspond to dtypechar's of the specific data type supported
+ by the general-purpose function.
+ The argument
+\family typewriter
+func
+\family default
+ must support the corresponding signature.
+ The
+\family typewriter
+_As_XX_X
+\family default
+ variants assume ndarrays of one data type but cast the values at each iteration
+ of the loop to use the underlying function that takes a different data
+ type.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_O_O (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+PyUFunc_OO_O (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ One-input, one-output, and two-input, one-output core 1-d functions for
+ the
+\family typewriter
+NPY_OBJECT
+\family default
+ data type.
+ These functions handle reference count issues and return early on error.
+ The actual function to call is
+\emph on
+func
+\emph default
+ and it must accept calls with the signature (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+) for
+\family typewriter
+PyUFunc_O_O
+\family default
+ or (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject
+\family default
+ *,
+\family typewriter
+PyObject
+\family default
+ *) for
+\family typewriter
+PyUFunc_OO_O
+\family default
+.
+\end_layout
+
+\begin_layout Description
+PyUFunc_O_O_method (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This general purpose 1-d core function assumes that
+\emph on
+func
+\emph default
+ is a string representing a method of the input object.
+ For each iteration of the loop, the Python obejct is extracted from the
+ array and its
+\emph on
+func
+\emph default
+ method is called returning the result to the output array.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_OO_O_method (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This general purpose 1-d core function assumes that
+\emph on
+func
+\emph default
+ is a string representing a method of the input object that takes one argument.
+ The first argument in
+\emph on
+args
+\emph default
+ is the method whose function is called, the second argument in
+\emph on
+args
+\emph default
+ is the argument passed to the function.
+ The output of the function is stored in the third entry of
+\emph on
+args
+\emph default
+.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_On_Om (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ func)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is the 1-d core function used by the dynamic ufuncs created by umath.frompy
+func(function, nin, nout).
+ In this case
+\emph on
+func
+\emph default
+ is a pointer to a
+\family typewriter
+PyUFunc_PyFuncData
+\family default
+ structure which has definition {
+\family typewriter
+int
+\family default
+ nin;
+\family typewriter
+int
+\family default
+ nout;
+\family typewriter
+PyObject*
+\family default
+ callable}.
+ At each iteration of the loop, the
+\emph on
+nin
+\emph default
+ input objects are exctracted from their object arrays and placed into an
+ argument tuple, the Python
+\emph on
+callable
+\emph default
+ is called with the input arguments, and the nout outputs are placed into
+ their object arrays.
+
+\end_layout
+
+\begin_layout Section
+Importing the API
+\end_layout
+
+\begin_layout Description
+PY_UFUNC_UNIQUE_SYMBOL
+\end_layout
+
+\begin_layout Description
+NO_IMPORT_UFUNC
+\end_layout
+
+\begin_layout Description
+import_ufunc (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void
+\family default
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These are the constants and functions for accessing the ufunc C-API from
+ extension modules in precisely the same way as the array C-API can be accessed.
+ The
+\family typewriter
+import_ufunc
+\family default
+() function must always be called (in the initialization subroutine of the
+ extension module).
+ If your extension module is in one file then that is all that is required.
+ The other two constants are useful if your extension module makes use of
+ multiple files.
+ In that case, define
+\family typewriter
+PY_UFUNC_UNIQUE_SYMBOL
+\family default
+ to something unique to your code and then in source files that do not contain
+ the module initialization function but still need access to the UFUNC API,
+ define
+\family typewriter
+PY_UFUNC_UNIQUE_SYMBOL
+\family default
+ to the same name used previously and also define
+\family typewriter
+NO_IMPORT_UFUNC
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The C-API is actually an array of function pointers.
+ This array is created (and pointed to by a global variable) by import_ufunc.
+ The global variable is either statically defined or allowed to be seen
+ by other files depending on the state of
+\family typewriter
+Py_UFUNC_UNIQUE_SYMBOL
+\family default
+ and
+\family typewriter
+NO_IMPORT_UFUNC
+\family default
+.
+
+\begin_inset LatexCommand index
+name "ufunc!C-API|)"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "C-API!ufunc|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+How to extend NumPy
+\end_layout
+
+\begin_layout Quotation
+That which is static and repetitive is boring.
+ That which is dynamic and random is confusing.
+ In between lies art.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+John A.
+ Locke
+\end_layout
+
+\begin_layout Quotation
+Science is a differential equation.
+ Religion is a boundary condition.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Alan Turing
+\end_layout
+
+\begin_layout Section
+Writing an extension module
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "sec:Writing-an-extension"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "extension module|("
+
+\end_inset
+
+While the ndarray object is designed to allow rapid computation in Python,
+ it is also designed to be general-purpose and satisfy a wide-variety of
+ computational needs.
+ As a result, if absolute speed is essential, there is no replacement for
+ a well-crafted, compiled loop specific to your application and hardware.
+ This is one of the reasons that numpy includes f2py so that an easy-to-use
+ mechanisms for linking (simple) C/C++ and (arbitrary) Fortran code directly
+ into Python are available.
+ You are encouraged to use and improve this mechanism.
+ The purpose of this section is not to document this tool but to document
+ the more basic steps to writing an extension module that this tool depends
+ on.
+
+\end_layout
+
+\begin_layout Standard
+When an extension module is written, compiled, and installed to somewhere
+ in the Python path (sys.path), the code can then be imported into Python
+ as if it were a standard python file.
+ It will contain objects and methods that have been defined and compiled
+ in C code.
+ The basic steps for doing this in Python are well-documented and you can
+ find more information in the documentation for Python itself available
+ online at
+\begin_inset LatexCommand url
+name "www.python.org"
+target "http://www.python.org"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Standard
+In addition to the Python C-API, there is a full and rich C-API for NumPy
+ allowing sophisticated manipulations on a C-level.
+ However, for most applications, only a few API calls will typically be
+ used.
+ If all you need to do is extract a pointer to memory along with some shape
+ information to pass to another calculation routine, then you will use very
+ different calls, then if you are trying to create a new array-like type
+ or add a new data type for ndarrays.
+ This chapter documents the API calls and macros that are most commonly
+ used.
+\end_layout
+
+\begin_layout Section
+Required subroutine
+\end_layout
+
+\begin_layout Standard
+There is exactly one function that must be defined in your C-code in order
+ for Python to use it as an extension module.
+ The function must be called init<name> where <name> is the name of the
+ module from Python.
+ This function must be declared so that it is visible to code outside of
+ the routine.
+ Besides adding the methods and constants you desire, this subroutine must
+ also contain calls to import_array() and/or import_ufunc() depending on
+ which C-API is needed.
+ Forgetting to place these commands will show itself as an ugly segmentation
+ fault (crash) as soon as any C-API subroutine is actually called.
+ It is actually possible to have multiple init<name> functions in a single
+ file in which case multiple modules will be defined by that file.
+ However, there are some tricks to get that to work correctly and it is
+ not covered here.
+\end_layout
+
+\begin_layout Standard
+A minimal init<name> method looks like
+\end_layout
+
+\begin_layout LyX-Code
+PyMODINIT_FUNC
+\newline
+init<name>(void)
+\newline
+{
+\newline
+ (void)Py_InitModule(
+\begin_inset Quotes erd
+\end_inset
+
+<name>
+\begin_inset Quotes erd
+\end_inset
+
+, mymethods);
+\newline
+ import_array();
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+The mymethods must be an array (usually statically declared) of PyMethodDef
+ structures which contain method names, actual C-functions, a variable indicatin
+g whether the method uses keyword arguments or not, and docstrings.
+ These are explained in the next section.
+ If you want to add constants to the module, then you store the returned
+ value from Py_InitModule which is a module object.
+ The most general way to add itmes to the module is to get the module dictionary
+ using PyModule_GetDict(module).
+ With the module dictionary, you can add whatever you like to the module
+ manually.
+ An easier way to add objects to the module is to use one of three additional
+ Python C-API calls that do not require a separate extraction of the module
+ dictionary.
+ These are documented in the Python documentation, but repeated here for
+ convenience:
+\end_layout
+
+\begin_layout Description
+PyModule_AddObject (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ module,
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+PyObject*
+\family default
+ value)
+\end_layout
+
+\begin_layout Description
+PyModule_AddIntConstant (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ module,
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+long
+\family default
+ value)
+\end_layout
+
+\begin_layout Description
+PyModule_AddStringConstant (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ module,
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+char*
+\family default
+ value)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ All three of these functions require the
+\family typewriter
+module
+\family default
+ object (the return value of Py_InitModule).
+ The
+\family typewriter
+name
+\family default
+ is a string that labels the value in the module.
+ Depending on which function is called, the
+\family typewriter
+value
+\family default
+ argument is either a general object (PyModule_AddObject steals a reference
+ to it), an integer constant, or a string constant.
+\end_layout
+
+\begin_layout Section
+Defining functions
+\end_layout
+
+\begin_layout Standard
+The second argument passed in to the Py_InitModule function is a structure
+ that makes it easy to to define functions in the module.
+ In the example given above, the mymethods structure would have been defined
+ earlier in the file (usually right before the init<name> subroutine) to
+
+\end_layout
+
+\begin_layout LyX-Code
+static PyMethodDef mymethods[] = {
+\newline
+{
+\begin_inset Quotes erd
+\end_inset
+
+nokeywordfunc
+\begin_inset Quotes erd
+\end_inset
+
+,nokeyword_cfunc,
+\newline
+METH_VARARGS,
+\newline
+
+\begin_inset Quotes erd
+\end_inset
+
+Doc string
+\begin_inset Quotes erd
+\end_inset
+
+},
+\newline
+{
+\begin_inset Quotes erd
+\end_inset
+
+keywordfunc
+\begin_inset Quotes erd
+\end_inset
+
+, keyword_cfunc,
+\end_layout
+
+\begin_layout LyX-Code
+METH_VARARGS|METH_KEYWORDS,
+\newline
+
+\begin_inset Quotes erd
+\end_inset
+
+Doc string
+\begin_inset Quotes erd
+\end_inset
+
+},
+\newline
+{NULL, NULL, 0, NULL} /* Sentinel */
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+Each entry in the mymethods array is a PyMethodDef structure containing
+ 1) the Python name, 2) the C-function that implements the function, 3)
+ flags indicating whether or not keywords are accepted for this function,
+ and 4) The docstring for the function.
+ Any number of functions may be defined for a single module by adding more
+ entries to this table.
+ The last entry must be all NULL as shown to act as a sentinel.
+ Python looks for this entry to know that all of the functions for the module
+ have been defined.
+
+\end_layout
+
+\begin_layout Standard
+The last thing that must be done to finish the extension module is to actually
+ write the code that performs the desired functions.
+ There are two kinds of functions: those that don't accept keyword arguments,
+ and those that do.
+\end_layout
+
+\begin_layout Subsection
+Functions without keyword arguments
+\end_layout
+
+\begin_layout Standard
+Functions that don't accept keyword arguments should be written as
+\end_layout
+
+\begin_layout LyX-Code
+static PyObject*
+\newline
+nokeyword_cfunc (PyObject *dummy, PyObject *args)
+\newline
+{
+\newline
+ /*
+ convert Python arguments */
+\newline
+ /* do function */
+\end_layout
+
+\begin_layout LyX-Code
+ /* return something */
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Standard
+The dummy argument is not used in this context and can be safely ignored.
+ The
+\emph on
+args
+\emph default
+ argument contains all of the arguments passed in to the function as a tuple.
+ You can do anything you want at this point, but usually the easiest way
+ to manage the input arguments is to call
+\family typewriter
+PyArg_ParseTuple
+\family default
+ (args, format_string, addresses_to_C_variables...) or
+\family typewriter
+PyArg_UnpackTuple
+\family default
+ (tuple,
+\begin_inset Quotes eld
+\end_inset
+
+name
+\begin_inset Quotes erd
+\end_inset
+
+, min, max, ...).
+ A good description of how to use the first function is contained in the
+ Python C-API reference manual under section 5.5 (Parsing arguments and building
+ values).
+ You should pay particular attention to the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ format which uses converter functions to go between the Python object and
+ the C object.
+ All of the other format functions can be (mostly) thought of as special
+ cases of this general rule.
+ There are several converter functions defined in the NumPy C-API that may
+ be of use.
+ In particular, the
+\family typewriter
+PyArray_DescrConverter
+\family default
+ function is very useful to support arbitrary data-type specification.
+ This function transforms any valid data-type Python object into a
+\family typewriter
+PyArray_Descr*
+\family default
+ object.
+ Remember to pass in the address of the C-variables that should be filled
+ in.
+\end_layout
+
+\begin_layout Standard
+There are lots of examples of how to use
+\family typewriter
+PyArg_ParseTuple
+\family default
+ throughout the NumPy source code.
+ The standard usage is like this:
+\end_layout
+
+\begin_layout LyX-Code
+PyObject *input;
+\end_layout
+
+\begin_layout LyX-Code
+PyArray_Descr *dtype;
+\end_layout
+
+\begin_layout LyX-Code
+if (!PyArg_ParseTuple(args, "OO&", &input,
+\newline
+ PyArray_DescrCon
+verter,
+\newline
+ &dtype)) return NULL;
+\end_layout
+
+\begin_layout Standard
+It is important to keep in mind that you get a
+\emph on
+borrowed
+\emph default
+ reference to the object when using the
+\begin_inset Quotes eld
+\end_inset
+
+O
+\begin_inset Quotes erd
+\end_inset
+
+ format string.
+ However, the converter functions usually require some form of memory handling.
+ In this example, if the conversion is successful,
+\emph on
+dtype
+\emph default
+ will hold a new reference to a
+\family typewriter
+PyArray_Descr*
+\family default
+ object, while
+\emph on
+input
+\emph default
+ will hold a borrowed reference.
+ Therefore, if this conversion were mixed with another conversion (say to
+ an integer) and the data-type conversion was successful but the integer
+ conversion failed, then you would need to release the reference count to
+ the data-type object before returning.
+ A typical way to do this is to set
+\emph on
+dtype
+\emph default
+ to
+\family typewriter
+NULL
+\family default
+ before calling PyArg_ParseTuple and then use
+\family typewriter
+Py_XDECREF
+\family default
+ on
+\emph on
+dtype
+\emph default
+ before returning.
+
+\end_layout
+
+\begin_layout Standard
+After the input arguments are processed, the code that actually does the
+ work is written (likely calling other functions as needed).
+ The final step of the C-function is to return something.
+ If an error is encountered then
+\family typewriter
+NULL
+\family default
+ should be returned (making sure an error has actually been set).
+ If nothing should be returned then increment
+\family typewriter
+Py_None
+\family default
+ and return it.
+ If a single object should be returned then it is returned (ensuring that
+ you own a reference to it first).
+ If multiple objects should be returned then you need to return a tuple.
+ The
+\family typewriter
+Py_BuildValue
+\family default
+ (format_string, c_variables...) function makes it easy to build tuples of
+ Python objects from C variables.
+ Pay special attention to the difference between 'N' and 'O' in the format
+ string or you can easily create memory leaks.
+ The 'O' format string increments the reference count of the
+\family typewriter
+PyObject*
+\family default
+ C-variable it corresponds to, while the 'N' format string steals a reference
+ to the corresponding
+\family typewriter
+PyObject*
+\family default
+ C-variable.
+ You should use 'N' if you ave already created a reference for the object
+ and just want to give that reference to the tuple.
+ You should use 'O' if you only have a borrowed reference to an object and
+ need to create one to provide for the tuple.
+
+\end_layout
+
+\begin_layout Subsection
+Functions with keyword arguments
+\end_layout
+
+\begin_layout Standard
+These functions are very similar to functions without keyword arguments.
+ The only difference is that the function signature is
+\end_layout
+
+\begin_layout LyX-Code
+static PyObject*
+\newline
+keyword_cfunc (PyObject *dummy, PyObject *args, PyObject
+ *kwds)
+\newline
+{
+\newline
+...
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+The kwds argument holds a Python dictionary whose keys are the names of
+ the keyword arguments and whose values are the corresponding keyword-argument
+ values.
+ This dictionary can be processed however you see fit.
+ The easiest way to handle it, however, is to replace the
+\family typewriter
+PyArg_ParseTuple
+\family default
+ (args, format_string, addresses...) function with a call to
+\family typewriter
+PyArg_ParseTupleAndKeywords
+\family default
+ (args, kwds, format_string, char *kwlist[], addresses...).
+ The kwlist parameter to this function is a
+\family typewriter
+NULL
+\family default
+-terminated array of strings providing the expected keyword arguments.
+ There should be one string for each entry in the format_string.
+ Using this function will raise a TypeError if invalid keyword arguments
+ are passed in.
+
+\end_layout
+
+\begin_layout Standard
+For more help on this function please see section 1.8 (Keyword Paramters
+ for Extension Functions) of the Extending and Embedding tutorial in the
+ Python documentation.
+\end_layout
+
+\begin_layout Subsection
+Reference counting
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "reference counting|("
+
+\end_inset
+
+The biggest difficulty when writing extension modules is reference counting.
+ It is an important reason for the popularity of f2py, weave, pyrex, ctypes,
+ etc....
+ If you mis-handle reference counts you can get problems from memory-leaks
+ to segmentation faults.
+ The only strategy I know of to handle reference counts correctly is blood,
+ sweat, and tears.
+ First, you force it into your head that every Python variable has a reference
+ count.
+ Then, you understand exactly what each function does to the reference count
+ of your objects, so that you can properly use DECREF and INCREF when you
+ need them.
+ Reference counting can really test the amount of patience and diligence
+ you have towards your programming craft.
+ Despite the grim depiction, most cases of reference counting are quite
+ straightforward with the most common difficulty being not using DECREF
+ on objects before exiting early from a routine due to some error.
+ In second place, is the common error of not owning the reference on an
+ object that is passed to a function or macro that is going to steal the
+ reference (
+\emph on
+e.g.
+
+\emph default
+
+\family typewriter
+PyTuple_SET_ITEM
+\family default
+, and most functions that take
+\family typewriter
+PyArray_Descr
+\family default
+ objects).
+
+\end_layout
+
+\begin_layout Standard
+Typically you get a new reference to a variable when it is created or is
+ the return value of some function (there are some prominent exceptions,
+ however --- such as getting an item out of a tuple or a dictionary).
+ When you own the reference, you are responsible to make sure that
+\family typewriter
+Py_DECREF
+\family default
+(var) is called when the variable is no longer necessary (and no other function
+ has
+\begin_inset Quotes eld
+\end_inset
+
+stolen
+\begin_inset Quotes erd
+\end_inset
+
+ its reference).
+ Also, if you are passing a Python object to a function that will
+\begin_inset Quotes eld
+\end_inset
+
+steal
+\begin_inset Quotes erd
+\end_inset
+
+ the reference, then you need to make sure you own it (or use
+\family typewriter
+Py_INCREF
+\family default
+ to get your own reference).
+ You will also encounter the notion of borrowing a reference.
+ A function that borrows a reference does not alter the reference count
+ of the object and does not expect to
+\begin_inset Quotes eld
+\end_inset
+
+hold on
+\begin_inset Quotes erd
+\end_inset
+
+ to the reference.
+ It's just going to use the object temporarily.
+ When you use
+\family typewriter
+PyArg_ParseTuple
+\family default
+ or
+\family typewriter
+PyArg_UnpackTuple
+\family default
+ you receive a borrowed reference to the objects in the tuple and should
+ not alter their reference count inside your function.
+ With practice, you can learn to get reference counting right, but it can
+ be frustrating at first.
+
+\end_layout
+
+\begin_layout Standard
+One common source of reference-count errors is the
+\family typewriter
+Py_BuildValue
+\family default
+ function.
+ Pay careful attention to the difference between the 'N' format character
+ and the 'O' format character.
+ If you create a new object in your subroutine (such as an output array),
+ and you are passing it back in a tuple of return values, then you should
+ most-likely use the 'N' format character in
+\family typewriter
+Py_BuildValue
+\family default
+.
+ The 'O' character will increase the reference count by one.
+ This will leave the caller with two reference counts for a brand-new array.
+ When the variable is deleted and the reference count decremented by one,
+ there will still be that extra reference count, and the array will never
+ be deallocated.
+ You will have a reference-counting induced memory leak.
+ Using the 'N' character will avoid this situation as it will return to
+ the caller an object (inside the tuple) with a single reference count.
+
+\begin_inset LatexCommand index
+name "reference counting|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Dealing with array objects
+\end_layout
+
+\begin_layout Standard
+Most extension modules for NumPy will need to access the memory for an ndarray
+ object (or one of it's sub-classes).
+ The easiest way to do this doesn't require you to know much about the internals
+ of NumPy.
+ The method is to
+\end_layout
+
+\begin_layout Enumerate
+Ensure you are dealing with a well-behaved array (aligned, in machine byte-order
+ and single-segment) of the correct type and number of dimensions.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+By converting it from some Python object using
+\family typewriter
+PyArray_FromAny
+\family default
+ or a macro built on it.
+
+\end_layout
+
+\begin_layout Enumerate
+By constructing a new ndarray of your desired shape and type using
+\family typewriter
+PyArray_NewFromDescr
+\family default
+ or a simpler macro or function based on it.
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Get the shape of the array and a pointer to its actual data.
+
+\end_layout
+
+\begin_layout Enumerate
+Pass the data and shape information on to a subroutine or other section
+ of code that actually performs the computation.
+
+\end_layout
+
+\begin_layout Enumerate
+If you are writing the algorithm, then I recommend that you use the stride
+ information contained in the array to access the elements of the array
+ (the
+\family typewriter
+PyArray_GETPTR
+\family default
+ macros make this painless).
+ Then, you can relax your requirements so as not to force a single-segment
+ array and the data-copying that might result.
+
+\end_layout
+
+\begin_layout Standard
+Each of these sub-topics is covered in the following sub-sections.
+\end_layout
+
+\begin_layout Subsection
+Converting an arbitrary sequence object
+\end_layout
+
+\begin_layout Standard
+The main routine for obtaining an array from any Python object that can
+ be converted to an array is
+\family typewriter
+PyArray_FromAny
+\family default
+.
+ This function is very flexible with many input arguments.
+ Several macros make it easier to use the basic function.
+
+\family typewriter
+PyArray_FROM_OTF
+\family default
+ is arguably the most useful of these macros for the most common uses.
+ It allows you to convert an arbitrary Python object to an array of a specific
+ builtin data-type (
+\emph on
+e.g.
+
+\emph default
+ float), while specifying a particular set of requirements (
+\emph on
+e.g.
+
+\emph default
+ contiguous, aligned, and writeable).
+ The syntax is
+\end_layout
+
+\begin_layout Description
+PyArray_FROM_OTF (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyObject*
+\family default
+ obj,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+int
+\family default
+ requirements)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an ndarray from any Python object,
+\emph on
+obj
+\emph default
+, that can be converted to an array.
+ The number of dimensions in the returned array is determined by the object.
+ The desired data-type of the returned array is provided in
+\emph on
+typenum
+\emph default
+ which should be one of the enumerated types.
+ The
+\emph on
+requirements
+\emph default
+ for the returned array can be any combination of standard array flags.
+ Each of these arguments is explained in more detail below.
+ You receive a new reference to the array on success.
+ On failure,
+\family typewriter
+NULL
+\family default
+ is returned and an exception is set.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+obj The object can be any Python object convertable to an ndarray.
+ If the object is already (a subclass of) the ndarray that satisfies the
+ requirements then a new reference is returned.
+ Otherwise, a new array is constructed.
+ The contents of
+\emph on
+obj
+\emph default
+ are copied to the new array unless the array interface is used so that
+ data does not have to be copied.
+ Objects that can be converted to an array include: 1) any nested sequence
+ object, 2) any object exposing the array interface, 3) any object with
+ an
+\series bold
+__array__
+\series default
+ method (which should return an ndarray), and 4) any scalar object (becomes
+ a zero-dimensional array).
+ Sub-classes of the ndarray that otherwise fit the requirements will be
+ passed through.
+ If you want to ensure a base-class ndarray, then use
+\family typewriter
+NPY_ENSUREARRAY
+\family default
+ in the requirements flag.
+ A copy is made only if necessary.
+ If you want to guarantee a copy, then pass in
+\family typewriter
+NPY_ENSURECOPY
+\family default
+ to the requirements flag.
+
+\end_layout
+
+\begin_layout Description
+typenum One of the enumerated types or
+\family typewriter
+NPY_NOTYPE
+\family default
+ if the data-type should be determined from the object itself.
+ The C-based names can be used:
+\end_layout
+
+\begin_deeper
+\begin_layout Quote
+
+\family typewriter
+NPY_BOOL
+\family default
+,
+\family typewriter
+NPY_BYTE
+\family default
+,
+\family typewriter
+NPY_UBYTE
+\family default
+,
+\family typewriter
+NPY_SHORT
+\family default
+,
+\family typewriter
+NPY_USHORT
+\family default
+,
+\family typewriter
+NPY_INT
+\family default
+,
+\family typewriter
+NPY_UINT
+\family default
+,
+\family typewriter
+NPY_LONG
+\family default
+,
+\family typewriter
+NPY_ULONG
+\family default
+,
+\family typewriter
+NPY_LONGLONG
+\family default
+,
+\family typewriter
+NPY_ULONGLONG
+\family default
+,
+\family typewriter
+NPY_DOUBLE
+\family default
+,
+\family typewriter
+NPY_LONGDOUBLE
+\family default
+,
+\family typewriter
+NPY_CFLOAT
+\family default
+,
+\family typewriter
+NPY_CDOUBLE
+\family default
+,
+\family typewriter
+NPY_CLONGDOUBLE
+\family default
+,
+\family typewriter
+NPY_OBJECT
+\family default
+.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ Alternatively, the bit-width names can be used as supported on the platform.
+ For example:
+\end_layout
+
+\begin_deeper
+\begin_layout Quote
+
+\family typewriter
+NPY_INT8
+\family default
+,
+\family typewriter
+NPY_INT16
+\family default
+,
+\family typewriter
+NPY_INT32
+\family default
+,
+\family typewriter
+NPY_INT64
+\family default
+,
+\family typewriter
+NPY_UINT8
+\family default
+,
+\family typewriter
+NPY_UINT16
+\family default
+,
+\family typewriter
+NPY_UINT32
+\family default
+,
+\family typewriter
+NPY_UINT64
+\family default
+,
+\family typewriter
+NPY_FLOAT32
+\family default
+,
+\family typewriter
+NPY_FLOAT64
+\family default
+,
+\family typewriter
+NPY_COMPLEX64
+\family default
+,
+\family typewriter
+NPY_COMPLEX128
+\family default
+.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ The object will be converted to the desired type only if it can be done
+ without losing precision.
+ Otherwise
+\family typewriter
+NULL
+\family default
+ will be returned and an error raised.
+ Use
+\family typewriter
+NPY_FORCECAST
+\family default
+ in the requirements flag to override this behavior.
+
+\end_layout
+
+\begin_layout Description
+requirements The memory model for an ndarray admits arbitrary strides in
+ each dimension to advance to the next element of the array.
+ Often, however, you need to interface with code that expects a C-contiguous
+ or a Fortran-contiguous memory layout.
+ In addition, an ndarray can be misaligned (the address of an element is
+ not at an integral multiple of the size of the element) which can cause
+ your program to crash (or at least work more slowly) if you try and dereference
+ a pointer into the array data.
+ Both of these problems can be solved by converting the Python object into
+ an array that is more
+\begin_inset Quotes eld
+\end_inset
+
+well-behaved
+\begin_inset Quotes erd
+\end_inset
+
+ for your specific usage.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The requirements flag allows specification of what kind of array is acceptable.
+ If the object passed in does not satisfy this requirements then a copy
+ is made so that thre returned object will satisfy the requirements.
+ these ndarray can use a very generic pointer to memory.
+ This flag allows specification of the desired properties of the returned
+ array object.
+ All of the flags are explained in the detailed API chapter.
+ The flags most commonly needed are NPY_IN_ARRAY, NPY_OUT_ARRAY, and NPY_INOUT_A
+RRAY:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_IN_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED.
+ This combination of flags is useful for arrays that must be in C-contiguous
+ order and aligned.
+ These kinds of arrays are usually input arrays for some algorithm.
+\end_layout
+
+\begin_layout Description
+NPY_OUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE.
+ This combination of flags is useful to specify an array that is in C-contiguous
+ order, is aligned, and can be written to as well.
+ Such an array is usually returned as output (although normally such output
+ arrays are created from scratch).
+
+\end_layout
+
+\begin_layout Description
+NPY_INOUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE
+ | NPY_UPDATEIFCOPY.
+ This combination of flags is useful to specify an array that will be used
+ for both input and output.
+ If a copy is needed, then when the temporary is deleted (by your use of
+ Py_DECREF at the end of the interface routine), the temporary array will
+ be copied back into the original array passed in.
+ Use of the UPDATEIFCOPY flag requires that the input object is already
+ an array (because other objects cannot be automatically updated in this
+ fashion).
+ If an error occurs use
+\series bold
+PyArray_DECREF_ERR
+\series default
+(obj) on an array with the NPY_UPDATEIFCOPY flag set.
+ This will delete the array without causing the contents to be copied back
+ into the original array.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ Other useful flags that can be OR'd as additional requirements are:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+NPY_FORCECAST Cast to the desired type, even if it can't be done without
+ losing information.
+\end_layout
+
+\begin_layout Description
+NPY_ENSURECOPY Make sure the resulting array is a copy of the original.
+\end_layout
+
+\begin_layout Description
+NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray and
+ not a sub-class.
+\end_layout
+
+\end_deeper
+\end_deeper
+\begin_layout Note
+Whether or not an array is byte-swapped is determined by the data-type of
+ the array.
+ Native byte-order arrays are always requested by PyArray_FROM_OTF and so
+ there is no need for a NPY_NOTSWAPPED flag in the requirements argument.
+ There is also no way to get a byte-swapped array from this routine.
+\end_layout
+
+\begin_layout Subsection
+Creating a brand-new ndarray
+\end_layout
+
+\begin_layout Standard
+Quite often new arrays must be created from within extension-module code.
+ Perhaps an output array is needed and you don't want the caller to have
+ to supply it.
+ Perhaps only a temporary array is needed to hold an intermediate calculation.
+ Whatever the need there are simple ways to get an ndarray object of whatever
+ data-type is needed.
+ The most general function for doing this is PyArray_NewFromDescr.
+ All array creation functions go through this heavily re-used code.
+ Because of its flexibility, it can be somewhat confusing to use.
+ As a result, simpler forms exist that are easier to use.
+
+\end_layout
+
+\begin_layout Description
+PyArray_SimpleNew (
+\family typewriter
+PyObject*
+\family default
+)(
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ typenum)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function allocates new memory and places it in an ndarray with
+\family typewriter
+nd
+\family default
+ dimensions whose shape is determined by the array of at least
+\family typewriter
+nd
+\family default
+ items pointed to by
+\family typewriter
+dims
+\family default
+.
+ The memory for the array is uninitialized (unless typenum is
+\series bold
+PyArray_OBJECT
+\series default
+ in which case each element in the array is set to NULL).
+ The
+\family typewriter
+typenum
+\family default
+ argument allows specification of any of the builtin data-types such as
+
+\series bold
+PyArray_FLOAT
+\series default
+ or
+\series bold
+PyArray_LONG
+\series default
+.
+ The memory for the array can be set to zero if desired using
+\series bold
+PyArray_FILLWBYTE
+\series default
+(return_object, 0).
+
+\end_layout
+
+\begin_layout Description
+PyArray_SimpleNewFromData (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+int
+\family default
+ nd,
+\family typewriter
+npy_intp*
+\family default
+ dims,
+\family typewriter
+int
+\family default
+ typenum,
+\family typewriter
+void*
+\family default
+ data)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Sometimes, you want to wrap memory allocated elsewhere into an ndarray
+ object for downstream use.
+ This routine makes it straightforward to do that.
+ The first three arguments are the same as in
+\series bold
+PyArray_SimpleNew
+\series default
+, the final argument is a pointer to a block of contiguous memory that the
+ ndarray should use as it's data-buffer which will be interpreted in C-style
+ contiguous fashion.
+ A new reference to an ndarray is returned, but the ndarray will not own
+ its data.
+ When this ndarray is deallocated, the pointer will not be freed.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ You should ensure that the provided memory is not freed while the returned
+ array is in existence.
+ The easiest way to handle this is if data comes from another reference-counted
+ Python object.
+ The reference count on this object should be increased after the pointer
+ is passed in, and the base member of the returned ndarray should point
+ to the Python object that owns the data.
+ Then, when the ndarray is deallocated, the base-member will be DECREF'd
+ appropriately.
+ If you want the memory to be freed as soon as the ndarray is deallocated
+ then simply set the OWNDATA flag on the returned ndarray.
+
+\end_layout
+
+\begin_layout Subsection
+Getting at ndarray memory and accessing elements of the ndarray
+\end_layout
+
+\begin_layout Standard
+If obj is an ndarray (PyArrayObject *), then the data-area of the ndarray
+ is pointed to by the void* pointer
+\series bold
+PyArray_DATA
+\series default
+(obj) or the char* pointer
+\series bold
+PyArray_BYTES
+\series default
+(obj).
+ Remember that (in general) this data-area may not be aligned according
+ to the data-type, it may represent byte-swapped data, and/or it may not
+ be writeable.
+ If the data area is aligned and in native byte-order, then how to get at
+ a specific element of the array is determined only by the array of npy_intp
+ variables,
+\series bold
+PyArray_STRIDES
+\series default
+(obj).
+ In particular, this c-array of integers shows how many
+\series bold
+bytes
+\series default
+ must be added to the current element pointer to get to the next element
+ in each dimension.
+ For arrays less than 4-dimensions there are
+\series bold
+PyArray_GETPTR<k>
+\series default
+(obj, ...) macros where <k> is the integer 1, 2, 3, or 4 that make using the
+ array strides easier.
+ The arguments ....
+ represent <k> non-negative integer indices into the array.
+ For example, suppose
+\family typewriter
+E
+\family default
+ is a 3-dimensional ndarray.
+ A (void*) pointer to the element
+\family typewriter
+E[i,j,k]
+\family default
+ is obtained as PyArray_GETPTR3(E, i, j, k).
+
+\end_layout
+
+\begin_layout Standard
+As explained previously, C-style contiguous arrays and Fortran-style contiguous
+ arrays have particular striding patterns.
+ Two array flags (NPY_C_CONTIGUOUS and NPY_F_CONTIGUOUS) indicate whether
+ or not the striding pattern of a particular array matches the C-style contiguou
+s or Fortran-style contiguous or neither.
+ Whether or not the striding pattern matches a standard C or Fortran one
+ can be tested Using
+\family typewriter
+PyArray_ISCONTIGUOUS
+\family default
+(obj) and
+\family typewriter
+PyArray_ISFORTRAN
+\family default
+(obj) respectively.
+ Most third-party libraries expect contiguous arrays.
+ But, often it is not difficult to support general-purpose striding.
+ I encourage you to use the striding information in your own code whenever
+ possible, and reserve single-segment requirements for wrapping third-party
+ code.
+ Using the striding information provided with the ndarray rather than requiring
+ a contiguous striding reduces copying that otherwise must be made.
+
+\end_layout
+
+\begin_layout Section
+Example
+\end_layout
+
+\begin_layout Standard
+The following example shows how you might write a wrapper that accepts two
+ input arguments (that will be converted to an array) and an output argument
+ (that must be an array).
+ The function returns None and updates the output array.
+
+\begin_inset LatexCommand index
+name "extension module|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout LyX-Code
+static PyObject *
+\end_layout
+
+\begin_layout LyX-Code
+example_wrapper(PyObject *dummy, PyObject *args)
+\end_layout
+
+\begin_layout LyX-Code
+{
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject *arg1=NULL, *arg2=NULL, *out=NULL;
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject *arr1=NULL, *arr2=NULL, *oarr=NULL;
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ if (!PyArg_ParseTuple(args,
+\begin_inset Quotes eld
+\end_inset
+
+OOO&
+\begin_inset Quotes erd
+\end_inset
+
+, &arg1, *arg2,
+\end_layout
+
+\begin_layout LyX-Code
+ &PyArrayType, *out)) return NULL;
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ arr1 = PyArray_FROM_OTF(arg1, NPY_DOUBLE, NPY_IN_ARRAY);
+\end_layout
+
+\begin_layout LyX-Code
+ if (arr1 == NULL) return NULL;
+\end_layout
+
+\begin_layout LyX-Code
+ arr2 = PyArray_FROM_OTF(arg2, NPY_DOUBLE, NPY_IN_ARRAY);
+\end_layout
+
+\begin_layout LyX-Code
+ if (arr2 == NULL) goto fail;
+\end_layout
+
+\begin_layout LyX-Code
+ oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_INOUT_ARRAY);
+\end_layout
+
+\begin_layout LyX-Code
+ if (oarr == NULL) goto fail;
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ /* code that makes use of arguments */
+\end_layout
+
+\begin_layout LyX-Code
+ /* You will probably need at least
+\end_layout
+
+\begin_layout LyX-Code
+ nd = PyArray_NDIM(<..>) -- number of dimensions
+\end_layout
+
+\begin_layout LyX-Code
+ dims = PyArray_DIMS(<..>) -- npy_intp array of length nd
+\end_layout
+
+\begin_layout LyX-Code
+ showing length in each dim.
+\end_layout
+
+\begin_layout LyX-Code
+ dptr = (double *)PyArray_DATA(<..>) -- pointer to data.
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ If an error occurs goto fail.
+\end_layout
+
+\begin_layout LyX-Code
+ */
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ Py_DECREF(arr1);
+\end_layout
+
+\begin_layout LyX-Code
+ Py_DECREF(arr2);
+\end_layout
+
+\begin_layout LyX-Code
+ Py_DECREF(oarr);
+\end_layout
+
+\begin_layout LyX-Code
+ Py_INCREF(Py_None);
+\end_layout
+
+\begin_layout LyX-Code
+ return Py_None;
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+ fail:
+\end_layout
+
+\begin_layout LyX-Code
+ Py_XDECREF(arr1);
+\end_layout
+
+\begin_layout LyX-Code
+ Py_XDECREF(arr2);
+\end_layout
+
+\begin_layout LyX-Code
+ PyArray_XDECREF_ERR(oarr);
+\end_layout
+
+\begin_layout LyX-Code
+ return NULL;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Chapter
+Beyond the Basics
+\end_layout
+
+\begin_layout Quotation
+The voyage of discovery is not in seeking new landscapes but in having new
+ eyes.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Marcel Proust
+\end_layout
+
+\begin_layout Quotation
+Discovery is seeing what everyone else has seen and thinking what no one
+ else has thought.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Albert Szent-Gyorgi
+\end_layout
+
+\begin_layout Section
+Iterating over elements in the array
+\end_layout
+
+\begin_layout Subsection
+Basic Iteration
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "sec:array_iterator"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "array iterator|("
+
+\end_inset
+
+One common algorithmic requirement is to be able to walk over all elements
+ in a multidimensional array.
+ The array iterator object makes this easy to do in a generic way that works
+ for arrays of any dimension.
+ Naturally, if you know the number of dimensions you will be using, then
+ you can always write nested for loops to accomplish the iteration.
+ If, however, you want to write code that works with any number of dimensions,
+ then you can make use of the array iterator.
+ An array iterator object is returned when accessing the .flat attribute
+ of an array.
+
+\end_layout
+
+\begin_layout Standard
+Basic usage is to call
+\series bold
+PyArray_IterNew
+\series default
+ (
+\family typewriter
+array
+\family default
+) where array is an ndarray object (or one of its sub-classes).
+ The returned object is an array-iterator object (the same object returned
+ by the .flat attribute of the ndarray).
+ This object is usually cast to PyArrayIterObject* so that its members can
+ be accessed.
+ The only members that are needed are
+\family typewriter
+iter->size
+\family default
+ which contains the total size of the array,
+\family typewriter
+iter->index
+\family default
+, which contains the current 1-d index into the array, and
+\family typewriter
+iter->dataptr
+\family default
+ which is a pointer to the data for the current element of the array.
+ Sometimes it is also useful to access
+\family typewriter
+iter->ao
+\family default
+ which is a pointer to the underlying ndarray object.
+
+\end_layout
+
+\begin_layout Standard
+After processing data at the current element of the array, the next element
+ of the array can be obtained using the macro
+\series bold
+PyArray_ITER_NEXT
+\series default
+(
+\family typewriter
+iter
+\family default
+).
+ The iteration always proceeds in a C-style contiguous fashion (last index
+ varying the fastest).
+ The
+\series bold
+PyArray_ITER_GOTO
+\series default
+(
+\family typewriter
+iter
+\family default
+,
+\family typewriter
+destination
+\family default
+) can be used to jump to a particular point in the array, where
+\family typewriter
+destination
+\family default
+ is an array of npy_intp data-type with space to handle at least the number
+ of dimensions in the underlying array.
+ Occasionally it is useful to use
+\series bold
+PyArray_ITER_GOTO1D
+\series default
+(
+\family typewriter
+iter
+\family default
+,
+\family typewriter
+index
+\family default
+) which will jump to the 1-d index given by the value of
+\family typewriter
+index
+\family default
+.
+ The most common usage, however, is given in the following example.
+
+\end_layout
+
+\begin_layout LyX-Code
+PyObject *obj; /* assumed to be some ndarray object */
+\end_layout
+
+\begin_layout LyX-Code
+PyArrayIterObject *iter;
+\end_layout
+
+\begin_layout LyX-Code
+...
+\end_layout
+
+\begin_layout LyX-Code
+iter = (PyArrayIterObject *)PyArray_IterNew(obj);
+\end_layout
+
+\begin_layout LyX-Code
+if (iter == NULL) goto fail; /* Assume fail has clean-up code */
+\end_layout
+
+\begin_layout LyX-Code
+while (iter->index < iter->size) {
+\end_layout
+
+\begin_layout LyX-Code
+ /* do something with the data at it->dataptr */
+\end_layout
+
+\begin_layout LyX-Code
+ PyArray_ITER_NEXT(it);
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout LyX-Code
+...
+\end_layout
+
+\begin_layout Standard
+You can also use
+\series bold
+PyArrayIter_Check
+\series default
+(
+\family typewriter
+obj
+\family default
+) to ensure you have an iterator object and
+\series bold
+PyArray_ITER_RESET
+\series default
+(
+\family typewriter
+iter
+\family default
+) to reset an iterator object back to the beginning of the array.
+
+\end_layout
+
+\begin_layout Standard
+It should be emphasized at this point that you may not need the array iterator
+ if your array is already contiguous (using an array iterator will work
+ but will be slower than the fastest code you could write).
+ The major purpose of array iterators is to encapsulate iteration over N-dimensi
+onal arrays with arbitrary strides.
+ They are used in many, many places in the NumPy source code itself.
+ If you already know your array is contiguous (Fortran or C), then simply
+ adding the element-size to a running pointer variable will step you through
+ the array very efficiently.
+ In other words, code like this will probably be faster for you in the contiguou
+s case (assuming doubles).
+
+\end_layout
+
+\begin_layout LyX-Code
+npy_intp size;
+\end_layout
+
+\begin_layout LyX-Code
+double *dptr; /* could make this any variable type */
+\end_layout
+
+\begin_layout LyX-Code
+size = PyArray_SIZE(obj);
+\end_layout
+
+\begin_layout LyX-Code
+dptr = PyArray_DATA(obj);
+\end_layout
+
+\begin_layout LyX-Code
+while(size--) {
+\end_layout
+
+\begin_layout LyX-Code
+ /* do something with the data at dptr */
+\end_layout
+
+\begin_layout LyX-Code
+ dptr++;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Subsection
+Iterating over all but one axis
+\end_layout
+
+\begin_layout Standard
+A common algorithm is to loop over all elements of an array and perform
+ some function with each element by issuing a function call.
+ As function calls can be time consuming, one way to speed up this kind
+ of algorithm is to write the function so it takes a vector of data and
+ then write the iteration so the function call is performed for an entire
+ dimension of data at a time.
+ This increases the amount of work done per function call, thereby reducing
+ the function-call over-head to a small(er) fraction of the total time.
+ Even if the interior of the loop is performed without a function call it
+ can be advantageous to perform the inner loop over the dimension with the
+ highest number of elements to take advantage of speed enhancements available
+ on micro-processors that use pipelining to enhance fundmental operations.
+
+\end_layout
+
+\begin_layout Standard
+The
+\series bold
+PyArray_IterAllButAxis
+\series default
+(
+\family typewriter
+array
+\family default
+,
+\family typewriter
+&dim
+\family default
+) constructs an iterator object that is modified so that it will not iterate
+ over the dimension indicated by dim.
+ The only restriction on this iterator object, is that the
+\series bold
+PyArray_Iter_GOTO1D
+\series default
+(
+\family typewriter
+it
+\family default
+,
+\family typewriter
+ind
+\family default
+) macro cannot be used (thus flat indexing won't work either if you pass
+ this object back to Python --- so you shouldn't do this).
+ Note that the returned object from this routine is still usually cast to
+ PyArrayIterObject *.
+ All that's been done is to modify the strides and dimensions of the returned
+ iterator to simulate iterating over array[...,0,...] where 0 is placed on the
+
+\begin_inset Formula $\textrm{dim}^{\textrm{th}}$
+\end_inset
+
+ dimension.
+ If dim is negative, then the dimension with the largest axis is found and
+ used.
+
+\end_layout
+
+\begin_layout Subsection
+Iterating over multiple arrays
+\end_layout
+
+\begin_layout Standard
+Very often, it is desireable to iterate over several arrays at the same
+ time.
+ The universal functions are an example of this kind of behavior.
+ If all you want to do is iterate over arrays with the same shape, then
+ simply creating several iterator objects is the standard procedure.
+ For example, the following code iterates over two arrays assumed to be
+ the same shape and size (actually obj1 just has to have at least as many
+ total elements as does obj2):
+\end_layout
+
+\begin_layout LyX-Code
+/* It is already assumed that obj1 and obj2
+\end_layout
+
+\begin_layout LyX-Code
+ are ndarrays of the same shape and size.
+\end_layout
+
+\begin_layout LyX-Code
+*/
+\end_layout
+
+\begin_layout LyX-Code
+iter1 = (PyArrayIterObject *)PyArray_IterNew(obj1);
+\end_layout
+
+\begin_layout LyX-Code
+if (iter1 == NULL) goto fail;
+\end_layout
+
+\begin_layout LyX-Code
+iter2 = (PyArrayIterObject *)PyArray_IterNew(obj2);
+\end_layout
+
+\begin_layout LyX-Code
+if (iter2 == NULL) goto fail; /* assume iter1 is DECREF'd at fail */
+\end_layout
+
+\begin_layout LyX-Code
+while (iter2->index < iter2->size) {
+\end_layout
+
+\begin_layout LyX-Code
+ /* process with iter1->dataptr and iter2->dataptr */
+\end_layout
+
+\begin_layout LyX-Code
+ PyArray_ITER_NEXT(iter1);
+\end_layout
+
+\begin_layout LyX-Code
+ PyArray_ITER_NEXT(iter2);
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Subsection
+Broadcasting over multiple arrays
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "broadcasting"
+
+\end_inset
+
+When multiple arrays are involved in an operation, you may want to use the
+ same broadcasting rules that the math operations (
+\emph on
+i.e.
+
+\emph default
+ the ufuncs) use.
+ This can be done easily using the PyArrayMultiIterObject.
+ This is the object returned from the Python command numpy.broadcast and
+ it is almost as easy to use from C.
+ The function
+\series bold
+PyArray_MultiIterNew
+\series default
+ (
+\family typewriter
+n
+\family default
+,
+\family typewriter
+...
+\family default
+) is used (with
+\family typewriter
+n
+\family default
+ input objects in place of
+\family typewriter
+...
+\family default
+).
+ The input objects can be arrays or anything that can be converted into
+ an array.
+ A pointer to a PyArrayMultiIterObject is returned.
+ Broadcasting has already been accomplished which adjusts the iterators
+ so that all that needs to be done to advance to the next element in each
+ array is for PyArray_ITER_NEXT to be called for each of the inputs.
+ This incrementing is automatically performed by
+\series bold
+PyArray_MultiIter_NEXT
+\series default
+(
+\family typewriter
+obj
+\family default
+) macro (which can handle a multiterator
+\family typewriter
+obj
+\family default
+ as either a PyArrayMultiObject* or a PyObject*).
+ The data from input number
+\family typewriter
+i
+\family default
+ is available using
+\series bold
+PyArray_MultiIter_DATA
+\series default
+(
+\family typewriter
+obj
+\family default
+,
+\family typewriter
+i
+\family default
+) and the total (broadcasted) size as
+\series bold
+PyArray_MultiIter_SIZE
+\series default
+(
+\family typewriter
+obj
+\family default
+).
+ An example of using this feature follows.
+\end_layout
+
+\begin_layout LyX-Code
+mobj = PyArray_MultiIterNew(2, obj1, obj2);
+\end_layout
+
+\begin_layout LyX-Code
+size = PyArray_MultiIter_SIZE(obj);
+\end_layout
+
+\begin_layout LyX-Code
+while(size--) {
+\end_layout
+
+\begin_layout LyX-Code
+ ptr1 = PyArray_MultiIter_DATA(mobj, 0);
+\end_layout
+
+\begin_layout LyX-Code
+ ptr2 = PyArray_MultiIter_DATA(mobj, 1);
+\end_layout
+
+\begin_layout LyX-Code
+ /* code using contents of ptr1 and ptr2 */
+\end_layout
+
+\begin_layout LyX-Code
+ PyArray_MultiIter_NEXT(mobj);
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Standard
+The function
+\series bold
+PyArray_RemoveLargest
+\series default
+(
+\family typewriter
+multi
+\family default
+) can be used to take a multi-iterator object and adjust all the iterators
+ so that iteration does not take place over the largest dimension (it makes
+ that dimension of size 1).
+ The code being looped over that makes use of the pointers will very-likely
+ also need the strides data for each of the iterators.
+ This information is stored in multi->iters[i]->strides.
+\end_layout
+
+\begin_layout Standard
+There are several examples of using the multi-iterator in the NumPy source
+ code as it makes N-dimensional broadcasting-code very simple to write.
+ Browse the source for more examples.
+
+\begin_inset LatexCommand index
+name "array iterator|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Creating a new universal function
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "sec:Creating-a-new"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "ufunc!adding new|("
+
+\end_inset
+
+The umath module is a computer-generated C-module that creates many ufuncs.
+ It provides a great many examples of how to create a universal function.
+ Creating your own ufunc that will make use of the ufunc machinery is not
+ difficult either.
+ Suppose you have a function that you want to operate element-by-element
+ over its inputs.
+ By creating a new ufunc you will obtain a function that handles
+\end_layout
+
+\begin_layout Itemize
+broadcasting
+\end_layout
+
+\begin_layout Itemize
+N-dimensional looping
+\end_layout
+
+\begin_layout Itemize
+automatic type-conversions with minimal memory usage
+\end_layout
+
+\begin_layout Itemize
+optional output arrays
+\end_layout
+
+\begin_layout Standard
+It is not difficult to create your own ufunc.
+ All that is required is a 1-d loop for each data-type you want to support.
+ Each 1-d loop must have a specific signature, and only ufuncs for fixed-size
+ data-types can be used.
+ The function call used to create a new ufunc to work on built-in data-types
+ is given below.
+ A different mechanism is used to register ufuncs for user-defined data-types.
+\end_layout
+
+\begin_layout Description
+PyUFunc_FromFuncAndData (
+\family typewriter
+PyObject*
+\family default
+) (
+\family typewriter
+PyUFuncGenericFunction*
+\family default
+ func,
+\family typewriter
+void**
+\family default
+ data,
+\family typewriter
+char*
+\family default
+ types,
+\family typewriter
+int
+\family default
+ ntypes,
+\family typewriter
+int
+\family default
+ nin,
+\family typewriter
+int
+\family default
+ nout,
+\family typewriter
+int
+\family default
+ identity,
+\family typewriter
+char*
+\family default
+ name,
+\family typewriter
+char*
+\family default
+ doc,
+\family typewriter
+int
+\family default
+ check_return)
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+func A pointer to an array of 1-d functions to use.
+ This array must be at least ntypes long.
+ Each entry in the array must be a
+\family typewriter
+PyUFuncGenericFunction
+\family default
+ function.
+ This function has the following signature.
+ An example of a valid 1d loop function is also given.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\family typewriter
+void
+\family default
+ loop1d (
+\family typewriter
+char**
+\family default
+ args,
+\family typewriter
+npy_intp*
+\family default
+ dimensions,
+\family typewriter
+npy_intp*
+\family default
+ steps,
+\family typewriter
+void*
+\family default
+ data)
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+args An array of pointers to the actual data for the input and output arrays.
+ The input arguments are given first followed by the output arguments.
+\end_layout
+
+\begin_layout Description
+dimensions A pointer to the size of the dimension over which this function
+ is looping.
+
+\end_layout
+
+\begin_layout Description
+steps A pointer to the number of bytes to jump to get to the next element
+ in this dimension for each of the input and output arguments.
+
+\end_layout
+
+\begin_layout Description
+data Arbitrary data (extra arguments, function names,
+\emph on
+etc.
+\emph default
+) that can be stored with the ufunc and will be passed in when it is called.
+
+\end_layout
+
+\end_deeper
+\begin_layout LyX-Code
+static void
+\newline
+double_add(char *args, npy_intp *dimensions, npy_intp *steps,
+ void *extra)
+\newline
+{
+\newline
+ npy_intp i;
+\newline
+ npy_intp is1=steps[0], is2=steps[1];
+\newline
+
+ npy_intp os=steps[2], n=dimensions[0];
+\newline
+ char *i1=args[0], *i2=args[1],
+ *op=args[2];
+\newline
+ for (i=0; i<n; i++) {
+\newline
+ *((double *)op) = *((double
+ *)i1) +
+\backslash
+
+\newline
+ *((double *)i2);
+\newline
+ i1 += is1; i2 += is2;
+ op += os;
+\newline
+ }
+\newline
+}
+\end_layout
+
+\begin_layout Description
+data An array of data.
+ There should be ntypes entries (or NULL) --- one for every loop function
+ defined for this ufunc.
+ This data will be passed in to the 1-d loop.
+ One common use of this data variable is to pass in an actual function to
+ call to compute the result when a generic 1-d loop (e.g.
+ PyUFunc_d_d) is being used.
+
+\end_layout
+
+\begin_layout Description
+types An array of type-number signatures (type
+\family typewriter
+char
+\family default
+).
+ This array should be of size (nin+nout)*ntypes and contain the data-types
+ for the corresponding 1-d loop.
+ The inputs should be first followed by the outputs.
+ For example, suppose I have a ufunc that supports 1 integer and 1 double
+ 1-d loop (length-2 func and data arrays) that takes 2 inputs and returns
+ 1 output that is always a complex double, then the types array would be
+\end_layout
+
+\begin_layout LyX-Code
+char my_sigs[] =
+\backslash
+
+\newline
+{NPY_INT, NPY_INT, NPY_CDOUBLE,
+\newline
+NPY_DOUBLE, NPY_DOUBLE, NPY_CDOUBLE};
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The bit-width names can also be used (e.g.
+
+\family typewriter
+NPY_INT32
+\family default
+,
+\family typewriter
+NPY_COMPLEX128
+\family default
+) if desired.
+
+\end_layout
+
+\begin_layout Description
+ntypes The number of data-types supported.
+ This is equal to the number of 1-d loops provided.
+
+\end_layout
+
+\begin_layout Description
+nin The number of input arguments.
+\end_layout
+
+\begin_layout Description
+nout The number of output arguments.
+\end_layout
+
+\begin_layout Description
+identity Either
+\series bold
+PyUFunc_One
+\series default
+,
+\series bold
+PyUFunc_Zero
+\series default
+,
+\series bold
+PyUFunc_None
+\series default
+.
+ This specifies what should be returned when an empty array is passed to
+ the reduce method of the ufunc.
+
+\end_layout
+
+\begin_layout Description
+name A
+\family typewriter
+NULL
+\family default
+-terminated string providing the name of this ufunc (should be the Python
+ name it will be called).
+
+\end_layout
+
+\begin_layout Description
+doc A documentation string for this ufunc (will be used in generating the
+ response to <ufunc_name>.__doc__).
+ Do not include the function signature or the name as this is generated
+ automatically.
+
+\end_layout
+
+\begin_layout Description
+check_return Not presently used, but this integer value does get set in
+ the structure-member of similar name.
+
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+The returned ufunc object is a callable Python object.
+ It should be placed in a (module) dictionary under the same name as was
+ used in the name argument to the ufunc-creation routine.
+ The following example is adapted from the umath module:
+\begin_inset LatexCommand index
+name "ufunc!adding new|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout LyX-Code
+static PyUFuncGenericFunction atan2_functions[]=
+\backslash
+
+\newline
+ {PyUFunc_ff_f, PyUFunc_dd_d,
+\newline
+ PyUFunc_gg_g, PyUFunc_OO_O_method};
+\newline
+static
+ void* atan2_data[]=
+\backslash
+
+\newline
+ {(void *)atan2f,(void *) atan2,
+\newline
+ (void *)atan2l,(void *)"arctan2"};
+\newline
+stati
+c char atan2_signatures[]=
+\backslash
+
+\newline
+ {NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
+\newline
+ NPY_DOUBLE, NPY_DOUBLE,
+\newline
+ NPY_DOUBLE
+, NPY_LONGDOUBLE,
+\newline
+ NPY_LONGDOUBLE, NPY_LONGDOUBLE
+\newline
+ NPY_OBJECT, NPY_OBJECT,
+
+\newline
+ NPY_OBJECT};
+\newline
+...
+\newline
+/* in the module initialization code */
+\newline
+PyObject *f, *dict,
+ *module;
+\newline
+...
+\newline
+dict = PyModule_GetDict(module);
+\newline
+...
+\newline
+f = PyUFunc_FromFuncAndData(atan2_funct
+ions,
+\newline
+ atan2_data, atan2_signatures, 4, 2, 1,
+\newline
+ PyUFunc_None, "arctan2",
+
+\newline
+ "a safe and correct arctan(x1/x2)", 0);
+\newline
+PyDict_SetItemString(dict, "arctan2"
+, f);
+\newline
+Py_DECREF(f);
+\newline
+...
+\end_layout
+
+\begin_layout Section
+User-defined data-types
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "dtype!adding new|("
+
+\end_inset
+
+NumPy comes with 21 builtin data-types.
+ While this covers a large majority of possible use cases, it is conceivable
+ that a user may have a need for an additional data-type.
+ There is some support for adding an additional data-type into the NumPy
+ system.
+ This additional data-type will behave much like a regular data-type except
+ ufuncs must have 1-d loops registered to handle it separately.
+ Also checking for whether or not other data-types can be cast
+\begin_inset Quotes eld
+\end_inset
+
+safely
+\begin_inset Quotes erd
+\end_inset
+
+ to and from this new type or not will always return
+\begin_inset Quotes eld
+\end_inset
+
+can cast
+\begin_inset Quotes erd
+\end_inset
+
+ unless you also register which types your new data-type can be cast to
+ and from.
+ Adding data-types is one of the less well-tested areas for NumPy 1.0, so
+ there may be bugs remaining in the approach.
+ Only add a new data-type if you can't do what you want to do using the
+ OBJECT or VOID data-types that are already available.
+ As an example of what I consider a useful application of the ability to
+ add data-types is the possibility of adding a data-type of arbitrary precision
+ floats to NumPy.
+
+\end_layout
+
+\begin_layout Subsection
+Adding the new data-type
+\end_layout
+
+\begin_layout Standard
+To begin to make use of the new data-type, you need to first define a new
+ Python type to hold the scalars of your new data-type.
+ It should be acceptable to inherit from one of the array scalars if your
+ new type has a binary compatible layout.
+ This will allow your new data type to have the methods and attributes of
+ array scalars.
+ New data-types must have a fixed memory size (if you want to define a data-type
+ that needs a flexible representation, like a variable-precision number,
+ then use a pointer to the object as the data-type).
+ The memory layout of the object structure for the new Python type must
+ be PyObject_HEAD followed by the fixed-size memory needed for the data-type.
+ For example, a suitable structure for the new Python type is:
+\end_layout
+
+\begin_layout LyX-Code
+typedef struct {
+\end_layout
+
+\begin_layout LyX-Code
+ PyObject_HEAD;
+\end_layout
+
+\begin_layout LyX-Code
+ some_data_type obval;
+\end_layout
+
+\begin_layout LyX-Code
+ /* the name can be whatever you want */
+\end_layout
+
+\begin_layout LyX-Code
+} PySomeDataTypeObject;
+\end_layout
+
+\begin_layout Standard
+After you have defined a new Python type object, you must then define a
+ new PyArray_Descr structure whose typeobject member will contain a pointer
+ to the data-type you've just defined.
+ In addition, the required functions in the
+\begin_inset Quotes eld
+\end_inset
+
+.f
+\begin_inset Quotes erd
+\end_inset
+
+ member must be defined: nonzero, copyswap, copyswapn, setitem, getitem,
+ and cast.
+ The more functions in the
+\begin_inset Quotes eld
+\end_inset
+
+.f
+\begin_inset Quotes erd
+\end_inset
+
+ member you define, however, the more useful the new data-type will be.
+ It is very important to intialize unused functions to NULL.
+ This can be achieved using
+\series bold
+PyArray_InitArrFuncs
+\series default
+(f).
+\end_layout
+
+\begin_layout Standard
+Once a new PyArray_Descr structure is created and filled with the needed
+ information and useful functions you call
+\series bold
+PyArray_RegisterDataType
+\series default
+(new_descr).
+ The return value from this call is an integer providing you with a unique
+ type_number that specifies your data-type.
+ This type number should be stored and made available by your module so
+ that other modules can use it to recognize your data-type (the other mechanism
+ for finding a user-defined data-type number is to search based on the name
+ of the type-object associated with the data-type using
+\series bold
+PyArray_TypeNumFromName
+\series default
+).
+
+\end_layout
+
+\begin_layout Subsection
+Registering a casting function
+\end_layout
+
+\begin_layout Standard
+You may want to allow builtin (and other user-defined) data-types to be
+ cast automatically to your data-type.
+ In order to make this possible, you must register a casting function with
+ the data-type you want to be able to cast from.
+ This requires writing low-level casting functions for each conversion you
+ want to support and then registering these functions with the data-type
+ descriptor.
+ A low-level casting function has the signature.
+
+\end_layout
+
+\begin_layout Description
+castfunc (
+\family typewriter
+void
+\family default
+) (
+\family typewriter
+void*
+\family default
+ from,
+\family typewriter
+void*
+\family default
+ to,
+\family typewriter
+npy_intp
+\family default
+ n,
+\family typewriter
+void*
+\family default
+ fromarr,
+\family typewriter
+void*
+\family default
+ toarr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Cast
+\family typewriter
+n
+\family default
+ elements
+\family typewriter
+from
+\family default
+ one type
+\family typewriter
+to
+\family default
+ another.
+ The data to cast from is in a contiguous, correctly-swapped and aligned
+ chunk of memory pointed to by from.
+ The buffer to cast to is also contiguous, correctly-swapped and aligned.
+ The fromarr and toarr arguments should only be used for flexible-element-sized
+ arrays (string, unicode, void).
+
+\end_layout
+
+\begin_layout Standard
+An example castfunc is
+\end_layout
+
+\begin_layout LyX-Code
+static void
+\end_layout
+
+\begin_layout LyX-Code
+double_to_float(double *from, float* to, npy_intp n,
+\newline
+ void* ig1, void*
+ ig2);
+\newline
+while (n--) {
+\newline
+ (*to++) = (double) *(from++);
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+This could then be registered to convert doubles to floats using the code
+\end_layout
+
+\begin_layout LyX-Code
+doub = PyArray_DescrFromType(NPY_DOUBLE);
+\newline
+PyArray_RegisterCastFunc(doub,
+ NPY_FLOAT,
+\newline
+ (PyArray_VectorUnaryFunc *)double_to_float);
+\newline
+Py_DECREF(doub);
+\end_layout
+
+\begin_layout Subsection
+Registering coercion rules
+\end_layout
+
+\begin_layout Standard
+By default, all user-defined data-types are not presumed to be safely castable
+ to any builtin data-types.
+ In addition builtin data-types are not presumed to be safely castable to
+ user-defined data-types.
+ This situation limits the ability of user-defined data-types to participate
+ in the coercion system used by ufuncs and other times when automatic coercion
+ takes place in NumPy.
+ This can be changed by registering data-types as safely castable from a
+ particlar data-type object.
+ The function
+\series bold
+PyArray_RegisterCanCast
+\series default
+ (from_descr, totype_number, scalarkind) should be used to specify that
+ the data-type object from_descr can be cast to the data-type with type
+ number totype_number.
+ If you are not trying to alter scalar coercion rules, then use
+\series bold
+PyArray_NOSCALAR
+\series default
+ for the scalarkind argument.
+\end_layout
+
+\begin_layout Standard
+If you want to allow your new data-type to also be able to share in the
+ scalar coercion rules, then you need to specify the scalarkind function
+ in the data-type object's
+\begin_inset Quotes eld
+\end_inset
+
+.f
+\begin_inset Quotes erd
+\end_inset
+
+ member to return the kind of scalar the new data-type should be seen as
+ (the value of the scalar is available to that function).
+ Then, you can register data-types that can be cast to separately for each
+ scalar kind that may be returned from your user-defined data-type.
+ If you don't register scalar coercion handling, then all of your user-defined
+ data-types will be seen as
+\series bold
+PyArray_NOSCALAR
+\series default
+.
+
+\end_layout
+
+\begin_layout Subsection
+Registering a ufunc loop
+\end_layout
+
+\begin_layout Standard
+You may also want to register low-level ufunc loops for your data-type so
+ that an ndarray of your data-type can have math applied to it seamlessly.
+ Registering a new loop with exactly the same arg_types signature, silently
+ replaces any previously registered loops for that data-type.
+
+\end_layout
+
+\begin_layout Standard
+Before you can register a 1-d loop for a ufunc, the ufunc must be previously
+ created.
+ Then you call
+\series bold
+PyUFunc_RegisterLoopForType
+\series default
+(...) with the information needed for the loop.
+ The return value of this function is
+\family typewriter
+0
+\family default
+ if the process was successful and
+\family typewriter
+-1
+\family default
+ with an error condition set if it was not successful.
+
+\end_layout
+
+\begin_layout Description
+PyUFunc_RegisterLoopForType (
+\family typewriter
+int
+\family default
+) (
+\family typewriter
+PyUFuncObject*
+\family default
+ ufunc,
+\family typewriter
+int
+\family default
+ usertype,
+\family typewriter
+PyUFuncGenericFunction
+\family default
+ function,
+\family typewriter
+int*
+\family default
+ arg_types,
+\family typewriter
+void*
+\family default
+ data)
+\end_layout
+
+\begin_layout Description
+ufunc The ufunc to attach this loop to.
+\end_layout
+
+\begin_layout Description
+usertype The user-defined type this loop should be indexed under.
+ This number must be a user-defined type or an error occurs.
+
+\end_layout
+
+\begin_layout Description
+function The ufunc inner 1-d loop.
+ This function must have the signature as explained in Section
+\begin_inset LatexCommand ref
+reference "sec:Creating-a-new"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+arg_types (optional) If given, this should contain an array of integers
+ of at least size ufunc.nargs containing the data-types expected by the loop
+ function.
+ The data will be copied into a NumPy-managed structure so the memory for
+ this argument should be deleted after calling this function.
+ If this is NULL, then it will be assumed that all data-types are of type
+ usertype.
+\end_layout
+
+\begin_layout Description
+data (optional) Specify any optional data needed by the function which will
+ be passed when the function is called.
+
+\begin_inset LatexCommand index
+name "dtype!adding new|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Subtyping the ndarray in C
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ndarray!subtyping|("
+
+\end_inset
+
+One of the lesser-used features that has been lurking in Python since 2.2
+ is the ability to sub-class types in C.
+ This facility is one of the important reasons for basing NumPy off of the
+ Numeric code-base which was already in C.
+ A sub-type in C allows much more flexibility with regards to memory management.
+ Sub-typing in C is not difficult even if you have only a rudimentary understand
+ing of how to create new types for Python.
+ While it is easiest to sub-type from a single parent type, sub-typing from
+ multiple parent types is also possible.
+ Multiple inheritence in C is generally less useful than it is in Python
+ because a restriction on Python sub-types is that they have a binary compatible
+ memory layout.
+ Perhaps for this reason, it is somewhat easier to sub-type from a single
+ parent type.
+
+\end_layout
+
+\begin_layout Standard
+All C-structures corresponding to Python objects must begin with PyObject_HEAD
+ (or PyObject_VAR_HEAD).
+ In the same way, any sub-type must have a C-structure that begins with
+ exactly the same memory layout as the parent type (or all of the parent
+ types in the case of multiple-inheritance).
+ The reason for this is that Python may attempt to access a member of the
+ sub-type structure as if it had the parent structure (
+\emph on
+i.e.
+
+\emph default
+ it will cast a given pointer to a pointer to the parent structure and then
+ dereference one of it's members).
+ If the memory layouts are not compatible, then this attempt will cause
+ unpredictable behavior (eventually leading to a memory violation and program
+ crash).
+
+\end_layout
+
+\begin_layout Standard
+One of the elements in PyObject_HEAD is a pointer to a type-object structure.
+ A new Python type is created by creating a new type-object structure and
+ populating it with functions and pointers to describe the desired behavior
+ of the type.
+ Typically, a new C-structure is also created to contain the instance-specific
+ information needed for each object of the type as well.
+ For example, &PyArray_Type is a pointer to the type-object table for the
+ ndarray while a PyArrayObject* variable is a pointer to a particular instance
+ of an ndarray (one of the members of the ndarray structure is, in turn,
+ a pointer to the type-object table &PyArray_Type).
+ Finally
+\series bold
+PyType_Ready
+\series default
+(<pointer_to_type_object>) must be called for every new Python type.
+
+\end_layout
+
+\begin_layout Subsection
+Creating sub-types
+\end_layout
+
+\begin_layout Standard
+To create a sub-type, a similar proceedure must be followed except only
+ behaviors that are different require new entries in the type-object structure.
+ All other entires can be NULL and will be filled in by
+\series bold
+PyType_Ready
+\series default
+ with appropriate functions from the parent type(s).
+ In particular, to create a sub-type in C follow these steps:
+\end_layout
+
+\begin_layout Enumerate
+If needed create a new C-structure to handle each instance of your type.
+ A typical C-structure would be
+\end_layout
+
+\begin_deeper
+\begin_layout LyX-Code
+typedef _new_struct {
+\newline
+ PyArrayObject base;
+\newline
+ /* new things here */
+\newline
+} NewArrayO
+bject;
+\end_layout
+
+\begin_layout Standard
+Notice that the full PyArrayObject is used as the first entry in order to
+ ensure that the binary layout of instances of the new type is identical
+ to the PyArrayObject.
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Fill in a new Python type-object structure with pointers to new functions
+ that will over-ride the default behavior while leaving any function that
+ should remain the same unfilled (or NULL).
+ The tp_name element should be different.
+\end_layout
+
+\begin_layout Enumerate
+Fill in the tp_base member of the new type-object structure with a pointer
+ to the (main) parent type object.
+ For multiple-inheritance, also fill in the tp_bases member with a tuple
+ containing all of the parent objects in the order they should be used to
+ define inheritance.
+ Remember, all parent-types must have the same C-structure for multiple
+ inheritance to work properly.
+
+\end_layout
+
+\begin_layout Enumerate
+Call
+\series bold
+PyType_Ready
+\series default
+(<pointer_to_new_type>).
+ If this function returns a negative number, a failure occurred and the
+ type is not initialized.
+ Otherwise, the type is ready to be used.
+ It is generally important to place a reference to the new type into the
+ module dictionary so it can be accessed from Python.
+
+\end_layout
+
+\begin_layout Standard
+More information on creating sub-types in C can be learned by reading PEP
+ 253 (available at http://www.python.org/dev/peps/pep-0253).
+\end_layout
+
+\begin_layout Subsection
+Specific features of ndarray sub-typing
+\end_layout
+
+\begin_layout Standard
+Some special methods and attributes are used by arrays in order to facilitate
+ the interoperation of sub-types with the base ndarray type.
+
+\end_layout
+
+\begin_layout Subsubsection
+The __array_finalize__ method
+\end_layout
+
+\begin_layout Standard
+Several array-creation functions of the ndarray allow specification of a
+ particular sub-type to be created.
+ This allows sub-types to be handled seamlessly in many routines.
+ When a sub-type is created in such a fashion, however, neither the __new__
+ method nor the __init__ method gets called.
+ Instead, the sub-type is allocated and the appropriate instance-structure
+ members are filled in.
+ Finally, the
+\series bold
+__array_finalize__
+\series default
+ attribute is looked-up in the object dictionary.
+ If it is present and not None, then it can be either a CObject containing
+ a pointer to a
+\series bold
+PyArray_FinalizeFunc
+\series default
+ or it can be a method taking a single argument (which could be None).
+
+\end_layout
+
+\begin_layout Standard
+If the
+\series bold
+__array_finalize__
+\series default
+ attribute is a CObject, then the pointer must be a pointer to a function
+ with the signature:
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ (int) (PyArrayObject *, PyObject *)
+\end_layout
+
+\begin_layout Standard
+The first argument is the newly created sub-type.
+ The second argument (if not NULL) is the
+\begin_inset Quotes eld
+\end_inset
+
+parent
+\begin_inset Quotes erd
+\end_inset
+
+ array (if the array was created using slicing or some other operation where
+ a clearly-distinguishable parent is present).
+ This routine can do anything it wants to.
+ It should return a -1 on error and 0 otherwise.
+
+\end_layout
+
+\begin_layout Standard
+If the
+\series bold
+__array_finalize__
+\series default
+ attribute is not None nor a CObject, then it must be a Python method that
+ takes the parent array as an argument (which could be None if there is
+ no parent), and returns nothing.
+ Errors in this method will be caught and handled.
+
+\end_layout
+
+\begin_layout Subsubsection
+The __array_priority__ attribute
+\end_layout
+
+\begin_layout Standard
+This attribute allows simple but flexible determination of which sub-type
+ should be considered
+\begin_inset Quotes eld
+\end_inset
+
+primary
+\begin_inset Quotes erd
+\end_inset
+
+ when an operation involving two or more sub-types arises.
+ In operations where different sub-types are being used, the sub-type with
+ the largest
+\series bold
+__array_priority__
+\series default
+ attribute will determine the sub-type of the output(s).
+ If two sub-types have the same
+\series bold
+__array_prioirty__
+\series default
+ then the sub-type of the first argument determines the output.
+ The default
+\series bold
+__array_priority__
+\series default
+ attribute returns a value of 0.0 for the base ndarray type and 1.0 for a
+ sub-type.
+ This attribute can also be defined by objects that are not sub-types of
+ the ndarray and can be used to determine which
+\series bold
+__array_wrap__
+\series default
+ method should be called for the return output.
+
+\end_layout
+
+\begin_layout Subsubsection
+The __array_wrap__ method
+\end_layout
+
+\begin_layout Standard
+Any class or type can define this method which should take an ndarray argument
+ and return an instance of the type.
+ It can be seen as the opposite of the
+\series bold
+__array__
+\series default
+ method.
+ This method is used by the ufuncs (and other NumPy functions) to allow
+ other objects to pass through.
+ For Python >2.4, it can also be used to write a decorator that converts
+ a function that works only with ndarrays to one that works with any type
+ with
+\series bold
+__array__
+\series default
+ and
+\series bold
+__array_wrap__
+\series default
+ methods.
+
+\begin_inset LatexCommand index
+name "ndarray!subtyping|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Using Python as glue
+\end_layout
+
+\begin_layout Quotation
+There is no conversation more boring than the one where everybody agrees.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Michel de Montaigne
+\end_layout
+
+\begin_layout Quotation
+Duct tape is like the force.
+ It has a light side, and a dark side, and it holds the universe together.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Carl Zwanzig
+\end_layout
+
+\begin_layout Standard
+Many people like to say that Python is a fantastic glue language.
+ Hopefully, this Chapter will convince you that this is true.
+ The first adopters of Python for science were typically people who used
+ it to glue together large applicaton codes running on super-computers.
+ Not only was it much nicer to code in Python than in a shell script or
+ Perl, in addition, the ability to easily extend Python made it relatively
+ easy to create new classes and types specifically adapted to the problems
+ being solved.
+ From the interactions of these early contributors, Numeric emerged as an
+ array-like object that could be used to pass data between these applications.
+\end_layout
+
+\begin_layout Standard
+As Numeric has matured and developed into NumPy, people have been able to
+ write more code directly in NumPy.
+ Often this code is fast-enough for production use, but there are still
+ times that there is a need to access compiled code.
+ Either to get that last bit of efficiency out of the algorithm or to make
+ it easier to access widely-available codes written in C/C++ or Fortran.
+
+\end_layout
+
+\begin_layout Standard
+This chapter will review many of the tools that are available for the purpose
+ of accessing code written in other compiled languages.
+ There are many resources available for learning to call other compiled
+ libraries from Python and the purpose of this Chapter is not to make you
+ an expert.
+ The main goal is to make you aware of some of the possibilities so that
+ you will know what to
+\begin_inset Quotes eld
+\end_inset
+
+Google
+\begin_inset Quotes erd
+\end_inset
+
+ in order to learn more.
+
+\end_layout
+
+\begin_layout Standard
+The http://www.scipy.org website also contains a great deal of useful information
+ about many of these tools.
+ For example, there is a nice description of using several of the tools
+ explained in this chapter at http://www.scipy.org/PerformancePython.
+ This link provides several ways to solve the same problem showing how to
+ use and connect with compiled code to get the best performance.
+ In the process you can get a taste for several of the approaches that will
+ be discussed in this chapter.
+
+\end_layout
+
+\begin_layout Section
+Calling other compiled libraries from Python
+\end_layout
+
+\begin_layout Standard
+While Python is a great language and a pleasure to code in, its dynamic
+ nature results in overhead that can cause some code (
+\emph on
+i.e.
+
+\emph default
+ raw computations inside of for loops) to be up 10-100 times slower than
+ equivalent code written in a static compiled language.
+ In addition, it can cause memory usage to be larger than necessary as temporary
+ arrays are created and destroyed during computation.
+ For many types of computing needs the extra slow-down and memory consumption
+ can often not be spared (at least for time- or memory-critical portions
+ of your code).
+ Therefore one of the most common needs is to call out from Python code
+ to a fast, machine-code routine (e.g.
+ compiled using C/C++ or Fortran).
+ The fact that this is relatively easy to do is a big reason why Python
+ is such an excellent high-level language for scientific and engineering
+ programming.
+
+\end_layout
+
+\begin_layout Standard
+Their are two basic approaches to calling compiled code: writing an extension
+ module that is then imported to Python using the import command, or calling
+ a shared-library subroutine directly from Python using the ctypes module
+ (included in the standard distribution with Python 2.5).
+ The first method is the most common (but with the inclusion of ctypes into
+ Python 2.5 this status may change).
+\end_layout
+
+\begin_layout Warning
+Calling C-code from Python can result in Python crashes if you are not careful.
+ None of the approaches in this chapter are immune.
+ You have to know something about the way data is handled by both NumPy
+ and by the third-party library being used.
+
+\end_layout
+
+\begin_layout Section
+Hand-generated wrappers
+\end_layout
+
+\begin_layout Standard
+Extension modules were discussed in Chapter
+\begin_inset LatexCommand ref
+reference "sec:Writing-an-extension"
+
+\end_inset
+
+.
+ The most basic way to interface with compiled code is to write an extension
+ module and construct a module method that calls the compiled code.
+ For improved readability, your method should take advantage of the PyArg_ParseT
+uple call to convert between Python objects and C data-types.
+ For standard C data-types there is probably already a built-in converter.
+ For others you may need to write your own converter and use the
+\begin_inset Quotes eld
+\end_inset
+
+O&
+\begin_inset Quotes erd
+\end_inset
+
+ format string which allows you to specify a function that will be used
+ to perform the conversion from the Python object to whatever C-structures
+ are needed.
+
+\end_layout
+
+\begin_layout Standard
+Once the conversions to the appropriate C-structures and C data-types have
+ been performed, the next step in the wrapper is to call the underlying
+ function.
+ This is straightforward if the underlying function is in C or C++.
+ However, in order to call Fortran code you must be familiar with how Fortran
+ subroutines are called from C/C++ using your compiler and platform.
+ This can vary somewhat platforms and compilers (which is another reason
+ f2py makes life much simpler for interfacing Fortran code) but generally
+ involves underscore mangling of the name and the fact that all variables
+ are passed by reference (i.e.
+ all arguments are pointers).
+
+\end_layout
+
+\begin_layout Standard
+The advantage of the hand-generated wrapper is that you have complete control
+ over how the C-library gets used and called which can lead to a lean and
+ tight interface with minimal over-head.
+ The disadvantage is that you have to write, debug, and maintain C-code,
+ although most of it can be adapted using the time-honored technique of
+
+\begin_inset Quotes eld
+\end_inset
+
+cutting-pasting-and-modifying
+\begin_inset Quotes erd
+\end_inset
+
+ from other extension modules.
+ Because, the procedure of calling out to additional C-code is fairly regimented
+, code-generation procedures have been developed to make this process easier.
+ One of these code-generation techniques is distributed with NumPy and allows
+ easy integration with Fortran and (simple) C code.
+ This package, f2py, will be covered briefly in the next session.
+
+\end_layout
+
+\begin_layout Section
+f2py
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "f2py|("
+
+\end_inset
+
+F2py allows you to automatically construct an extension module that interfaces
+ to routines in Fortran 77/90/95 code.
+ It has the ability to parse Fortran 77/90/95 code and automatically generate
+ Python signatures for the subroutines it encounters, or you can guide how
+ the subroutine interfaces with Python by constructing an interface-defintion-fi
+le (or modifying the f2py-produced one).
+
+\end_layout
+
+\begin_layout Subsection
+Creating source for a basic extension module
+\end_layout
+
+\begin_layout Standard
+Probably the easiest way to introduce f2py is to offer a simple example.
+ Here is one of the subroutines contained in a file named add.f
+\end_layout
+
+\begin_layout LyX-Code
+C
+\newline
+ SUBROUTINE ZADD(A,B,C,N)
+\newline
+C
+\newline
+ DOUBLE COMPLEX A(*)
+\newline
+ DOUBLE COMPLEX
+ B(*)
+\newline
+ DOUBLE COMPLEX C(*)
+\newline
+ INTEGER N
+\newline
+ DO 20 J = 1, N
+\newline
+
+ C(J) = A(J)+B(J)
+\newline
+ 20 CONTINUE
+\newline
+ END
+\end_layout
+
+\begin_layout Standard
+This routine simply adds the elements in two contiguous arrays and places
+ the result in a third.
+ The memory for all three arrays must be provided by the calling routine.
+ A very basic interface to this routine can be automatically generated by
+ f2py:
+\end_layout
+
+\begin_layout LyX-Code
+f2py -m add add.f
+\end_layout
+
+\begin_layout Standard
+You should be able to run this command assuming your search-path is set-up
+ properly.
+ This command will produce an extension module named addmodule.c in the current
+ directory.
+ This extension module can now be compiled and used from Python just like
+ any other extension module.
+
+\end_layout
+
+\begin_layout Subsection
+Creating a compiled extension module
+\end_layout
+
+\begin_layout Standard
+You can also get f2py to compile add.f and also compile its produced extension
+ module leaving only a shared-library extension file that can be imported
+ from Python:
+\end_layout
+
+\begin_layout LyX-Code
+f2py -c -m add add.f
+\end_layout
+
+\begin_layout Standard
+This command leaves a file named add.<ext> in the current directory (where
+ <ext> is the appropriate extension for a python extension module on your
+ platform --- so, pyd,
+\emph on
+etc.
+\emph default
+).
+ This module may then be imported from Python.
+ It will contain a method for each subroutin in add (zadd, cadd, dadd, sadd).
+ The docstring of each method contains information about how the module
+ method may be called:
+\end_layout
+
+\begin_layout LyX-Code
+>>> import add
+\newline
+>>> print add.zadd.__doc__
+\newline
+zadd - Function signature:
+\newline
+ zadd(a,b,c,n)
+\newline
+
+Required arguments:
+\newline
+ a : input rank-1 array('D') with bounds (*)
+\newline
+ b : input
+ rank-1 array('D') with bounds (*)
+\newline
+ c : input rank-1 array('D') with bounds
+ (*)
+\newline
+ n : input int
+\end_layout
+
+\begin_layout Subsection
+Improving the basic interface
+\end_layout
+
+\begin_layout Standard
+The default interface is a very literal translation of the fortran code
+ into Python.
+ The Fortran array arguments must now be NumPy arrays and the integer argument
+ should be an integer.
+ The interface will attempt to convert all arguments to their required types
+ (and shapes) and issue an error if unsuccessful.
+ However, because it knows nothing about the semantics of the arguments
+ (such that C is an output and n should really match the array sizes), it
+ is possible to abuse this function in ways that can cause Python to crash.
+ For example
+\end_layout
+
+\begin_layout LyX-Code
+>>> add.zadd([1,2,3],[1,2],[3,4],1000)
+\end_layout
+
+\begin_layout Standard
+will cause a program crash on most systems.
+ Under the covers, the lists are being converted to proper arrays but then
+ the underlying add loop is told to cycle way beyond the borders of the
+ allocated memory.
+
+\end_layout
+
+\begin_layout Standard
+In order to improve the interface, directives should be provided.
+ This is accomplished by constructing an interface definition file.
+ It is usually best to start from the interface file that f2py can produce
+ (where it gets its default behavior from).
+ To get f2py to generate the interface file use the -h option:
+\end_layout
+
+\begin_layout LyX-Code
+f2py -h add.pyf -m add add.f
+\end_layout
+
+\begin_layout Standard
+This command leaves the file add.pyf in the current directory.
+ The section of this file corresponding to zadd is:
+\end_layout
+
+\begin_layout LyX-Code
+subroutine zadd(a,b,c,n) ! in :add:add.f
+\newline
+ double complex dimension(*) ::
+ a
+\newline
+ double complex dimension(*) :: b
+\newline
+ double complex dimension(*) ::
+ c
+\newline
+ integer :: n
+\newline
+end subroutine zadd
+\end_layout
+
+\begin_layout Standard
+By placing intent directives and checking code, the interface can be cleaned
+ up quite a bit until the Python module method is both easier to use and
+ more robust.
+
+\end_layout
+
+\begin_layout LyX-Code
+subroutine zadd(a,b,c,n) ! in :add:add.f
+\newline
+ double complex dimension(n) ::
+ a
+\newline
+ double complex dimension(n) :: b
+\newline
+ double complex intent(out),dimension(n
+) :: c
+\newline
+ integer intent(hide),depend(a) :: n=len(a)
+\newline
+end subroutine zadd
+\end_layout
+
+\begin_layout Standard
+The intent directive, intent(out) is used to tell f2py that
+\family typewriter
+c
+\family default
+ is an output variable and should be created by the interface before being
+ passed to the underlying code.
+ The intent(hide) directive tells f2py to not allow the user to specify
+ the variable,
+\family typewriter
+n
+\family default
+, but instead to get it from the size of
+\family typewriter
+a
+\family default
+.
+ The depend(
+\family typewriter
+a
+\family default
+) directive is necessary to tell f2py that the value of n depends on the
+ input a (so that it won't try to create the variable n until the variable
+ a is created).
+
+\end_layout
+
+\begin_layout Standard
+The new interface has docstring:
+\end_layout
+
+\begin_layout LyX-Code
+>>> print add.zadd.__doc__
+\newline
+zadd - Function signature:
+\newline
+ c = zadd(a,b)
+\newline
+Required
+ arguments:
+\newline
+ a : input rank-1 array('D') with bounds (n)
+\newline
+ b : input rank-1
+ array('D') with bounds (n)
+\newline
+Return objects:
+\newline
+ c : rank-1 array('D') with
+ bounds (n)
+\end_layout
+
+\begin_layout Standard
+Now, the function can be called in a much more robust way:
+\end_layout
+
+\begin_layout LyX-Code
+>>> add.zadd([1,2,3],[4,5,6])
+\newline
+array([ 5.+0.j, 7.+0.j, 9.+0.j])
+\end_layout
+
+\begin_layout Standard
+Notice the automatic conversion to the correct format that occurred.
+
+\end_layout
+
+\begin_layout Subsection
+Inserting directives in Fortran source
+\end_layout
+
+\begin_layout Standard
+The nice interface can also be generated automatically by placing the variable
+ directives as special comments in the original fortran code.
+ Thus, if I modify the source code to contain:
+\end_layout
+
+\begin_layout LyX-Code
+C
+\newline
+ SUBROUTINE ZADD(A,B,C,N)
+\newline
+C
+\newline
+CF2PY INTENT(OUT) :: C
+\newline
+CF2PY INTENT(HIDE)
+ :: N
+\newline
+CF2PY DOUBLE COMPLEX :: A(N)
+\newline
+CF2PY DOUBLE COMPLEX :: B(N)
+\newline
+CF2PY DOUBLE
+ COMPLEX :: C(N)
+\newline
+ DOUBLE COMPLEX A(*)
+\newline
+ DOUBLE COMPLEX B(*)
+\newline
+
+ DOUBLE COMPLEX C(*)
+\newline
+ INTEGER N
+\newline
+ DO 20 J = 1, N
+\newline
+ C(J) = A(J)
+ + B(J)
+\newline
+ 20 CONTINUE
+\newline
+ END
+\end_layout
+
+\begin_layout Standard
+Then, I can compile the extension module using
+\end_layout
+
+\begin_layout LyX-Code
+f2py -c -m add add.f
+\end_layout
+
+\begin_layout Standard
+The resulting signature for the function add.zadd is exactly the same one
+ that was created previously.
+ If the original source code had contained A(N) instead of A(*) and so forth
+ with B and C, then I could obtain (nearly) the same interface simply by
+ placing the INTENT(OUT) :: C comment line in the source code.
+ The only difference is that N would be an optional input that would default
+ to the length of A.
+
+\end_layout
+
+\begin_layout Subsection
+A filtering example
+\end_layout
+
+\begin_layout Standard
+For comparison with the other methods to be discussed.
+ Here is another example of a function that filters a two-dimensional array
+ of double precision floating-point numbers using a fixed averaging filter.
+ The advantage of using Fortran to index into multi-dimensional arrays should
+ be clear from this example.
+
+\end_layout
+
+\begin_layout LyX-Code
+ SUBROUTINE DFILTER2D(A,B,M,N)
+\newline
+C
+\newline
+ DOUBLE PRECISION A(M,N)
+\newline
+ DOUBLE
+ PRECISION B(M,N)
+\newline
+ INTEGER N, M
+\newline
+CF2PY INTENT(OUT) :: B
+\newline
+CF2PY INTENT(HIDE)
+ :: N
+\newline
+CF2PY INTENT(HIDE) :: M
+\newline
+ DO 20 I = 2,M-1
+\newline
+ DO 40 J=2,N-1
+\newline
+
+ B(I,J) = A(I,J) +
+\newline
+ $ (A(I-1,J)+A(I+1,J) +
+\newline
+
+ $ A(I,J-1)+A(I,J+1) )*0.5D0 +
+\newline
+ $ (A(I-1,J-1) + A(I-1,J+1
+) +
+\newline
+ $ A(I+1,J-1) + A(I+1,J+1))*0.25D0
+\newline
+ 40 CONTINUE
+\newline
+ 20
+ CONTINUE
+\newline
+ END
+\end_layout
+
+\begin_layout Standard
+This code can be compiled and linked into an extension module named filter
+ using
+\end_layout
+
+\begin_layout LyX-Code
+f2py -c -m filter filter.f
+\end_layout
+
+\begin_layout Standard
+This will produce an extension module named filter.so in the current directory
+ with a method named dfilter2d that returns a filtered version of the input.
+
+\end_layout
+
+\begin_layout Subsection
+Calling f2py from Python
+\end_layout
+
+\begin_layout Standard
+The f2py program is written in Python and can be run from inside your module.
+ This provides a facility that is somewhat similar to the use of weave.ext_tools
+ described below.
+ An example of the final interface executed using Python code is
+\end_layout
+
+\begin_layout LyX-Code
+import numpy.f2py as f2py
+\end_layout
+
+\begin_layout LyX-Code
+fid = open('add.f')
+\end_layout
+
+\begin_layout LyX-Code
+source = fid.read()
+\end_layout
+
+\begin_layout LyX-Code
+fid.close()
+\end_layout
+
+\begin_layout LyX-Code
+f2py.compile(source, modulename='add')
+\end_layout
+
+\begin_layout LyX-Code
+import add
+\end_layout
+
+\begin_layout Standard
+The source string can be any valid Fortran code.
+ If you want to save the extension-module source code then a suitable file-name
+ can be provided by the source_fn keyword to the compile function.
+
+\end_layout
+
+\begin_layout Subsection
+Automatic extension module generation
+\end_layout
+
+\begin_layout Standard
+If you want to distribute your f2py extension module, then you only need
+ to include the .pyf file and the Fortran code.
+ The distutils extensions in NumPy allow you to define an extension module
+ entirely in terms of this interface file.
+ A valid setup.py file allowing distribution of the add.f module (as part
+ of the package f2py_examples so that it would be loaded as f2py_examples.add)
+ is
+\end_layout
+
+\begin_layout LyX-Code
+def configuration(parent_package='', top_path=None)
+\newline
+ from numpy.distutils.misc_u
+til import Configuration
+\newline
+ config = Configuration('f2py_examples',parent_packag
+e, top_path)
+\newline
+ config.add_extension('add', sources=['add.pyf','add.f'])
+\newline
+
+ return config
+\newline
+
+\newline
+if __name__ == '__main__':
+\newline
+ from numpy.distutils.core import
+ setup
+\newline
+ setup(**configuration(top_path='').todict())
+\end_layout
+
+\begin_layout Standard
+Installation of the new package is easy using
+\end_layout
+
+\begin_layout LyX-Code
+python setup.py install
+\end_layout
+
+\begin_layout Standard
+assuming you have the proper permissions to write to the main site-packages
+ directory for the version of Python you are using.
+ For the resulting package to work, you need to create a file named __init__.py
+ (in the same directory as add.pyf).
+ Notice the extension module is defined entirely in terms of the
+\begin_inset Quotes eld
+\end_inset
+
+add.pyf
+\begin_inset Quotes erd
+\end_inset
+
+ and
+\begin_inset Quotes eld
+\end_inset
+
+add.f
+\begin_inset Quotes erd
+\end_inset
+
+ files.
+ The conversion of the .pyf file to a .c file is handled by numpy.disutils.
+
+\end_layout
+
+\begin_layout Subsection
+Conclusion
+\end_layout
+
+\begin_layout Standard
+The interface definition file (.pyf) is how you can fine-tune the interface
+ between Python and Fortran.
+ There is decent documentation for f2py found in the numpy/f2py/docs directory
+ where-ever NumPy is installed on your system (usually under site-packages).
+ There is also more information on using f2py (including how to use it to
+ wrap C codes) at http://www.scipy.org/Cookbook under the
+\begin_inset Quotes eld
+\end_inset
+
+Using NumPy with Other Languages
+\begin_inset Quotes erd
+\end_inset
+
+ heading.
+
+\end_layout
+
+\begin_layout Standard
+The f2py method of linking compiled code is currently the most sophisticated
+ and integrated approach.
+ It allows clean separation of Python with compiled code while still allowing
+ for separate distribution of the extension module.
+ The only draw-back is that it requires the existence of a Fortran compiler
+ in order for a user to install the code.
+ However, with the existence of the free-compilers g77, gfortran, and g95,
+ as well as high-quality commerical compilers, this restriction is not particula
+rly onerous.
+ In my opinion, Fortran is still the easiest way to write fast and clear
+ code for scientific computing.
+ It handles complex numbers, and multi-dimensional indexing in the most
+ straightforward way.
+ Be aware, however, that some Fortran compilers will not be able to optimize
+ code as well as good hand-written C-code.
+
+\begin_inset LatexCommand index
+name "f2py|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+weave
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "weave|("
+
+\end_inset
+
+Weave is a scipy package that can be used to automate the process of extending
+ Python with C/C++ code.
+ It can be used to speed up evaluation of an array expression that would
+ otherwise create temporary variables, to directly
+\begin_inset Quotes eld
+\end_inset
+
+inline
+\begin_inset Quotes erd
+\end_inset
+
+ C/C++ code into Python, or to create a fully-named extension module.
+ You must either install scipy or get the weave package separately and install
+ it using the standard python setup.py install.
+ You must also have a C/C++-compiler installed and useable by Python distutils
+ in order to use weave.
+\end_layout
+
+\begin_layout Standard
+Somewhat dated, but still useful documentation for weave can be found at
+ the link http://www.scipy/Weave.
+ There are also many examples found in the examples directory which is installed
+ under the weave directory in the place where weave is installed on your
+ system.
+\end_layout
+
+\begin_layout Subsection
+Speed up code involving arrays (also see scipy.numexpr)
+\end_layout
+
+\begin_layout Standard
+This is the easiest way to use weave and requires minimal changes to your
+ Python code.
+ It involves placing quotes around the expression of interest and calling
+ weave.blitz.
+ Weave will parse the code and generate C++ code using Blitz C++ arrays.
+ It will then compile the code and catalog the shared library so that the
+ next time this exact string is asked for (and the array types are the same),
+ the already-compiled shared library will be loaded and used.
+ Because Blitz makes extensive use of C++ templating, it can take a long
+ time to compile the first time.
+ After that, however, the code should evaluate more quickly than the equivalent
+ NumPy expression.
+ This is especially true if your array sizes are large and the expression
+ would require NumPy to create several temporaries.
+ Only expressions involving basic arithmetic operations and basic array
+ slicing can be converted to Blitz C++ code.
+
+\end_layout
+
+\begin_layout Standard
+For example, consider the expression
+\end_layout
+
+\begin_layout LyX-Code
+d = 4*a + 5*a*b + 6*b*c
+\end_layout
+
+\begin_layout Standard
+where a, b, and c are all arrays of the same type and shape.
+ When the data-type is double-precision and the size is 1000x1000, this
+ expression takes about 0.5 seconds to compute on an 1.1Ghz AMD Athlon machine.
+ When this expression is executed instead using blitz:
+\end_layout
+
+\begin_layout LyX-Code
+d = empty(a.shape, 'd'); weave.blitz(expr)
+\end_layout
+
+\begin_layout Standard
+execution time is only about 0.20 seconds (about 0.14 seconds spent in weave
+ and the rest in allocating space for d).
+ Thus, we've sped up the code by a factor of 2 using only a simnple command
+ (weave.blitz).
+ Your mileage may vary, but factors of 2-8 speed-ups are possible with this
+ very simple technique.
+
+\end_layout
+
+\begin_layout Standard
+If you are interested in using weave in this way, then you should also look
+ at scipy.numexpr which is another similar way to speed up expressions by
+ eliminating the need for temporary variables.
+ Using numexpr does not require a C/C++ compiler.
+
+\end_layout
+
+\begin_layout Subsection
+Inline C-code
+\end_layout
+
+\begin_layout Standard
+Probably the most widely-used method of employing weave is to
+\begin_inset Quotes eld
+\end_inset
+
+in-line
+\begin_inset Quotes erd
+\end_inset
+
+ C/C++ code into Python in order to speed up a time-critical section of
+ Python code.
+ In this method of using weave, you define a string containing useful C-code
+ and then pass it to the function
+\series bold
+weave.inline
+\series default
+(
+\family typewriter
+code_string
+\family default
+,
+\family typewriter
+variables
+\family default
+), where code_string is a string of valid C/C++ code and variables is a
+ list of variables that should be passed in from Python.
+ The C/C++ code should refer to the variables with the same names as they
+ are defined with in Python.
+ If weave.line should return anything the the special value return_val should
+ be set to whatever object should be returned.
+ The following example shows how to use weave on basic Python objects
+\end_layout
+
+\begin_layout LyX-Code
+code = r"""
+\newline
+int i;
+\newline
+py::tuple results(2);
+\newline
+for (i=0; i<a.length(); i++) {
+\newline
+
+ a[i] = i;
+\newline
+}
+\newline
+results[0] = 3.0;
+\newline
+results[1] = 4.0;
+\newline
+return_val = results;
+\newline
+"""
+
+\newline
+a = [None]*10
+\newline
+res = weave.inline(code,['a'])
+\end_layout
+
+\begin_layout Standard
+The C++ code shown in the code string uses the name 'a' to refer to the
+ Python list that is passed in.
+ Because the Python List is a mutable type, the elements of the list itself
+ are modified by the C++ code.
+ A set of C++ classes are used to access Python objects using simple syntax.
+
+\end_layout
+
+\begin_layout Standard
+The main advantage of using C-code, however, is to speed up processing on
+ an array of data.
+ Accessing a NumPy array in C++ code using weave, depends on what kind of
+ type converter is chosen in going from NumPy arrays to C++ code.
+ The default converter creates 5 variables for the C-code for every NumPy
+ array passed in to weave.inline.
+ The following table shows these variables which can all be used in the
+ C++ code.
+ The table assumes that
+\family typewriter
+myvar
+\family default
+ is the name of the array in Python with data-type <dtype> (i.e.
+ float64, float32, int8, etc.)
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Variable
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Type
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Contents
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+myvar
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+<dtype>*
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Pointer to the first element of the array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Nmyvar
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+npy_intp*
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+A pointer to the dimensions array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Smyvar
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+npy_intp*
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+A pointer to the strides array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Dmyvar
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+int
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+The number of dimensions
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+myvar_array
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+PyArrayObject*
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+The entire structure for the array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The in-lined code can contain references to any of these variables as well
+ as to the standard macros MYVAR1(i), MYVAR2(i,j), MYVAR3(i,j,k), and MYVAR4(i,j
+,k,l).
+ These name-based macros (they are the Python name capitalized followed
+ by the number of dimensions needed) will de-reference the memory for the
+ array at the given location with no error checking (be-sure to use the
+ correct macro and ensure the array is aligned and in correct byte-swap
+ order in order to get useful results).
+ The following code shows how you might use these variables and macros to
+ code a loop in C that computes a simple 2-d weighted averaging filter.
+\end_layout
+
+\begin_layout LyX-Code
+int i,j;
+\newline
+for(i=1;i<Na[0]-1;i++) {
+\newline
+ for(j=1;j<Na[1]-1;j++) {
+\newline
+ B2(i,j)
+ = A2(i,j) + (A2(i-1,j) +
+\newline
+ A2(i+1,j)+A2(i,j-1)
+\newline
+
+ + A2(i,j+1))*0.5
+\newline
+ + (A2(i-1,j-1)
+\newline
+ +
+ A2(i-1,j+1)
+\newline
+ + A2(i+1,j-1)
+\newline
+ + A2(i+1,j+1))*0.25
+\newline
+
+ }
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout Standard
+The above code doesn't have any error checking and so could fail with a
+ Python crash if,
+\family typewriter
+a
+\family default
+ had the wrong number of dimensions, or
+\family typewriter
+b
+\family default
+ did not have the same shape as
+\family typewriter
+a
+\family default
+.
+ However, it could be placed inside a standard Python function with the
+ necessary error checking to produce a robust but fast subroutine.
+\end_layout
+
+\begin_layout Standard
+One final note about weave.inline: if you have additional code you want to
+ include in the final extension module such as supporting function calls,
+ include statments, etc.
+ you can pass this code in as a string using the keyword support_code:
+\family typewriter
+weave.inline(code, variables, support_code=support)
+\family default
+.
+ If you need the extension module to link against an additional library
+ then you can also pass in distutils-style keyword arguments such as library_dir
+s, libraries, and/or runtime_library_dirs which point to the appropriate
+ libraries and directories.
+
+\end_layout
+
+\begin_layout Subsection
+Simplify creation of an extension module
+\end_layout
+
+\begin_layout Standard
+The inline function creates one extension module for each function to-be
+ inlined.
+ It also generates a lot of intermediate code that is duplicated for each
+ extension module.
+ If you have several related codes to execute in C, it would be better to
+ make them all separate functions in a single extension module with multiple
+ functions.
+ You can also use the tools weave provides to produce this larger extension
+ module.
+ In fact, the weave.inline function just uses these more general tools to
+ do its work.
+
+\end_layout
+
+\begin_layout Standard
+The approach is to:
+\end_layout
+
+\begin_layout Enumerate
+construct a extension module object using ext_tools.ext_module(
+\family typewriter
+module_name
+\family default
+);
+\end_layout
+
+\begin_layout Enumerate
+create function objects using ext_tools.ext_function(
+\family typewriter
+func_name
+\family default
+,
+\family typewriter
+code
+\family default
+,
+\family typewriter
+variables
+\family default
+);
+\end_layout
+
+\begin_layout Enumerate
+(optional) add support code to the function using the .customize.add_support_code(
+\family typewriter
+support_code
+\family default
+) method of the function object;
+\end_layout
+
+\begin_layout Enumerate
+add the functions to the extension module object using the .add_function(
+\family typewriter
+func
+\family default
+) method;
+\end_layout
+
+\begin_layout Enumerate
+when all the functions are added, compile the extension with its .compile()
+ method.
+\end_layout
+
+\begin_layout Standard
+Several examples are available in the examples directory where weave is
+ installed on your system.
+ Look particularly at ramp2.py, increment_example.py and fibonacii.py
+\end_layout
+
+\begin_layout Subsection
+Conclusion
+\end_layout
+
+\begin_layout Standard
+Weave is a useful tool for quickly routines in C/C++ and linking them into
+ Python.
+ It's caching-mechanism allows for on-the-fly compilation which makes it
+ particularly attractive for in-house code.
+ Because of the requirement that the user have a C++-compiler, it can be
+ difficult (but not impossible) to distribute a package that uses weave
+ to other users who don't have a compiler installed.
+ Of course, weave could be used to construct an extension module which is
+ then distributed in the normal way
+\emph on
+(
+\emph default
+using a setup.py file).
+ While you can use weave to build larger extension modules with many methods,
+ creating methods with a variable-number of arguments is not possible.
+ Thus, for a more sophisticated module, you will still probably want a Python-la
+yer that calls the weave-produced extension.
+
+\begin_inset LatexCommand index
+name "weave|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Pyrex
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "pyrex|("
+
+\end_inset
+
+Pyrex is a way to write C-extension modules using Python-like syntax.
+ It is an interesting way to generate extension modules that is growing
+ in popularity, particularly among people who have rusty or non-existent
+ C-skills.
+ It does require the user to write the
+\begin_inset Quotes eld
+\end_inset
+
+interface
+\begin_inset Quotes erd
+\end_inset
+
+ code and so is more time-consuming than SWIG or f2py if you are trying
+ to interface to a large library of code.
+ However, if you are writing an extension module that will include quite
+ a bit of your own algorithmic code, as well, then Pyrex is a good match.
+ A big weakness perhaps is the inability to easily and quickly access the
+ elements of a multidimensional array.
+
+\end_layout
+
+\begin_layout Standard
+Notice that Pyrex is an extension-module generator only.
+ Unlike weave or f2py, it includes no automatic facility for compiling and
+ linking the extension module (which must be done in the usual fashion).
+ It does provide a modified distutils class called build_ext which lets
+ you build an extension module from a .pyx source.
+ Thus, you could write in a setup.py file
+\end_layout
+
+\begin_layout LyX-Code
+from Pyrex.Distutils import build_ext
+\newline
+from distutils.extension import Extension
+\newline
+from
+ distutils.core import setup
+\newline
+
+\newline
+import numpy
+\newline
+py_ext = Extension('mine', ['mine.pyx'],
+\newline
+
+ include_dirs=[numpy.get_include()])
+\newline
+
+\newline
+setup(name='mine', description='Nothi
+ng',
+\newline
+ ext_modules=[pyx_ext],
+\newline
+ cmdclass = {'build_ext':build_ext})
+\end_layout
+
+\begin_layout Standard
+Adding the NumPy include directory is, of course, only necessary if you
+ are using NumPy arrays in the extension module (which is what I assume
+ you are using Pyrex for).
+ The distutils extensions in NumPy also include support for automatically
+ producing the extension-module and linking it from a
+\family typewriter
+.pyx
+\family default
+ file.
+ It works so that if the user does not have Pyrex installed, then it looks
+ for a file with the same file-name but a
+\family typewriter
+.c
+\family default
+ extension which it then uses instead of trying to produce the
+\family typewriter
+.c
+\family default
+ file again.
+
+\end_layout
+
+\begin_layout Standard
+Pyrex does not natively understand NumPy arrays.
+ However, it is not difficult to include information that lets Pyrex deal
+ with them usefully.
+ In fact, the numpy.random.mtrand module was written using Pyrex so an example
+ of Pyrex usage is already included in the NumPy source distribution.
+ That experience led to the creation of a standard c_numpy.pxd file that
+ you can use to simplify interacting with NumPy array objects in a Pyrex-written
+ extension.
+ The file may not be complete (it wasn't at the time of this writing).
+ If you have additions you'd like to contribute, please send them.
+ The file is located in the .../site-packages/numpy/doc/pyrex directory where
+ you have Python installed.
+ There is also an example in that directory of using Pyrex to construct
+ a simple extension module.
+ It shows that Pyrex looks a lot like Python but also contains some new
+ syntax that is necessary in order to get C-like speed.
+
+\end_layout
+
+\begin_layout Standard
+If you just use Pyrex to compile a standard Python module, then you will
+ get a C-extension module that runs either as fast or, possibly, more slowly
+ than the equivalent Python module.
+ Speed increases are possible only when you use cdef to statically define
+ C variables and use a special construct to create for loops:
+\end_layout
+
+\begin_layout LyX-Code
+cdef int i
+\newline
+for i from start <= i < stop
+\end_layout
+
+\begin_layout Standard
+Let's look at two examples we've seen before to see how they might be implemente
+d using Pyrex.
+ These examples were compiled into extension modules using Pyrex-0.9.3.1.
+\end_layout
+
+\begin_layout Subsection
+Pyrex-add
+\end_layout
+
+\begin_layout Standard
+Here is part of a Pyrex-file I named add.pyx which implements the add functions
+ we previously implemented using f2py:
+\end_layout
+
+\begin_layout LyX-Code
+cimport c_numpy
+\newline
+from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble
+,
+\backslash
+
+\newline
+ npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT,
+\backslash
+
+\newline
+ NPY_CFLOAT
+\newline
+
+\newline
+#We need to initialize NumPy
+\newline
+import_array()
+\newline
+
+\newline
+def zadd(object
+ ao, object bo):
+\newline
+ cdef ndarray c, a, b
+\newline
+ cdef npy_intp i
+\newline
+ a = c_numpy.PyArra
+y_ContiguousFromAny(ao,
+\newline
+ NPY_CDOUBLE, 1, 1)
+\newline
+ b = c_numpy.PyArr
+ay_ContiguousFromAny(bo,
+\newline
+ NPY_CDOUBLE, 1, 1)
+\newline
+ c = c_numpy.PyAr
+ray_SimpleNew(a.nd, a.dimensions,
+\newline
+ a.descr.type_num)
+\newline
+ for i
+ from 0 <= i < a.dimensions[0]:
+\newline
+ (<npy_cdouble *>c.data)[i].real =
+\backslash
+
+\newline
+ (<npy_cdouble *>a.data)[i].real +
+\backslash
+
+\newline
+ (<npy_cdouble *>b.data)[i].real
+\newline
+ (<npy_cdouble *>c.data)[i].imag
+ =
+\backslash
+
+\newline
+ (<npy_cdouble *>a.data)[i].imag +
+\backslash
+
+\newline
+ (<npy_cdouble *>b.data)[i].imag
+\newline
+ return c
+\end_layout
+
+\begin_layout Standard
+This module shows use of the
+\family typewriter
+cimport
+\family default
+ statement to load the definitions from the c_numpy.pxd file.
+ As shown, both versions of the import statement are supported.
+ It also shows use of the NumPy C-API to construct NumPy arrays from arbitrary
+ input objects.
+ The array c is created using PyArray_SimpleNew.
+ Then the c-array is filled by addition.
+ Casting to a particiular data-type is accomplished using <cast *>.
+ Pointers are de-referenced with bracket notation and members of structures
+ are accessed using '.' notation even if the object is techinically a pointer
+ to a structure.
+ The use of the special for loop construct ensures that the underlying code
+ will have a similar C-loop so the addition calculation will proceed quickly.
+ Notice that we have not checked for NULL after calling to the C-API ---
+ a cardinal sin when writing C-code.
+ For routines that return Python objects, Pyrex inserts the checks for NULL
+ into the C-code for you and returns with failure if need be.
+ There is also a way to get Pyrex to automatically check for exceptions
+ when you call functions that don't return Python objects.
+ See the documentation of Pyrex for details.
+
+\end_layout
+
+\begin_layout Subsection
+Pyrex-filter
+\end_layout
+
+\begin_layout Standard
+The two-dimensional example we created using weave is a bit uglierto implement
+ in Pyrex because two-dimensional indexing using Pyrex is not as simple.
+ But, it is straightforward (and possibly faster because of pre-computed
+ indices).
+ Here is the Pyrex-file I named image.pyx.
+\end_layout
+
+\begin_layout LyX-Code
+cimport c_numpy
+\newline
+from c_numpy cimport import_array, ndarray, npy_intp,
+\backslash
+
+\newline
+ NPY_DOUBLE, NPY_CDOUBLE,
+\backslash
+
+\newline
+ NPY_FLOAT, NPY_CFLOAT, NPY_ALIGNED
+\backslash
+
+\newline
+
+\newline
+#We need to initialize NumPy
+\newline
+import_array()
+\newline
+def filter(object ao):
+\newline
+ cdef
+ ndarray a, b
+\newline
+ cdef npy_intp i, j, M, N, oS
+\newline
+ cdef npy_intp r,rm1,rp1,c,cm1,c
+p1
+\newline
+ cdef double value
+\newline
+ # Require an ALIGNED array
+\newline
+ # (but not necessarily
+ contiguous)
+\newline
+ # We will use strides to access the elements.
+\newline
+ a = c_numpy.PyAr
+ray_FROMANY(ao, NPY_DOUBLE,
+\backslash
+
+\newline
+ 2, 2, NPY_ALIGNED)
+\newline
+ b = c_numpy.PyArray_SimpleNew(a.nd,a.dimensio
+ns,
+\backslash
+
+\newline
+ a.descr.type_num)
+\newline
+ M = a.dimensions[0]
+\newline
+
+ N = a.dimensions[1]
+\newline
+ S0 = a.strides[0]
+\newline
+ S1 = a.strides[1]
+\newline
+ for i
+ from 1 <= i < M-1:
+\newline
+ r = i*S0
+\newline
+ rm1 = r-S0
+\newline
+ rp1 = r+S0
+\newline
+
+ oS = i*N
+\newline
+ for j from 1 <= j < N-1:
+\newline
+ c = j*S1
+\newline
+
+ cm1 = c-S1
+\newline
+ cp1 = c+S1
+\newline
+ (<double *>b.data)[oS+j]
+ =
+\backslash
+
+\newline
+ (<double *>(a.data+r+c))[0] +
+\backslash
+
+\newline
+ ((<double *>(a.data+rm1+c))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+rp1+c))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+r+cm1))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+r+cp1))[0])*0.5 +
+\backslash
+
+\newline
+ ((<double *>(a.data+rm1+cm1))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+rp1+cm1))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+rp1+cp1))[0] +
+\backslash
+
+\newline
+ (<double *>(a.data+rm1+cp1))[0])*0.25
+\newline
+ return b
+\end_layout
+
+\begin_layout Standard
+This 2-d averaging filter runs quickly because the loop is in C and the
+ pointer computations are done only as needed.
+ However, it is not particularly easy to understand what is happening.
+ A 2-d image,
+\family typewriter
+in
+\family default
+, can be filtered using this code very quickly using
+\end_layout
+
+\begin_layout LyX-Code
+import image
+\end_layout
+
+\begin_layout LyX-Code
+out = image.filter(in)
+\end_layout
+
+\begin_layout Subsection
+Conclusion
+\end_layout
+
+\begin_layout Standard
+There are several disadvantages of using Pyrex:
+\end_layout
+
+\begin_layout Enumerate
+The syntax for Pyrex can get a bit bulky, and it can be confusing at first
+ to understand what kind of objects you are getting and how to interface
+ them with C-like constructs.
+
+\end_layout
+
+\begin_layout Enumerate
+Inappropriate Pyrex syntax or incorrect calls to C-code or type-mismatches
+ can result in failures such as
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+Pyrex failing to generate the extension module source code,
+\end_layout
+
+\begin_layout Enumerate
+Compiler failure while generating the extension module binary due to incorrect
+ C syntax,
+\end_layout
+
+\begin_layout Enumerate
+Python failure when trying to use the module.
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+It is easy to lose a clean separation between Python and C which makes re-using
+ your C-code for other non-Python-related projects more difficult.
+\end_layout
+
+\begin_layout Enumerate
+Multi-dimensional arrays are
+\begin_inset Quotes eld
+\end_inset
+
+bulky
+\begin_inset Quotes erd
+\end_inset
+
+ to index (appropriate macros may be able to fix this).
+
+\end_layout
+
+\begin_layout Enumerate
+The C-code generated by Prex is hard to read and modify (and typically compiles
+ with annoying but harmless warnings).
+
+\end_layout
+
+\begin_layout Standard
+Writing a good Pyrex extension module still takes a bit of effort because
+ not only does it require (a little) familiarity with C, but also with Pyrex's
+ brand of Python-mixed-with C.
+ One big advantage of Pyrex-generated extension modules is that they are
+ easy to distribute using distutils.
+ In summary, Pyrex is a very capable tool for either gluing C-code or generating
+ an extension module quickly and should not be over-looked.
+ It is especially useful for people that can't or won't write C-code or
+ Fortran code.
+ But, if you are already able to write simple subroutines in C or Fortran,
+ then I would use one of the other approaches such as f2py (for Fortran),
+ ctypes (for C shared-libraries), or weave (for inline C-code).
+\begin_inset LatexCommand index
+name "pyrex|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+ctypes
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ctypes|("
+
+\end_inset
+
+Ctypes is a python extension module (downloaded separately for Python <2.5
+ and included with Python 2.5) that allows you to call an arbitrary function
+ in a shared library directly from Python.
+ This approach allows you to interface with C-code directly from Python.
+ This opens up an enormous number of libraries for use from Python.
+ The drawback, however, is that coding mistakes can lead to ugly program
+ crashes very easily (just as can happen in C) because there is little type
+ or bounds checking done on the parameters.
+ This is especially true when array data is passed in as a pointer to a
+ raw memory location.
+ The responsibility is then on you that the subroutine will not access memory
+ outside the actual array area.
+ But, if you don't mind living a little dangerously ctypes can be an effective
+ tool for quickly taking advantage of a large shared library (or writing
+ extended functionality in your own shared library).
+\end_layout
+
+\begin_layout Standard
+Because the ctypes approach exposes a raw interface to the compiled code
+ it is not always tolerant of user mistakes.
+ Robust use of the ctypes module typically involves an additional layer
+ of Python code in order to check the data types and array bounds of objects
+ passed to the underlying subroutine.
+ This additional layer of checking (not to mention the conversion from ctypes
+ objects to C-data-types that ctypes itself performs), will make the interface
+ slower than a hand-written extension-module interface.
+ However, this overhead should be neglible if the C-routine being called
+ is doing any significant amount of work.
+ If you are a great Python programmer with weak C-skills, ctypes is an easy
+ way to write a useful interface to a (shared) library of compiled code.
+
+\end_layout
+
+\begin_layout Standard
+To use c-types you must
+\end_layout
+
+\begin_layout Enumerate
+Have a shared library.
+\end_layout
+
+\begin_layout Enumerate
+Load the shared library.
+\end_layout
+
+\begin_layout Enumerate
+Convert the python objects to ctypes-understood arguments.
+\end_layout
+
+\begin_layout Enumerate
+Call the function from the library with the ctypes arguments.
+\end_layout
+
+\begin_layout Subsection
+Having a shared library
+\end_layout
+
+\begin_layout Standard
+There are several requirements for a shared library that can be used with
+ c-types that are platform specific.
+ This guide assumes you have some familiarity with making a shared library
+ on your system (or simply have a shared library available to you).
+ Items to remember are:
+\end_layout
+
+\begin_layout Itemize
+A shared library must be compiled in a special way (
+\emph on
+e.g.
+
+\emph default
+ using the -shared flag with gcc).
+\end_layout
+
+\begin_layout Itemize
+On some platforms (
+\emph on
+e.g.
+
+\emph default
+ Windows) , a shared library requires a .def file that specifies the functions
+ to be exported.
+ For example a mylib.def file might contain.
+
+\end_layout
+
+\begin_deeper
+\begin_layout LyX-Code
+LIBRARY mylib.dll
+\newline
+EXPORTS
+\newline
+cool_function1
+\newline
+cool_function2
+\end_layout
+
+\begin_layout Standard
+Alternatively, you may be able to use the storage-class specifier __declspec(dll
+export) in the C-definition of the function to avoid the need for this .def
+ file.
+
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+There is no standard way in Python distutils to create a standard shared
+ library (an extension module is a
+\begin_inset Quotes eld
+\end_inset
+
+special
+\begin_inset Quotes erd
+\end_inset
+
+ shared library Python understands) in a cross-platform manner.
+ Thus, a big disadvantage of ctypes at the time of writing this book is
+ that it is difficult to distribute in a cross-platform manner a Python
+ extension that uses c-types and includes your own code which should be
+ compiled as a shared library on the users system.
+
+\end_layout
+
+\begin_layout Subsection
+Loading the shared library
+\end_layout
+
+\begin_layout Standard
+A simple, but robust way to load the shared library is to get the absolute
+ path name and load it using the cdll object of ctypes.
+
+\end_layout
+
+\begin_layout LyX-Code
+lib = ctypes.cdll[<full_path_name>]
+\end_layout
+
+\begin_layout Standard
+However, on Windows accessing an attribute of the cdll method will load
+ the first DLL by that name found in the current directory or on the PATH.
+ Loading the absolute path name requires a little finesse for cross-platform
+ work since the extension of shared libraries varies.
+ There is a
+\family typewriter
+ctypes.util.find_library
+\family default
+ utility available that can simplify the process of finding the library
+ to load but it is not foolproof.
+ Complicating matters, different platforms have different default extensions
+ used by shared libraries (e.g.
+ .dll -- Windows, .so -- Linux, .dylib -- Mac OS X).
+ This must also be taken into account if you are using c-types to wrap code
+ that needs to work on several platforms.
+
+\end_layout
+
+\begin_layout Standard
+NumPy provides a convenience function called
+\series bold
+ctypeslib.load_library
+\series default
+(name, path).
+ This function takes the name of the shared library (including any prefix
+ like 'lib' but excluding the extension) and a path where the shared library
+ can be located.
+ It returns a ctypes library object or raises an OSError if the library
+ cannot be found or raises an ImportError if the ctypes module is not available.
+ (Windows users: the ctypes library object loaded using
+\series bold
+load_library
+\series default
+ is always loaded assuming cdecl calling convention.
+ See the ctypes documentation under ctypes.windll and/or ctypes.oledll for
+ ways to load libraries under other calling conventions).
+
+\end_layout
+
+\begin_layout Standard
+The functions in the shared library are available as attributes of the ctypes
+ library object (returned from
+\series bold
+ctypeslib.load_library
+\series default
+) or as items using lib['func_name'] syntax.
+ The latter method for retrieving a function name is particularly useful
+ if the function name contains characters that are not allowable in Python
+ variable names.
+
+\end_layout
+
+\begin_layout Subsection
+Converting arguments
+\end_layout
+
+\begin_layout Standard
+Python ints/longs, strings, and unicode objects are automatically converted
+ as needed to equivalent c-types arguments The None object is also converted
+ automatically to a NULL pointer.
+ All other Python objects must be converted to ctypes-specific types.
+ There are two ways around this restriction that allow c-types to integrate
+ with other objects.
+
+\end_layout
+
+\begin_layout Enumerate
+Don't set the argtypes attribute of the function object and define an _as_parame
+ter_ method for the object you want to pass in.
+ The _as_parameter_ method must return a Python int which will be passed
+ directly to the function.
+
+\end_layout
+
+\begin_layout Enumerate
+Set the argtypes attribute to a list whose entries contain objects with
+ a classmethod named from_param that knows how to convert your object to
+ an object that ctypes can understand (an int/long, string, unicode, or
+ object with the _as_parameter_ attribute).
+
+\end_layout
+
+\begin_layout Standard
+NumPy uses both methods with a preference for the second method because
+ it can be safer.
+ The ctypes attribute of the ndarray returns an object that has an _as_parameter
+_ attribute which returns an integer representing the address of the ndarray
+ to which it is associated.
+ As a result, one can pass this ctypes attribute object directly to a function
+ expecting a pointer to the data in your ndarray.
+ The caller must be sure that the ndarray object is of the correct type,
+ shape, and has the correct flags set or risk nasty crashes if the data-pointer
+ to inappropriate arrays are passsed in.
+
+\end_layout
+
+\begin_layout Standard
+To implement the second method, NumPy provides the class-factory function
+
+\series bold
+ndpointer
+\series default
+ in the
+\series bold
+ctypeslib
+\series default
+ module.
+ This class-factory function produces an appropriate class that can be placed
+ in an argtypes attribute entry of a ctypes function.
+ The class will contain a from_param method which ctypes will use to convert
+ any ndarray passed in to the function to a ctypes-recognized object.
+ In the process, the conversion will perform checking on any properties
+ of the ndarray that were specified by the user in the call to ndpointer.
+ Aspects of the ndarray that can be checked include the data-type, the number-of
+-dimensions, the shape, and/or the state of the flags on any array passed.
+ The return value of the from_param method is the ctypes attribute of the
+ array which (because it contains the _as_parameter_ attribute pointing
+ to the array data area) can be used by ctypes directly.
+
+\end_layout
+
+\begin_layout Standard
+The ctypes attribute of an ndarray is also endowed with additional attributes
+ that may be convenient when passing additional information about the array
+ into a ctypes function.
+ The attributes
+\series bold
+data
+\series default
+,
+\series bold
+shape
+\series default
+, and
+\series bold
+strides
+\series default
+ can provide c-types compatible types corresponding to the data-area, the
+ shape, and the strides of the array.
+ The data attribute reutrns a
+\family typewriter
+c_void_p
+\family default
+ representing a pointer to the data area.
+ The shape and strides attributes each return an array of ctypes integers
+ (or None representing a NULL pointer, if a 0-d array).
+ The base ctype of the array is a ctype integer of the same size as a pointer
+ on the platform.
+ There are also methods data_as(<ctype>), shape_as(<base ctype>), and strides_as
+(<base ctype>).
+ These return the data as a ctype object of your choice and the shape/strides
+ arrays using an underlying base type of your choice.
+ For convenience, the
+\series bold
+ctypeslib
+\series default
+ module also contains
+\series bold
+c_intp
+\series default
+ as a ctypes integer data-type whose size is the same as the size of
+\family typewriter
+c_void_p
+\family default
+ on the platform (it's value is None if ctypes is not installed).
+
+\end_layout
+
+\begin_layout Subsection
+Calling the function
+\end_layout
+
+\begin_layout Standard
+The function is accessed as an attribute of or an item from the loaded shared-li
+brary.
+ Thus, if
+\begin_inset Quotes eld
+\end_inset
+
+./mylib.so
+\begin_inset Quotes erd
+\end_inset
+
+ has a function named
+\begin_inset Quotes eld
+\end_inset
+
+cool_function1
+\begin_inset Quotes erd
+\end_inset
+
+, I could access this function either as
+\end_layout
+
+\begin_layout LyX-Code
+lib = numpy.ctypeslib.load_library('mylib','.')
+\newline
+func1 = lib.cool_function1 #
+ or equivalently
+\newline
+func1 = lib['cool_function1']
+\end_layout
+
+\begin_layout Standard
+In ctypes, the return-value of a function is set to be 'int' by default.
+ This behavior can be changed by setting the restype attribute of the function.
+ Use None for the restype if the function has no return value ('void'):
+\end_layout
+
+\begin_layout LyX-Code
+func1.restype = None
+\end_layout
+
+\begin_layout Standard
+As previously discussed, you can also set the argtypes attribute of the
+ function in order to have ctypes check the types of the input arguments
+ when the function is called.
+ Use the ndpointer factory function to generate a ready-made class for data-type
+, shape, and flags checking on your new function.
+ The ndpointer function has the signature
+\end_layout
+
+\begin_layout Description
+ndpointer (dtype=None, ndim=None, shape=None, flags=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Keyword arguments with the value
+\family typewriter
+None
+\family default
+ are not checked.
+ Specifying a keyword enforces checking of that aspect of the ndarray on
+ conversion to a ctypes-compatible object.
+ The dtype keyword can be any object understood as a data-type object.
+ The ndim keyword should be an integer, and the shape keyword should be
+ an integer or a sequence of integers.
+ The flags keyword specifies the minimal flags that are required on any
+ array passed in.
+ This can be specified as a string of comma separated requirements, an integer
+ indicating the requirement bits OR'd together, or a flags object returned
+ from the flags attribute of an array with the necessary requirements.
+
+\end_layout
+
+\begin_layout Standard
+Using an ndpointer class in the argtypes method can make it significantly
+ safer to call a C-function using ctypes and the data-area of an ndarray.
+ You may still want to wrap the function in an additional Python wrapper
+ to make it user-friendly (hiding some obvious arguments and making some
+ arguments output arguments).
+ In this process, the
+\series bold
+requires
+\series default
+ function in NumPy may be useful to return the right kind of array from
+ a given input.
+
+\end_layout
+
+\begin_layout Subsection
+Complete example
+\end_layout
+
+\begin_layout Standard
+In this example, I will show how the addition function and the filter function
+ implemented previously using the other approaches can be implemented using
+ ctypes.
+ First, the C-code which implements the algorithms contains the functions
+ zadd, dadd, sadd, cadd, and dfilter2d.
+ The zadd function is
+\end_layout
+
+\begin_layout LyX-Code
+/* Add arrays of contiguous data */
+\newline
+typedef struct {double real; double imag;}
+ cdouble;
+\newline
+typedef struct {float real; float imag;} cfloat;
+\newline
+void zadd(cdouble
+ *a, cdouble *b, cdouble *c, long n)
+\newline
+{
+\newline
+ while (n--) {
+\newline
+ c->real =
+ a->real + b->real;
+\newline
+ c->imag = a->imag + b->imag;
+\newline
+ a++; b++;
+ c++;
+\newline
+ }
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+with similar code for cadd, dadd, and sadd that handles complex float, double,
+ and float data-types, respectively:
+\end_layout
+
+\begin_layout LyX-Code
+void cadd(cfloat *a, cfloat *b, cfloat *c, long n)
+\newline
+{
+\newline
+ while (n--) {
+\newline
+
+ c->real = a->real + b->real;
+\newline
+ c->imag = a->imag
+ + b->imag;
+\newline
+ a++; b++; c++;
+\newline
+ }
+\newline
+}
+\newline
+void dadd(double
+ *a, double *b, double *c, long n)
+\newline
+{
+\newline
+ while (n--) {
+\newline
+
+ *c++ = *a++ + *b++;
+\newline
+ }
+\newline
+}
+\newline
+void sadd(float *a, float *b, float
+ *c, long n)
+\newline
+{
+\newline
+ while (n--) {
+\newline
+ *c++ = *a++ + *b++;
+\newline
+
+ }
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+The code.c file also contains the function dfilter2d:
+\end_layout
+
+\begin_layout LyX-Code
+/* Assumes b is contiguous and
+\newline
+ a has strides that are multiples of sizeof(dou
+ble)
+\newline
+*/
+\newline
+void
+\newline
+dfilter2d(double *a, double *b, int *astrides, int *dims)
+\newline
+{
+\newline
+
+ int i, j, M, N, S0, S1;
+\newline
+ int r, c, rm1, rp1, cp1, cm1;
+\newline
+
+\newline
+ M = dims[0];
+ N = dims[1];
+\newline
+ S0 = astrides[0]/sizeof(double);
+\newline
+ S1=astrides[1]/sizeof(doub
+le);
+\newline
+ for (i=1; i<M-1; i++) {
+\newline
+ r = i*S0; rp1 = r+S0; rm1 = r-S0;
+\newline
+
+ for (j=1; j<N-1; j++) {
+\newline
+ c = j*S1; cp1 = j+S1; cm1 = j-S1;
+\newline
+
+ b[i*N+j] = a[r+c] +
+\backslash
+
+\newline
+ (a[rp1+c] + a[rm1+c] +
+\backslash
+
+\newline
+ a[r+cp1] + a[r+cm1])*0.5 +
+\backslash
+
+\newline
+ (a[rp1+cp1] + a[rp1+cm1] +
+\backslash
+
+\newline
+ a[rm1+cp1] + a[rm1+cp1])*0.25;
+\newline
+ }
+\newline
+ }
+\newline
+}
+\end_layout
+
+\begin_layout Standard
+A possible advantage this code has over the Fortran-equivalent code is that
+ it takes arbitrarily strided (i.e.
+ non-contiguous arrays) and may also run faster depending on the optimization
+ capability of your compiler.
+ But, it is a obviously more complicated than the simple code in filter.f.
+ This code must be compiled into a shared library.
+ On my Linux system this is accomplished using
+\end_layout
+
+\begin_layout LyX-Code
+gcc -o code.so -shared code.c
+\end_layout
+
+\begin_layout Standard
+Which creates a shared_library named code.so in the current directory.
+ On Windows don't forget to either add __declspec(dllexport) in front of
+ void on the line preceeding each function definition, or write a code.def
+ file that lists the names of the functions to be exported.
+
+\end_layout
+
+\begin_layout Standard
+A suitable Python interface to this shared library should be constructed.
+ To do this create a file named interface.py with the following lines at
+ the top:
+\end_layout
+
+\begin_layout LyX-Code
+__all__ = ['add', 'filter2d']
+\newline
+
+\newline
+import numpy as N
+\newline
+import os
+\newline
+
+\newline
+_path = os.path.dirname('__
+file__')
+\newline
+lib = N.ctypeslib.load_library('code', _path)
+\newline
+_typedict = {'zadd' :
+ complex, 'sadd' : N.single,
+\newline
+ 'cadd' : N.csingle, 'dadd' : float}
+\newline
+for
+ name in _typedict.keys():
+\newline
+ val = getattr(lib, name)
+\newline
+ val.restype = None
+\newline
+
+ _type = _typedict[name]
+\newline
+ val.argtypes = [N.ctypeslib.ndpointer(_type,
+
+\newline
+ flags='aligned, contiguous'),
+\newline
+
+ N.ctypeslib.ndpointer(_type,
+\newline
+ flags='aligned, contiguous'),
+\newline
+
+ N.ctypeslib.ndpointer(_type,
+\newline
+ flags='alig
+ned, contiguous,'
+\backslash
+
+\newline
+ 'writeable'),
+\newline
+ N.ctypeslib.c_intp]
+\end_layout
+
+\begin_layout Standard
+This code loads the shared library named code.<ext> located in the same path
+ as this file.
+ It then adds a return type of void to the functions contained in the library.
+ It also adds argument checking to the functions in the library so that
+ ndarrays can be passed as the first three arguments along with an integer
+ (large enough to hold a pointer on the platform) as the fourth argument.
+
+\end_layout
+
+\begin_layout Standard
+Setting up the filtering function is similar and allows the filtering function
+ to be called with ndarray arguments as the first two arguments and with
+ pointers to integers (large enough to handle the strides and shape of an
+ ndarray) as the last two arguments.
+
+\end_layout
+
+\begin_layout LyX-Code
+lib.dfilter2d.restype=None
+\newline
+lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float,
+ ndim=2,
+\newline
+ flags='aligned'),
+\newline
+
+ N.ctypeslib.ndpointer(float, ndim=2,
+\newline
+
+ flags='aligned, contiguous,'
+\backslash
+
+\newline
+ 'writeable'),
+\newline
+
+ ctypes.POINTER(N.ctypeslib.c_intp),
+\newline
+ ctypes.POINTER
+(N.ctypeslib.c_intp)]
+\end_layout
+
+\begin_layout Standard
+Next, define a simple selection function that chooses which addition function
+ to call in the shared library based on the data-type:
+\end_layout
+
+\begin_layout LyX-Code
+def select(dtype):
+\newline
+ if dtype.char in ['?bBhHf']:
+\newline
+ return lib.sadd,
+ single
+\newline
+ elif dtype.char in ['F']:
+\newline
+ return lib.cadd, csingle
+\newline
+ elif
+ dtype.char in ['DG']:
+\newline
+ return lib.zadd, complex
+\newline
+ else:
+\newline
+ return
+ lib.dadd, float
+\newline
+ return func, ntype
+\end_layout
+
+\begin_layout Standard
+Finally, the two functions to be exported by the interface can be written
+ simply as
+\end_layout
+
+\begin_layout LyX-Code
+def add(a, b):
+\newline
+ requires = ['CONTIGUOUS', 'ALIGNED']
+\newline
+ a = N.asanyarray(a)
+\newline
+
+ func, dtype = select(a.dtype)
+\newline
+ a = N.require(a, dtype, requires)
+\newline
+
+ b = N.require(b, dtype, requires)
+\newline
+ c = N.empty_like(a)
+\newline
+ func(a,b,c,a.size)
+\newline
+
+ return c
+\end_layout
+
+\begin_layout Standard
+and
+\end_layout
+
+\begin_layout LyX-Code
+def filter2d(a):
+\newline
+ a = N.require(a, float, ['ALIGNED'])
+\newline
+ b = N.zeros_like(a)
+\newline
+
+ lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
+\newline
+ return b
+\end_layout
+
+\begin_layout Subsection
+Conclusion
+\end_layout
+
+\begin_layout Standard
+Using ctypes is a powerful way to connect Python with arbitrary C-code.
+ It's advantages for extending Python include
+\end_layout
+
+\begin_layout Itemize
+clean separation of C-code from Python code
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+no need to learn a new syntax except Python and C
+\end_layout
+
+\begin_layout Itemize
+allows re-use of C-code
+\end_layout
+
+\begin_layout Itemize
+functionality in shared libraries written for other purposes can be obtained
+ with a simple Python wrapper and search for the library.
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+easy integration with NumPy through the ctypes attribute
+\end_layout
+
+\begin_layout Itemize
+full argument checking with the ndpointer class factory
+\end_layout
+
+\begin_layout Standard
+It's disadvantages include
+\end_layout
+
+\begin_layout Itemize
+It is difficult to distribute an extension module made using ctypes because
+ of a lack of support for building shared libraries in distutils (but I
+ suspect this will change in time).
+
+\end_layout
+
+\begin_layout Itemize
+You must have shared-libraries of your code (no static libraries).
+
+\end_layout
+
+\begin_layout Itemize
+Very little support for C++ code and it's different library-calling conventions.
+ You will probably need a C-wrapper around C++ code to use with ctypes (or
+ just use Boost.Python instead).
+\end_layout
+
+\begin_layout Standard
+Because of the difficulty in distributing an extension module made using
+ ctypes, f2py is still the easiest way to extend Python for package creation.
+ However, ctypes is a close second and will probably be growing in popularity
+ now that it is part of the Python distribution.
+ This should bring more features to ctypes that should eliminate the difficulty
+ in extending Python and distributing the extension using ctypes.
+
+\begin_inset LatexCommand index
+name "ctypes|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Additional tools you may find useful
+\end_layout
+
+\begin_layout Standard
+These tools have been found useful by others using Python and so are included
+ here.
+ They are discussed separately because I see them as either older ways to
+ do things more modernly handled by f2py, weave, Pyrex, or ctypes (SWIG,
+ PyFort, PyInline) or because I don't know much about them (SIP, Boost,
+ Instant).
+ I have not added links to these methods because my experience is that you
+ can find the most relevant link faster using Google or some other search
+ engine, and any links provided here would be quickly dated.
+ Do not assume that just because it is included in this list, I don't think
+ the package deserves your attention.
+ I'm including information about these packages because many people have
+ found them useful and I'd like to give you as many options as possible
+ for tackling the problem of easily integrating your code.
+
+\end_layout
+
+\begin_layout Subsection
+SWIG
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "swig"
+
+\end_inset
+
+Simplified Wrapper and Interface Generator (SWIG) is an old and fairly stable
+ method for wrapping C/C++-libraries to a large variety of other languages.
+ It does not specifically understand NumPy arrays but can be made useable
+ with NumPy through the use of typemaps.
+ There are some sample typemaps in the numpy/doc/swig directory under numpy.i
+ along with an example module that makes use of them.
+ SWIG excels at wrapping large C/C++ libraries because it can (almost) parse
+ their headers and auto-produce an interface.
+ Technically, you need to generate a
+\family typewriter
+.i
+\family default
+ file that defines the interface.
+ Often, however, this
+\family typewriter
+.i
+\family default
+ file can be parts of the header itself.
+ The interface usually needs a bit of tweaking to be very useful.
+ This ability to parse C/C++ headers and auto-generate the interface still
+ makes SWIG a useful approach to adding functionalilty from C/C++ into Python,
+ despite the other methods that have emerged that are more targeted to Python.
+ SWIG can actually target extensions for several languages, but the typemaps
+ usually have to be language-specific.
+ Nonetheless, with modifications to the Python-specific typemaps, SWIG can
+ be used to interface a library with other languages such as Perl, Tcl,
+ and Ruby.
+
+\end_layout
+
+\begin_layout Standard
+My experience with SWIG has been generally positive in that it is relatively
+ easy to use and quite powerful.
+ I used to use it quite often before becoming more proficient at writing
+ C-extensions.
+ However, I struggled writing custom interfaces with SWIG because it must
+ be done using the concept of typemaps which are not Python specific and
+ are written in a C-like syntax.
+ Therefore, I tend to prefer other gluing strategies and would only attempt
+ to use SWIG to wrap a very-large C/C++ library.
+ Nonetheless, there are others who use SWIG quite happily.
+
+\end_layout
+
+\begin_layout Subsection
+SIP
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "SIP"
+
+\end_inset
+
+SIP is another tool for wrapping C/C++ libraries that is Python specific
+ and appears to have very good support for C++.
+ Riverbank Computing developed SIP in order to create Python bindings to
+ the QT library.
+ An interface file must be written to generate the binding, but the interface
+ file looks a lot like a C/C++ header file.
+ While SIP is not a full C++ parser, it understands quite a bit of C++ syntax
+ as well as its own special directives that allow modification of how the
+ Python binding is accomplished.
+ It also allows the user to define mappings between Python types and C/C++
+ structrues and classes.
+
+\end_layout
+
+\begin_layout Subsection
+Boost Python
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "Boost.Python"
+
+\end_inset
+
+Boost is a repository of C++ libraries and Boost.Python is one of those libraries
+ which provides a concise interface for binding C++ classes and functions
+ to Python.
+ The amazing part of the Boost.Python approach is that it works entirely
+ in pure C++ without introducing a new syntax.
+ Many users of C++ report that Boost.Python makes it possible to combine
+ the best of both worlds in a seamless fashion.
+ I have not used Boost.Python because I am not a big user of C++ and using
+ Boost to wrap simple C-subroutines is usually over-kill.
+ It's primary purpose is to make C++ classes available in Python.
+ So, if you have a set of C++ classes that need to be integrated cleanly
+ into Python, consider learning about and using Boost.Python.
+\end_layout
+
+\begin_layout Subsection
+Instant
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "Instant"
+
+\end_inset
+
+This is a relatively new package (called pyinstant at sourceforge) that
+ builds on top of SWIG to make it easy to inline C and C++ code in Python
+ very much like weave.
+ However, Instant builds extension modules on the fly with specific module
+ names and specific method names.
+ In this repsect it is more more like f2py in its behavior.
+ The extension modules are built on-the fly (as long as the SWIG is installed).
+ They can then be imported.
+ Here is an example of using Instant with NumPy arrays (adapted from the
+ test2 included in the Instant distribution):
+\end_layout
+
+\begin_layout LyX-Code
+code="""
+\end_layout
+
+\begin_layout LyX-Code
+PyObject* add(PyObject* a_, PyObject* b_){
+\end_layout
+
+\begin_layout LyX-Code
+ /*
+\end_layout
+
+\begin_layout LyX-Code
+ various checks
+\end_layout
+
+\begin_layout LyX-Code
+ */
+\end_layout
+
+\begin_layout LyX-Code
+ PyArrayObject* a=(PyArrayObject*) a_;
+\end_layout
+
+\begin_layout LyX-Code
+ PyArrayObject* b=(PyArrayObject*) b_;
+\end_layout
+
+\begin_layout LyX-Code
+ int n = a->dimensions[0];
+\end_layout
+
+\begin_layout LyX-Code
+ int dims[1];
+\end_layout
+
+\begin_layout LyX-Code
+ dims[0] = n;
+\end_layout
+
+\begin_layout LyX-Code
+ PyArrayObject* ret;
+\end_layout
+
+\begin_layout LyX-Code
+ ret = (PyArrayObject*) PyArray_FromDims(1, dims, NPY_DOUBLE);
+\end_layout
+
+\begin_layout LyX-Code
+ int i;
+\end_layout
+
+\begin_layout LyX-Code
+ char *aj=a->data;
+\end_layout
+
+\begin_layout LyX-Code
+ char *bj=b->data;
+\end_layout
+
+\begin_layout LyX-Code
+ double *retj = (double *)ret->data;
+\end_layout
+
+\begin_layout LyX-Code
+ for (i=0; i < n; i++) {
+\end_layout
+
+\begin_layout LyX-Code
+ *retj++ = *((double *)aj) + *((double *)bj);
+\end_layout
+
+\begin_layout LyX-Code
+ aj += a->strides[0];
+\end_layout
+
+\begin_layout LyX-Code
+ bj += b->strides[0];
+\end_layout
+
+\begin_layout LyX-Code
+ }
+\end_layout
+
+\begin_layout LyX-Code
+return (PyObject *)ret;
+\end_layout
+
+\begin_layout LyX-Code
+}
+\end_layout
+
+\begin_layout LyX-Code
+"""
+\end_layout
+
+\begin_layout LyX-Code
+import Instant, numpy
+\end_layout
+
+\begin_layout LyX-Code
+ext = Instant.Instant()
+\end_layout
+
+\begin_layout LyX-Code
+ext.create_extension(code=s, headers=["numpy/arrayobject.h"],
+ include_dirs=[numpy.get_include()],
+ init_code='import_array();', module="test2b_ext
+")
+\end_layout
+
+\begin_layout LyX-Code
+import test2b_ext
+\end_layout
+
+\begin_layout LyX-Code
+a = numpy.arange(1000)
+\end_layout
+
+\begin_layout LyX-Code
+b = numpy.arange(1000)
+\end_layout
+
+\begin_layout LyX-Code
+d = test2b_ext.add(a,b)
+\end_layout
+
+\begin_layout Standard
+Except perhaps for the dependence on SWIG, Instant is a straightforward
+ utility for writing extension modules.
+
+\end_layout
+
+\begin_layout Subsection
+PyInline
+\end_layout
+
+\begin_layout Standard
+This is a much older module that allows automatic building of extension
+ modules so that C-code can be included with Python code.
+ It's latest release (version 0.03) was in 2001, and it appears that it is
+ not being updated.
+
+\end_layout
+
+\begin_layout Subsection
+PyFort
+\end_layout
+
+\begin_layout Standard
+PyFort is a nice tool for wrapping Fortran and Fortran-like C-code into
+ Python with support for Numeric arrays.
+ It was written by Paul Dubois, a distinguished computer scientist and the
+ very first maintainer of Numeric (now retired).
+ It is worth mentioning in the hopes that somebody will update PyFort to
+ work with NumPy arrays as well which now support either Fortran or C-style
+ contiguous arrays.
+
+\end_layout
+
+\begin_layout Chapter
+Code Explanations
+\end_layout
+
+\begin_layout Quotation
+Fanaticism consists of redoubling your efforts when you have forgotten your
+ aim.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+George Santayana
+\end_layout
+
+\begin_layout Quotation
+An authority is a person who can tell you more about something than you
+ really care to know.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Unknown
+\end_layout
+
+\begin_layout Standard
+This Chapter attempts to explain the logic behind some of the new pieces
+ of code.
+ The purpose behind these explanations is to enable somebody to be able
+ to understand the ideas behind the implementation somewhat more easily
+ than just staring at the code.
+ Perhaps in this way, the algorithms can be improved on, borrowed from,
+ and/or optimized.
+
+\end_layout
+
+\begin_layout Section
+Memory model
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ndarray!memory model"
+
+\end_inset
+
+One fundamental aspect of the ndarray is that an array is seen as a
+\begin_inset Quotes eld
+\end_inset
+
+chunk
+\begin_inset Quotes erd
+\end_inset
+
+ of memory starting at some location.
+ The interpretation of this memory depends on the stride information.
+ For each dimension in an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array, an integer (stride) dictates how many bytes must be
+ skipped to get to the next element in that dimension.
+ Unless you have a single-segment array, this stride information must be
+ consulted when traversing through an array.
+ It is not difficult to write code that accepts strides, you just have to
+ use (char *) pointers because strides are in units of bytes.
+ Keep in mind also that strides do not have to be unit-multiples of the
+ element size.
+ Also, remember that if the number of dimensions of the array is 0 (sometimes
+ called a rank-0 array), then the strides and dimensions variables are NULL.
+
+\end_layout
+
+\begin_layout Standard
+Besides the structural information contained in the strides and dimensions
+ members of the PyArrayObject, the flags contain important information about
+ how the data may be accessed.
+ In particular, the NPY_ALIGNED flag is set when the memory is on a suitable
+ boundary according to the data-type array.
+ Even if you have a contiguous chunk of memory, you cannot just assume it
+ is safe to dereference a data-type-specific pointer to an element.
+ Only if the NPY_ALIGNED flag is set is this a safe operation (on some platforms
+ it will work but on others, like Solaris, it will cause a bus error).
+ The NPY_WRITEABLE should also be ensured if you plan on writing to the
+ memory area of the array.
+ It is also possible to obtain a pointer to an unwriteable memory area.
+ Sometimes, writing to the memory area when the NPY_WRITEABLE flag is not
+ set will just be rude.
+ Other times it can cause program crashes (
+\emph on
+e.g.
+
+\emph default
+ a data-area that is a read-only memory-mapped file).
+\end_layout
+
+\begin_layout Section
+Data-type encapsulation
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "dtype"
+
+\end_inset
+
+The data-type is an important abstraction of the ndarray.
+ Operations will look to the data-type to provide the key functionality
+ that is needed to operate on the array.
+ This functionality is provided in the list of function pointers pointed
+ to by the 'f' member of the PyArray_Descr structure.
+ In this way, the number of data-types can be extended simply by providing
+ a PyArray_Descr structure with suitable function pointers in the 'f' member.
+ For built-in types there are some optimizations that by-pass this mechanism,
+ but the point of the data-type abstraction is to allow new data-types to
+ be added.
+\end_layout
+
+\begin_layout Standard
+One of the built-in data-types, the void data-type allows for arbitrary
+ records containing 1 or more fields as elements of the array.
+ A field is simply another data-type object along with an offset into the
+ current record.
+ In order to support arbitrarily nested fields, several recursive implementation
+s of data-type access are implemented for the void type.
+ A common idiom is to cycle through the elements of the dictionary and perform
+ a specific operation based on the data-type object stored at the given
+ offset.
+ These offsets can be arbitrary numbers.
+ Therefore, the possibility of encountering mis-aligned data must be recognized
+ and taken into account if necessary.
+
+\end_layout
+
+\begin_layout Section
+N-D Iterators
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "array iterator"
+
+\end_inset
+
+A very common operation in much of NumPy code is the need to iterate over
+ all the elements of a general, strided, N-dimensional array.
+ This operation of a general-purpose N-dimensional loop is abstracted in
+ the notion of an iterator object.
+ To write an N-dimensional loop, you only have to create an iterator object
+ from an ndarray, work with the dataptr member of the iterator object structure
+ and call the macro PyArray_ITER_NEXT(it) on the iterator object to move
+ to the next element.
+ The
+\begin_inset Quotes eld
+\end_inset
+
+next
+\begin_inset Quotes erd
+\end_inset
+
+ element is always in C-contiguous order.
+ The macro works by first special casing the C-contiguous, 1-d, and 2-d
+ cases which work very simply.
+
+\end_layout
+
+\begin_layout Standard
+For the general case, the iteration works by keeping track of a list of
+ coordinate counters in the iterator object.
+ At each iteration, the last coordinate counter is increased (starting from
+ 0).
+ If this counter is smaller then one less than the size of the array in
+ that dimension (a pre-computed and stored value), then the counter is increased
+ and the dataptr member is increased by the strides in that dimension and
+ the macro ends.
+ If the end of a dimension is reached, the counter for the last dimension
+ is reset to zero and the dataptr is moved back to the beginning of that
+ dimension by subtracting the strides value times one less than the number
+ of elements in that dimension (this is also pre-computed and stored in
+ the backstrides member of the iterator object).
+ In this case, the macro does not end, but a local dimension counter is
+ decremented so that the next-to-last dimension replaces the role that the
+ last dimension played and the previously-described tests are executed again
+ on the next-to-last dimension.
+ In this way, the dataptr is adjusted appropriately for arbitrary striding.
+
+\end_layout
+
+\begin_layout Standard
+The coordinates member of the PyArrayIterObject structure maintains the
+ current N-d counter unless the underlying array is C-contiguous in which
+ case the coordinate counting is by-passed.
+ The index member of the PyArrayIterObject keeps track of the current flat
+ index of the iterator.
+ It is updated by the PyArray_ITER_NEXT macro.
+
+\end_layout
+
+\begin_layout Section
+Broadcasting
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "broadcasting"
+
+\end_inset
+
+In Numeric, broadcasting was implemented in several lines of code buried
+ deep in ufuncobject.c.
+ In NumPy, the notion of broadcasting has been abstracted so that it can
+ be performed in multiple places.
+ Broadcasting is handled by the function PyArray_Broadcast.
+ This function requires a PyArrayMultiIterObject (or something that is a
+ binary equivalent) to be passed in.
+ The PyArrayMultiIterObject keeps track of the broadcasted number of dimensions
+ and size in each dimension along with the total size of the broadcasted
+ result.
+ It also keeps track of the number of arrays being broadcast and a pointer
+ to an iterator for each of the arrays being broadcasted.
+
+\end_layout
+
+\begin_layout Standard
+The PyArray_Broadcast function takes the iterators that have already been
+ defined and uses them to determine the broadcast shape in each dimension
+ (to create the iterators at the same time that broadcasting occurs then
+ use the PyMuliIter_New function).
+ Then, the iterators are adjusted so that each iterator thinks it is iterating
+ over an array with the broadcasted size.
+ This is done by adjusting the iterators number of dimensions, and the shape
+ in each dimension.
+ This works because the iterator strides are also adjusted.
+ Broadcasting only adjusts (or adds) length-1 dimensions.
+ For these dimensions, the strides variable is simply set to 0 so that the
+ data-pointer for the iterator over that array doesn't move as the broadcasting
+ operation operates over the extended dimension.
+
+\end_layout
+
+\begin_layout Standard
+Broadcasting was always implemented in Numeric using 0-valued strides for
+ the extended dimensions.
+ It is done in exactly the same way in NumPy.
+ The big difference is that now the array of strides is kept track of in
+ a PyArrayIterObject, the iterators involved in a broadcasted result are
+ kept track of in a PyArrayMultiIterObject, and the PyArray_BroadCast call
+ implements the broad-casting rules.
+
+\end_layout
+
+\begin_layout Section
+Array Scalars
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "array scalars"
+
+\end_inset
+
+The array scalars offer a hierarchy of Python types that allow a one-to-one
+ correspondence between the data-type stored in an array and the Python-type
+ that is returned when an element is extracted from the array.
+ An exception to this rule was made with object arrays.
+ Object arrays are heterogeneous collections of arbitrary Python objects.
+ When you select an item from an object array, you get back the original
+ Python object (and not an object array scalar which does exist but is rarely
+ used for practical purposes).
+\end_layout
+
+\begin_layout Standard
+The array scalars also offer the same methods and attributes as arrays with
+ the intent that the same code can be used to support arbitrary dimensions
+ (including 0-dimensions).
+ The array scalars are read-only (immutable) with the exception of the void
+ scalar which can also be written to so that record-array field setting
+ works more naturally (a[0]['f1'] =
+\family typewriter
+value
+\family default
+).
+\end_layout
+
+\begin_layout Section
+Advanced (
+\begin_inset Quotes eld
+\end_inset
+
+Fancy
+\begin_inset Quotes erd
+\end_inset
+
+) Indexing
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "indexing"
+
+\end_inset
+
+The implementation of advanced indexing represents some of the most difficult
+ code to write and explain.
+ In fact, there are two implementations of advanced indexing.
+ The first works only with 1-d arrays and is implemented to handle expressions
+ involving a.flat[obj].
+ The second is general-purpose that works for arrays of
+\begin_inset Quotes eld
+\end_inset
+
+arbitrary dimension
+\begin_inset Quotes erd
+\end_inset
+
+ (up to a fixed maximum).
+ The one-dimensional indexing approaches were implemented in a rather straightfo
+rward fashion, and so it is the general-purpose indexing code that will
+ be the focus of this section.
+
+\end_layout
+
+\begin_layout Standard
+There is a multi-layer approach to indexing because the indexing code can
+ at times return an array scalar and at other times return an array.
+ The functions with
+\begin_inset Quotes eld
+\end_inset
+
+_nice
+\begin_inset Quotes erd
+\end_inset
+
+ appended to their name do this special handling while the function without
+ the _nice appendage always return an array (perhaps a 0-dimensional array).
+ Some special-case optimizations (the index being an integer scalar, and
+ the index being a tuple with as many dimensions as the array) are handled
+ in array_subscript_nice function which is what Python calls when presented
+ with the code
+\begin_inset Quotes eld
+\end_inset
+
+a[obj].
+\begin_inset Quotes erd
+\end_inset
+
+ These optimizations allow fast single-integer indexing, and also ensure
+ that a 0-dimensional array is not created only to be discarded as the array
+ scalar is returned instead.
+ This provides significant speed-up for code that is selecting many scalars
+ out of an array (such as in a loop).
+ However, it is still not faster than simply using a list to store standard
+ Python scalars, because that is optimized by the Python interpreter itself.
+
+\end_layout
+
+\begin_layout Standard
+After these optimizations, the array_subscript function itself is called.
+ This function first checks for field selection which occurs when a string
+ is passed as the indexing object.
+ Then, 0-d arrays are given special-case consideration.
+ Finally, the code determines whether or not advanced, or fancy, indexing
+ needs to be performed.
+ If fancy indexing is not needed, then standard view-based indexing is performed
+ using code borrowed from Numeric which parses the indexing object and returns
+ the offset into the data-buffer and the dimensions necessary to create
+ a new view of the array.
+ The strides are also changed by multiplying each stride by the step-size
+ requested along the corresponding dimension.
+
+\end_layout
+
+\begin_layout Subsection
+Fancy-indexing check
+\end_layout
+
+\begin_layout Standard
+The fancy_indexing_check routine determines whether or not to use standard
+ view-based indexing or new copy-based indexing.
+ If the indexing object is a tuple, then view-based indexing is assumed
+ by default.
+ Only if the tuple contains an array object or a sequence object is fancy-indexi
+ng assumed.
+ If the indexing object is an array, then fancy indexing is automatically
+ assumed.
+ If the indexing object is any other kind of sequence, then fancy-indexing
+ is assumed by default.
+ This is over-ridden to simple indexing if the sequence contains any slice,
+ newaxis, or Ellipsis objects, and no arrays or additional sequences are
+ also contained in the sequence.
+ The purpose of this is to allow the construction of
+\begin_inset Quotes eld
+\end_inset
+
+slicing
+\begin_inset Quotes erd
+\end_inset
+
+ sequences which is a common technique for building up code that works in
+ arbitrary numbers of dimensions.
+
+\end_layout
+
+\begin_layout Subsection
+Fancy-indexing implementation
+\end_layout
+
+\begin_layout Standard
+The concept of indexing was also abstracted using the idea of an iterator.
+ If fancy indexing is performed, then a PyArrayMapIterObject is created.
+ This internal object is not exposed to Python.
+ It is created in order to handle the fancy-indexing at a high-level.
+ Both get and set fancy-indexing operations are implemented using this object.
+ Fancy indexing is abstracted into three separate operations: (1) creating
+ the PyArrayMapIterObject from the indexing object, (2) binding the PyArrayMapIt
+erObject to the array being indexed, and (3) getting (or setting) the items
+ determined by the indexing object.
+ There is an optimization implemented so that the PyArrayIterObject (which
+ has it's own less complicated fancy-indexing) is used for indexing when
+ possible.
+
+\end_layout
+
+\begin_layout Subsubsection
+Creating the mapping object
+\end_layout
+
+\begin_layout Standard
+The first step is to convert the indexing objects into a standard form where
+ iterators are created for all of the index array inputs and all Boolean
+ arrays are converted to equivalent integer index arrays (as if nonzero(arr)
+ had been called).
+ Finally, all integer arrays are replaced with the integer 0 in the indexing
+ object and all of the index-array iterators are
+\begin_inset Quotes eld
+\end_inset
+
+broadcast
+\begin_inset Quotes erd
+\end_inset
+
+ to the same shape.
+
+\end_layout
+
+\begin_layout Subsubsection
+Binding the mapping object
+\end_layout
+
+\begin_layout Standard
+When the mapping object is created it does not know which array it will
+ be used with so once the index iterators are constructed during mapping-object
+ creation, the next step is to associate these iterators with a particular
+ ndarray.
+ This process interprets any ellipsis and slice objects so that the index
+ arrays are associated with the appropriate axis (the axis indicated by
+ the iteraxis entry corresponding to the iterator for the integer index
+ array).
+ This information is then used to check the indices to be sure they are
+ within range of the shape of the array being indexed.
+ The presence of ellipsis and/or slice objects implies a sub-space iteration
+ that is accomplished by extracting a sub-space view of the array (using
+ the index object resulting from replacing all the integer index arrays
+ with 0) and storing the information about where this sub-space starts in
+ the mapping object.
+ This is used later during mapping-object iteration to select the correct
+ elements from the underlying array.
+
+\end_layout
+
+\begin_layout Subsubsection
+Getting (or Setting)
+\end_layout
+
+\begin_layout Standard
+After the mapping object is successfully bound to a particular array, the
+ mapping object contains the shape of the resulting item as well as iterator
+ objects that will walk through the currently-bound array and either get
+ or set its elements as needed.
+ The walk is implemented using the PyArray_MapIterNext function.
+ This function sets the coordinates of an iterator object into the current
+ array to be the next coordinate location indicated by all of the indexing-objec
+t iterators while adjusting, if necessary, for the presence of a sub-space.
+ The result of this function is that the dataptr member of the mapping object
+ structure is pointed to the next position in the array that needs to be
+ copied out or set to some value.
+
+\end_layout
+
+\begin_layout Standard
+When advanced indexing is used to extract an array, an iterator for the
+ new array is constructed and advanced in phase with the mapping object
+ iterator.
+ When advanced indexing is used to place values in an array, a special
+\begin_inset Quotes eld
+\end_inset
+
+broadcasted
+\begin_inset Quotes erd
+\end_inset
+
+ iterator is constructed from the object being placed into the array so
+ that it will only work if the values used for setting have a shape that
+ is
+\begin_inset Quotes eld
+\end_inset
+
+broadcastable
+\begin_inset Quotes erd
+\end_inset
+
+ to the shape implied by the indexing object.
+
+\end_layout
+
+\begin_layout Section
+Universal Functions
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc|("
+
+\end_inset
+
+Universal functions are callable objects that take
+\begin_inset Formula $N$
+\end_inset
+
+ inputs and produce
+\begin_inset Formula $M$
+\end_inset
+
+ outputs by wrapping basic 1-d loops that work element-by-element into full
+ easy-to use functions that seamlessly implement broadcasting, type-checking
+ and buffered coercion, and output-argument handling.
+ New universal functions are normally created in C, although there is a
+ mechanism for creating ufuncs from Python functions (
+\series bold
+frompyfunc
+\series default
+).
+ The user must supply a 1-d loop that implements the basic function taking
+ the input scalar values and placing the resulting scalars into the appropriate
+ output slots as explaine n implementation.
+
+\end_layout
+
+\begin_layout Subsection
+Setup
+\end_layout
+
+\begin_layout Standard
+Every ufunc calculation involves some overhead related to setting up the
+ calculation.
+ The practical significance of this overhead is that even though the actual
+ calculation of the ufunc is very fast, you will be able to write array
+ and type-specific code that will work faster for small arrays than the
+ ufunc.
+ In particular, using ufuncs to perform many calculations on 0-d arrays
+ will be slower than other Python-based solutions (the silently-imported
+ scalarmath module exists precisely to give array scalars the look-and-feel
+ of ufunc-based calculations with significantly reduced overhead).
+
+\end_layout
+
+\begin_layout Standard
+When a ufunc is called, many things must be done.
+ The information collected from these setup operations is stored in a loop-objec
+t.
+ This loop object is a C-structure (that could become a Python object but
+ is not initialized as such because it is only used internally).
+ This loop object has the layout needed to be used with PyArray_Broadcast
+ so that the broadcasting can be handled in the same way as it is handled
+ in other sections of code.
+
+\end_layout
+
+\begin_layout Standard
+The first thing done is to look-up in the thread-specific global dictionary
+ the current values for the buffer-size, the error mask, and the associated
+ error object.
+ The state of the error mask controls what happens when an error-condiction
+ is found.
+ It should be noted that checking of the hardware error flags is only performed
+ after each 1-d loop is executed.
+ This means that if the input and output arrays are contiguous and of the
+ correct type so that a single 1-d loop is performed, then the flags may
+ not be checked until all elements of the array have been calcluated.
+ Looking up these values in a thread-specific dictionary takes time which
+ is easily ignored for all but very small arrays.
+
+\end_layout
+
+\begin_layout Standard
+After checking, the thread-specific global variables, the inputs are evaluated
+ to determine how the ufunc should proceed and the input and output arrays
+ are constructed if necessary.
+ Any inputs which are not arrays are converted to arrays (using context
+ if necessary).
+ Which of the inputs are scalars (and therefore converted to 0-d arrays)
+ is noted.
+
+\end_layout
+
+\begin_layout Standard
+Next, an appropriate 1-d loop is selected from the 1-d loops available to
+ the ufunc based on the input array types.
+ This 1-d loop is selected by trying to match the signature of the data-types
+ of the inputs against the available signatures.
+ The signatures corresponding to built-in types are stored in the types
+ member of the ufunc structure.
+ The signatures corresponding to user-defined types are stored in a linked-list
+ of function-information with the head element stored as a
+\family typewriter
+CObject
+\family default
+ in the userloops dictionary keyed by the data-type number (the first user-defin
+ed type in the argument list is used as the key).
+ The signatures are searched until a signature is found to which the input
+ arrays can all be cast safely (ignoring any scalar arguments which are
+ not allowed to determine the type of the result).
+ The implication of this search procedure is that
+\begin_inset Quotes eld
+\end_inset
+
+lesser types
+\begin_inset Quotes erd
+\end_inset
+
+ should be placed below
+\begin_inset Quotes eld
+\end_inset
+
+larger types
+\begin_inset Quotes erd
+\end_inset
+
+ when the signatures are stored.
+ If no 1-d loop is found, then an error is reported.
+ Otherwise, the argument_list is updated with the stored signature --- in
+ case casting is necessary and to fix the output types assumed by the 1-d
+ loop.
+\end_layout
+
+\begin_layout Standard
+If the ufunc has 2 inputs and 1 output and the second input is an Object
+ array then a special-case check is performed so that NotImplemented is
+ returned if the second input is not an ndarray, has the __array_priority__
+ attribute, and has an __r<op>__ special method.
+ In this way, Python is signaled to give the other object a chance to complete
+ the operation instead of using generic object-array calculations.
+ This allows (for example) sparse matrices to override the multiplication
+ operator 1-d loop.
+
+\end_layout
+
+\begin_layout Standard
+For input arrays that are smaller than the specified buffer size, copies
+ are made of all non-contiguous, mis-aligned, or out-of-byteorder arrays
+ to ensure that for small arrays, a single-loop is used.
+ Then, array iterators are created for all the input arrays and the resulting
+ collection of iterators is broadcast to a single shape.
+
+\end_layout
+
+\begin_layout Standard
+The output arguments (if any) are then processed and any missing return
+ arrays are constructed.
+ If any provided output array doesn't have the correct type (or is mis-aligned)
+ and is smaller than the buffer size, then a new output array is constructed
+ with the special UPDATEIFCOPY flag set so that when it is DECREF'd on completio
+n of the function, it's contents will be copied back into the output array.
+ Iterators for the output arguments are then processed.
+
+\end_layout
+
+\begin_layout Standard
+Finally, the decision is made about how to execute the looping mechanism
+ to ensure that all elements of the input arrays are combined to produce
+ the output arrays of the correct type.
+ The options for loop execution are one-loop (for contiguous, aligned, and
+ correct data-type), strided-loop (for non-contiguous but still aligned
+ and correct data-type), and a buffered loop (for mis-aligned or incorrect
+ data-type situations).
+ Depending on which execution method is called for, the loop is then setup
+ and computed.
+
+\end_layout
+
+\begin_layout Subsection
+Function call
+\end_layout
+
+\begin_layout Standard
+This section describes how the basic universal function computation loop
+ is setup and executed for each of the three different kinds of execution
+ possibilities.
+ If NPY_ALLOW_THREADS is defined during compilation, then the Python Global
+ Interpreter Lock (GIL) is released prior to calling all of these loops
+ (as long as they don't involve object arrays).
+ It is re-acquired if necessary to handle error conditions.
+ The hardware error flags are checked only after the 1-d loop is calcluated.
+
+\end_layout
+
+\begin_layout Subsubsection
+One Loop
+\end_layout
+
+\begin_layout Standard
+This is the simplest case of all.
+ The ufunc is executed by calling the underlying 1-d loop exactly once.
+ This is possible only when we have aligned data of the correct type (including
+ byte-order) for both input and output and all arrays have uniform strides
+ (either contiguous, 0-d, or 1-d).
+ In this case, the 1-d computational loop is called once to compute the
+ calculation for the entire array.
+ Note that the hardware error flags are only checked after the entire calculatio
+n is complete.
+
+\end_layout
+
+\begin_layout Subsubsection
+Strided Loop
+\end_layout
+
+\begin_layout Standard
+When the input and output arrays are aligned and of the correct type, but
+ the striding is not uniform (non-contiguous and 2-d or larger), then a
+ second looping structure is employed for the calculation.
+ This approach converts all of the iterators for the input and output arguments
+ to iterate over all but the largest dimension.
+ The inner loop is then handled by the underlying 1-d computational loop.
+ The outer loop is a standard iterator loop on the converted iterators.
+ The hardware error flags are checked after each 1-d loop is completed.
+
+\end_layout
+
+\begin_layout Subsubsection
+Buffered Loop
+\end_layout
+
+\begin_layout Standard
+This is the code that handles the situation whenever the input and/or output
+ arrays are either misaligned or of the wrong data-type (including being
+ byte-swapped) from what the underlying 1-d loop expects.
+ The arrays are also assumed to be non-contiguous.
+ The code works very much like the strided loop except for the inner 1-d
+ loop is modified so that pre-processing is performed on the inputs and
+ post-processing is performed on the outputs in bufsize chunks (where bufsize
+ is a user-settable parameter).
+ The underlying 1-d computational loop is called on data that is copied
+ over (if it needs to be).
+ The setup code and the loop code is considerably more complicated in this
+ case because it has to handle:
+\end_layout
+
+\begin_layout Itemize
+memory allocation of the temporary buffers
+\end_layout
+
+\begin_layout Itemize
+deciding whether or not to use buffers on the input and output data (mis-aligned
+ and/or wrong data-type)
+\end_layout
+
+\begin_layout Itemize
+copying and possibly casting data for any inputs or outputs for which buffers
+ are necessary.
+\end_layout
+
+\begin_layout Itemize
+special-casing Object arrays so that reference counts are properly handled
+ when copies and/or casts are necessary.
+
+\end_layout
+
+\begin_layout Itemize
+breaking up the inner 1-d loop into bufsize chunks (with a possible remainder).
+
+\end_layout
+
+\begin_layout Standard
+Again, the hardware error flags are checked at the end of each 1-d loop.
+\end_layout
+
+\begin_layout Subsection
+Final output manipulation
+\end_layout
+
+\begin_layout Standard
+Ufuncs allow other array-like classes to be passed seamlessly through the
+ interface in that inputs of a particular class will induce the outputs
+ to be of that same class.
+ The mechanism by which this works is the following.
+ If any of the inputs are not ndarrays and define the
+\series bold
+__array_wrap__
+\series default
+ method, then the class with the largest
+\series bold
+__array_priority__
+\series default
+ attribute determines the type of all the outputs (with the exception of
+ any output arrays passed in).
+ The
+\series bold
+__array_wrap__
+\series default
+ method of the input array will be called with the ndarray being returned
+ from the ufunc as it's input.
+ There are two calling styles of the
+\series bold
+__array_wrap__
+\series default
+ function supported.
+ The first takes the ndarray as the first argument and a tuple of
+\begin_inset Quotes eld
+\end_inset
+
+context
+\begin_inset Quotes erd
+\end_inset
+
+ as the second argument.
+ The context is (ufunc, arguments, output argument number).
+ This is the first call tried.
+ If a TypeError occurs, then the function is called with just the ndarray
+ as the first argument.
+
+\end_layout
+
+\begin_layout Subsection
+Methods
+\end_layout
+
+\begin_layout Standard
+Their are three methods of ufuncs that require calculation similar to the
+ general-purpose ufuncs.
+ These are reduce, accumulate, and reduceat.
+ Each of these methods requires a setup command followed by a loop.
+ There are four loop styles possible for the methods corresponding to no-element
+s, one-element, strided-loop, and buffered-loop.
+ These are the same basic loop styles as implemented for the general purpose
+ function call except for the no-element and one-element cases which are
+ special-cases occurring when the input array objects have 0 and 1 elements
+ respectively.
+
+\end_layout
+
+\begin_layout Subsubsection
+Setup
+\end_layout
+
+\begin_layout Standard
+The setup function for all three methods is
+\family typewriter
+construct_reduce
+\family default
+.
+ This function creates a reducing loop object and fills it with parameters
+ needed to complete the loop.
+ All of the methods only work on ufuncs that take 2-inputs and return 1
+ output.
+ Therefore, the underlying 1-d loop is selected assuming a signature of
+ [
+\family typewriter
+otype
+\family default
+,
+\family typewriter
+otype
+\family default
+,
+\family typewriter
+otype
+\family default
+] where
+\family typewriter
+otype
+\family default
+ is the requested reduction data-type.
+ The buffer size and error handling is then retrieved from (per-thread)
+ global storage.
+ For small arrays that are mis-aligned or have incorrect data-type, a copy
+ is made so that the un-buffered section of code is used.
+ Then, the looping strategy is selected.
+ If there is 1 element or 0 elements in the array, then a simple looping
+ method is selected.
+ If the array is not mis-aligned and has the correct data-type, then strided
+ looping is selected.
+ Otherwise, buffered looping must be performed.
+ Looping parameters are then established, and the return array is constructed.
+ The output array is of a different shape depending on whether the method
+ is reduce, accumulate, or reduceat.
+ If an output array is already provided, then it's shape is checked.
+ If the output array is not C-contiguous, aligned, and of the correct data
+ type, then a temporary copy is made with the UPDATEIFCOPY flag set.
+ In this way, the methods will be able to work with a well-behaved output
+ array but the result will be copied back into the true output array when
+ the method computation is complete.
+ Finally, iterators are set up to loop over the correct axis (depending
+ on the value of axis provided to the method) and the setup routine returns
+ to the actual computation routine.
+
+\end_layout
+
+\begin_layout Subsubsection
+Reduce
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!methods!reduce"
+
+\end_inset
+
+All of the ufunc methods use the same underlying 1-d computational loops
+ with input and output arguments adjusted so that the appropriate reduction
+ takes place.
+ For example, the key to the functioning of reduce is that the 1-d loop
+ is called with the output and the second input pointing to the same position
+ in memory and both having a step-size of 0.
+ The first input is pointing to the input array with a step-size given by
+ the appropriate stride for the selected axis.
+ In this way, the operation performed is
+\begin_inset Formula \begin{eqnarray*}
+o & = & i[0]\\
+o & = & i[k]\textrm{ <op> }o\quad k=1\ldots N\end{eqnarray*}
+
+\end_inset
+
+ where
+\begin_inset Formula $N+1$
+\end_inset
+
+ is the number of elements in the input,
+\begin_inset Formula $i$
+\end_inset
+
+,
+\begin_inset Formula $o$
+\end_inset
+
+ is the output, and
+\begin_inset Formula $i[k]$
+\end_inset
+
+ is the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ element of
+\begin_inset Formula $i$
+\end_inset
+
+ along the selected axis.
+ This basic operations is repeated for arrays with greater than 1 dimension
+ so that the reduction takes place for every 1-d sub-array along the selected
+ axis.
+ An iterator with the selected dimension removed handles this looping.
+
+\end_layout
+
+\begin_layout Standard
+For buffered loops, care must be taken to copy and cast data before the
+ loop function is called because the underlying loop expects aligned data
+ of the correct data-type (including byte-order).
+ The buffered loop must handle this copying and casting prior to calling
+ the loop function on chunks no greater than the user-specified bufsize.
+
+\end_layout
+
+\begin_layout Subsubsection
+Accumulate
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!methods!accumulate"
+
+\end_inset
+
+The accumulate function is very similar to the reduce function in that the
+ output and the second input both point to the output.
+ The difference is that the second input points to memory one stride behind
+ the current output pointer.
+ Thus, the operation performed is
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \begin{eqnarray*}
+o[0] & = & i[0]\\
+o[k] & = & i[k]\textrm{ <op> }o[k-1]\quad k=1\ldots N.\end{eqnarray*}
+
+\end_inset
+
+ The output has the same shape as the input and each 1-d loop operates over
+
+\begin_inset Formula $N$
+\end_inset
+
+ elements when the shape in the selected axis is
+\begin_inset Formula $N+1$
+\end_inset
+
+.
+ Again, buffered loops take care to copy and cast the data before calling
+ the underlying 1-d computational loop.
+
+\end_layout
+
+\begin_layout Subsubsection
+Reduceat
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!methods!reduceat"
+
+\end_inset
+
+The reduceat function is a generalization of both the reduce and accumulate
+ functions.
+ It implements a reduce over ranges of the input array specified by indices.
+ The extra indices argument is checked to be sure that every input is not
+ too large for the input array along the selected dimension before the loop
+ calculations take place.
+ The loop implementation is handled using code that is very similar to the
+ reduce code repeated as many times as there are elements in the indices
+ input.
+ In particular: the first input pointer passed to the underlying 1-d computation
+al loop points to the input array at the correct location indicated by the
+ index array.
+ In addition, the output pointer and the second input pointer passed to
+ the underlying 1-d loop point to the same position in memory.
+ The size of the 1-d computational loop is fixed to be the difference between
+ the current index and the next index (when the current index is the last
+ index, then the next index is assumed to be the length of the array along
+ the selected dimension).
+ In this way, the 1-d loop will implement a reduce over the specified indices.
+
+\end_layout
+
+\begin_layout Standard
+Mis-aligned or a loop data-type that does not match the input and/or output
+ data-type is handled using buffered code where-in data is copied to a temporary
+ buffer and cast to the correct data-type if necessary prior to calling
+ the underlying 1-d function.
+ The temporary buffers are created in (element) sizes no bigger than the
+ user settable buffer-size value.
+ Thus, the loop must be flexible enough to call the underlying 1-d computational
+ loop enough times to complete the total calculation in chunks no bigger
+ than the buffer-size.
+
+\begin_inset LatexCommand index
+name "ufunc|)"
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/numpy/doc/numpybook/comparison/ctypes/code.c b/numpy/doc/numpybook/comparison/ctypes/code.c
new file mode 100644
index 000000000..0927a7ed3
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/ctypes/code.c
@@ -0,0 +1,60 @@
+
+typedef struct {double real; double imag;} cdouble;
+typedef struct {double real; double imag;} cfloat;
+
+/* Add arrays of contiguous data */
+void zadd(cdouble *a, cdouble *b, cdouble *c, long n)
+{
+ while (n--) {
+ c->real = a->real + b->real;
+ c->imag = a->imag + b->imag;
+ a++; b++; c++;
+ }
+}
+
+void cadd(cfloat *a, cfloat *b, cfloat *c, long n)
+{
+ while (n--) {
+ c->real = a->real + b->real;
+ c->imag = a->imag + b->imag;
+ a++; b++; c++;
+ }
+}
+
+void dadd(double *a, double *b, double *c, long n)
+{
+ while (n--) {
+ *c++ = *a++ + *b++;
+ }
+}
+
+void sadd(float *a, float *b, float *c, long n)
+{
+ while (n--) {
+ *c++ = *a++ + *b++;
+ }
+}
+
+/* Assumes b is contiguous and
+ a has strides that are multiples of sizeof(double)
+*/
+void dfilter2d(double *a, double *b, int *astrides, int *dims)
+{
+ int i, j, M, N, S0, S1;
+ int r, c, rm1, rp1, cp1, cm1;
+
+ M = dims[0]; N = dims[1];
+ S0 = astrides[0]/sizeof(double);
+ S1=astrides[1]/sizeof(double);
+ for (i=1; i<M-1; i++) {
+ r = i*S0; rp1 = r+S0; rm1 = r-S0;
+ for (j=1; j<N-1; j++) {
+ c = j*S1; cp1 = j+S1; cm1 = j-S1;
+ b[i*N+j] = a[r+c] + \
+ (a[rp1+c] + a[rm1+c] + \
+ a[r+cp1] + a[r+cm1])*0.5 + \
+ (a[rp1+cp1] + a[rp1+cm1] + \
+ a[rm1+cp1] + a[rm1+cp1])*0.25;
+ }
+ }
+}
diff --git a/numpy/doc/numpybook/comparison/ctypes/filter.py b/numpy/doc/numpybook/comparison/ctypes/filter.py
new file mode 100644
index 000000000..e92aa5eab
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/ctypes/filter.py
@@ -0,0 +1,26 @@
+__all__ = ['filter2d']
+
+import numpy as N
+import os
+import ctypes
+
+_path = os.path.dirname('__file__')
+lib = N.ctypeslib.load_library('code', _path)
+
+lib.dfilter2d.restype = None
+lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2,
+ flags='aligned'),
+ N.ctypeslib.ndpointer(float, ndim=2,
+ flags='aligned, contiguous,'\
+ 'writeable'),
+ ctypes.POINTER(N.ctypeslib.c_intp),
+ ctypes.POINTER(N.ctypeslib.c_intp)]
+
+def filter2d(a):
+ a = N.require(a, float, ['ALIGNED'])
+ b = N.zeros_like(a)
+ lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
+ return b
+
+
+
diff --git a/numpy/doc/numpybook/comparison/ctypes/interface.py b/numpy/doc/numpybook/comparison/ctypes/interface.py
new file mode 100644
index 000000000..06c12aef3
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/ctypes/interface.py
@@ -0,0 +1,60 @@
+__all__ = ['add', 'filter2d']
+
+import numpy as N
+import os
+import ctypes
+
+_path = os.path.dirname('__file__')
+lib = N.ctypeslib.load_library('code', _path)
+_typedict = {'zadd' : complex,
+ 'sadd' : N.single,
+ 'cadd' : N.csingle,
+ 'dadd' : float}
+for name in _typedict.keys():
+ val = getattr(lib, name)
+ val.restype = None
+ _type = _typedict[name]
+ val.argtypes = [N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'),
+ N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'),
+ N.ctypeslib.ndpointer(_type, flags='aligned, contiguous,'\
+ 'writeable'),
+ N.ctypeslib.c_intp]
+
+lib.dfilter2d.restype=None
+lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2,
+ flags='aligned'),
+ N.ctypeslib.ndpointer(float, ndim=2,
+ flags='aligned, contiguous,'\
+ 'writeable'),
+ ctypes.POINTER(N.ctypeslib.c_intp),
+ ctypes.POINTER(N.ctypeslib.c_intp)]
+
+def select(dtype):
+ if dtype.char in ['?bBhHf']:
+ return lib.sadd, N.single
+ elif dtype.char in ['F']:
+ return lib.cadd, N.csingle
+ elif dtype.char in ['DG']:
+ return lib.zadd, complex
+ else:
+ return lib.dadd, float
+ return func, ntype
+
+def add(a, b):
+ requires = ['CONTIGUOUS', 'ALIGNED']
+ a = N.asanyarray(a)
+ func, dtype = select(a.dtype)
+ a = N.require(a, dtype, requires)
+ b = N.require(b, dtype, requires)
+ c = N.empty_like(a)
+ func(a,b,c,a.size)
+ return c
+
+def filter2d(a):
+ a = N.require(a, float, ['ALIGNED'])
+ b = N.zeros_like(a)
+ lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape)
+ return b
+
+
+
diff --git a/numpy/doc/numpybook/comparison/ctypes/newfile.dat b/numpy/doc/numpybook/comparison/ctypes/newfile.dat
new file mode 100644
index 000000000..d3899c294
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/ctypes/newfile.dat
Binary files differ
diff --git a/numpy/doc/numpybook/comparison/ctypes/timeme b/numpy/doc/numpybook/comparison/ctypes/timeme
new file mode 100755
index 000000000..2f7cd297f
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/ctypes/timeme
@@ -0,0 +1,2 @@
+python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
+
diff --git a/numpy/doc/numpybook/comparison/f2py/add.f b/numpy/doc/numpybook/comparison/f2py/add.f
new file mode 100644
index 000000000..26e45da34
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/add.f
@@ -0,0 +1,45 @@
+C
+ SUBROUTINE ZADD(A,B,C,N)
+C
+ DOUBLE COMPLEX A(*)
+ DOUBLE COMPLEX B(*)
+ DOUBLE COMPLEX C(*)
+ INTEGER N
+ DO 20 J = 1, N
+ C(J) = A(J) + B(J)
+ 20 CONTINUE
+ END
+
+ SUBROUTINE CADD(A,B,C,N)
+C
+ COMPLEX A(*)
+ COMPLEX B(*)
+ COMPLEX C(*)
+ INTEGER N
+ DO 20 J = 1, N
+ C(J) = A(J) + B(J)
+ 20 CONTINUE
+ END
+
+ SUBROUTINE DADD(A,B,C,N)
+C
+ DOUBLE PRECISION A(*)
+ DOUBLE PRECISION B(*)
+ DOUBLE PRECISION C(*)
+ INTEGER N
+ DO 20 J = 1, N
+ C(J) = A(J) + B(J)
+ 20 CONTINUE
+ END
+
+ SUBROUTINE SADD(A,B,C,N)
+C
+ REAL A(*)
+ REAL B(*)
+ REAL C(*)
+ INTEGER N
+ DO 20 J = 1, N
+ C(J) = A(J) + B(J)
+ 20 CONTINUE
+ END
+
diff --git a/numpy/doc/numpybook/comparison/f2py/add.pyf b/numpy/doc/numpybook/comparison/f2py/add.pyf
new file mode 100644
index 000000000..1a9ac2c9e
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/add.pyf
@@ -0,0 +1,34 @@
+! -*- f90 -*-
+! Note: the context of this file is case sensitive.
+
+python module add ! in
+ interface ! in :add
+ subroutine zadd(a,b,c,n) ! in :add:add.f
+ double complex dimension(n) :: a
+ double complex dimension(n) :: b
+ double complex intent(out), dimension(n) :: c
+ integer intent(hide), depend(a) :: n = len(a)
+ end subroutine zadd
+ subroutine cadd(a,b,c,n) ! in :add:add.f
+ complex dimension(*) :: a
+ complex dimension(*) :: b
+ complex dimension(*) :: c
+ integer :: n
+ end subroutine cadd
+ subroutine dadd(a,b,c,n) ! in :add:add.f
+ double precision dimension(*) :: a
+ double precision dimension(*) :: b
+ double precision dimension(*) :: c
+ integer :: n
+ end subroutine dadd
+ subroutine sadd(a,b,c,n) ! in :add:add.f
+ real dimension(*) :: a
+ real dimension(*) :: b
+ real dimension(*) :: c
+ integer :: n
+ end subroutine sadd
+ end interface
+end python module add
+
+! This file was auto-generated with f2py (version:2_2694).
+! See http://cens.ioc.ee/projects/f2py2e/
diff --git a/numpy/doc/numpybook/comparison/f2py/filter.f b/numpy/doc/numpybook/comparison/f2py/filter.f
new file mode 100644
index 000000000..a817a866f
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/filter.f
@@ -0,0 +1,20 @@
+
+ SUBROUTINE DFILTER2D(A,B,M,N)
+C
+ DOUBLE PRECISION A(M,N)
+ DOUBLE PRECISION B(M,N)
+ INTEGER N, M
+CF2PY INTENT(OUT) :: B
+CF2PY INTENT(HIDE) :: N
+CF2PY INTENT(HIDE) :: M
+ DO 20 I = 2,M-1
+ DO 40 J=2,N-1
+ B(I,J) = A(I,J) +
+ $ (A(I-1,J)+A(I+1,J) +
+ $ A(I,J-1)+A(I,J+1) )*0.5D0 +
+ $ (A(I-1,J-1) + A(I-1,J+1) +
+ $ A(I+1,J-1) + A(I+1,J+1))*0.25D0
+ 40 CONTINUE
+ 20 CONTINUE
+ END
+
diff --git a/numpy/doc/numpybook/comparison/f2py/filter.pyf b/numpy/doc/numpybook/comparison/f2py/filter.pyf
new file mode 100644
index 000000000..1e4bc37f4
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/filter.pyf
@@ -0,0 +1,16 @@
+! -*- f90 -*-
+! Note: the context of this file is case sensitive.
+
+python module filter ! in
+ interface ! in :filter
+ subroutine dfilter2d(a,b,m,n) ! in :filter:filter.f
+ double precision dimension(m,n) :: a
+ double precision dimension(m,n),intent(out),depend(m,n) :: b
+ integer optional,intent(hide),check(shape(a,0)==m),depend(a) :: m=shape(a,0)
+ integer optional,intent(hide),check(shape(a,1)==n),depend(a) :: n=shape(a,1)
+ end subroutine dfilter2d
+ end interface
+end python module filter
+
+! This file was auto-generated with f2py (version:2_3032).
+! See http://cens.ioc.ee/projects/f2py2e/
diff --git a/numpy/doc/numpybook/comparison/f2py/filtermodule.c b/numpy/doc/numpybook/comparison/f2py/filtermodule.c
new file mode 100644
index 000000000..8339ad4b9
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/filtermodule.c
@@ -0,0 +1,293 @@
+/* File: filtermodule.c
+ * This file is auto-generated with f2py (version:2_3032).
+ * f2py is a Fortran to Python Interface Generator (FPIG), Second Edition,
+ * written by Pearu Peterson <pearu@cens.ioc.ee>.
+ * See http://cens.ioc.ee/projects/f2py2e/
+ * Generation date: Thu Aug 17 12:03:28 2006
+ * $Revision:$
+ * $Date:$
+ * Do not edit this file directly unless you know what you are doing!!!
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************** See f2py2e/cfuncs.py: includes ***********************/
+#include "Python.h"
+#include "fortranobject.h"
+#include <math.h>
+
+/**************** See f2py2e/rules.py: mod_rules['modulebody'] ****************/
+static PyObject *filter_error;
+static PyObject *filter_module;
+
+/*********************** See f2py2e/cfuncs.py: typedefs ***********************/
+/*need_typedefs*/
+
+/****************** See f2py2e/cfuncs.py: typedefs_generated ******************/
+/*need_typedefs_generated*/
+
+/********************** See f2py2e/cfuncs.py: cppmacros **********************/
+#if defined(PREPEND_FORTRAN)
+#if defined(NO_APPEND_FORTRAN)
+#if defined(UPPERCASE_FORTRAN)
+#define F_FUNC(f,F) _##F
+#else
+#define F_FUNC(f,F) _##f
+#endif
+#else
+#if defined(UPPERCASE_FORTRAN)
+#define F_FUNC(f,F) _##F##_
+#else
+#define F_FUNC(f,F) _##f##_
+#endif
+#endif
+#else
+#if defined(NO_APPEND_FORTRAN)
+#if defined(UPPERCASE_FORTRAN)
+#define F_FUNC(f,F) F
+#else
+#define F_FUNC(f,F) f
+#endif
+#else
+#if defined(UPPERCASE_FORTRAN)
+#define F_FUNC(f,F) F##_
+#else
+#define F_FUNC(f,F) f##_
+#endif
+#endif
+#endif
+#if defined(UNDERSCORE_G77)
+#define F_FUNC_US(f,F) F_FUNC(f##_,F##_)
+#else
+#define F_FUNC_US(f,F) F_FUNC(f,F)
+#endif
+
+#define rank(var) var ## _Rank
+#define shape(var,dim) var ## _Dims[dim]
+#define old_rank(var) (((PyArrayObject *)(capi_ ## var ## _tmp))->nd)
+#define old_shape(var,dim) (((PyArrayObject *)(capi_ ## var ## _tmp))->dimensions[dim])
+#define fshape(var,dim) shape(var,rank(var)-dim-1)
+#define len(var) shape(var,0)
+#define flen(var) fshape(var,0)
+#define size(var) PyArray_SIZE((PyArrayObject *)(capi_ ## var ## _tmp))
+/* #define index(i) capi_i ## i */
+#define slen(var) capi_ ## var ## _len
+
+#define CHECKSCALAR(check,tcheck,name,show,var)\
+ if (!(check)) {\
+ PyErr_SetString(filter_error,"("tcheck") failed for "name);\
+ fprintf(stderr,show"\n",var);\
+ /*goto capi_fail;*/\
+ } else
+#ifdef DEBUGCFUNCS
+#define CFUNCSMESS(mess) fprintf(stderr,"debug-capi:"mess);
+#define CFUNCSMESSPY(mess,obj) CFUNCSMESS(mess) \
+ PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\
+ fprintf(stderr,"\n");
+#else
+#define CFUNCSMESS(mess)
+#define CFUNCSMESSPY(mess,obj)
+#endif
+
+#ifndef MAX
+#define MAX(a,b) ((a > b) ? (a) : (b))
+#endif
+#ifndef MIN
+#define MIN(a,b) ((a < b) ? (a) : (b))
+#endif
+
+
+/************************ See f2py2e/cfuncs.py: cfuncs ************************/
+/*need_cfuncs*/
+
+/********************* See f2py2e/cfuncs.py: userincludes *********************/
+/*need_userincludes*/
+
+/********************* See f2py2e/capi_rules.py: usercode *********************/
+
+
+/* See f2py2e/rules.py */
+extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*);
+/*eof externroutines*/
+
+/******************** See f2py2e/capi_rules.py: usercode1 ********************/
+
+
+/******************* See f2py2e/cb_rules.py: buildcallback *******************/
+/*need_callbacks*/
+
+/*********************** See f2py2e/rules.py: buildapi ***********************/
+
+/********************************* dfilter2d *********************************/
+static char doc_f2py_rout_filter_dfilter2d[] = "\
+Function signature:\n\
+ b = dfilter2d(a)\n\
+Required arguments:\n"
+" a : input rank-2 array('d') with bounds (m,n)\n"
+"Return objects:\n"
+" b : rank-2 array('d') with bounds (m,n)";
+/* extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); */
+static PyObject *f2py_rout_filter_dfilter2d(const PyObject *capi_self,
+ PyObject *capi_args,
+ PyObject *capi_keywds,
+ void (*f2py_func)(double*,double*,int*,int*)) {
+ PyObject * volatile capi_buildvalue = NULL;
+ volatile int f2py_success = 1;
+/*decl*/
+
+ double *a = NULL;
+ npy_intp a_Dims[2] = {-1, -1};
+ const int a_Rank = 2;
+ PyArrayObject *capi_a_tmp = NULL;
+ int capi_a_intent = 0;
+ PyObject *a_capi = Py_None;
+ double *b = NULL;
+ npy_intp b_Dims[2] = {-1, -1};
+ const int b_Rank = 2;
+ PyArrayObject *capi_b_tmp = NULL;
+ int capi_b_intent = 0;
+ int m = 0;
+ int n = 0;
+ static char *capi_kwlist[] = {"a",NULL};
+
+/*routdebugenter*/
+#ifdef F2PY_REPORT_ATEXIT
+f2py_start_clock();
+#endif
+ if (!PyArg_ParseTupleAndKeywords(capi_args,capi_keywds,\
+ "O|:filter.dfilter2d",\
+ capi_kwlist,&a_capi))
+ return NULL;
+/*frompyobj*/
+ /* Processing variable a */
+ ;
+ capi_a_intent |= F2PY_INTENT_IN;
+ capi_a_tmp = array_from_pyobj(PyArray_DOUBLE,a_Dims,a_Rank,capi_a_intent,a_capi);
+ if (capi_a_tmp == NULL) {
+ if (!PyErr_Occurred())
+ PyErr_SetString(filter_error,"failed in converting 1st argument `a' of filter.dfilter2d to C/Fortran array" );
+ } else {
+ a = (double *)(capi_a_tmp->data);
+
+ /* Processing variable m */
+ m = shape(a,0);
+ CHECKSCALAR(shape(a,0)==m,"shape(a,0)==m","hidden m","dfilter2d:m=%d",m) {
+ /* Processing variable n */
+ n = shape(a,1);
+ CHECKSCALAR(shape(a,1)==n,"shape(a,1)==n","hidden n","dfilter2d:n=%d",n) {
+ /* Processing variable b */
+ b_Dims[0]=m,b_Dims[1]=n;
+ capi_b_intent |= F2PY_INTENT_OUT|F2PY_INTENT_HIDE;
+ capi_b_tmp = array_from_pyobj(PyArray_DOUBLE,b_Dims,b_Rank,capi_b_intent,Py_None);
+ if (capi_b_tmp == NULL) {
+ if (!PyErr_Occurred())
+ PyErr_SetString(filter_error,"failed in converting hidden `b' of filter.dfilter2d to C/Fortran array" );
+ } else {
+ b = (double *)(capi_b_tmp->data);
+
+/*end of frompyobj*/
+#ifdef F2PY_REPORT_ATEXIT
+f2py_start_call_clock();
+#endif
+/*callfortranroutine*/
+ (*f2py_func)(a,b,&m,&n);
+if (PyErr_Occurred())
+ f2py_success = 0;
+#ifdef F2PY_REPORT_ATEXIT
+f2py_stop_call_clock();
+#endif
+/*end of callfortranroutine*/
+ if (f2py_success) {
+/*pyobjfrom*/
+/*end of pyobjfrom*/
+ CFUNCSMESS("Building return value.\n");
+ capi_buildvalue = Py_BuildValue("N",capi_b_tmp);
+/*closepyobjfrom*/
+/*end of closepyobjfrom*/
+ } /*if (f2py_success) after callfortranroutine*/
+/*cleanupfrompyobj*/
+ } /*if (capi_b_tmp == NULL) ... else of b*/
+ /* End of cleaning variable b */
+ } /*CHECKSCALAR(shape(a,1)==n)*/
+ /* End of cleaning variable n */
+ } /*CHECKSCALAR(shape(a,0)==m)*/
+ /* End of cleaning variable m */
+ if((PyObject *)capi_a_tmp!=a_capi) {
+ Py_XDECREF(capi_a_tmp); }
+ } /*if (capi_a_tmp == NULL) ... else of a*/
+ /* End of cleaning variable a */
+/*end of cleanupfrompyobj*/
+ if (capi_buildvalue == NULL) {
+/*routdebugfailure*/
+ } else {
+/*routdebugleave*/
+ }
+ CFUNCSMESS("Freeing memory.\n");
+/*freemem*/
+#ifdef F2PY_REPORT_ATEXIT
+f2py_stop_clock();
+#endif
+ return capi_buildvalue;
+}
+/****************************** end of dfilter2d ******************************/
+/*eof body*/
+
+/******************* See f2py2e/f90mod_rules.py: buildhooks *******************/
+/*need_f90modhooks*/
+
+/************** See f2py2e/rules.py: module_rules['modulebody'] **************/
+
+/******************* See f2py2e/common_rules.py: buildhooks *******************/
+
+/*need_commonhooks*/
+
+/**************************** See f2py2e/rules.py ****************************/
+
+static FortranDataDef f2py_routine_defs[] = {
+ {"dfilter2d",-1,{{-1}},0,(char *)F_FUNC(dfilter2d,DFILTER2D),(f2py_init_func)f2py_rout_filter_dfilter2d,doc_f2py_rout_filter_dfilter2d},
+
+/*eof routine_defs*/
+ {NULL}
+};
+
+static PyMethodDef f2py_module_methods[] = {
+
+ {NULL,NULL}
+};
+
+PyMODINIT_FUNC initfilter(void) {
+ int i;
+ PyObject *m,*d, *s;
+ m = filter_module = Py_InitModule("filter", f2py_module_methods);
+ PyFortran_Type.ob_type = &PyType_Type;
+ import_array();
+ if (PyErr_Occurred())
+ Py_FatalError("can't initialize module filter (failed to import numpy)");
+ d = PyModule_GetDict(m);
+ s = PyString_FromString("$Revision: $");
+ PyDict_SetItemString(d, "__version__", s);
+ s = PyString_FromString("This module 'filter' is auto-generated with f2py (version:2_3032).\nFunctions:\n"
+" b = dfilter2d(a)\n"
+".");
+ PyDict_SetItemString(d, "__doc__", s);
+ filter_error = PyErr_NewException ("filter.error", NULL, NULL);
+ Py_DECREF(s);
+ for(i=0;f2py_routine_defs[i].name!=NULL;i++)
+ PyDict_SetItemString(d, f2py_routine_defs[i].name,PyFortranObject_NewAsAttr(&f2py_routine_defs[i]));
+
+/*eof initf2pywraphooks*/
+/*eof initf90modhooks*/
+
+/*eof initcommonhooks*/
+
+
+#ifdef F2PY_REPORT_ATEXIT
+ if (! PyErr_Occurred())
+ on_exit(f2py_report_on_exit,(void*)"filter");
+#endif
+
+}
+#ifdef __cplusplus
+}
+#endif
diff --git a/numpy/doc/numpybook/comparison/f2py/timeme b/numpy/doc/numpybook/comparison/f2py/timeme
new file mode 100755
index 000000000..d6ac5741e
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/f2py/timeme
@@ -0,0 +1 @@
+python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b=N.zeros_like(a); none = filter.DFILTER2D(a,b)"
diff --git a/numpy/doc/numpybook/comparison/pyrex/add.c b/numpy/doc/numpybook/comparison/pyrex/add.c
new file mode 100644
index 000000000..d5e3bd725
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/add.c
@@ -0,0 +1,560 @@
+/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:41 2006 */
+
+#include "Python.h"
+#include "structmember.h"
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+__PYX_EXTERN_C double pow(double, double);
+#include "numpy/arrayobject.h"
+
+
+typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
+typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
+static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/
+static int __Pyx_EndUnpack(PyObject *, int); /*proto*/
+static int __Pyx_PrintItem(PyObject *); /*proto*/
+static int __Pyx_PrintNewline(void); /*proto*/
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static void __Pyx_ReRaise(void); /*proto*/
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+static PyObject *__Pyx_GetExcValue(void); /*proto*/
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/
+static void __Pyx_WriteUnraisable(char *name); /*proto*/
+static void __Pyx_AddTraceback(char *funcname); /*proto*/
+static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
+static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
+static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static int __pyx_lineno;
+static char *__pyx_filename;
+static char **__pyx_f;
+
+/* Declarations from c_numpy */
+
+static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0;
+static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0;
+
+/* Declarations from add */
+
+
+/* Implementation of add */
+
+static PyObject *__pyx_n_c_numpy;
+static PyObject *__pyx_n_zadd;
+static PyObject *__pyx_n_cadd;
+static PyObject *__pyx_n_dadd;
+static PyObject *__pyx_n_sadd;
+
+static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_ao = 0;
+ PyObject *__pyx_v_bo = 0;
+ PyArrayObject *__pyx_v_c;
+ PyArrayObject *__pyx_v_a;
+ PyArrayObject *__pyx_v_b;
+ npy_intp __pyx_v_i;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ npy_intp __pyx_2;
+ static char *__pyx_argnames[] = {"ao","bo",0};
+ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
+ Py_INCREF(__pyx_v_ao);
+ Py_INCREF(__pyx_v_bo);
+ __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":15 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_a));
+ __pyx_v_a = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":16 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_b));
+ __pyx_v_b = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":18 */
+ __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_c));
+ __pyx_v_c = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":21 */
+ __pyx_2 = (__pyx_v_a->dimensions[0]);
+ for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":22 */
+ (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).real);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":24 */
+ (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).imag);
+ __pyx_L2:;
+ }
+ __pyx_L3:;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":26 */
+ Py_INCREF(((PyObject *)__pyx_v_c));
+ __pyx_r = ((PyObject *)__pyx_v_c);
+ goto __pyx_L0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1:;
+ Py_XDECREF(__pyx_1);
+ __Pyx_AddTraceback("add.zadd");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_c);
+ Py_DECREF(__pyx_v_a);
+ Py_DECREF(__pyx_v_b);
+ Py_DECREF(__pyx_v_ao);
+ Py_DECREF(__pyx_v_bo);
+ return __pyx_r;
+}
+
+static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_ao = 0;
+ PyObject *__pyx_v_bo = 0;
+ PyArrayObject *__pyx_v_c;
+ PyArrayObject *__pyx_v_a;
+ PyArrayObject *__pyx_v_b;
+ npy_intp __pyx_v_i;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ npy_intp __pyx_2;
+ static char *__pyx_argnames[] = {"ao","bo",0};
+ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
+ Py_INCREF(__pyx_v_ao);
+ Py_INCREF(__pyx_v_bo);
+ __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":32 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_a));
+ __pyx_v_a = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":33 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_b));
+ __pyx_v_b = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":35 */
+ __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_c));
+ __pyx_v_c = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":38 */
+ __pyx_2 = (__pyx_v_a->dimensions[0]);
+ for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":39 */
+ (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).real);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":41 */
+ (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).imag);
+ __pyx_L2:;
+ }
+ __pyx_L3:;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":43 */
+ Py_INCREF(((PyObject *)__pyx_v_c));
+ __pyx_r = ((PyObject *)__pyx_v_c);
+ goto __pyx_L0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1:;
+ Py_XDECREF(__pyx_1);
+ __Pyx_AddTraceback("add.cadd");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_c);
+ Py_DECREF(__pyx_v_a);
+ Py_DECREF(__pyx_v_b);
+ Py_DECREF(__pyx_v_ao);
+ Py_DECREF(__pyx_v_bo);
+ return __pyx_r;
+}
+
+static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_ao = 0;
+ PyObject *__pyx_v_bo = 0;
+ PyArrayObject *__pyx_v_c;
+ PyArrayObject *__pyx_v_a;
+ PyArrayObject *__pyx_v_b;
+ npy_intp __pyx_v_i;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ npy_intp __pyx_2;
+ static char *__pyx_argnames[] = {"ao","bo",0};
+ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
+ Py_INCREF(__pyx_v_ao);
+ Py_INCREF(__pyx_v_bo);
+ __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":50 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_a));
+ __pyx_v_a = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":51 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_b));
+ __pyx_v_b = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":53 */
+ __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_c));
+ __pyx_v_c = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":56 */
+ __pyx_2 = (__pyx_v_a->dimensions[0]);
+ for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":57 */
+ (((double (*))__pyx_v_c->data)[__pyx_v_i]) = ((((double (*))__pyx_v_a->data)[__pyx_v_i]) + (((double (*))__pyx_v_b->data)[__pyx_v_i]));
+ __pyx_L2:;
+ }
+ __pyx_L3:;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":59 */
+ Py_INCREF(((PyObject *)__pyx_v_c));
+ __pyx_r = ((PyObject *)__pyx_v_c);
+ goto __pyx_L0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1:;
+ Py_XDECREF(__pyx_1);
+ __Pyx_AddTraceback("add.dadd");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_c);
+ Py_DECREF(__pyx_v_a);
+ Py_DECREF(__pyx_v_b);
+ Py_DECREF(__pyx_v_ao);
+ Py_DECREF(__pyx_v_bo);
+ return __pyx_r;
+}
+
+static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_ao = 0;
+ PyObject *__pyx_v_bo = 0;
+ PyArrayObject *__pyx_v_c;
+ PyArrayObject *__pyx_v_a;
+ PyArrayObject *__pyx_v_b;
+ npy_intp __pyx_v_i;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ npy_intp __pyx_2;
+ static char *__pyx_argnames[] = {"ao","bo",0};
+ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0;
+ Py_INCREF(__pyx_v_ao);
+ Py_INCREF(__pyx_v_bo);
+ __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":66 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_a));
+ __pyx_v_a = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":67 */
+ __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_b));
+ __pyx_v_b = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":69 */
+ __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_c));
+ __pyx_v_c = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":72 */
+ __pyx_2 = (__pyx_v_a->dimensions[0]);
+ for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":73 */
+ (((float (*))__pyx_v_c->data)[__pyx_v_i]) = ((((float (*))__pyx_v_a->data)[__pyx_v_i]) + (((float (*))__pyx_v_b->data)[__pyx_v_i]));
+ __pyx_L2:;
+ }
+ __pyx_L3:;
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":75 */
+ Py_INCREF(((PyObject *)__pyx_v_c));
+ __pyx_r = ((PyObject *)__pyx_v_c);
+ goto __pyx_L0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1:;
+ Py_XDECREF(__pyx_1);
+ __Pyx_AddTraceback("add.sadd");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_c);
+ Py_DECREF(__pyx_v_a);
+ Py_DECREF(__pyx_v_b);
+ Py_DECREF(__pyx_v_ao);
+ Py_DECREF(__pyx_v_bo);
+ return __pyx_r;
+}
+
+static __Pyx_InternTabEntry __pyx_intern_tab[] = {
+ {&__pyx_n_c_numpy, "c_numpy"},
+ {&__pyx_n_cadd, "cadd"},
+ {&__pyx_n_dadd, "dadd"},
+ {&__pyx_n_sadd, "sadd"},
+ {&__pyx_n_zadd, "zadd"},
+ {0, 0}
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+ {"zadd", (PyCFunction)__pyx_f_3add_zadd, METH_VARARGS|METH_KEYWORDS, 0},
+ {"cadd", (PyCFunction)__pyx_f_3add_cadd, METH_VARARGS|METH_KEYWORDS, 0},
+ {"dadd", (PyCFunction)__pyx_f_3add_dadd, METH_VARARGS|METH_KEYWORDS, 0},
+ {"sadd", (PyCFunction)__pyx_f_3add_sadd, METH_VARARGS|METH_KEYWORDS, 0},
+ {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+PyMODINIT_FUNC initadd(void); /*proto*/
+PyMODINIT_FUNC initadd(void) {
+ __pyx_init_filenames();
+ __pyx_m = Py_InitModule4("add", __pyx_methods, 0, 0, PYTHON_API_VERSION);
+ if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ __pyx_b = PyImport_AddModule("__builtin__");
+ if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;}
+ __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;}
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":9 */
+ import_array();
+
+ /* "/Users/oliphant/numpybook/pyrex/add.pyx":62 */
+ return;
+ __pyx_L1:;
+ __Pyx_AddTraceback("add");
+}
+
+static char *__pyx_filenames[] = {
+ "add.pyx",
+ "c_numpy.pxd",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+ __pyx_f = __pyx_filenames;
+}
+
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+ if (!type) {
+ PyErr_Format(PyExc_SystemError, "Missing type object");
+ return 0;
+ }
+ if (obj == Py_None || PyObject_TypeCheck(obj, type))
+ return 1;
+ PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
+ obj->ob_type->tp_name, type->tp_name);
+ return 0;
+}
+
+static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
+ while (t->p) {
+ *t->p = PyString_InternFromString(t->s);
+ if (!*t->p)
+ return -1;
+ ++t;
+ }
+ return 0;
+}
+
+static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
+ long size)
+{
+ PyObject *py_module_name = 0;
+ PyObject *py_class_name = 0;
+ PyObject *py_name_list = 0;
+ PyObject *py_module = 0;
+ PyObject *result = 0;
+
+ py_module_name = PyString_FromString(module_name);
+ if (!py_module_name)
+ goto bad;
+ py_class_name = PyString_FromString(class_name);
+ if (!py_class_name)
+ goto bad;
+ py_name_list = PyList_New(1);
+ if (!py_name_list)
+ goto bad;
+ Py_INCREF(py_class_name);
+ if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
+ goto bad;
+ py_module = __Pyx_Import(py_module_name, py_name_list);
+ if (!py_module)
+ goto bad;
+ result = PyObject_GetAttr(py_module, py_class_name);
+ if (!result)
+ goto bad;
+ if (!PyType_Check(result)) {
+ PyErr_Format(PyExc_TypeError,
+ "%s.%s is not a type object",
+ module_name, class_name);
+ goto bad;
+ }
+ if (((PyTypeObject *)result)->tp_basicsize != size) {
+ PyErr_Format(PyExc_ValueError,
+ "%s.%s does not appear to be the correct type object",
+ module_name, class_name);
+ goto bad;
+ }
+ goto done;
+bad:
+ Py_XDECREF(result);
+ result = 0;
+done:
+ Py_XDECREF(py_module_name);
+ Py_XDECREF(py_class_name);
+ Py_XDECREF(py_name_list);
+ return (PyTypeObject *)result;
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+ PyObject *__import__ = 0;
+ PyObject *empty_list = 0;
+ PyObject *module = 0;
+ PyObject *global_dict = 0;
+ PyObject *empty_dict = 0;
+ PyObject *list;
+ __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
+ if (!__import__)
+ goto bad;
+ if (from_list)
+ list = from_list;
+ else {
+ empty_list = PyList_New(0);
+ if (!empty_list)
+ goto bad;
+ list = empty_list;
+ }
+ global_dict = PyModule_GetDict(__pyx_m);
+ if (!global_dict)
+ goto bad;
+ empty_dict = PyDict_New();
+ if (!empty_dict)
+ goto bad;
+ module = PyObject_CallFunction(__import__, "OOOO",
+ name, global_dict, empty_dict, list);
+bad:
+ Py_XDECREF(empty_list);
+ Py_XDECREF(__import__);
+ Py_XDECREF(empty_dict);
+ return module;
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(char *funcname) {
+ PyObject *py_srcfile = 0;
+ PyObject *py_funcname = 0;
+ PyObject *py_globals = 0;
+ PyObject *empty_tuple = 0;
+ PyObject *empty_string = 0;
+ PyCodeObject *py_code = 0;
+ PyFrameObject *py_frame = 0;
+
+ py_srcfile = PyString_FromString(__pyx_filename);
+ if (!py_srcfile) goto bad;
+ py_funcname = PyString_FromString(funcname);
+ if (!py_funcname) goto bad;
+ py_globals = PyModule_GetDict(__pyx_m);
+ if (!py_globals) goto bad;
+ empty_tuple = PyTuple_New(0);
+ if (!empty_tuple) goto bad;
+ empty_string = PyString_FromString("");
+ if (!empty_string) goto bad;
+ py_code = PyCode_New(
+ 0, /*int argcount,*/
+ 0, /*int nlocals,*/
+ 0, /*int stacksize,*/
+ 0, /*int flags,*/
+ empty_string, /*PyObject *code,*/
+ empty_tuple, /*PyObject *consts,*/
+ empty_tuple, /*PyObject *names,*/
+ empty_tuple, /*PyObject *varnames,*/
+ empty_tuple, /*PyObject *freevars,*/
+ empty_tuple, /*PyObject *cellvars,*/
+ py_srcfile, /*PyObject *filename,*/
+ py_funcname, /*PyObject *name,*/
+ __pyx_lineno, /*int firstlineno,*/
+ empty_string /*PyObject *lnotab*/
+ );
+ if (!py_code) goto bad;
+ py_frame = PyFrame_New(
+ PyThreadState_Get(), /*PyThreadState *tstate,*/
+ py_code, /*PyCodeObject *code,*/
+ py_globals, /*PyObject *globals,*/
+ 0 /*PyObject *locals*/
+ );
+ if (!py_frame) goto bad;
+ py_frame->f_lineno = __pyx_lineno;
+ PyTraceBack_Here(py_frame);
+bad:
+ Py_XDECREF(py_srcfile);
+ Py_XDECREF(py_funcname);
+ Py_XDECREF(empty_tuple);
+ Py_XDECREF(empty_string);
+ Py_XDECREF(py_code);
+ Py_XDECREF(py_frame);
+}
diff --git a/numpy/doc/numpybook/comparison/pyrex/add.pyx b/numpy/doc/numpybook/comparison/pyrex/add.pyx
new file mode 100644
index 000000000..63c231641
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/add.pyx
@@ -0,0 +1,75 @@
+# -*- Mode: Python -*- Not really, but close enough
+
+cimport c_numpy
+from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble, \
+ npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \
+ NPY_CFLOAT
+
+#We need to initialize NumPy
+import_array()
+
+def zadd(object ao, object bo):
+ cdef ndarray c, a, b
+ cdef npy_intp i
+
+ a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CDOUBLE, 1, 1)
+ b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CDOUBLE, 1, 1)
+
+ c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
+ a.descr.type_num)
+
+ for i from 0 <= i < a.dimensions[0]:
+ (<npy_cdouble *>c.data)[i].real = (<npy_cdouble *>a.data)[i].real + \
+ (<npy_cdouble *>b.data)[i].real
+ (<npy_cdouble *>c.data)[i].imag = (<npy_cdouble *>a.data)[i].imag + \
+ (<npy_cdouble *>b.data)[i].imag
+ return c
+
+def cadd(object ao, object bo):
+ cdef ndarray c, a, b
+ cdef npy_intp i
+
+ a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CFLOAT, 1, 1)
+ b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CFLOAT, 1, 1)
+
+ c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
+ a.descr.type_num)
+
+ for i from 0 <= i < a.dimensions[0]:
+ (<npy_cfloat *>c.data)[i].real = (<npy_cfloat *>a.data)[i].real + \
+ (<npy_cfloat *>b.data)[i].real
+ (<npy_cfloat *>c.data)[i].imag = (<npy_cfloat *>a.data)[i].imag + \
+ (<npy_cfloat *>b.data)[i].imag
+ return c
+
+
+def dadd(object ao, object bo):
+ cdef ndarray c, a, b
+ cdef npy_intp i
+
+ a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_DOUBLE, 1, 1)
+ b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_DOUBLE, 1, 1)
+
+ c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
+ a.descr.type_num)
+
+ for i from 0 <= i < a.dimensions[0]:
+ (<double *>c.data)[i] = (<double *>a.data)[i] + \
+ (<double *>b.data)[i]
+ return c
+
+
+def sadd(object ao, object bo):
+ cdef ndarray c, a, b
+ cdef npy_intp i
+
+ a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_FLOAT, 1, 1)
+ b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_FLOAT, 1, 1)
+
+ c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions,
+ a.descr.type_num)
+
+ for i from 0 <= i < a.dimensions[0]:
+ (<float *>c.data)[i] = (<float *>a.data)[i] + \
+ (<float *>b.data)[i]
+ return c
diff --git a/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd b/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd
new file mode 100644
index 000000000..e772f6fee
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd
@@ -0,0 +1,106 @@
+# :Author: Robert Kern
+# :Copyright: 2004, Enthought, Inc.
+# :License: BSD Style
+
+
+cdef extern from "numpy/arrayobject.h":
+
+ cdef enum NPY_TYPES:
+ NPY_BOOL
+ NPY_BYTE
+ NPY_UBYTE
+ NPY_SHORT
+ NPY_USHORT
+ NPY_INT
+ NPY_UINT
+ NPY_LONG
+ NPY_ULONG
+ NPY_LONGLONG
+ NPY_ULONGLONG
+ NPY_FLOAT
+ NPY_DOUBLE
+ NPY_LONGDOUBLE
+ NPY_CFLOAT
+ NPY_CDOUBLE
+ NPY_CLONGDOUBLE
+ NPY_OBJECT
+ NPY_STRING
+ NPY_UNICODE
+ NPY_VOID
+ NPY_NTYPES
+ NPY_NOTYPE
+
+ cdef enum requirements:
+ NPY_CONTIGUOUS
+ NPY_FORTRAN
+ NPY_OWNDATA
+ NPY_FORCECAST
+ NPY_ENSURECOPY
+ NPY_ENSUREARRAY
+ NPY_ELEMENTSTRIDES
+ NPY_ALIGNED
+ NPY_NOTSWAPPED
+ NPY_WRITEABLE
+ NPY_UPDATEIFCOPY
+ NPY_ARR_HAS_DESCR
+
+ NPY_BEHAVED
+ NPY_BEHAVED_NS
+ NPY_CARRAY
+ NPY_CARRAY_RO
+ NPY_FARRAY
+ NPY_FARRAY_RO
+ NPY_DEFAULT
+
+ NPY_IN_ARRAY
+ NPY_OUT_ARRAY
+ NPY_INOUT_ARRAY
+ NPY_IN_FARRAY
+ NPY_OUT_FARRAY
+ NPY_INOUT_FARRAY
+
+ NPY_UPDATE_ALL
+
+ ctypedef struct npy_cdouble:
+ double real
+ double imag
+
+ ctypedef struct npy_cfloat:
+ double real
+ double imag
+
+ ctypedef int npy_intp
+
+ ctypedef extern class numpy.dtype [object PyArray_Descr]:
+ cdef int type_num, elsize, alignment
+ cdef char type, kind, byteorder, hasobject
+ cdef object fields, typeobj
+
+ ctypedef extern class numpy.ndarray [object PyArrayObject]:
+ cdef char *data
+ cdef int nd
+ cdef npy_intp *dimensions
+ cdef npy_intp *strides
+ cdef object base
+ cdef dtype descr
+ cdef int flags
+
+ object PyArray_ZEROS(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran)
+ object PyArray_EMPTY(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran)
+ dtype PyArray_DescrFromTypeNum(NPY_TYPES type_num)
+ object PyArray_SimpleNew(int ndims, npy_intp* dims, NPY_TYPES type_num)
+ int PyArray_Check(object obj)
+ object PyArray_ContiguousFromAny(object obj, NPY_TYPES type,
+ int mindim, int maxdim)
+ npy_intp PyArray_SIZE(ndarray arr)
+ npy_intp PyArray_NBYTES(ndarray arr)
+ void *PyArray_DATA(ndarray arr)
+ object PyArray_FromAny(object obj, dtype newtype, int mindim, int maxdim,
+ int requirements, object context)
+ object PyArray_FROMANY(object obj, NPY_TYPES type_num, int min,
+ int max, int requirements)
+ object PyArray_NewFromDescr(object subtype, dtype newtype, int nd,
+ npy_intp* dims, npy_intp* strides, void* data,
+ int flags, object parent)
+
+ void import_array()
diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.c b/numpy/doc/numpybook/comparison/pyrex/filter.c
new file mode 100644
index 000000000..1c25eb677
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/filter.c
@@ -0,0 +1,388 @@
+/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:42 2006 */
+
+#include "Python.h"
+#include "structmember.h"
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+__PYX_EXTERN_C double pow(double, double);
+#include "numpy/arrayobject.h"
+
+
+typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
+typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
+static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/
+static int __Pyx_EndUnpack(PyObject *, int); /*proto*/
+static int __Pyx_PrintItem(PyObject *); /*proto*/
+static int __Pyx_PrintNewline(void); /*proto*/
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static void __Pyx_ReRaise(void); /*proto*/
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+static PyObject *__Pyx_GetExcValue(void); /*proto*/
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/
+static void __Pyx_WriteUnraisable(char *name); /*proto*/
+static void __Pyx_AddTraceback(char *funcname); /*proto*/
+static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/
+static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/
+static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static int __pyx_lineno;
+static char *__pyx_filename;
+static char **__pyx_f;
+
+/* Declarations from c_numpy */
+
+static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0;
+static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0;
+
+/* Declarations from filter */
+
+
+/* Implementation of filter */
+
+static PyObject *__pyx_n_c_numpy;
+static PyObject *__pyx_n_filter;
+
+static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_ao = 0;
+ PyArrayObject *__pyx_v_a;
+ PyArrayObject *__pyx_v_b;
+ npy_intp __pyx_v_i;
+ npy_intp __pyx_v_j;
+ npy_intp __pyx_v_M;
+ npy_intp __pyx_v_N;
+ npy_intp __pyx_v_S0;
+ npy_intp __pyx_v_S1;
+ npy_intp __pyx_v_r;
+ npy_intp __pyx_v_rm1;
+ npy_intp __pyx_v_rp1;
+ npy_intp __pyx_v_c;
+ npy_intp __pyx_v_cm1;
+ npy_intp __pyx_v_cp1;
+ PyObject *__pyx_v_oS;
+ PyObject *__pyx_r;
+ PyObject *__pyx_1 = 0;
+ long __pyx_2;
+ long __pyx_3;
+ PyObject *__pyx_4 = 0;
+ int __pyx_5;
+ static char *__pyx_argnames[] = {"ao",0};
+ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_ao)) return 0;
+ Py_INCREF(__pyx_v_ao);
+ __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+ __pyx_v_oS = Py_None; Py_INCREF(Py_None);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":18 */
+ __pyx_1 = PyArray_FROMANY(__pyx_v_ao,NPY_DOUBLE,2,2,NPY_ALIGNED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_a));
+ __pyx_v_a = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":19 */
+ __pyx_1 = PyArray_ZEROS(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num,0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;}
+ if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;}
+ Py_DECREF(((PyObject *)__pyx_v_b));
+ __pyx_v_b = ((PyArrayObject *)__pyx_1);
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":20 */
+ __pyx_v_M = (__pyx_v_a->dimensions[0]);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":21 */
+ __pyx_v_N = (__pyx_v_a->dimensions[1]);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":22 */
+ __pyx_v_S0 = (__pyx_v_a->strides[0]);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":23 */
+ __pyx_v_S1 = (__pyx_v_a->strides[1]);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":24 */
+ __pyx_2 = (__pyx_v_M - 1);
+ for (__pyx_v_i = 1; __pyx_v_i < __pyx_2; ++__pyx_v_i) {
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":25 */
+ __pyx_v_r = (__pyx_v_i * __pyx_v_S0);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":26 */
+ __pyx_v_rm1 = (__pyx_v_r - __pyx_v_S0);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":27 */
+ __pyx_v_rp1 = (__pyx_v_r + __pyx_v_S0);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":28 */
+ __pyx_1 = PyInt_FromLong((__pyx_v_i * __pyx_v_N)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; goto __pyx_L1;}
+ Py_DECREF(__pyx_v_oS);
+ __pyx_v_oS = __pyx_1;
+ __pyx_1 = 0;
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":29 */
+ __pyx_3 = (__pyx_v_N - 1);
+ for (__pyx_v_j = 1; __pyx_v_j < __pyx_3; ++__pyx_v_j) {
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":30 */
+ __pyx_v_c = (__pyx_v_j * __pyx_v_S1);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":31 */
+ __pyx_v_cm1 = (__pyx_v_c - __pyx_v_S1);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":32 */
+ __pyx_v_cp1 = (__pyx_v_c + __pyx_v_S1);
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":38 */
+ __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
+ __pyx_4 = PyNumber_Add(__pyx_v_oS, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
+ Py_DECREF(__pyx_1); __pyx_1 = 0;
+ __pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;}
+ Py_DECREF(__pyx_4); __pyx_4 = 0;
+ (((double (*))__pyx_v_b->data)[__pyx_5]) = (((((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_c))[0]) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_c))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_c))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cp1))[0])) * 0.5)) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cm1))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cp1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cp1))[0])) * 0.25));
+ __pyx_L4:;
+ }
+ __pyx_L5:;
+ __pyx_L2:;
+ }
+ __pyx_L3:;
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":43 */
+ Py_INCREF(((PyObject *)__pyx_v_b));
+ __pyx_r = ((PyObject *)__pyx_v_b);
+ goto __pyx_L0;
+
+ __pyx_r = Py_None; Py_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1:;
+ Py_XDECREF(__pyx_1);
+ Py_XDECREF(__pyx_4);
+ __Pyx_AddTraceback("filter.filter");
+ __pyx_r = 0;
+ __pyx_L0:;
+ Py_DECREF(__pyx_v_a);
+ Py_DECREF(__pyx_v_b);
+ Py_DECREF(__pyx_v_oS);
+ Py_DECREF(__pyx_v_ao);
+ return __pyx_r;
+}
+
+static __Pyx_InternTabEntry __pyx_intern_tab[] = {
+ {&__pyx_n_c_numpy, "c_numpy"},
+ {&__pyx_n_filter, "filter"},
+ {0, 0}
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+ {"filter", (PyCFunction)__pyx_f_6filter_filter, METH_VARARGS|METH_KEYWORDS, 0},
+ {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+PyMODINIT_FUNC initfilter(void); /*proto*/
+PyMODINIT_FUNC initfilter(void) {
+ __pyx_init_filenames();
+ __pyx_m = Py_InitModule4("filter", __pyx_methods, 0, 0, PYTHON_API_VERSION);
+ if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ __pyx_b = PyImport_AddModule("__builtin__");
+ if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;};
+ __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;}
+ __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;}
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":9 */
+ import_array();
+
+ /* "/Users/oliphant/numpybook/pyrex/filter.pyx":11 */
+ return;
+ __pyx_L1:;
+ __Pyx_AddTraceback("filter");
+}
+
+static char *__pyx_filenames[] = {
+ "filter.pyx",
+ "c_numpy.pxd",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+ __pyx_f = __pyx_filenames;
+}
+
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+ if (!type) {
+ PyErr_Format(PyExc_SystemError, "Missing type object");
+ return 0;
+ }
+ if (obj == Py_None || PyObject_TypeCheck(obj, type))
+ return 1;
+ PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
+ obj->ob_type->tp_name, type->tp_name);
+ return 0;
+}
+
+static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
+ while (t->p) {
+ *t->p = PyString_InternFromString(t->s);
+ if (!*t->p)
+ return -1;
+ ++t;
+ }
+ return 0;
+}
+
+static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
+ long size)
+{
+ PyObject *py_module_name = 0;
+ PyObject *py_class_name = 0;
+ PyObject *py_name_list = 0;
+ PyObject *py_module = 0;
+ PyObject *result = 0;
+
+ py_module_name = PyString_FromString(module_name);
+ if (!py_module_name)
+ goto bad;
+ py_class_name = PyString_FromString(class_name);
+ if (!py_class_name)
+ goto bad;
+ py_name_list = PyList_New(1);
+ if (!py_name_list)
+ goto bad;
+ Py_INCREF(py_class_name);
+ if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
+ goto bad;
+ py_module = __Pyx_Import(py_module_name, py_name_list);
+ if (!py_module)
+ goto bad;
+ result = PyObject_GetAttr(py_module, py_class_name);
+ if (!result)
+ goto bad;
+ if (!PyType_Check(result)) {
+ PyErr_Format(PyExc_TypeError,
+ "%s.%s is not a type object",
+ module_name, class_name);
+ goto bad;
+ }
+ if (((PyTypeObject *)result)->tp_basicsize != size) {
+ PyErr_Format(PyExc_ValueError,
+ "%s.%s does not appear to be the correct type object",
+ module_name, class_name);
+ goto bad;
+ }
+ goto done;
+bad:
+ Py_XDECREF(result);
+ result = 0;
+done:
+ Py_XDECREF(py_module_name);
+ Py_XDECREF(py_class_name);
+ Py_XDECREF(py_name_list);
+ return (PyTypeObject *)result;
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+ PyObject *__import__ = 0;
+ PyObject *empty_list = 0;
+ PyObject *module = 0;
+ PyObject *global_dict = 0;
+ PyObject *empty_dict = 0;
+ PyObject *list;
+ __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
+ if (!__import__)
+ goto bad;
+ if (from_list)
+ list = from_list;
+ else {
+ empty_list = PyList_New(0);
+ if (!empty_list)
+ goto bad;
+ list = empty_list;
+ }
+ global_dict = PyModule_GetDict(__pyx_m);
+ if (!global_dict)
+ goto bad;
+ empty_dict = PyDict_New();
+ if (!empty_dict)
+ goto bad;
+ module = PyObject_CallFunction(__import__, "OOOO",
+ name, global_dict, empty_dict, list);
+bad:
+ Py_XDECREF(empty_list);
+ Py_XDECREF(__import__);
+ Py_XDECREF(empty_dict);
+ return module;
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(char *funcname) {
+ PyObject *py_srcfile = 0;
+ PyObject *py_funcname = 0;
+ PyObject *py_globals = 0;
+ PyObject *empty_tuple = 0;
+ PyObject *empty_string = 0;
+ PyCodeObject *py_code = 0;
+ PyFrameObject *py_frame = 0;
+
+ py_srcfile = PyString_FromString(__pyx_filename);
+ if (!py_srcfile) goto bad;
+ py_funcname = PyString_FromString(funcname);
+ if (!py_funcname) goto bad;
+ py_globals = PyModule_GetDict(__pyx_m);
+ if (!py_globals) goto bad;
+ empty_tuple = PyTuple_New(0);
+ if (!empty_tuple) goto bad;
+ empty_string = PyString_FromString("");
+ if (!empty_string) goto bad;
+ py_code = PyCode_New(
+ 0, /*int argcount,*/
+ 0, /*int nlocals,*/
+ 0, /*int stacksize,*/
+ 0, /*int flags,*/
+ empty_string, /*PyObject *code,*/
+ empty_tuple, /*PyObject *consts,*/
+ empty_tuple, /*PyObject *names,*/
+ empty_tuple, /*PyObject *varnames,*/
+ empty_tuple, /*PyObject *freevars,*/
+ empty_tuple, /*PyObject *cellvars,*/
+ py_srcfile, /*PyObject *filename,*/
+ py_funcname, /*PyObject *name,*/
+ __pyx_lineno, /*int firstlineno,*/
+ empty_string /*PyObject *lnotab*/
+ );
+ if (!py_code) goto bad;
+ py_frame = PyFrame_New(
+ PyThreadState_Get(), /*PyThreadState *tstate,*/
+ py_code, /*PyCodeObject *code,*/
+ py_globals, /*PyObject *globals,*/
+ 0 /*PyObject *locals*/
+ );
+ if (!py_frame) goto bad;
+ py_frame->f_lineno = __pyx_lineno;
+ PyTraceBack_Here(py_frame);
+bad:
+ Py_XDECREF(py_srcfile);
+ Py_XDECREF(py_funcname);
+ Py_XDECREF(empty_tuple);
+ Py_XDECREF(empty_string);
+ Py_XDECREF(py_code);
+ Py_XDECREF(py_frame);
+}
diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.pyx b/numpy/doc/numpybook/comparison/pyrex/filter.pyx
new file mode 100644
index 000000000..492bc43de
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/filter.pyx
@@ -0,0 +1,44 @@
+# -*- Mode: Python -*- Not really, but close enough
+
+cimport c_numpy
+from c_numpy cimport import_array, ndarray, npy_intp,\
+ NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \
+ NPY_CFLOAT, NPY_ALIGNED
+
+#We need to initialize NumPy
+import_array()
+
+def filter(object ao):
+ cdef ndarray a, b
+ cdef npy_intp i, j, M, N, S0, S1
+ cdef npy_intp r,rm1,rp1,c,cm1,cp1
+
+ # Require an ALIGNED array (but not necessarily contiguous)
+ # We will use strides to access the elements.
+ a = c_numpy.PyArray_FROMANY(ao, NPY_DOUBLE, 2, 2, NPY_ALIGNED)
+ b = c_numpy.PyArray_ZEROS(a.nd, a.dimensions, a.descr.type_num, 0)
+ M = a.dimensions[0]
+ N = a.dimensions[1]
+ S0 = a.strides[0]
+ S1 = a.strides[1]
+ for i from 1 <= i < M-1:
+ r = i*S0
+ rm1 = r-S0
+ rp1 = r+S0
+ oS = i*N
+ for j from 1 <= j < N-1:
+ c = j*S1
+ cm1 = c-S1
+ cp1 = c+S1
+ (<double *>b.data)[oS+j] = \
+ (<double *>(a.data+r+c))[0] + \
+ ((<double *>(a.data+rm1+c))[0] + \
+ (<double *>(a.data+rp1+c))[0] + \
+ (<double *>(a.data+r+cm1))[0] + \
+ (<double *>(a.data+r+cp1))[0])*0.5 + \
+ ((<double *>(a.data+rm1+cm1))[0] + \
+ (<double *>(a.data+rp1+cm1))[0] + \
+ (<double *>(a.data+rp1+cp1))[0] + \
+ (<double *>(a.data+rm1+cp1))[0])*0.25
+ return b
+
diff --git a/numpy/doc/numpybook/comparison/pyrex/setup.py b/numpy/doc/numpybook/comparison/pyrex/setup.py
new file mode 100644
index 000000000..64cf12bc8
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/setup.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+from distutils.core import setup
+from distutils.extension import Extension
+
+import numpy
+
+# Define a pyrex-based extension module, using the generated sources if pyrex
+from Pyrex.Distutils import build_ext
+pyx_sources = ['add.pyx']
+cmdclass = {'build_ext': build_ext}
+
+
+pyx_ext = Extension('add',
+ pyx_sources,
+ include_dirs = [numpy.get_include()])
+
+pyx_ext2 = Extension('blur',
+ ['blur.pyx'],
+ include_dirs = [numpy.get_include()])
+
+
+# Call the routine which does the real work
+setup(name = 'add',
+ description = 'Small example on using Pyrex to write a Numpy extension',
+ url = 'http://www.scipy.org/Cookbook/Pyrex_and_NumPy',
+ ext_modules = [pyx_ext, pyx_ext2],
+ cmdclass = cmdclass,
+ )
diff --git a/numpy/doc/numpybook/comparison/pyrex/timeme b/numpy/doc/numpybook/comparison/pyrex/timeme
new file mode 100755
index 000000000..2f7cd297f
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/pyrex/timeme
@@ -0,0 +1,2 @@
+python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
+
diff --git a/numpy/doc/numpybook/comparison/timing.py b/numpy/doc/numpybook/comparison/timing.py
new file mode 100644
index 000000000..14841d7cb
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/timing.py
@@ -0,0 +1,63 @@
+
+import timeit
+
+pyrex_pre = """
+import numpy as N
+a = N.random.rand(%d,%d)
+import filter
+"""
+
+pyrex_run = """
+b = filter.filter(a)
+"""
+
+weave_pre = """
+import numpy as N
+a = N.random.rand(%d,%d)
+import filter
+"""
+
+weave_run = """
+b = filter.filter(a)
+"""
+
+ctypes_pre = """
+import numpy as N
+a = N.random.rand(%d,%d)
+import filter
+"""
+
+ctypes_run = """
+b = filter.filter(a)
+"""
+
+f2py_pre = """
+import numpy as N
+a = N.random.rand(%d, %d).T
+import filter
+"""
+
+f2py_run = """
+b = N.zeros_like(a)
+filter.DFILTER2D(a,b)
+"""
+
+N = [10,20,30,40,50,100,200,300, 400, 500]
+
+res = {}
+
+import os
+import sys
+path = sys.path
+
+for kind in ['f2py']:#['ctypes', 'pyrex', 'weave', 'f2py']:
+ res[kind] = []
+ sys.path = ['/Users/oliphant/numpybook/%s' % (kind,)] + path
+ print sys.path
+ for n in N:
+ print "%s - %d" % (kind, n)
+ t = timeit.Timer(eval('%s_run'%kind), eval('%s_pre %% (%d,%d)'%(kind,n,n)))
+ mytime = min(t.repeat(3,100))
+ res[kind].append(mytime)
+
+
diff --git a/numpy/doc/numpybook/comparison/weave/filter.py b/numpy/doc/numpybook/comparison/weave/filter.py
new file mode 100644
index 000000000..b2fdb277e
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/weave/filter.py
@@ -0,0 +1,23 @@
+from scipy import weave, zeros_like
+
+def filter(a):
+ if a.ndim != 2:
+ raise ValueError, "a must be 2-d"
+ code = r"""
+ int i,j;
+ for(i=1;i<Na[0]-1;i++) {
+ for(j=1;j<Na[1]-1;j++) {
+ B2(i,j) = A2(i,j) + (A2(i-1,j) +
+ A2(i+1,j) + A2(i,j-1)
+ + A2(i,j+1))*0.5
+ + (A2(i-1,j-1)
+ + A2(i-1,j+1)
+ + A2(i+1,j-1)
+ + A2(i+1,j+1))*0.25;
+ }
+ }
+ """
+ b = zeros_like(a)
+ weave.inline(code,['a','b'])
+ return b
+
diff --git a/numpy/doc/numpybook/comparison/weave/inline.py b/numpy/doc/numpybook/comparison/weave/inline.py
new file mode 100644
index 000000000..31499213e
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/weave/inline.py
@@ -0,0 +1,49 @@
+from scipy import weave
+from numpy import rand, zeros_like
+
+def example1(a):
+ if not isinstance(a, list):
+ raise ValueError, "argument must be a list"
+ code = r"""
+ int i;
+ py::tuple results(2);
+ for (i=0; i<a.length(); i++) {
+ a[i] = i;
+ }
+ results[0] = 3.0;
+ results[1] = 4.0;
+ return_val = results;
+ """
+ return weave.inline(code,['a'])
+
+def arr(a):
+ if a.ndim != 2:
+ raise ValueError, "a must be 2-d"
+ code = r"""
+ int i,j;
+ for(i=1;i<Na[0]-1;i++) {
+ for(j=1;j<Na[1]-1;j++) {
+ B2(i,j) = A2(i,j) + A2(i-1,j)*0.5 +
+ A2(i+1,j)*0.5 + A2(i,j-1)*0.5
+ + A2(i,j+1)*0.5
+ + A2(i-1,j-1)*0.25
+ + A2(i-1,j+1)*0.25
+ + A2(i+1,j-1)*0.25
+ + A2(i+1,j+1)*0.25;
+ }
+ }
+ """
+ b = zeros_like(a)
+ weave.inline(code,['a','b'])
+ return b
+
+a = [None]*10
+print example1(a)
+print a
+
+a = rand(512,512)
+b = arr(a)
+
+h = [[0.25,0.5,0.25],[0.5,1,0.5],[0.25,0.5,0.25]]
+import scipy.signal as ss
+b2 = ss.convolve(h,a,'same')
diff --git a/numpy/doc/numpybook/comparison/weave/timeme b/numpy/doc/numpybook/comparison/weave/timeme
new file mode 100755
index 000000000..2f7cd297f
--- /dev/null
+++ b/numpy/doc/numpybook/comparison/weave/timeme
@@ -0,0 +1,2 @@
+python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)"
+
diff --git a/numpy/doc/numpybook/graphics/note.eps b/numpy/doc/numpybook/graphics/note.eps
new file mode 100644
index 000000000..6dc22e31c
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/note.eps
@@ -0,0 +1,116 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: note.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Aug 24 03:03:42 2005
+%%For: oliphant@den.local.net (Travis Oliphant)
+%%BoundingBox: 0 0 88 88
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.875 0.953 0.996 srgb} bind def
+/col33 {0.996 0.820 0.820 srgb} bind def
+/col34 {0.984 0.961 0.859 srgb} bind def
+
+end
+save
+newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
+% Fill background color
+0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
+closepath 0.98 0.96 0.86 setrgbcolor fill
+
+-172.1 187.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 52
+% Polyline
+7.500 slw
+n 3600 1680 m 2880 2400 l 3600 3120 l 4320 2400 l
+ cp gs col31 1.00 shd ef gr gs col31 s gr
+% here ends figure;
+%
+% here starts figure with depth 50
+% Polyline
+60.000 slw
+n 3600 1860 m 3060 2400 l 3600 2940 l 4140 2400 l
+ cp gs col0 s gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
diff --git a/numpy/doc/numpybook/graphics/note.fig b/numpy/doc/numpybook/graphics/note.fig
new file mode 100644
index 000000000..3a193a52c
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/note.fig
@@ -0,0 +1,16 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #e0f4ff
+0 33 #ffd2d2
+0 34 #fcf6dc
+2 3 0 1 31 31 52 -1 20 0.000 0 0 -1 0 0 5
+ 3600 1680 2880 2400 3600 3120 4320 2400 3600 1680
+2 3 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3600 1860 3060 2400 3600 2940 4140 2400 3600 1860
diff --git a/numpy/doc/numpybook/graphics/note.png b/numpy/doc/numpybook/graphics/note.png
new file mode 100644
index 000000000..bea5b70be
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/note.png
Binary files differ
diff --git a/numpy/doc/numpybook/graphics/tip.eps b/numpy/doc/numpybook/graphics/tip.eps
new file mode 100644
index 000000000..b87fd662c
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/tip.eps
@@ -0,0 +1,127 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tip.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Tue Aug 23 23:51:46 2005
+%%For: oliphant@den.local.net (Travis Oliphant)
+%%BoundingBox: 0 0 88 88
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.875 0.953 0.996 srgb} bind def
+/col33 {0.000 0.000 0.000 srgb} bind def
+
+end
+save
+newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
+% Fill background color
+0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
+closepath 0.88 0.95 1.00 setrgbcolor fill
+
+-172.3 187.6 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 51
+% Ellipse
+7.500 slw
+n 3600 2400 720 720 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col7 s gr
+
+% Ellipse
+n 3600 2400 660 660 0 360 DrawEllipse gs col1 1.00 shd ef gr gs col1 s gr
+
+/Times-Bold ff 1650.00 scf sf
+3384 2940 m
+gs 1 -1 sc (i) col7 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
diff --git a/numpy/doc/numpybook/graphics/tip.fig b/numpy/doc/numpybook/graphics/tip.fig
new file mode 100644
index 000000000..77db02fe1
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/tip.fig
@@ -0,0 +1,14 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #e0f4ff
+0 33 #000000
+1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400
+1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
+4 0 7 50 -1 2 110 0.0000 4 1140 465 3384 2940 i\001
diff --git a/numpy/doc/numpybook/graphics/tip.png b/numpy/doc/numpybook/graphics/tip.png
new file mode 100644
index 000000000..6a63550e2
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/tip.png
Binary files differ
diff --git a/numpy/doc/numpybook/graphics/tip.xfig.fig b/numpy/doc/numpybook/graphics/tip.xfig.fig
new file mode 100644
index 000000000..ede65f7c4
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/tip.xfig.fig
@@ -0,0 +1,12 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400
+1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
+4 0 7 50 -1 2 92 0.0000 4 960 390 3450 2850 i\001
diff --git a/numpy/doc/numpybook/graphics/warning.eps b/numpy/doc/numpybook/graphics/warning.eps
new file mode 100644
index 000000000..d854a99ff
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/warning.eps
@@ -0,0 +1,125 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: warning.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Aug 24 00:00:52 2005
+%%For: oliphant@den.local.net (Travis Oliphant)
+%%BoundingBox: 0 0 88 88
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.875 0.953 0.996 srgb} bind def
+/col33 {0.996 0.820 0.820 srgb} bind def
+/col34 {0.984 0.961 0.859 srgb} bind def
+
+end
+save
+newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath
+% Fill background color
+0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto
+closepath 1.00 0.82 0.82 setrgbcolor fill
+
+-172.3 187.6 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3600 2400 720 720 0 360 DrawEllipse gs col20 1.00 shd ef gr gs col20 s gr
+
+% Polyline
+n 3096 2268 m 4104 2268 l 4104 2532 l 3096 2532 l
+ cp gs col7 1.00 shd ef gr gs col7 s gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
diff --git a/numpy/doc/numpybook/graphics/warning.fig b/numpy/doc/numpybook/graphics/warning.fig
new file mode 100644
index 000000000..89424d5ba
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/warning.fig
@@ -0,0 +1,15 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #e0f4ff
+0 33 #ffd2d2
+0 34 #fcf6dc
+1 3 0 1 20 20 50 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400
+2 2 0 1 7 7 50 -1 20 0.000 0 0 -1 0 0 5
+ 3096 2268 4104 2268 4104 2532 3096 2532 3096 2268
diff --git a/numpy/doc/numpybook/graphics/warning.png b/numpy/doc/numpybook/graphics/warning.png
new file mode 100644
index 000000000..12f105160
--- /dev/null
+++ b/numpy/doc/numpybook/graphics/warning.png
Binary files differ
diff --git a/numpy/doc/numpybook/mybook.layout b/numpy/doc/numpybook/mybook.layout
new file mode 100644
index 000000000..588384dd3
--- /dev/null
+++ b/numpy/doc/numpybook/mybook.layout
@@ -0,0 +1,177 @@
+#% Do not delete the line below; configure depends on this
+# \DeclareLaTeXClass[book]{Stylish Book}
+# Book textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by serveral developers.
+
+# Input general definitions
+Input stdclass.inc
+
+# Global parameters.
+Sides 2
+PageStyle Headings
+
+# There is no abstract environment in book.cls
+NoStyle Abstract
+
+# a few changes to the bibliography
+Style Bibliography
+ TopSep 4
+ LabelString Bibliography
+ # label font definition
+ LabelFont
+ Series Bold
+ Size Huge
+ EndFont
+End
+
+
+Style Note
+ LatexType Command
+ LatexName notel
+
+ LabelType Centered_Top_Environment
+ LabelString "NOTE"
+ AlignPossible Left
+ LeftMargin "MMMMM"
+ RightMargin "MMMMM"
+ ParSkip 0.7
+ ParSep 0.7
+ TopSep 0.7
+ BottomSep 0.7
+
+ Font
+ Shape SmallCaps
+ Color Magenta
+ EndFont
+ Preamble
+ \usepackage{color}
+ \setlength{\fboxrule}{2pt}
+ \definecolor{noteback}{rgb}{0.988235, 0.964706, 0.862745}
+ \newcommand{\notel}[1]{%
+ \begin{center}%
+ \fcolorbox{black}{noteback}{%
+ \begin{minipage}{0.8\textwidth}%
+ \includegraphics[height=0.3in]{graphics/note.eps}%
+ \vskip-0.3in\hskip1.65in{\large\bf NOTE} \\[0.2cm]%
+ #1%
+ \end{minipage}%
+ }%
+ \end{center}%
+ }
+ EndPreamble
+End
+
+
+Style Warning
+ LatexType Command
+ LatexName warnl
+
+ LabelType Centered_Top_Environment
+ LabelString "WARNING"
+ AlignPossible Left
+ LeftMargin "MMMMM"
+ RightMargin "MMMMM"
+ ParSkip 0.7
+ ParSep 0.7
+ TopSep 0.7
+ BottomSep 0.7
+
+ Font
+ Shape SmallCaps
+ Color Red
+ EndFont
+ Preamble
+ \usepackage{color}
+ \setlength{\fboxrule}{2pt}
+ \definecolor{warnback}{rgb}{1.0, 0.8235294, 0.8235294}
+ \newcommand{\warnl}[1]{%
+ \begin{center}%
+ \fcolorbox{black}{warnback}{%
+ \begin{minipage}{0.8\textwidth}%
+ \includegraphics[height=0.3in]{graphics/warning.eps}%
+ \vskip-0.3in\hskip1.5in{\large\bf WARNING} \\[0.2cm]%
+ #1%
+ \end{minipage}%
+ }%
+ \end{center}%
+ }
+ EndPreamble
+End
+
+
+Style Tip
+ LatexType Command
+ LatexName tipl
+
+ LabelType Centered_Top_Environment
+ LabelString "TIP"
+ AlignPossible Left
+ LeftMargin "MMMMM"
+ RightMargin "MMMMM"
+ ParSkip 0.7
+ ParSep 0.7
+ TopSep 0.7
+ BottomSep 0.7
+
+ Font
+ Shape SmallCaps
+ Color Blue
+ EndFont
+ Preamble
+ \usepackage{color}
+ \setlength{\fboxrule}{2pt}
+ \definecolor{tipback}{rgb}{0.87843, 0.95686, 1.0}
+ \newcommand{\tipl}[1]{%
+ \begin{center}%
+ \fcolorbox{black}{tipback}{%
+ \begin{minipage}{0.8\textwidth}%
+ \includegraphics[height=0.3in]{graphics/tip.eps}%
+ \vskip-0.3in\hskip1.8in{\large\bf TIP} \\[0.2cm]%
+ #1%
+ \end{minipage}%
+ }%
+ \end{center}%
+ }
+ EndPreamble
+End
+
+Style MyCode
+ Margin Static
+ LatexType Environment
+ LatexName mycode
+ NextNoIndent 1
+ LeftMargin MMM
+ RightMargin MMM
+ TopSep 0.5
+ BottomSep 0.5
+ Align Left
+ AlignPossible Block, Left, Right, Center
+ LabelType No_Label
+ FreeSpacing 1
+
+ # define the environment lyxcode
+ Preamble
+ \usepackage{color}
+ \setlength{\fboxrule}{2pt}
+ \definecolor{codeback}{rgb}{0.94118,0.94118,0.94118}
+ \newsavebox{\mycodesavebox}
+ \newenvironment{mycode}
+ {\begin{lrbox}{\mycodesavebox}%
+ \begin{minipage}{0.95\linewidth}%
+ \begin{trivlist}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \normalfont\ttfamily
+ \item[] }
+ {\end{trivlist}\end{minipage}\end{lrbox}%
+ \vskip 0.5em \begin{center}\fcolorbox{black}{codeback}{\usebox{\mycodesavebox}}\end{center}\par \vskip 0.5em}
+ EndPreamble
+
+ # standard font definition
+ Font
+ Family Typewriter
+ EndFont
+
+End
diff --git a/numpy/doc/numpybook/numpybook.lyx b/numpy/doc/numpybook/numpybook.lyx
new file mode 100644
index 000000000..16ee19d90
--- /dev/null
+++ b/numpy/doc/numpybook/numpybook.lyx
@@ -0,0 +1,27836 @@
+#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
+\lyxformat 276
+\begin_document
+\begin_header
+\textclass mybook
+\begin_preamble
+
+
+
+\usepackage{array}
+
+% This gives us a better font in URL links (otherwise the default
+% MonoSpace font is bitmapped, and it looks horrible in PDF)
+\usepackage{courier}
+
+\usepackage{fullpage}
+
+\usepackage{color} % so we can use red for the fixme warnings
+
+% The hyperref package gives us a pdf with properly built
+% internal navigation ('pdf bookmarks' for the table of contents,
+% internal cross-reference links, web links for URLs, etc.)
+
+% A few colors to replace the defaults for certain link types
+\definecolor{darkorange}{rgb}{.71,0.21,0.01}
+\definecolor{darkgreen}{rgb}{.12,.54,.11}
+
+\usepackage[
+ %pdftex, % needed for pdflatex
+ breaklinks=true, % so long urls are correctly broken across lines
+ colorlinks=true,
+ urlcolor=blue,
+ linkcolor=darkorange,
+ citecolor=darkgreen,
+ ]{hyperref}
+
+% This helps prevent overly long lines that stretch beyond the margins
+\sloppy
+
+% Define a \fixme command to mark visually things needing fixing in the draft.
+% For final printing or to simply disable these bright warnings, simply
+% uncomment the \renewcommand redefinition below
+
+\newcommand{\fixme}[1] {
+\textcolor{red}{
+{\fbox{ {\bf FIX}
+\ensuremath{\blacktriangleright \blacktriangleright \blacktriangleright}}
+{\bf #1}
+\fbox{\ensuremath{ \blacktriangleleft \blacktriangleleft \blacktriangleleft }
+} } }
+}
+% Uncomment the next line to make the \fixme command be a no-op
+%\renewcommand{\fixme}[1]{}
+
+%%% If you also want to use the listings package for nicely formatted
+%%% Python source code, this configuration produces good on-paper and
+%%% on-screen results:
+
+\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
+% Use and configure listings package for nicely formatted code
+\usepackage{listings}
+\lstset{
+ language=Python,
+ basicstyle=\small\ttfamily,
+ commentstyle=\ttfamily\color{blue},
+ stringstyle=\ttfamily\color{orange},
+ showstringspaces=false,
+ breaklines=true,
+ postbreak = \space\dots
+}
+\end_preamble
+\language english
+\inputencoding auto
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+\graphics default
+\paperfontsize 10
+\spacing onehalf
+\papersize custom
+\use_geometry true
+\use_amsmath 2
+\use_esint 0
+\cite_engine basic
+\use_bibtopic false
+\paperorientation portrait
+\paperwidth 7in
+\paperheight 9in
+\leftmargin 1in
+\topmargin 1in
+\rightmargin 1in
+\bottommargin 1in
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\papercolumns 1
+\papersides 1
+\paperpagestyle headings
+\tracking_changes false
+\output_changes false
+\author ""
+\author ""
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+\begin_inset VSpace 2in*
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+
+\family sans
+\series bold
+\size giant
+Guide to NumPy
+\end_layout
+
+\begin_layout Standard
+\align center
+
+\family sans
+\size larger
+Travis E.
+ Oliphant, PhD
+\newline
+August 21, 2008
+\end_layout
+
+\begin_layout Standard
+\begin_inset VSpace vfill
+\end_inset
+
+This book was released from a restricted distribution using a Market-Determined,
+ Temporary, Distribution-Restriction (MDTDR) system (see http://www.trelgol.com)
+ on August 21, 2008.
+ It is now released to the public domain and can be used as source material
+ for other works.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand tableofcontents
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset FloatList table
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Part
+NumPy from Python
+\end_layout
+
+\begin_layout Chapter
+Origins of NumPy
+\end_layout
+
+\begin_layout Quotation
+A complex system that works is invariably found to have evolved from a simple
+ system that worked
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+John Gall
+\end_layout
+
+\begin_layout Quotation
+Copy from one, it's plagiarism; copy from two, it's research.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Wilson Mizner
+\end_layout
+
+\begin_layout Standard
+NumPy builds on (and is a successor to) the successful Numeric array object.
+ Its goal is to create the corner-stone for a useful environment for scientific
+ computing.
+ In order to better understand the people surrounding NumPy and (its library-pac
+kage) SciPy, I will explain a little about how SciPy and (current) NumPy
+ originated.
+ In 1998, as a graduate student studying biomedical imaging at the Mayo
+ Clinic in Rochester, MN, I came across Python and its numerical extension
+ (Numeric) while I was looking for ways to analyze large data sets for Magnetic
+ Resonance Imaging and Ultrasound using a high-level language.
+ I quickly fell in love with Python programming which is a remarkable statement
+ to make about a programming language.
+ If I had not seen others with the same view, I might have seriously doubted
+ my sanity.
+ I became rather involved in the Numeric Python community, adding the C-API
+ chapter to the Numeric documentation (for which Paul Dubois graciously
+ made me a co-author).
+
+\end_layout
+
+\begin_layout Standard
+As I progressed with my thesis work, programming in Python was so enjoyable
+ that I felt inhibited when I worked with other programming frameworks.
+ As a result, when a task I needed to perform was not available in the core
+ language, or in the Numeric extension, I looked around and found C or Fortran
+ code that performed the needed task, wrapped it into Python (either by
+ hand or using SWIG), and used the new functionality in my programs.
+
+\end_layout
+
+\begin_layout Standard
+Along the way, I learned a great deal about the underlying structure of
+ Numeric and grew to admire it's simple but elegant structures that grew
+ out of the mechanism by which Python allows itself to be extended.
+
+\end_layout
+
+\begin_layout Note
+Numeric was originally written in 1995 based off of an earlier Matrix Object
+ design by Jim Fulton which was released in 1994.
+ Most of the code was written by Jim Hugunin while he was a graduate student
+ at MIT.
+ He received help from many people including Jim Fulton, David Ascher, Paul
+ Dubois, and Konrad Hinsen.
+ These individuals and many others added comments, criticisms, and code
+ which helped the Numeric extension reach stability.
+ Jim Hugunin did not stay long as an active member of the community ---
+ moving on to write Jython and, later, Iron Python.
+\end_layout
+
+\begin_layout Standard
+By operating in this need-it-make-it fashion I ended up with a substantial
+ library of extension modules that helped Python + Numeric become easier
+ to use in a scientific setting.
+ These early modules included raw input-output functions, a special function
+ library, an integration library, an ordinary differential equation solver,
+ some least-squares optimizers, and sparse matrix solvers.
+ While I was doing this laborious work, Pearu Peterson noticed that a lot
+ of the routines I was wrapping were written in Fortran, and there was no
+ simplified wrapping mechanism for Fortran subroutines (like SWIG for C).
+ He began the task of writing f2py which made it possible to easily wrap
+ Fortran programs into Python.
+ I helped him a little bit, mostly with testing and contributing early function-
+call-back code, but he put forth the brunt of the work.
+ His result was simply amazing to me.
+ I've always been impressed with f2py, especially because I knew how much
+ effort writing and maintaining extension modules could be.
+ Anybody serious about scientific computing with Python will appreciate
+ that f2py is distributed along with NumPy.
+\end_layout
+
+\begin_layout Standard
+When I finished my Ph.D.
+ in 2001, Eric Jones (who had recently completed his Ph.D.
+ at Duke) contacted me because he had a collection of Python modules he
+ had developed as part of his thesis work as well.
+ He wanted to combine his modules with mine into one super package.
+ Together with Pearu Peterson we joined our efforts, and SciPy was born
+ in 2001.
+ Since then, many people have contributed module code to SciPy including
+ Ed Schofield, Robert Cimrman, David M.
+ Cooke, Charles (Chuck) Harris, Prabhu Ramachandran, Gary Strangman, Jean-Sebast
+ien Roy, and Fernando Perez.
+ Others such as Travis Vaught, David Morrill, Jeff Whitaker, and Louis Luangkeso
+rn have contributed testing and build support.
+
+\end_layout
+
+\begin_layout Standard
+At the start of 2005, SciPy was at release 0.3 and relatively stable for
+ an early version number.
+ Part of the reason it was difficult to stabilize SciPy was that the array
+ object upon which SciPy builds was undergoing a bit of an upheaval.
+ At about the same time as SciPy was being built, some Numeric users were
+ hitting up against the limited capabilities of Numeric.
+ In particular, the ability to deal with memory mapped files (and associated
+ alignment and swapping issues), record arrays, and altered error checking
+ modes were important but limited or non-existent in Numeric.
+ As a result, numarray was created by Perry Greenfield, Todd Miller, and
+ Rick White at the Space Science Telescope Institute as a replacement for
+ Numeric.
+ Numarray used a very different implementation scheme as a mix of Python
+ classes and C code (which led to slow downs in certain common uses).
+ While improving some capabilities, it was slow to pick up on the more advanced
+ features of Numeric's universal functions (ufuncs) --- never re-creating
+ the C-API that SciPy depended on.
+ This made it difficult for SciPy to
+\begin_inset Quotes eld
+\end_inset
+
+convert
+\begin_inset Quotes erd
+\end_inset
+
+ to numarray.
+
+\end_layout
+
+\begin_layout Standard
+Many newcomers to scientific computing with Python were told that numarray
+ was the future and started developing for it.
+ Very useful tools were developed that could not be used with Numeric (because
+ of numarray's change in C-API), and therefore could not be used easily
+ in SciPy.
+ This state of affairs was very discouraging for me personally as it left
+ the community fragmented.
+ Some developed for numarray, others developed as part of SciPy.
+ A few people even rejected adopting Python for scientific computing entirely
+ because of the split.
+ In addition, I estimate that quite a few Python users simply stayed away
+ from both SciPy and numarray, leaving the community smaller than it could
+ have been given the number of people that use Python for science and engineerin
+g purposes.
+
+\end_layout
+
+\begin_layout Standard
+It should be recognized that the split was not intentional, but simply an
+ outgrowth of the different and exacting demands of scientific computing
+ users.
+ My describing these events should not be construed as assigning blame to
+ anyone.
+ I very much admire and appreciate everyone I've met who is involved with
+ scientific computing and Python.
+ Using a stretched biological metaphor, it is only through the process of
+ dividing and merging that better results are born.
+ I think this concept applies to NumPy.
+\end_layout
+
+\begin_layout Standard
+In early 2005, I decided to begin an effort to help bring the diverging
+ community together under a common framework if it were possible.
+ I first looked at numarray to see what could be done to add the missing
+ features to make SciPy work with it as a core array object.
+ After a couple of days of studying numarray, I was not enthusiastic about
+ this approach.
+ My familiarity with the Numeric code base no doubt biased my opinion, but
+ it seemed to me that the features of Numarray could be added back to Numeric
+ with a few fundamental changes to the core object.
+ This would make the transition of SciPy to a more enhanced array object
+ much easier in my mind.
+
+\end_layout
+
+\begin_layout Standard
+Therefore, I began to construct this hybrid array object complete with an
+ enhanced set of universal (broadcasting) functions that could deal with
+ it.
+ Along the way, quite a few new features and significant enhancements were
+ added to the array object and its surrounding infrastructure.
+ This book describes the result of that year-and-a-half-long effort which
+ culminated with the release of NumPy 0.9.2 in early 2006 and NumPy 1.0 in
+ late 2006.
+ I first named the new package, SciPy Core, and used the scipy namespace.
+ However, after a few months of testing under that name, it became clear
+ that a separate namespace was needed for the new package.
+ As a result, a rapid search for a new name resulted in actually coming
+ back to the NumPy name which was the unofficial name of Numerical Python
+ but never the actual namespace.
+ Because the new package builds on the code-base of and is a successor to
+ Numeric, I think the NumPy name is fitting and hopefully not too confusing
+ to new users.
+\end_layout
+
+\begin_layout Standard
+This book only briefly outlines some of the infrastructure that surrounds
+ the basic objects in NumPy to provide the additional functionality contained
+ in the older Numeric package (
+\emph on
+i.e.
+
+\emph default
+ LinearAlgebra, RandomArray, FFT).
+ This infrastructure in NumPy includes basic linear algebra routines, Fourier
+ transform capabilities, and random number generators.
+ In addition, the f2py module is described in its own documentation, and
+ so is only briefly mentioned in the second part of the book.
+ There are also extensions to the standard Python distutils and testing
+ frameworks included with NumPy that are useful in constructing your own
+ packages built on top of NumPy.
+ The central purpose of this book, however, is to describe and document
+ the basic NumPy system that is available under the numpy namespace.
+\end_layout
+
+\begin_layout Note
+The numpy namespace includes all names under the numpy.core and numpy.lib
+ namespaces as well.
+ Thus,
+\family typewriter
+import numpy
+\family default
+ will also import the names from numpy.core and numpy.lib.
+ This is the recommended way to use numpy.
+\end_layout
+
+\begin_layout Standard
+The following table gives a brief outline of the sub-packages contained
+ in numpy package.
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="9" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="1in">
+<column alignment="center" valignment="top" leftline="true" width="2in">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="2in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Package
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Purpose
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Comments
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+core
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+basic objects
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+all names exported to numpy
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+lib
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+additional utilities
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+all names exported to numpy
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+linalg
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+basic linear algebra
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+old LinearAlgebra from Numeric
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+fft
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+discrete Fourier transforms
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+old FFT from Numeric
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+random
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+random number generators
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+old RandomArray from Numeric
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+distutils
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+enhanced build and distribution
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+improvements built on standard distutils
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+testing
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+unit-testing
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+utility functions useful for testing
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+f2py
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+automatic wrapping of Fortran code
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+a useful utility needed by SciPy
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Object Essentials
+\end_layout
+
+\begin_layout Quotation
+Our programs last longer if we manage to build simple abstractions for ourselves...
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Ron Jeffries
+\end_layout
+
+\begin_layout Quotation
+I will tell you the truth as soon as I figure it out.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Wayne Birmingham
+\end_layout
+
+\begin_layout Standard
+NumPy provides two fundamental objects: an N-dimensional array object (
+\family typewriter
+ndarray
+\family default
+) and a universal function object (
+\family typewriter
+ufunc
+\family default
+).
+ In addition, there are other objects that build on top of these which you
+ may find useful in your work, and these will be discussed later.
+ The current chapter will provide background information on just the
+\family typewriter
+ndarray
+\family default
+ and the
+\family typewriter
+ufunc
+\family default
+ that will be important for understanding the attributes and methods to
+ be discussed later.
+
+\end_layout
+
+\begin_layout Standard
+An N-dimensional array is a homogeneous collection of
+\begin_inset Quotes eld
+\end_inset
+
+items
+\begin_inset Quotes erd
+\end_inset
+
+ indexed using
+\begin_inset Formula $N$
+\end_inset
+
+ integers.
+ There are two essential pieces of information that define an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array: 1) the shape of the array, and 2) the kind of item the
+ array is composed of.
+ The shape of the array is a tuple of
+\begin_inset Formula $N$
+\end_inset
+
+ integers (one for each dimension) that provides information on how far
+ the index can vary along that dimension.
+ The other important information describing an array is the kind of item
+ the array is composed of.
+ Because every
+\family typewriter
+ndarray
+\family default
+ is a homogeneous collection of exactly the same data-type, every item takes
+ up the same size block of memory, and each block of memory in the array
+ is interpreted in exactly the same way
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+By using OBJECT arrays, one can effectively have heterogeneous arrays, but
+ the system still sees each element of the array as exactly the same thing
+ (a reference to a Python object).
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Tip
+All arrays in NumPy are indexed starting at 0 and ending at M-1 following
+ the Python convention.
+\end_layout
+
+\begin_layout Standard
+For example, consider the following piece of code:
+\end_layout
+
+\begin_layout MyCode
+>>> a = array([[1,2,3],[4,5,6]])
+\newline
+>>> a.shape
+\newline
+(2, 3)
+\newline
+>>> a.dtype
+\newline
+dtype('int32')
+\end_layout
+
+\begin_layout Note
+for all code in this book it is assumed that you have first entered
+\family typewriter
+from numpy import *
+\family default
+.
+ In addition, any previously defined arrays are still defined for subsequent
+ examples.
+\end_layout
+
+\begin_layout Standard
+This code defines an array of size
+\begin_inset Formula $2\times3$
+\end_inset
+
+ composed of 4-byte (little-endian) integer elements (on my 32-bit platform).
+ We can index into this two-dimensional array using two integers: the first
+ integer running from 0 to 1 inclusive and the second from 0 to 2 inclusive.
+ For example, index
+\begin_inset Formula $\left(1,1\right)$
+\end_inset
+
+ selects the element with value 5:
+\end_layout
+
+\begin_layout MyCode
+>>> a[1,1]
+\newline
+5
+\end_layout
+
+\begin_layout Standard
+All code shown in the shaded-boxes in this book has been (automatically)
+ executed on a particular version of NumPy.
+ The output of the code shown below shows which version of NumPy was used
+ to create all of the output in your copy of this book.
+\end_layout
+
+\begin_layout MyCode
+>>> import numpy; print numpy.__version__
+\newline
+1.0.2.dev3478
+\end_layout
+
+\begin_layout Section
+Data-Type Descriptors
+\end_layout
+
+\begin_layout Standard
+In NumPy, an ndarray is an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array of items where each item takes up a fixed number of bytes.
+ Typically, this fixed number of bytes represents a number (
+\emph on
+e.g.
+
+\emph default
+ integer or floating-point).
+ However, this fixed number of bytes could also represent an arbitrary record
+ made up of any collection of other data types.
+ NumPy achieves this flexibility through the use of a data-type (dtype)
+ object.
+ Every array has an associated dtype object which describes the layout of
+ the array data.
+ Every dtype
+\begin_inset LatexCommand index
+name "dtype"
+
+\end_inset
+
+ object, in turn, has an associated Python type-object that determines exactly
+ what type of Python object is returned when an element of the array is
+ accessed.
+ The dtype objects are flexible enough to contain references to arrays of
+ other dtype objects and, therefore, can be used to define nested records.
+ This advanced functionality will be described in better detail later as
+ it is mainly useful for the recarray (record array) subclass that will
+ also be defined later.
+ However, all ndarrays can enjoy the flexibility provided by the dtype objects.
+ Figure
+\begin_inset LatexCommand ref
+reference "cap:Conceptual-diagram-showing"
+
+\end_inset
+
+ provides a conceptual diagram showing the relationship between the ndarray,
+ its associated data-type object, and an array-scalar that is returned when
+ a single-element of the array is accessed.
+ Note that the data-type points to the type-object of the array scalar
+\begin_inset LatexCommand index
+name "array scalars"
+
+\end_inset
+
+.
+ An array scalar is returned using the type-object and a particular element
+ of the ndarray.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\align center
+\begin_inset Graphics
+ filename Figures/threefundamental.eps
+ width 90text%
+ keepAspectRatio
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Conceptual-diagram-showing"
+
+\end_inset
+
+Conceptual diagram showing the relationship between the three fundamental
+ objects used to describe the data in an array: 1) the ndarray itself, 2)
+ the data-type object that describes the layout of a single fixed-size element
+ of the array, 3) the array-scalar Python object that is returned when a
+ single element of the array is accessed.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Every dtype object is based on one of 21 built-in dtype objects.
+ These built-in objects allow numeric operations on a wide-variety of integer,
+ floating-point, and complex data types.
+ Associated with each data-type is a Python type object whose instances
+ are array scalars.
+ This type-object can be obtained using the
+\family typewriter
+type
+\family default
+ attribute of the dtype object.
+ Python typically defines only one data-type of a particular data class
+ (one integer type, one floating-point type, etc.).
+ This can be convenient for some applications that don't need to be concerned
+ with all the ways data can be represented in a computer.
+ For scientific applications, however, this is not always true.
+ As a result, in NumPy, their are 21 different fundamental Python data-type-desc
+riptor objects built-in.
+ These descriptors are mostly based on the types available in the C language
+ that CPython is written in.
+ However, there are a few types that are extremely flexible, such as
+\family typewriter
+str_
+\family default
+,
+\family typewriter
+unicode_
+\family default
+, and
+\family typewriter
+void
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+The fundamental data-types are shown in Table
+\begin_inset LatexCommand ref
+reference "cap:Fundamental-Data-Types"
+
+\end_inset
+
+.
+ Along with their (mostly) C-derived names, the integer, float, and complex
+ data-types are also available using a bit-width convention so that an array
+ of the right size can always be ensured (
+\emph on
+e.g.
+
+\emph default
+ int8, float64, complex128).
+ The C-like names are also accessible using a character code which is also
+ shown in the table (use of the character codes, however, is discouraged).
+ Names for the data types that would clash with standard Python object names
+ are followed by a trailing underscore, '_'.
+ These data types are so named because they use the same underlying precision
+ as the corresponding Python data types.
+ Most scientific users should be able to use the array-enhanced scalar objects
+ in place of the Python objects.
+ The array-enhanced scalars inherit from the Python objects they can replace
+ and should act like them under all circumstances (except for how errors
+ are handled in math computations).
+
+\end_layout
+
+\begin_layout Tip
+The array types
+\series bold
+bool
+\series default
+_,
+\series bold
+int
+\series default
+_,
+\series bold
+complex
+\series default
+_,
+\series bold
+float
+\series default
+_,
+\series bold
+object
+\series default
+_,
+\series bold
+unicode
+\series default
+_, and
+\series bold
+str_
+\series default
+ are enhanced-scalars.
+ They are very similar to the standard Python types (without the trailing
+ underscore) and inherit from them (except for bool_ and object_).
+ They can be used in place of the standard Python types whenever desired.
+ Whenever a data type is required, as an argument, the standard Python types
+ are recognized as well.
+\end_layout
+
+\begin_layout Standard
+Three of the data types are flexible in that they can have items that are
+ of an arbitrary size: the
+\family typewriter
+str_
+\family default
+ type, the
+\family typewriter
+unicode_
+\family default
+ type, and the
+\family typewriter
+void
+\family default
+ type.
+ While, you can specify an arbitrary size for these types, every item in
+ an array is still of that specified size.
+ The void type, for example, allows for arbitrary records to be defined
+ as elements of the array, and can be used to define exotic types built
+ on top of the basic
+\family typewriter
+ndarray
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Fundamental-Data-Types"
+
+\end_inset
+
+Built-in array-scalar types corresponding to data-types for an ndarray.
+ The bold-face types correspond to standard Python types.
+ The object_ type is special because arrays with dtype='O' do not return
+ an array scalar on item access but instead return the actual object referenced
+ in the array.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="24" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Type
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Bit-Width
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Character
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+bool_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+boolXX
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'?'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+byte
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+intXX
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'b'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+short
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'h'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+intc
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'i'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+int_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'l'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+longlong
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'q'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+intp
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'p'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+ubyte
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+uintXX
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'B'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+ushort
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'H'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+uintc
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'I'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+uint
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'L'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+ulonglong
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'Q'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+uintp
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'P'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+single
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+floatXX
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'f'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+float_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'d'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+longfloat
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'g'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+csingle
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+complexXX
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'F'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+complex_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'D'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+clongfloat
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'G'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+object_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'O'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+str_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'S#'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+unicode_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'U#'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+void
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family typewriter
+'V#'
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Note
+The two types
+\family typewriter
+intp
+\family default
+ and
+\family typewriter
+uintp
+\family default
+ are not separate types.
+ They are names bound to a specific integer type just large enough to hold
+ a memory address (a pointer) on the platform.
+\end_layout
+
+\begin_layout Warning
+Numeric Compatibility: If you used old typecode characters in your Numeric
+ code (which was never recommended), you will need to change some of them
+ to the new characters.
+ In particular, the needed changes are 'c->'S1', 'b'->'B', '1'->'b', 's'->'h',
+ 'w'->'H', and 'u'->'I'.
+ These changes make the typecharacter convention more consistent with other
+ Python modules such as the struct module.
+\end_layout
+
+\begin_layout Standard
+The fundamental data-types are arranged into a hierarchy of Python type-objects
+ shown in Figure
+\begin_inset LatexCommand ref
+reference "cap:Hierarchy-of-type"
+
+\end_inset
+
+.
+ Each of the leaves on this hierarchy correspond to actual data-types that
+ arrays can have (in other words, there is a built in dtype object associated
+ with each of these new types).
+ They also correspond to new Python objects that can be created.
+ These new objects are
+\begin_inset Quotes eld
+\end_inset
+
+scalar
+\begin_inset Quotes erd
+\end_inset
+
+ types corresponding to each fundamental data-type.
+ Their purpose is to smooth out the rough edges that result when mixing
+ scalar and array operations.
+ These scalar objects will be discussed in more detail in Chapter
+\begin_inset LatexCommand ref
+reference "cha:Scalar-objects"
+
+\end_inset
+
+.
+ The other types in the hierarchy define particular categories of types.
+ These categories can be useful for testing whether or not the object returned
+ by
+\family typewriter
+self.dtype.type
+\family default
+ is of a particular class (using
+\family typewriter
+issubclass
+\family default
+).
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\align center
+\begin_inset Graphics
+ filename Figures/hierarchy.eps
+ lyxscale 75
+ width 95text%
+ keepAspectRatio
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Hierarchy-of-type"
+
+\end_inset
+
+Hierarchy of type objects representing the array data types.
+ Not shown are the two integer types
+\family typewriter
+intp
+\family default
+ and
+\family typewriter
+uintp
+\family default
+ which just point to the integer type that holds a pointer for the platform.
+ All the number types can be obtained using bit-width names as well.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Basic indexing (slicing)
+\end_layout
+
+\begin_layout Standard
+Indexing
+\begin_inset LatexCommand index
+name "indexing"
+
+\end_inset
+
+ is a powerful tool in Python and NumPy takes full advantage of this power.
+ In fact, some of capabilities of Python's indexing were first established
+ by the needs of Numeric users.
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+For example, the ability to index with a comma separated list of objects
+ and have it correspond to indexing with a tuple is a feature added to Python
+ at the request of the NumPy community.
+ The Ellipsis object was also added to Python explicitly for the NumPy community.
+ Extended slicing (wherein a step can be provided) was also a feature added
+ to Python because of Numeric.
+\end_layout
+
+\end_inset
+
+ Indexing is also sometimes called slicing in Python, and slicing for an
+
+\family typewriter
+ndarray
+\family default
+ works very similarly as it does for other Python sequences.
+ There are three big differences: 1) slicing can be done over multiple dimension
+s, 2) exactly one ellipsis object can be used to indicate several dimensions
+ at once, 3) slicing cannot be used to expand the size of an array (unlike
+ lists).
+\end_layout
+
+\begin_layout Standard
+A few examples should make slicing more clear.
+ Suppose
+\begin_inset Formula $A$
+\end_inset
+
+ is a
+\begin_inset Formula $10\times20$
+\end_inset
+
+ array, then
+\begin_inset Formula $A[3]$
+\end_inset
+
+ is the same as
+\begin_inset Formula $A[3,:]$
+\end_inset
+
+ and represents the 4th length-20
+\begin_inset Quotes eld
+\end_inset
+
+row
+\begin_inset Quotes erd
+\end_inset
+
+ of the array.
+ On the other hand,
+\begin_inset Formula $A[:,3]$
+\end_inset
+
+ represents the 4th length-10
+\begin_inset Quotes eld
+\end_inset
+
+column
+\begin_inset Quotes erd
+\end_inset
+
+ of the array.
+ Every third element of the 4th column can be selected as
+\begin_inset Formula $A[::3,3]$
+\end_inset
+
+.
+ Ellipses can be used to replace zero or more
+\begin_inset Quotes eld
+\end_inset
+
+:
+\begin_inset Quotes erd
+\end_inset
+
+ terms.
+ In other words, an Ellipsis
+\begin_inset LatexCommand index
+name "Ellipsis"
+
+\end_inset
+
+ object expands to zero or more full slice objects (
+\begin_inset Quotes eld
+\end_inset
+
+:
+\begin_inset Quotes erd
+\end_inset
+
+) so that the total number of dimensions in the slicing tuple matches the
+ number of dimensions in the array.
+ Thus, if
+\begin_inset Formula $A$
+\end_inset
+
+ is
+\begin_inset Formula $10\times20\times30\times40$
+\end_inset
+
+, then
+\begin_inset Formula $A[3:,...,4]$
+\end_inset
+
+ is equivalent to
+\begin_inset Formula $A[3:,:,:,4]$
+\end_inset
+
+ while
+\begin_inset Formula $A[...,3]$
+\end_inset
+
+ is equivalent to
+\begin_inset Formula $A[:,:,:,3].$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The following code illustrates some of these concepts:
+\end_layout
+
+\begin_layout MyCode
+>>> a = arange(60).reshape(3,4,5); print a
+\newline
+[[[ 0 1 2 3 4]
+\newline
+ [ 5 6 7
+ 8 9]
+\newline
+ [10 11 12 13 14]
+\newline
+ [15 16 17 18 19]]
+\newline
+
+\newline
+ [[20 21 22 23 24]
+\newline
+ [25 26 27
+ 28 29]
+\newline
+ [30 31 32 33 34]
+\newline
+ [35 36 37 38 39]]
+\newline
+
+\newline
+ [[40 41 42 43 44]
+\newline
+ [45 46 47
+ 48 49]
+\newline
+ [50 51 52 53 54]
+\newline
+ [55 56 57 58 59]]]
+\end_layout
+
+\begin_layout Standard
+\InsetSpace ~
+
+\end_layout
+
+\begin_layout MyCode
+>>> print a[...,3]
+\newline
+[[ 3 8 13 18]
+\newline
+ [23 28 33 38]
+\newline
+ [43 48 53 58]]
+\newline
+>>> print a[1,...,3]
+\newline
+[23
+ 28 33 38]
+\newline
+>>> print a[:,:,2]
+\newline
+[[ 2 7 12 17]
+\newline
+ [22 27 32 37]
+\newline
+ [42 47 52 57]]
+\newline
+>>>
+ print a[0,::2,::2]
+\newline
+[[ 0 2 4]
+\newline
+ [10 12 14]]
+\end_layout
+
+\begin_layout Section
+Memory Layout of
+\family typewriter
+ndarray
+\end_layout
+
+\begin_layout Standard
+On a fundamental level, an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array object is just a one-dimensional sequence of memory with
+ fancy indexing code that maps an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index into a one-dimensional index.
+ The one-dimensional index is necessary on some level because that is how
+ memory is addressed in a computer.
+ The fancy indexing, however, can be very helpful for translating our ideas
+ into computer code.
+ This is because many concepts we wish to model on a computer have a natural
+ representation as an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array.
+ While this is especially true in science and engineering, it is also applicable
+ to many other arenas which can be appreciated by considering the popularity
+ of the spreadsheet as well as
+\begin_inset Quotes eld
+\end_inset
+
+image processing
+\begin_inset Quotes erd
+\end_inset
+
+ applications.
+\end_layout
+
+\begin_layout Warning
+Some high-level languages give pre-eminence to a particular use of 2-dimensional
+ arrays as Matrices.
+ In NumPy, however, the core object is the more general
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array.
+ NumPy defines a matrix object as a sub-class of the N-dimensional array.
+
+\end_layout
+
+\begin_layout Standard
+In order to more fully understand the array object along with its attributes
+ and methods it is important to learn more about how an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array is represented in the computer's memory.
+ A complete understanding of this layout is only essential for optimizing
+ algorithms operating on general purpose arrays.
+ But, even for the casual user, a general understanding of memory layout
+ will help to explain the use of certain array attributes that may otherwise
+ be mysterious.
+
+\end_layout
+
+\begin_layout Subsection
+Contiguous Memory Layout
+\end_layout
+
+\begin_layout Standard
+There is a fundamental ambiguity in how the mapping to a one-dimensional
+ index can take place which is illustrated for a 2-dimensional array in
+ Figure
+\begin_inset LatexCommand ref
+reference "cap:Options-for-memory"
+
+\end_inset
+
+.
+ In that figure, each block represents a chunk of memory that is needed
+ for representing the underlying array element.
+ For example, each block could represent the 8 bytes needed to represent
+ a double-precision floating point number.
+
+\end_layout
+
+\begin_layout Standard
+In the figure, two arrays are shown, a
+\begin_inset Formula $4x3$
+\end_inset
+
+ array and a
+\begin_inset Formula $3x4$
+\end_inset
+
+ array.
+ Each of these arrays takes 12 blocks of memory shown as a single, contiguous
+ segment.
+ How this memory is used to form the abstract 2-dimensional array can vary,
+ however, and the
+\family typewriter
+ndarray
+\family default
+ object supports both styles.
+ Which style is in use can be interrogated by the use of the flags attribute
+ which returns a dictionary of the state of array flags.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\align center
+\begin_inset Graphics
+ filename Figures/contiguous.eps
+ width 85text%
+ keepAspectRatio
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Options-for-memory"
+
+\end_inset
+
+Options for memory layout of a 2-dimensional array.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+In the C-style of
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional indexing shown on the left of Figure
+\begin_inset LatexCommand ref
+reference "cap:Options-for-memory"
+
+\end_inset
+
+ the last
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index
+\begin_inset Quotes eld
+\end_inset
+
+varies the fastest.
+\begin_inset Quotes erd
+\end_inset
+
+ In other words, to move through computer memory sequentially, the last
+ index is incremented first, followed by the second-to-last index and so
+ forth.
+ Some of the algorithms in NumPy that deal with
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional arrays work best with this kind of data.
+
+\end_layout
+
+\begin_layout Standard
+In the Fortran-style of
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional indexing shown on the right of Figure
+\begin_inset LatexCommand ref
+reference "cap:Options-for-memory"
+
+\end_inset
+
+, the first
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index
+\begin_inset Quotes eld
+\end_inset
+
+varies the fastest.
+\begin_inset Quotes erd
+\end_inset
+
+ Thus, to move through computer memory sequentially, the first index is
+ incremented first until it reaches the limit in that dimension, then the
+ second index is incremented and the first index is reset to zero.
+ While NumPy can be compiled without the use of a Fortran compiler, several
+ modules of SciPy (available separately) rely on underlying algorithms written
+ in Fortran.
+ Algorithms that work on
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional arrays that are written in Fortran typically expect Fortran-style
+ arrays.
+
+\end_layout
+
+\begin_layout Standard
+The two-styles of memory layout for arrays are connected through the transpose
+ operation.
+ Thus, if
+\begin_inset Formula $A$
+\end_inset
+
+ is a (contiguous) C-style array, then the same block of memory can be used
+ to represent
+\begin_inset Formula $A^{T}$
+\end_inset
+
+ as a (contiguous) Fortran-style array.
+ This kind of understanding can be useful when trying to optimize the wrapping
+ of Fortran subroutines, or if a more detailed understanding of how to write
+ algorithms for generally-indexed arrays is desired.
+ But, fortunately, the casual user who does not care if an array is copied
+ occasionally to get it into the right orientation needed for a particular
+ algorithm can forget about how the array is stored in memory and just visualize
+ it as an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array (that is, after all, the whole point of creating the
+
+\family typewriter
+ndarray
+\family default
+ object in the first place).
+
+\end_layout
+
+\begin_layout Subsection
+Non-contiguous memory layout
+\end_layout
+
+\begin_layout Standard
+Both of the examples presented above are
+\emph on
+single-segment
+\begin_inset LatexCommand index
+name "single-segment"
+
+\end_inset
+
+
+\emph default
+ arrays where the entire array is visited by sequentially marching through
+ memory one element at a time.
+ When an algorithm in C or Fortran expects an N-dimensional array, this
+ single segment (of a certain fundamental type) is usually what is expected
+ along with the shape
+\begin_inset Formula $N$
+\end_inset
+
+-tuple.
+ With a single-segment of memory representing the array, the one-dimensional
+ index into computer memory can always be computed from the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index.
+ This concept is explored further in the following paragraphs.
+\end_layout
+
+\begin_layout Standard
+Let
+\begin_inset Formula $n_{i}$
+\end_inset
+
+ be the value of the
+\begin_inset Formula $i^{\textrm{th}}$
+\end_inset
+
+ index into an array whose shape is represented by the
+\begin_inset Formula $N$
+\end_inset
+
+ integers
+\begin_inset Formula $d_{i}$
+\end_inset
+
+ (
+\begin_inset Formula $i=0\ldots N-1).$
+\end_inset
+
+ Then, the one-dimensional index into a C-style contiguous array is
+\begin_inset Formula \[
+n^{C}=\sum_{i=0}^{N-1}n_{i}\prod_{j=i+1}^{N-1}d_{j}\]
+
+\end_inset
+
+ while the one-dimensional index into a Fortran-style contiguous array is
+
+\begin_inset Formula \[
+n^{F}=\sum_{i=0}^{N-1}n_{i}\prod_{j=0}^{i-1}d_{j}.\]
+
+\end_inset
+
+ In these formulas we are assuming that
+\begin_inset Formula \[
+\prod_{j=k}^{m}d_{j}=d_{k}d_{k+1}\cdots d_{m-1}d_{m}\]
+
+\end_inset
+
+so that if
+\begin_inset Formula $m<k,$
+\end_inset
+
+ the product is
+\begin_inset Formula $1.$
+\end_inset
+
+ While perfectly general, these formulas may be a bit confusing at first
+ glimpse.
+ Let's see how they expand out for determining the one-dimensional index
+ corresponding to the element
+\begin_inset Formula $\left(1,3,2\right)$
+\end_inset
+
+ of a
+\begin_inset Formula $4\times5\times6$
+\end_inset
+
+ array.
+ If the array is stored as Fortran contiguous, then
+\begin_inset Formula \begin{eqnarray*}
+n^{F} & = & n_{0}\cdot\left(1\right)+n_{1}\cdot(4)+n_{2}\cdot\left(4\cdot5\right)\\
+ & = & 1+3\cdot4+2\cdot20=53.\end{eqnarray*}
+
+\end_inset
+
+ On the other hand, if the array is stored as C contiguous, then
+\begin_inset Formula \begin{eqnarray*}
+n^{C} & = & n_{0}\cdot\left(5\cdot6\right)+n_{1}\cdot\left(6\right)+n_{2}\cdot\left(1\right)\\
+ & = & 1\cdot30+3\cdot6+2\cdot1=50.\end{eqnarray*}
+
+\end_inset
+
+ The general pattern should be more clear from these examples.
+
+\end_layout
+
+\begin_layout Standard
+The formulas for the one-dimensional index of the N-dimensional arrays reveal
+ what results in an important generalization for memory layout.
+ Notice that each formula can be written as
+\begin_inset Formula \[
+n^{X}=\sum_{i=0}^{N-1}n_{i}s_{i}^{X}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $s_{i}^{X}$
+\end_inset
+
+ gives the
+\emph on
+stride
+\begin_inset LatexCommand index
+name "stride"
+
+\end_inset
+
+
+\emph default
+ for dimension
+\begin_inset Formula $i$
+\end_inset
+
+.
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+Our definition of stride here is an element-based stride, while the strides
+ attribute returns a byte-based stride.
+ The byte-based stride is the element itemsize multiplied by the element-based
+ stride.
+\end_layout
+
+\end_inset
+
+ Thus, for C and Fortran contiguous arrays respectively we have
+\begin_inset Formula \begin{eqnarray*}
+s_{i}^{C} & = & \prod_{j=i+1}^{N-1}d_{j}=d_{i+1}d_{i+2}\cdots d_{N-1},\\
+s_{i}^{F} & = & \prod_{j=0}^{i-1}d_{j}=d_{0}d_{1}\cdots d_{i-1}.\end{eqnarray*}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The stride is how many elements in the underlying one-dimensional layout
+ of the array one must jump in order to get to the next array element of
+ a specific dimension in the N-dimensional layout.
+ Thus, in a C-style
+\begin_inset Formula $4\times5\times6$
+\end_inset
+
+ array one must jump over 30 elements to increment the first index by one,
+ so 30 is the stride for the first dimension (
+\begin_inset Formula $s_{0}^{C}=30$
+\end_inset
+
+).
+ If, for each array, we define a strides tuple with
+\begin_inset Formula $N$
+\end_inset
+
+ integers, then we have pre-computed and stored an important piece of how
+ to map the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index to the one-dimensional one used by the computer.
+
+\end_layout
+
+\begin_layout Standard
+In addition to providing a pre-computed table for index mapping, by allowing
+ the strides tuple to consist of arbitrary integers we have provided a more
+ general layout for the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array.
+ As long as we always use the stride information to move around in the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array, we can use any convenient layout we wish for the underlying
+ representation as long as it is regular enough to be defined by constant
+ jumps in each dimension.
+ The
+\family typewriter
+ndarray
+\family default
+ object of NumPy uses this stride information and therefore the underlying
+ memory of an
+\family typewriter
+ndarray
+\family default
+ can be laid out dis-contiguously.
+
+\end_layout
+
+\begin_layout Note
+Several algorithms in NumPy work on arbitrarily strided arrays.
+ However, some algorithms require single-segment arrays.
+ When an irregularly strided array is passed in to such algorithms, a copy
+ is automatically made.
+
+\end_layout
+
+\begin_layout Standard
+An important situation where irregularly strided arrays occur is array indexing.
+ Consider again Figure
+\begin_inset LatexCommand ref
+reference "cap:Options-for-memory"
+
+\end_inset
+
+.
+ In that figure a high-lighted sub-array is shown.
+ Define
+\begin_inset Formula $C$
+\end_inset
+
+ to be the
+\begin_inset Formula $4\times3$
+\end_inset
+
+ C contiguous array and
+\begin_inset Formula $F$
+\end_inset
+
+ to be the
+\begin_inset Formula $3\times4$
+\end_inset
+
+ Fortran contiguous array.
+ The highlighted areas can be written respectively as
+\begin_inset Formula $C$
+\end_inset
+
+[1:3,1:3] and
+\begin_inset Formula $F$
+\end_inset
+
+[1:3,1:3].
+ As evidenced by the corresponding highlighted region in the one-dimensional
+ view of the memory, these sub-arrays are neither C contiguous nor Fortran
+ contiguous.
+ However, they can still be represented by an
+\family typewriter
+ndarray
+\family default
+ object using the same striding tuple as the original array used.
+ Therefore, a regular indexing expression on an
+\family typewriter
+ndarray
+\family default
+ can always produce an
+\family typewriter
+ndarray
+\family default
+ object
+\emph on
+without
+\emph default
+ copying any data.
+ This is sometimes referred to as the
+\begin_inset Quotes eld
+\end_inset
+
+view
+\begin_inset Quotes erd
+\end_inset
+
+ feature of array indexing, and one can see that it is enabled by the use
+ of striding information in the underlying
+\family typewriter
+ndarray
+\family default
+ object.
+ The greatest benefit of this feature is that it allows indexing to be done
+ very rapidly and without exploding memory usage (because no copies of the
+ data are made).
+\end_layout
+
+\begin_layout Section
+Universal Functions for arrays
+\end_layout
+
+\begin_layout Standard
+NumPy provides a wealth of mathematical functions that operate on then ndarray
+ object.
+ From algebraic functions such as addition and multiplication to trigonometric
+ functions such as
+\begin_inset Formula $\sin,$
+\end_inset
+
+ and
+\begin_inset Formula $\cos$
+\end_inset
+
+.
+ Each universal function
+\begin_inset LatexCommand index
+name "universal function"
+
+\end_inset
+
+ (
+\family typewriter
+ufunc
+\family default
+
+\begin_inset LatexCommand index
+name "ufunc"
+
+\end_inset
+
+) is an instance of a general class so that function behavior is the same.
+ All ufuncs perform element-by-element operations over an array or a set
+ of arrays (for multi-input functions).
+ The ufuncs themselves and their methods are documented in Part
+\begin_inset LatexCommand ref
+reference "par:The-Ufunc-Object"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Standard
+One important aspect of ufunc behavior that should be introduced early,
+ however, is the idea of
+\emph on
+
+\begin_inset LatexCommand index
+name "broadcasting"
+
+\end_inset
+
+broadcasting
+\emph default
+.
+ Broadcasting is used in several places throughout NumPy and is therefore
+ worth early exposure.
+ To understand the idea of broadcasting, you first have to be conscious
+ of the fact that all ufuncs are always element-by-element operations.
+ In other words, suppose we have a ufunc with two inputs and one output
+ (
+\emph on
+e.g.
+
+\emph default
+ addition) and the inputs are both arrays of shape
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+.
+ Then, the output is going to be
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+, and will be the result of applying the underlying function (
+\emph on
+e.g.
+
+\emph default
+
+\begin_inset Formula $+$
+\end_inset
+
+) to each pair of inputs to produce the output at the corresponding
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional location.
+
+\end_layout
+
+\begin_layout Standard
+Broadcasting allows ufuncs to deal in a meaningful way with inputs that
+ do not have exactly the same shape.
+ In particular, the first rule of broadcasting is that if all input arrays
+ do not have the same number of dimensions, then a
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Formula $1$
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+ will be repeatedly pre-pended to the shapes of the smaller arrays until
+ all the arrays have the same number of dimensions.
+ The second rule of broadcasting ensures that arrays with a size of 1 along
+ a particular dimension act as if they had the size of the array with the
+ largest shape along that dimension.
+ The value of the array element is assumed to be the same along that dimension
+ for the
+\begin_inset Quotes eld
+\end_inset
+
+broadcasted
+\begin_inset Quotes erd
+\end_inset
+
+ array.
+ After application of the broadcasting rules, the sizes of all arrays must
+ match.
+\end_layout
+
+\begin_layout Standard
+While a little tedious to explain, the broadcasting rules are easy to pick
+ up by looking at a couple of examples.
+ Suppose there is a
+\family typewriter
+ufunc
+\family default
+ with two inputs,
+\begin_inset Formula $A$
+\end_inset
+
+ and
+\begin_inset Formula $B$
+\end_inset
+
+.
+ Now supposed that
+\begin_inset Formula $A$
+\end_inset
+
+ has shape
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+ while
+\begin_inset Formula $B$
+\end_inset
+
+ has shape
+\begin_inset Formula $4\times6\times1$
+\end_inset
+
+.
+ The ufunc will proceed to compute the
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+ output as if
+\begin_inset Formula $B$
+\end_inset
+
+ had been
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+ by assuming that
+\begin_inset Formula $B[...,k]=B[...,0]$
+\end_inset
+
+ for
+\begin_inset Formula $k=1,2,3,4$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Standard
+Another example illustrates the idea of adding
+\begin_inset Formula $1$
+\end_inset
+
+'s to the beginning of the array shape-tuple.
+ Suppose
+\begin_inset Formula $A$
+\end_inset
+
+ is the same as above, but
+\begin_inset Formula $B$
+\end_inset
+
+ is a length
+\begin_inset Formula $5$
+\end_inset
+
+ array.
+ Because of the first rule,
+\begin_inset Formula $B$
+\end_inset
+
+ will be interpreted as a
+\begin_inset Formula $1\times1\times5$
+\end_inset
+
+ array, and then because of the second rule
+\begin_inset Formula $B$
+\end_inset
+
+ will be interpreted as a
+\begin_inset Formula $4\times6\times5$
+\end_inset
+
+ array by repeating the elements of
+\begin_inset Formula $B$
+\end_inset
+
+ in the obvious way.
+
+\end_layout
+
+\begin_layout Standard
+The most common alteration needed is to route-around the automatic pre-pending
+ of 1's to the shape of the array.
+ If it is desired, to add
+\begin_inset Formula $1$
+\end_inset
+
+'s to the end of the array shape, then dimensions can always be added using
+ the
+\family typewriter
+newaxis
+\family default
+ name in NumPy:
+\begin_inset Formula $B[...,\textrm{newaxis, newaxis}]$
+\end_inset
+
+ returns an array with 2 additional 1's appended to the shape of
+\begin_inset Formula $B.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+One important aspect of broadcasting is the calculation of functions on
+ regularly spaced grids.
+ For example, suppose it is desired to show a portion of the multiplication
+ table by computing the function
+\begin_inset Formula $a*b$
+\end_inset
+
+ on a grid with
+\begin_inset Formula $a$
+\end_inset
+
+ running from 6 to 9 and
+\begin_inset Formula $b$
+\end_inset
+
+ running from 12 to 16.
+ The following code illustrates how this could be done using ufuncs and
+ broadcasting.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a = arange(6, 10); print a
+\newline
+[6 7 8 9]
+\newline
+>>> b = arange(12, 17); print b
+\newline
+[12
+ 13 14 15 16]
+\newline
+>>> table = a[:,newaxis] * b
+\newline
+>>> print table
+\newline
+[[ 72 78 84 90
+ 96]
+\newline
+ [ 84 91 98 105 112]
+\newline
+ [ 96 104 112 120 128]
+\newline
+ [108 117 126 135 144]]
+\end_layout
+
+\begin_layout Section
+Summary of new features
+\end_layout
+
+\begin_layout Standard
+More information about using arrays in Python can be found in the old Numeric
+ documentation at
+\begin_inset LatexCommand htmlurl
+name "http://numeric.scipy.org"
+target "http://numeric.scipy.org"
+
+\end_inset
+
+.
+ Quite a bit of that documentation is still accurate, especially in the
+ discussion of array basics.
+ There are significant differences, however, and this book seeks to explain
+ them in detail.
+ The following list tries to summarize the significant new features (over
+ Numeric) available in the
+\family typewriter
+ndarray
+\family default
+ and
+\family typewriter
+ufunc
+\family default
+ objects of NumPy:
+\end_layout
+
+\begin_layout Enumerate
+more data types (all standard C-data types plus complex floats, Boolean,
+ string, unicode, and void *);
+\end_layout
+
+\begin_layout Enumerate
+flexible data types where each array can have a different itemsize (but
+ all elements of the same array still have the same itemsize);
+\end_layout
+
+\begin_layout Enumerate
+there is a true Python scalar type (contained in a hierarchy of types) for
+ every data-type an array can have;
+\end_layout
+
+\begin_layout Enumerate
+data-type objects define the data-type with support for data-type objects
+ with fields and subarrays which allow record arrays with nested records;
+\end_layout
+
+\begin_layout Enumerate
+many more array methods in addition to functional counterparts;
+\end_layout
+
+\begin_layout Enumerate
+attributes more clearly distinguished from methods (attributes are intrinsic
+ parts of an array so that setting them changes the array itself);
+\end_layout
+
+\begin_layout Enumerate
+array scalars covering all data types which inherit from Python scalars
+ when appropriate;
+\end_layout
+
+\begin_layout Enumerate
+arrays can be misaligned, swapped, and in Fortran order in memory (facilitates
+ memory-mapped arrays);
+\end_layout
+
+\begin_layout Enumerate
+arrays can be more easily read from text files and created from buffers
+ and iterators;
+\end_layout
+
+\begin_layout Enumerate
+arrays can be quickly written to files in text and/or binary mode;
+\end_layout
+
+\begin_layout Enumerate
+arrays support the removal of the 64-bit memory limitation as long as you
+ have Python 2.5 or later;
+\end_layout
+
+\begin_layout Enumerate
+fancy indexing can be done on arrays using integer sequences and Boolean
+ masks;
+\end_layout
+
+\begin_layout Enumerate
+coercion rules are altered for mixed scalar / array operations so that scalars
+ (anything that produces a 0-dimensional array internally) will not determine
+ the output type in such cases.
+\end_layout
+
+\begin_layout Enumerate
+when coercion is needed, temporary buffer-memory allocation is limited to
+ a user-adjustable size;
+\end_layout
+
+\begin_layout Enumerate
+errors are handled through the IEEE floating point status flags and there
+ is flexibility on a per-thread level for handling these errors;
+\end_layout
+
+\begin_layout Enumerate
+one can register an error callback function in Python to handle errors are
+ set to 'call' for their error handling;
+\end_layout
+
+\begin_layout Enumerate
+ufunc reduce, accumulate, and reduceat can take place using a different
+ type then the array type if desired (without copying the entire array);
+\end_layout
+
+\begin_layout Enumerate
+ufunc output arrays passed in can be a different type than expected from
+ the calculation;
+\end_layout
+
+\begin_layout Enumerate
+ufuncs take keyword arguments which can specify 1) the error handling explicitly
+ and 2) the specific 1-d loop to use by-passing the type-coercion detection.
+
+\end_layout
+
+\begin_layout Enumerate
+arbitrary classes can be passed through ufuncs (__array_wrap__ and __array_prior
+ity__ expand previous __array__ method);
+\end_layout
+
+\begin_layout Enumerate
+ufuncs can be easily created from Python functions;
+\end_layout
+
+\begin_layout Enumerate
+ufuncs have attributes to detail their behavior, including a dynamic doc
+ string that automatically generates the calling signature;
+\end_layout
+
+\begin_layout Enumerate
+several new ufuncs (frexp, modf, ldexp, isnan, isfinite, isinf, signbit);
+\end_layout
+
+\begin_layout Enumerate
+new types can be registered with the system so that specialized ufunc loops
+ can be written over new type objects;
+\end_layout
+
+\begin_layout Enumerate
+new types can also register casting functions and rules for fitting into
+ the
+\begin_inset Quotes eld
+\end_inset
+
+can-cast
+\begin_inset Quotes erd
+\end_inset
+
+ hierarchy;
+\end_layout
+
+\begin_layout Enumerate
+C-API enhanced so that more of the functionality is available from compiled
+ code;
+\end_layout
+
+\begin_layout Enumerate
+C-API enhanced so array structure access can take place through macros;
+\end_layout
+
+\begin_layout Enumerate
+new iterator objects created for easy handling in C of non-contiguous arrays;
+\end_layout
+
+\begin_layout Enumerate
+new multi-iterator object created for easy handling in C of broadcasting;
+\end_layout
+
+\begin_layout Enumerate
+types have more functions associated with them (no magic function lists
+ in the C-code).
+ Any function needed is part of the type structure.
+\end_layout
+
+\begin_layout Standard
+All of these enhancements will be documented more thoroughly in the remaining
+ portions of this book.
+\end_layout
+
+\begin_layout Section
+Summary of differences with Numeric
+\end_layout
+
+\begin_layout Standard
+An effort was made to retain backwards compatibility with Numeric all the
+ way to the C-level.
+ This was mostly accomplished, with a few changes that needed to be made
+ for consistency of the new system.
+ If you are just starting out with NumPy, then this section may be skipped.
+\end_layout
+
+\begin_layout Standard
+There are two steps (one required and one optional) to converting code that
+ works with Numeric to work fully with NumPy The first step uses a compatibility
+ layer and requires only small changes which can be handled by the numpy.oldnumer
+ic.alter_code1 module.
+ Code written to the compatibility layer will work and be supported.
+ The purpose of the compatibility layer is to make it easy to convert to
+ NumPy and many codes may only take this first step and work fine with NumPy.
+ The second step is optional as it removes dependency on the compatibility
+ layer and therefore requires a few more extensive changes.
+ Many of these changes can be performed by the numpy.oldnumeric.alter_code2
+ module, but you may still need to do some final tweaking by hand.
+ Because many users will probably be content to only use the first step,
+ the alter_code2 module for second-stage migration may not be as complete
+ as it otherwise could be.
+
+\end_layout
+
+\begin_layout Subsection
+First-step changes
+\end_layout
+
+\begin_layout Standard
+In order to use the compatibility layer there are still a few changes that
+ need to be made to your code.
+ Many of these changes can be made by running the alter_code1 module with
+ your code as input.
+
+\end_layout
+
+\begin_layout Enumerate
+Importing (the alter_code1 module handles all these changes)
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+import Numeric --> import numpy.oldnumeric as Numeric
+\end_layout
+
+\begin_layout Enumerate
+import Numeric as XX --> import numpy.oldnumeric as XX
+\end_layout
+
+\begin_layout Enumerate
+from Numeric import <name1>,...<nameN> --> from numpy.oldnumeric import <name1>,...,<na
+meN>
+\end_layout
+
+\begin_layout Enumerate
+from Numeric import * --> from numpy.oldnumeric import *
+\end_layout
+
+\begin_layout Enumerate
+Similar name changes need to be made for Matrix, MLab, UserArray, LinearAlgebra,
+ RandomArray RNG, RNG.Statistics, and FFT.
+ The new names are numpy.oldnumeric.<pkg> where <pkg> is matrix, mlab, user_array,
+ linear_algebra, random_array, rng, rng_stats, and fft.
+
+\end_layout
+
+\begin_layout Enumerate
+multiarray and umath (if you used them directly) are now numpy.core.multiarray
+ and numpy.core.umath, but it is more future proof to replace usages of these
+ internal modules with numpy.oldnumeric.
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Method name changes and methods converted to attributes.
+ The alter_code1 module handles all these changes.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.typecode() -->
+\emph on
+arr
+\emph default
+.dtype.char
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.iscontiguous() -->
+\emph on
+arr
+\emph default
+.flags.contiguous
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.byteswapped() -->
+\emph on
+arr
+\emph default
+.byteswap()
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.toscalar() -->
+\emph on
+arr
+\emph default
+.item()
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.itemsize() -->
+\emph on
+arr
+\emph default
+.itemsize
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.spacesaver() eliminated
+\end_layout
+
+\begin_layout Enumerate
+
+\emph on
+arr
+\emph default
+.savespace() eliminated
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Some of the typecode characters have changed to be more consistent with
+ other Python modules (array and struct).
+ You should only notice this change if you used the actual typecode characters
+ (instead of the named constants).
+
+\newline
+The alter_code1 module will change uses of 'b' to 'B' for internal Numeric
+ functions that it knows about because NumPy will interpret 'b' to mean
+ a signed byte type (instead of the old unsigned).
+ It will also change the character codes when they are used explicitly in
+ the .astype method.
+ In the compatibility layer (and only in the compatibility layer), typecode-requ
+iring function calls (
+\emph on
+e.g.
+
+\emph default
+ zeros, array) understand the old typecode characters.
+
+\newline
+The changes are (Numeric --> NumPy):
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+'b' --> 'B'
+\end_layout
+
+\begin_layout Enumerate
+'1' --> 'b'
+\end_layout
+
+\begin_layout Enumerate
+'s' --> 'h'
+\end_layout
+
+\begin_layout Enumerate
+'w' --> 'H'
+\end_layout
+
+\begin_layout Enumerate
+'u' --> 'I'
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+
+\emph on
+arr.
+\emph default
+flat now returns an indexable 1-D iterator.
+ This behaves correctly when passed to a function, but if you expected methods
+ or attributes on
+\emph on
+arr.
+\emph default
+flat --- besides .copy() --- then you will need to replace
+\emph on
+arr
+\emph default
+.flat with
+\emph on
+arr.
+\emph default
+ravel() (copies only when necessary) or
+\emph on
+arr.
+\emph default
+flatten() (always copies).
+ The alter_code1 module will change
+\emph on
+arr
+\emph default
+.flat to
+\emph on
+arr
+\emph default
+.ravel() unless you used the construct
+\emph on
+arr
+\emph default
+.flat = obj or
+\emph on
+arr
+\emph default
+.flat[ind].
+\end_layout
+
+\begin_layout Enumerate
+If you used type-equality testing on the objects returned from arrays, then
+ you need to change this to isinstance testing.
+ Thus type(a[0]) is float or type(a[0]) == float should be changed to isinstance
+(a[0], float).
+ This is because array scalar objects are now returned from arrays.
+ These inherit from the Python scalars where they can, but define their
+ own methods and attributes.
+ This conversion is done by alter_code1 for the types (float, int, complex,
+ and ArrayType)
+\end_layout
+
+\begin_layout Enumerate
+If your code should produce 0-d arrays.
+ These no-longer have a length as they should be interpreted similarly to
+ real scalars which don't have a length.
+
+\end_layout
+
+\begin_layout Enumerate
+Arrays cannot be tested for truth value unless they are empty (returns False)
+ or have only one element.
+ This means that if Z: where Z is an array will fail (unless Z is empty
+ or has only one element).
+ Also the 'and' and 'or' operations (which test for object truth value)
+ will also fail on arrays of more than one element.
+ Use the .any() and .all() methods to test for truth value of an array.
+
+\end_layout
+
+\begin_layout Enumerate
+Masked arrays return a special nomask object instead of None when there
+ is no mask on the array for the functions getmask and attribute access
+
+\emph on
+arr
+\emph default
+.mask
+\end_layout
+
+\begin_layout Enumerate
+Masked array functions have a default axis of None (meaning ravel), make
+ sure to specify an axis if your masked arrays are larger than 1-d.
+
+\end_layout
+
+\begin_layout Enumerate
+If you used the construct
+\family typewriter
+arr.shape=<tuple>
+\family default
+, this will not work for array scalars (which can be returned from array
+ operations).
+ You cannot set the shape of an array-scalar (you can read it though).
+ As a result, for more general code you should use
+\family typewriter
+arr=arr.reshape(<tuple>)
+\family default
+ which works for both array-scalars and arrays.
+
+\end_layout
+
+\begin_layout Standard
+The alter_code1 script should handle the changes outlined in steps 1-5 above.
+ The final incompatibilities in 6-9 are less common and must be modified
+ by hand if necessary.
+
+\end_layout
+
+\begin_layout Subsection
+Second-step changes
+\end_layout
+
+\begin_layout Standard
+During the second phase of migration (should it be necessary) the compatibility
+ layer is dropped.
+ This phase requires additional changes to your code.
+ There is another conversion module (alter_code2) which can help but it
+ is not complete.
+ The changes required to drop dependency on the compatibility layer are
+\end_layout
+
+\begin_layout Enumerate
+Importing
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+numpy.oldnumeric --> numpy
+\end_layout
+
+\begin_layout Enumerate
+from numpy.oldnumeric import * --> from numpy import * (this may clobber
+ more names and therefore require further fixes to your code but then you
+ didn't do this regularly anyway did you).
+ The recommended procedure if this replacement causes problems is to fix
+ the use of from numpy.oldnumeric import * to extract only the required names
+ and then continue.
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.mlab --> None, the functions come from other places.
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.linear_algebra --> numpy.lilnalg with name changes to the
+ functions (made lower case and shorter).
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.random_array --> numpy.random with some name changes to the
+ functions.
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeic.fft --> numpy.fft with some name changes to the functions.
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.rng --> None
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.rng_stats --> None
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.user_array --> numpy.lib.user_array
+\end_layout
+
+\begin_layout Enumerate
+numpy.oldnumeric.matrix --> numpy
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+The typecode names are all lower-case and refer to type-objects corresponding
+ to array scalars.
+ The character codes are understood by array-creation functions but are
+ not given names.
+ All named type constants should be replaced with their lower-case equivalents.
+ Also, the old character codes '1', 's', 'w', and 'u' are not understood
+ as data-types.
+ It is probably easiest to manually replace these with Int8, Int16, UInt16,
+ and UInt32 and let the alter_code2 script convert the names to lower-case
+ typeobjects.
+
+\end_layout
+
+\begin_layout Enumerate
+Keyword and argument changes
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+All
+\family typewriter
+typecode=
+\family default
+ keywords must be changed to
+\family typewriter
+dtype=
+\family default
+.
+
+\end_layout
+
+\begin_layout Enumerate
+The
+\family typewriter
+savespace
+\family default
+ keyword argument has been removed from all functions where it was present
+ (array, sarray, asarray, ones, and zeros).
+ The sarray function is equivalent to asarray.
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+The default data-type in NumPy is float unlike in Numeric (and numpy.oldnumeric)
+ where it was int.
+ There are several functions affected by this so that if your code was relying
+ on the default data-type, then it must be changed to explicitly add dtype=int.
+\end_layout
+
+\begin_layout Enumerate
+The nonzero function in NumPy returns a tuple of index arrays just like
+ the corresponding method.
+ There is a flatnonzero function that first ravels the array and then returns
+ a single index array.
+ This function should be interchangeable with the old use of nonzero.
+
+\end_layout
+
+\begin_layout Enumerate
+The default axis is None (instead of 0) to match the methods for the functions
+ take, repeat, sum, average, product, sometrue, alltrue, cumsum, and cumproduct
+ (from Numeric) and also for the functions average, max, min, ptp, prod,
+ std, and mean (from MLab).
+\end_layout
+
+\begin_layout Enumerate
+The default axis is None (instead of -1) to match the methods for the functions
+ argmin, argmax, compress
+\end_layout
+
+\begin_layout Subsection
+Updating code that uses Numeric using alter_codeN
+\end_layout
+
+\begin_layout Standard
+Despite the long list of changes that might be needed given above, it is
+ likely that your code does not use any of the incompatible corners and
+ it should not be too difficult to convert from Numeric to NumPy.
+ For example all of SciPy was converted in about 2-3 days.
+ The needed changes are largely search-and replace type changes, and the
+ alter_codeN modules can help.
+ The modules have two functions which help the process:
+\end_layout
+
+\begin_layout Description
+convertfile (filename, orig=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert the file with the given filename to use NumPy.
+ If orig is True, then a backup is first made and given the name filename.orig.
+ Then, the file is converted and the updated code written over the top of
+ the old file.
+
+\end_layout
+
+\begin_layout Description
+convertall (direc=os.path.curdir, orig=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Converts all the
+\begin_inset Quotes eld
+\end_inset
+
+.py
+\begin_inset Quotes erd
+\end_inset
+
+ files in the given directory to use NumPy.
+ Backups of all the files are first made if orig is True as explained for
+ the convertfile function.
+
+\end_layout
+
+\begin_layout Description
+convertsrc (direc=os.path.curdir, ext=None, orig=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Replace
+\family typewriter
+''Numeric/arrayobject.h
+\begin_inset Quotes erd
+\end_inset
+
+
+\family default
+ with
+\family typewriter
+''numpy/oldnumeric.h
+\begin_inset Quotes erd
+\end_inset
+
+
+\family default
+ in all files ending in the list of extensions given by ext (if ext is None,
+ then all files are updated).
+ If orig is True, then first make a backup file with
+\begin_inset Quotes eld
+\end_inset
+
+.orig
+\begin_inset Quotes erd
+\end_inset
+
+ as the extension.
+\end_layout
+
+\begin_layout Description
+converttree (direc=os.path.curdir)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Walks the tree pointed to by direc and converts all
+\begin_inset Quotes eld
+\end_inset
+
+.py
+\begin_inset Quotes erd
+\end_inset
+
+ modules in each sub-directory to use NumPy.
+ No backups of the files are made.
+ Also, converts all .h and .c files to replace
+\family typewriter
+''Numeric/arrayobject.h
+\begin_inset Quotes erd
+\end_inset
+
+
+\family default
+ with
+\family typewriter
+''numpy/oldnumeric.h
+\begin_inset Quotes erd
+\end_inset
+
+
+\family default
+ so that NumPy is used.
+
+\end_layout
+
+\begin_layout Subsection
+Changes to think about
+\end_layout
+
+\begin_layout Standard
+Even if you don't make changes to your old code.
+ If you are used to coding in Numeric, then you may need to adjust your
+ coding style a bit.
+ This list provides some helpful things to remember.
+
+\end_layout
+
+\begin_layout Enumerate
+Switch from using typecode characters to bitwidth type names or c-type names
+
+\end_layout
+
+\begin_layout Enumerate
+Convert use of uppercase type-names Int32, Float, etc., to lower case int32,
+ float, etc.
+\end_layout
+
+\begin_layout Enumerate
+Convert use of functions to method calls where appropriate but explicitly
+ specify any axis arguments for arrays greater than 1-d.
+
+\end_layout
+
+\begin_layout Enumerate
+The names for standard computations like Fourier transforms, linear algebra,
+ and random-number generation have changed to conform to the standard of
+ lower-case names possibly separated by an underscore.
+\end_layout
+
+\begin_layout Enumerate
+Look for ways to take advantage of advanced slicing, but remember it always
+ returns a copy and may be slower at times.
+\end_layout
+
+\begin_layout Enumerate
+Remove any kludges you inserted to eliminate problems with Numeric that
+ are now gone.
+
+\end_layout
+
+\begin_layout Enumerate
+Look for ways to take advantage of new features like expanded data-types
+ (record-arrays).
+
+\end_layout
+
+\begin_layout Enumerate
+See if you can inherit from the ndarray directly, rather than using user_array.co
+ntainer (UserArray).
+ However, if you were using UserArray in a multiple-inheritance hierarchy
+ this is going to be more difficult and you can continue to use the standard
+ container class in user_array (but notice the name change).
+
+\end_layout
+
+\begin_layout Enumerate
+Watch your usage of scalars extracted from arrays.
+ Treating Numeric arrays like lists and then doing math on the elements
+ 1 by 1 was always about 2x slower than using real lists in Python.
+ This can now be 3x-6x slower than using lists in NumPy because of the increased
+ complexity of both the indexing of ndarrays and the math of array scalars.
+ If you must select individual scalars from NumPy, you can get some speed
+ increases by using the item method to get a standard Python scalar from
+ an N-d array and by using the itemset method to place a scalar into a particula
+r location in the N-d array.
+ This complicates the appearance of the code, however.
+ Also, when using these methods inside a loop, be sure to assign the methods
+ to a local variable to avoid the attribute look-up at each loop iteration.
+
+\end_layout
+
+\begin_layout Standard
+Throughout this book, warnings are inserted when compatibility issues with
+ old Numeric are raised.
+ While you may not need to make any changes to get code to run with the
+ ndarray object, you will likely want to make changes to take advantage
+ of the new features of NumPy.
+ If you get into a jam during the conversion process, you should be aware
+ that Numeric and NumPy can both be used together and they will not interfere
+ with each other.
+ In addition, if you have Numeric 24.0 or newer, they can even share the
+ same memory.
+ This makes it easy to use NumPy as well as third-party tools that have
+ not made the switch from Numeric yet.
+\end_layout
+
+\begin_layout Section
+Summary of differences with Numarray
+\end_layout
+
+\begin_layout Standard
+Conversion from Numarray can also be relatively painless, depending on how
+ dependent your code is on the specific structure of the Numarray ufuncs,
+ cfuncs, and various array-like objects.
+ The internals of Numarray can be quite different and so depending on how
+ intimately you used those internals adapting to NumPy can be more or less
+ difficult.
+ C-code that used the Numarray C-API can be easily adapted because NumPy
+ includes a Numarray-compatible C-API module.
+ All you need to do is replace usage of
+\begin_inset Quotes eld
+\end_inset
+
+numarray/libnumarray.h
+\begin_inset Quotes erd
+\end_inset
+
+ with
+\begin_inset Quotes eld
+\end_inset
+
+numpy/libnumarray.h
+\begin_inset Quotes erd
+\end_inset
+
+ and be sure the directory returned from the Python command numpy.get_numarray_in
+clude() is included in the list of directories used for compilation.
+\end_layout
+
+\begin_layout Standard
+On the Python-side the largest number of differences are in the methods
+ and attributes of the array and the way array data-types are represented.
+ In addition, arrays containing Python Objects, strings, and records are
+ an integral part of the array object and not handled using a separate class
+ (although enhanced separate classes do exist for the case of character
+ arrays and record arrays).
+
+\end_layout
+
+\begin_layout Standard
+As is the case with Numeric, there is a two-step process available for migrating
+ code written for Numarray to work with NumPy.
+ This process involves running functions in the modules alter_code1 and
+ alter_code2 located in the numarray sub-package of NumPy.
+ These modules have interfaces identical to the ones that convert Numeric
+ code, but they work to convert code written for numarray.
+ The first module will convert your code to use the numarray compatibility
+ module (numpy.numarray), while the second will try and help convert code
+ to move away from dependency on the compatibility module.
+ Because many users will probably be content to only use the first step,
+ the alter_code2 module for second-stage migration may not be as complete
+ as it otherwise could be.
+
+\end_layout
+
+\begin_layout Standard
+Also, the alter_code1 module is not guaranteed to convert every piece of
+ working numarray code to use NumPy.
+ If your code relied on the internal module structure of numarray or on
+ how the class hierarchy was laid out, then it will need to be changed manually
+ to run with NumPy.
+ Of course you can still use your code with Numarray installed side-by-side
+ and the two array objects should be able to exchange data without copying.
+
+\end_layout
+
+\begin_layout Subsection
+First-step changes
+\end_layout
+
+\begin_layout Standard
+The alter_code1 script makes the following import and attribute/method changes
+\end_layout
+
+\begin_layout Subsubsection
+Import changes
+\end_layout
+
+\begin_layout Itemize
+import numarray --> import numpy.numarray as numarray
+\end_layout
+
+\begin_layout Itemize
+import numarray.package --> import numpy.numarray.package as numarray_package
+ with all usages of numarray.package in the code replaced by numarray_package
+\end_layout
+
+\begin_layout Itemize
+import numarray as <name> --> import numpy.numarray s <name>
+\end_layout
+
+\begin_layout Itemize
+import numarray.package as <name> --> import numpy.numarray.package as <name>
+\end_layout
+
+\begin_layout Itemize
+from numarray import <names> --> from numpy.numarray import <names>
+\end_layout
+
+\begin_layout Itemize
+from numarray.package import <names> --> from numpy.numarray.package import
+ <names>
+\end_layout
+
+\begin_layout Subsubsection
+Attribute and method changes
+\end_layout
+
+\begin_layout Itemize
+.imaginary --> .imag
+\end_layout
+
+\begin_layout Itemize
+.flat --> probably .ravel() (Many usages will still work correctly because
+ you can index and assign to self.flat)
+\end_layout
+
+\begin_layout Itemize
+.byteswapped() --> .byteswap(False)
+\end_layout
+
+\begin_layout Itemize
+.byteswap() --> .byteswap(True) (Returns a reference to self instead of None).
+
+\end_layout
+
+\begin_layout Itemize
+self.info() --> numarray.info(self)
+\end_layout
+
+\begin_layout Itemize
+.isaligned() --> .flags.aligned
+\end_layout
+
+\begin_layout Itemize
+.isbyteswapped() --> not .dtype.isnative (the byte-order is a property of the
+ data-type object not the array itself in NumPy).
+
+\end_layout
+
+\begin_layout Itemize
+.iscontiguous() --> .flags.c_contiguous
+\end_layout
+
+\begin_layout Itemize
+.is_c_array() --> .dtype.isnative and .flags.carray
+\end_layout
+
+\begin_layout Itemize
+.is_fortran_contiguous() --> .flags.f_contiguous
+\end_layout
+
+\begin_layout Itemize
+.is_f_array() --> .dtype.isnative and .flags.farray
+\end_layout
+
+\begin_layout Itemize
+.itemsize() --> .itemsize
+\end_layout
+
+\begin_layout Itemize
+.nelements() --> .size
+\end_layout
+
+\begin_layout Itemize
+self.new(type) --> numarray.newobj(self, type)
+\end_layout
+
+\begin_layout Itemize
+.repeat(r) --> .repeat(r, axis=0)
+\end_layout
+
+\begin_layout Itemize
+.size() --> .size
+\end_layout
+
+\begin_layout Itemize
+.type() --> numarray.typefrom(self)
+\end_layout
+
+\begin_layout Itemize
+.typecode() --> .dtype.char
+\end_layout
+
+\begin_layout Itemize
+.stddev() --> .std()
+\end_layout
+
+\begin_layout Itemize
+.togglebyteorder() --> numarray.togglebyteorder(self)
+\end_layout
+
+\begin_layout Itemize
+.getshape() --> .shape
+\end_layout
+
+\begin_layout Itemize
+.setshape(obj) --> .shape = obj
+\end_layout
+
+\begin_layout Itemize
+.getflat() --> .ravel()
+\end_layout
+
+\begin_layout Itemize
+.getreal() --> .real
+\end_layout
+
+\begin_layout Itemize
+.setreal(obj) --> .real = obj
+\end_layout
+
+\begin_layout Itemize
+.getimag() --> .imag
+\end_layout
+
+\begin_layout Itemize
+.setimag(obj) --> .imag = obj
+\end_layout
+
+\begin_layout Itemize
+.getimaginary() --> .imag
+\end_layout
+
+\begin_layout Itemize
+.setimaginary(obj) --> .imag = obj
+\end_layout
+
+\begin_layout Subsection
+Second-step changes
+\end_layout
+
+\begin_layout Standard
+One of the notable differences is that several functions (array, arange,
+ fromfile, and fromstring) do not take the shape= keyword argument.
+ Instead you simply reshape the result using the reshape method.
+ Another notable difference is that instead of allowing typecode=, type=,
+ and dtype= variants for specifying the data-types, you must use the dtype=
+ keyword.
+ Other differences include
+\end_layout
+
+\begin_layout Itemize
+matrixmultiply(a,b) --> dot(a,b)
+\end_layout
+
+\begin_layout Itemize
+innerproduct(a,b) --> inner(a,b)
+\end_layout
+
+\begin_layout Itemize
+outerproduct(a,b) --> outer(a,b)
+\end_layout
+
+\begin_layout Itemize
+kroneckerproduct(a,b) --> kron(a,b)
+\end_layout
+
+\begin_layout Itemize
+tensormultiply(a,b) --> None
+\end_layout
+
+\begin_layout Subsection
+Additional Extension modules
+\end_layout
+
+\begin_layout Standard
+There are three extension packages that come included with numarray which
+ are now downloaded separately.
+ Stubs for these packages exist in numpy.numarray but they try and find the
+ actual code by looking at what is currently installed.
+ These packages are available in SciPy but can be installed separately as
+ well:
+\end_layout
+
+\begin_layout Itemize
+nd_image --> scipy.ndimage
+\end_layout
+
+\begin_layout Itemize
+convolve --> scipy.stsci.convolve
+\end_layout
+
+\begin_layout Itemize
+image --> scipy.stsci.image
+\end_layout
+
+\begin_layout Standard
+If you don't want to install all of scipy, you can grab just these packages
+ from SVN using
+\end_layout
+
+\begin_layout LyX-Code
+svn co http://svn.scipy.org/svn/scipy/trunk/Lib/ndimage ndimage
+\end_layout
+
+\begin_layout LyX-Code
+svn co http://svn.scipy.org/svn/scipy/trunk/Lib/stsci stsci
+\end_layout
+
+\begin_layout Standard
+and then run
+\end_layout
+
+\begin_layout LyX-Code
+cd ndimage; sudo python setup.py install
+\end_layout
+
+\begin_layout LyX-Code
+cd stsci; sudo python setup.py install
+\end_layout
+
+\begin_layout Standard
+On a Windows system, you can use the Tortoise SVN client which is integrated
+ into the Windows Explorer.
+ It can be downloaded from http://tortoisesvn.tigris.org.
+ Instructions on how to use it are also provided on that site.
+ After downloading the packages from SVN, installation will still require
+ a C-compiler (the mingw32 compiler works fine even with MSVC-compiled Python
+ as long as you specify --compiler=mingw32).
+ Alternatively you can download binary releases of scipy from http://www.scipy.org
+ to get the needed functionality or use the Enthon edition of Python.
+\end_layout
+
+\begin_layout Chapter
+The Array Object
+\end_layout
+
+\begin_layout Quotation
+Don't worry about people stealing your ideas.
+ If your ideas are any good, you'll have to ram them down people's throats.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Howard Aiken, IBM engineer
+\end_layout
+
+\begin_layout Quotation
+No idea is so antiquated that it was not once modern; no idea is so modern
+ that it will not someday be antiquated.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Ellen Glasgow
+\end_layout
+
+\begin_layout Section
+
+\family typewriter
+ndarray
+\family default
+ Attributes
+\end_layout
+
+\begin_layout Standard
+Array
+\begin_inset LatexCommand index
+name "ndarray|("
+
+\end_inset
+
+ attributes reflect information that is intrinsic to the array itself.
+ Generally, accessing an array through its attributes allows you to get
+ and sometimes set intrinsic properties of the array without creating a
+ new array.
+ The exposed attributes are the core parts of an array and only some of
+ them can be reset meaningfully without creating a new array.
+ Table
+\begin_inset LatexCommand ref
+reference "cap:ndarray-attributes"
+
+\end_inset
+
+ shows all the attributes
+\begin_inset LatexCommand index
+name "ndarray!attributes|("
+
+\end_inset
+
+ with a brief description.
+ Detailed information on each attribute is given below.
+\end_layout
+
+\begin_layout Warning
+Numeric Compatibility: you should check your old use of the .flat attribute.
+ This attribute now returns an iterator object which acts like a 1-d array
+ in terms of indexing.
+ while it does not share all the attributes or methods of an array, it will
+ be interpreted as an array in functions that take objects and convert them
+ to arrays.
+ Furthermore, Any changes in an array converted from a 1-d iterator will
+ be reflected back in the original array when the converted array is deleted.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:ndarray-attributes"
+
+\end_inset
+
+Attributes of the
+\family typewriter
+ndarray
+\family default
+.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+vspace*{-0.2in}
+\backslash
+setlength{
+\backslash
+extrarowheight}{0.25eM}
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="18" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="1in">
+<column alignment="center" valignment="top" leftline="true" width="1in">
+<column alignment="block" valignment="top" leftline="true" rightline="true" width="3in">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Attribute
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Settable
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+flags
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+special array-connected dictionary-like object with attributes showing the
+ state of flags in this array; only the flags WRITEABLE, ALIGNED, and UPDATEIFCO
+PY can be modified by setting attributes of this object
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+shape
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+tuple showing the array shape; setting this attribute re-shapes the array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+strides
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+tuple showing how many
+\emph on
+bytes
+\emph default
+ must be jumped in the data segment to get from one entry to the next
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+ndim
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+number of dimensions in array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+data
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+buffer object loosely wrapping the array data (only works for single-segment
+ arrays)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+size
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+total number of elements
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+itemsize
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+size (in bytes) of each element
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+nbytes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+total number of bytes used
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+base
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+object this array is using for its data buffer, or None if it owns its own
+ memory
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+dtype
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+data-type object for this array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+real
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+real part of the array; setting copies data to real part of current array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+imag
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+imaginary part, or read-only zero array if type is not complex; setting
+ works only if type is complex
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+flat
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Yes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+one-dimensional, indexable iterator object that acts somewhat like a 1-d
+ array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+ctypes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+object to simplify the interaction of this array with the ctypes module
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+__array_interface__
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+dictionary with keys (data, typestr, descr, shape, strides) for compliance
+ with Python side of array protocol
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+__array_struct__
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+array interface on C-level
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+__array_priority__
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+No
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+always 0.0 for base type
+\family typewriter
+ndarray
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Memory Layout attributes
+\end_layout
+
+\begin_layout Description
+flags
+\begin_inset LatexCommand index
+name "ndarray!attributes!flags"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Array flags
+\begin_inset LatexCommand index
+name "ndarray!flags|("
+
+\end_inset
+
+ provide information about how the memory area used for the array is to
+ be interpreted.
+ There are 6 Boolean flags in use which govern whether or not:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+C_CONTIGUOUS\InsetSpace ~
+(C) the data is in a single, C-style contiguous segment;
+\end_layout
+
+\begin_layout Description
+F_CONTIGUOUS\InsetSpace ~
+(F) the data is in a single, Fortran-style contiguous segment;
+\end_layout
+
+\begin_layout Description
+OWNDATA\InsetSpace ~
+(O) the array owns the memory it uses or if it borrows it from another
+ object (if this is False, the base attribute retrieves a reference to the
+ object this array obtained its data from);
+\end_layout
+
+\begin_layout Description
+WRITEABLE\InsetSpace ~
+(W) the data area can be written to;
+\end_layout
+
+\begin_layout Description
+ALIGNED\InsetSpace ~
+(A) the data and strides are aligned appropriately for the hardware
+ (as determined by the compiler);
+\end_layout
+
+\begin_layout Description
+UPDATEIFCOPY\InsetSpace ~
+(U) this array is a copy of some other array (referenced by
+
+\family typewriter
+.base
+\family default
+).
+ When this array is deallocated, the base array will be updated with the
+ contents of this array.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ Only the
+\series bold
+UPDATEIFCOPY
+\series default
+,
+\series bold
+WRITEABLE
+\series default
+, and
+\series bold
+ALIGNED
+\series default
+ flags can be changed by the user.
+ This can be done using the special array-connected, dictionary-like object
+ that the flags attribute returns.
+ By setting elements in this dictionary, the underlying array obect's flags
+ are altered.
+ Flags can also be changed using the method
+\family typewriter
+setflags
+\family default
+(...).
+ All flags in the dictionary can be accessed using their first (upper case)
+ letter as well as the full name.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Certain logical combinations of flags can also be read using named keys
+ to the special flags dictionary.
+ These combinations are
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+FNC Returns F_CONTIGUOUS and not C_CONTIGUOUS
+\end_layout
+
+\begin_layout Description
+FORC Returns F_CONTIGUOUS or C_CONTIGUOUS (one-segment test).
+\end_layout
+
+\begin_layout Description
+BEHAVED\InsetSpace ~
+(B) Returns ALIGNED and WRITEABLE
+\end_layout
+
+\begin_layout Description
+CARRAY\InsetSpace ~
+(CA) Returns BEHAVED and C_CONTIGUOUS
+\end_layout
+
+\begin_layout Description
+FARRAY_(FA) Returns BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS
+\end_layout
+
+\end_deeper
+\begin_layout Note
+The array flags cannot be set arbitrarily.
+ UPDATEIFCOPY can only be set False.
+ the ALIGNED flag can only be set True if the data is truly aligned.
+ The flag WRITEABLE can only be set True if the array owns its own memory
+ or the ultimate owner of the memory exposes a writeable buffer interface
+ (or is a string).
+ The exception for string is made so that unpickling can be done without
+ copying memory.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Flags can also be set and read using attribute access with the lower-case
+ key equivalent (without first letter support).
+ Thus, for example, self.flags.c_contiguous returns whether or not the array
+ is C-style contiguous, and self.flags.writeable=True changes the array to
+ be writeable (if possible)
+\begin_inset LatexCommand index
+name "ndarray!flags|)"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+shape
+\begin_inset LatexCommand index
+name "ndarray!attributes!shape"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The shape of the array is a tuple giving the number of elements in each
+ dimension.
+ The shape can be reset for single-segment arrays by setting this attribute
+ to another tuple.
+ The total number of elements cannot change.
+ However, a -1 may be used in a dimension entry to indicate that the array
+ length in that dimension should be computed so that the total number of
+ elements does not change.
+
+\family typewriter
+a.shape=x
+\family default
+ is equivalent to
+\family typewriter
+a=a.reshape(x)
+\family default
+ except the latter can be used even if the array is not single-segment and
+ even if
+\begin_inset Formula $a$
+\end_inset
+
+ is an array scalar.
+
+\end_layout
+
+\begin_layout Note
+Setting the shape attribute to () for a 1-element array will turn self into
+ a 0-dimensional array.
+ This is one of the few ways to get a 0-dimensional array in Python.
+ Most other operations will return an array scalar.
+ Other ways to get a 0-dimensional array in Python include calling array
+ with a scalar argument and calling the squeeze method of an array whose
+ shape is all 1's.
+
+\end_layout
+
+\begin_layout Description
+strides
+\begin_inset LatexCommand index
+name "ndarray!attributes!strides"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The strides of an array is a tuple showing for each dimension how many
+
+\emph on
+bytes
+\emph default
+ must be skipped to get to the next element in that dimension.
+ Setting this attribute to another tuple will change the way the memory
+ is viewed.
+ This attribute can only be set to a tuple that will not cause the array
+ to access unavailable memory.
+ If an attempt is made to do so, ValueError is raised.
+\end_layout
+
+\begin_layout Description
+ndim
+\begin_inset LatexCommand index
+name "ndarray!attributes!ndim"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The number of dimensions of an array is sometimes called the rank of the
+ array.
+ Getting this attribute reveals the length of the shape tuple and the strides
+ tuple.
+
+\end_layout
+
+\begin_layout Description
+data
+\begin_inset LatexCommand index
+name "ndarray!attributes!data"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A buffer object referencing the actual data for this array if this array
+ is single-segment.
+ If the array is not single-segment, then an AttributeError is raised.
+ The buffer object is writeable depending on the status of self.flags.writeable.
+\end_layout
+
+\begin_layout Description
+size
+\begin_inset LatexCommand index
+name "ndarray!attributes!size"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The total number of elements in the array.
+\end_layout
+
+\begin_layout Description
+itemsize
+\begin_inset LatexCommand index
+name "ndarray!attributes!itemsize"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The number of bytes each element of the array requires.
+
+\end_layout
+
+\begin_layout Description
+nbytes
+\begin_inset LatexCommand index
+name "ndarray!attributes!nbytes"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The total number of bytes used by the array.
+ This is equal to
+\family typewriter
+self.itemsize*self.size
+\family default
+.
+\end_layout
+
+\begin_layout Description
+base
+\begin_inset LatexCommand index
+name "ndarray!attributes!base"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If the array does not own its own memory, then this attribute returns the
+ object whose memory this array is referencing.
+ The returned object may not be the original allocator of the memory, but
+ may be borrowing it from still another object.
+ If this array does own its own memory, then None is returned unless the
+ UPDATEIFCOPY flag is True in which case self.base is the array that will
+ be updated when self is deleted.
+ UPDATEIFCOPY gets set for an array that is created as a behaved copy of
+ a general array.
+ The intent is for the misaligned array to get any changes that occur to
+ the copy.
+
+\end_layout
+
+\begin_layout Subsection
+Data Type attributes
+\end_layout
+
+\begin_layout Standard
+There are several ways to specify the kind of data that the array is composed
+ of.
+ The fullest description that preserves field information is always obtained
+ using an actual dtype object.
+ See Chapter
+\begin_inset LatexCommand ref
+reference "cha:Data-descriptor-objects"
+
+\end_inset
+
+ for more discussion on data-type objects and acceptable arguments to construct
+ data-type objects.
+ Three commonly-used attributes of the data-type object returned are also
+ documented here.
+\end_layout
+
+\begin_layout Description
+dtype
+\begin_inset LatexCommand index
+name "ndarray!attributes!dtype"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A data-type object that fully describes (including any defined fields)
+ each fixed-length item in the array.
+ Whether or not the data is in machine byte-order is also determined by
+ the data-type.
+ The data-type attribute can be set to anything that can be interpreted
+ as a data-type (see Chapter
+\begin_inset LatexCommand ref
+reference "cha:Data-descriptor-objects"
+
+\end_inset
+
+ for more information).
+ Setting this attribute allows you to change the interpretation of the data
+ in the array.
+ The new data-type must be compatible with the array's current data-type.
+ The new data-type is compatible if it has the same itemsize as the current
+ data-type descriptor, or (if the array is a single-segment array) if the
+ the array with the new data-type fits in the memory already consumed by
+ the array.
+
+\end_layout
+
+\begin_layout Description
+dtype.type
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A Python type object gives the typeobject whose instances represent elements
+ of the array.
+ This type object can be used to instantiate a scalar of that type.
+
+\end_layout
+
+\begin_layout Description
+dtype.char
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A typecode character unique to each of the 21 built-in types.
+
+\end_layout
+
+\begin_layout Description
+dtype.str
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This string consists of a required first character giving the
+\begin_inset Quotes eld
+\end_inset
+
+endianness
+\begin_inset Quotes erd
+\end_inset
+
+ of the data (
+\begin_inset Quotes eld
+\end_inset
+
+<
+\begin_inset Quotes erd
+\end_inset
+
+ for little endian,
+\begin_inset Quotes eld
+\end_inset
+
+>
+\begin_inset Quotes erd
+\end_inset
+
+ for big endian, and
+\begin_inset Quotes eld
+\end_inset
+
+|
+\begin_inset Quotes erd
+\end_inset
+
+ for irrelevant), the second character is a code for the kind of data ('b'
+ for Boolean, 'i' for signed integer, 'u' for unsigned integer, 'f' for
+ floating-point, 'c' for complex floating point, 'O' for object, 'S' for
+ ASCII string, 'U' for unicode, and 'V' for void), the final characters
+ give the number of bytes each element uses.
+\end_layout
+
+\begin_layout Subsection
+Other attributes
+\end_layout
+
+\begin_layout Description
+T
+\begin_inset LatexCommand index
+name "ndarray!attributes!T"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to self.transpose().
+ For self.ndim < 2, it returns a view of self.
+
+\end_layout
+
+\begin_layout Warning
+If arr is 0- or 1-dimensional, then arr.T will return a new ndarray which
+ refers to the same data as arr.
+ This is because transpose has the effect of reversing the shape attribute
+ of an array (whose 0-d and 1-d equivalent is to return the same array).
+ This may be surprising if you are thinking of your 1-d array as a
+\begin_inset Quotes eld
+\end_inset
+
+row
+\begin_inset Quotes erd
+\end_inset
+
+ or a
+\begin_inset Quotes eld
+\end_inset
+
+column
+\begin_inset Quotes erd
+\end_inset
+
+ vector and expected the .T attribute to return the other convention.
+
+\end_layout
+
+\begin_layout Description
+real
+\begin_inset LatexCommand index
+name "ndarray!attributes!real"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The real part of an array.
+ For arrays that are not complex this attribute returns the array itself.
+ Setting this attribute allows setting just the real part of an array.
+ If the array is already real then setting this attribute is equivalent
+ to self[...] = values.
+\end_layout
+
+\begin_layout Description
+imag
+\begin_inset LatexCommand index
+name "ndarray!attributes!imag"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A view of the imaginary part of an array.
+ For arrays that are not complex, this returns a read-only array of zeros.
+ Setting this array allows in-place alteration of the complex part of an
+ imaginary array.
+ If the array is not complex, then trying to set this attribute raises an
+ Error.
+
+\end_layout
+
+\begin_layout Description
+flat
+\begin_inset LatexCommand index
+name "ndarray!attributes!flat"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an iterator object (numpy.flatiter) that acts like a 1-d version
+ of the array.
+ 1-d indexing works on this array and it can be passed in to most routines
+ as an array wherein a 1-d array will be constructed from it.
+ The new 1-d array will reference this array's data if this array is C-style
+ contiguous, otherwise, new memory will be allocated for the 1-d array,
+ the UPDATEIFCOPY flag will be set for the new array, and this array will
+ have its WRITEABLE flag set FALSE until the the last reference to the new
+ array disappears.
+ When the last reference to the new 1-d array disappears, the data will
+ be copied over to this non-contiguous array.
+ This is done so that a.flat effectively references the current array regardless
+ of whether or not it is contiguous or non-contiguous.
+ As an example, consider the following code:
+\end_layout
+
+\begin_layout MyCode
+>>> a = zeros((4,5))
+\newline
+>>> b = ones(6)
+\newline
+>>> add(b,b,a[1:3,0:3].flat)
+\newline
+array([[ 2.,
+ 2., 2.],
+\newline
+ [ 2., 2., 2.]])
+\newline
+>>> print a
+\newline
+[[ 0.
+ 0.
+ 0.
+ 0.
+ 0.]
+\newline
+ [ 2.
+ 2.
+ 2.
+ 0.
+ 0.]
+\newline
+ [ 2.
+ 2.
+ 2.
+ 0.
+ 0.]
+\newline
+ [ 0.
+ 0.
+ 0.
+ 0.
+ 0.]]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The numpy.flatiter object has two methods:
+\series bold
+__array__()
+\series default
+ and
+\series bold
+copy()
+\series default
+ and one attribute:
+\series bold
+base
+\series default
+.
+ The base attribute returns a reference to the underlying array.
+
+\end_layout
+
+\begin_layout Description
+__array_priority__
+\begin_inset LatexCommand index
+name "ndarray!attributes!\\_\\_array\\_priority\\_\\_"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The array priority attribute is a floating point number useful in mixed
+ operations involving two subtypes to decide which subtype is returned.
+ The base ndarray object has priority 0.0 and 1.0 is the default subtype priority.
+\end_layout
+
+\begin_layout Subsection
+Array Interface attributes
+\end_layout
+
+\begin_layout Standard
+The array interface
+\begin_inset LatexCommand index
+name "array interface"
+
+\end_inset
+
+ (sometimes called array protocol) was created in 2005 as a means for array-like
+ Python objects to re-use each other's data buffers intelligently whenever
+ possible.
+ The ndarray object supports both the Python-side and the C-side of the
+ array interface.
+ The system is able to consume objects that expose the array interface,
+ and array objects can expose their inner workings to other objects that
+ support the array interface.
+
+\end_layout
+
+\begin_layout Description
+__array_interface__
+\begin_inset LatexCommand index
+name "ndarray!attributes!\\_\\_array\\_interface\\_\\_"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The python-side of the array interface.
+ It is a dictionary with the following attributes:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+data A 2-tuple (dataptr, read-only flag).
+ The dataptr is a string giving the address (in hexadecimal format) of the
+ array data.
+ The read-only flag is True if the array memory is read-only.
+
+\end_layout
+
+\begin_layout Description
+strides The strides tuple.
+ Same as
+\series bold
+strides
+\series default
+ attribute except None is returned if the array is C-style contiguous.
+\end_layout
+
+\begin_layout Description
+shape The shape tuple.
+ Same as
+\series bold
+shape
+\series default
+ attribute.
+\end_layout
+
+\begin_layout Description
+typestr A string giving the format of the data.
+ Same as
+\series bold
+dtype.str
+\series default
+ attribute.
+
+\end_layout
+
+\begin_layout Description
+descr A list of tuples providing the detailed description of this data type.
+ This information is obtained from the arrdescr attribute of the dtypedescr
+ object associated with each array.
+ For arrays with fields, this will return a valid array-protocol descriptor
+ list.
+ For arrays without defined fields, this returns [('',typestr)].
+\end_layout
+
+\end_deeper
+\begin_layout Description
+__array_struct__
+\begin_inset LatexCommand index
+name "ndarray!attributes!\\_\\_array\\_struct\\_\\_"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A PyCObject that wraps a pointer to a PyArrayInterface structure.
+ This is only useful on the C-level for rapid implementation of the array
+ interface, using a single attribute lookup.
+\end_layout
+
+\begin_layout Description
+ctypes
+\begin_inset LatexCommand index
+name "ndarray!attributes!ctypes|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This attribute creates an object that makes it easier to use arrays when
+ calling out to shared libraries with the ctypes module.
+ The returned object has data, shape, and strides attributes which return
+ ctypes
+\begin_inset LatexCommand index
+name "ctypes"
+
+\end_inset
+
+ objects that can be used as arguments to a shared library.
+ These attributes are:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+data A pointer to the memory area of the array as a Python integer.
+ This memory area may contain data that is not aligned, or not in correct
+ byte-order.
+ The memory area may not even be writeable.
+ The array flags and data-type of this array should be respected when passing
+ this attribute to arbitrary C-code to avoid trouble that can include Python
+ crashing.
+ User Beware! The value of this attribute is exactly the same as
+\family typewriter
+self.__array_interface__['data'][0]
+\family default
+.
+\end_layout
+
+\begin_layout Description
+shape (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
+ is the C-integer corresponding to dtype('p') on this platform.
+ This base-type could be c_int, c_long, or c_longlong depending on the platform.
+ The c_intp type is defined accordingly in numpy.ctypeslib.
+ The ctypes array contains the shape of the underlying array.
+\end_layout
+
+\begin_layout Description
+strides (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
+ is the same as for the shape attribute.
+ This ctypes array contains the strides information from the underlying
+ array.
+ This strides information is important for showing how many bytes must be
+ jumped to get to the next element in the array.
+
+\end_layout
+
+\begin_layout Description
+_as_parameter_ (c_void_p) Returns the data-pointer to the array as a ctypes
+ object.
+ Among other possible uses, this enables this ctypes object to be used directly
+ in a ctypes-loaded call to an arbitrary function.
+ Be sure to respect the flags on the array and the size and strides of the
+ array so as not to use this memory in-appropriately (see the
+\series bold
+ndpointer
+\series default
+ function for how to return a class that can be used with the argtypes attribute
+ of ctypes functions).
+
+\end_layout
+
+\end_deeper
+\begin_layout Warning
+Be careful using the ctypes attribute --- especially on temporary arrays
+ or arrays constructed on the fly.
+ For example, calling (a+b).ctypes.data_as(ctypes.c_void_p) returns a pointer
+ to memory that is invalid because the array created as (a+b) is deallocated
+ before the next Python statement.
+ You can avoid this problem using either c=a+b or ct=(a+b).ctypes.
+ In the latter case, ct will hold a reference to the array until ct is deleted
+ or re-assigned.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The ctypes object also has several methods which can alter how the shape,
+ strides, and data of the underlying object is returned.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+data_as (obj) Return the data pointer cast-to a particular c-types object.
+ For example, calling
+\family typewriter
+self._as_parameter_
+\family default
+ is equivalent to
+\family typewriter
+self.data_as(ctypes.c_void_p)
+\family default
+.
+ Perhaps you want to use the data as a pointer to a ctypes array of floating-poi
+nt data:
+\family typewriter
+self.data_as(ctypes.POINTER(ctypes.c_double))
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+shape_as (obj) Return the shape tuple as an array of some other c-types
+ type.
+ For example:
+\family typewriter
+self.shape_as(ctypes.c_short)
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+strides_as (obj) Return the strides tuple as an array of some other c-types
+ type.
+ For example:
+\family typewriter
+self.strides_as(ctypes.c_longlong)
+\family default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ If the ctypes module is not available, then the ctypes attribute of array
+ objects still returns something useful, but ctypes objects are not returned
+ and errors may be raised instead.
+ In particular, the object will still have the _as_parameter_ attribute
+ which will return an integer equal to the data
+\begin_inset LatexCommand index
+name "ndarray!attributes!ctypes|)"
+
+\end_inset
+
+ attribute
+\begin_inset LatexCommand index
+name "ndarray!attributes|)"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Section
+
+\family typewriter
+ndarray
+\family default
+ Methods
+\end_layout
+
+\begin_layout Standard
+In NumPy, the
+\family typewriter
+ndarray
+\family default
+ object has many methods
+\begin_inset LatexCommand index
+name "ndarray!methods|("
+
+\end_inset
+
+ which operate on or with the array in some fashion, typically returning
+ an array result.
+ In Numeric, many of these methods were only library calls.
+ These methods are explained in this chapter.
+ Whenever the array whose method is being called needs to be referenced
+ it will be referred to as
+\emph on
+this array
+\emph default
+, or
+\emph on
+self
+\emph default
+.
+ Keyword arguments will be shown.
+ Methods that only take one argument do not have keyword arguments.
+ Default values for one argument methods will be shown in braces {default}.
+
+\end_layout
+
+\begin_layout Warning
+If you are converting code from Numeric, then you will need to make the
+ following (search and replace) conversions:
+\family typewriter
+.typecode() --> .dtype.char
+\family default
+;
+\family typewriter
+.iscontiguous() --> .flags.contiguous
+\family default
+;
+\family typewriter
+.byteswapped() --> .byteswap()
+\family default
+;
+\family typewriter
+.toscalar() --> .item()
+\family default
+; and
+\family typewriter
+.itemsize() --> .itemsize
+\family default
+.
+ The numpy.oldnumeric.alter_code1 module can automate this for you.
+\end_layout
+
+\begin_layout Subsection
+Array conversion
+\end_layout
+
+\begin_layout Description
+tolist
+\begin_inset LatexCommand index
+name "ndarray!methods!tolist"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The contents of self as a nested list.
+\end_layout
+
+\begin_layout MyCode
+>>> a = array([[1,2,3],[4,5,6]]); print a.tolist()
+\newline
+[[1, 2, 3], [4, 5, 6]]
+\end_layout
+
+\begin_layout Description
+item
+\begin_inset LatexCommand index
+name "ndarray!methods!item"
+
+\end_inset
+
+ (*args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If no arguments are passed in, then this method only works for arrays with
+ one element (a.size == 1).
+ In this case, it returns a standard Python scalar object (if possible)
+ copied from the first element of self.
+ When the data type of self is longdouble or clongdouble, this returns a
+ scalar array object because there is no available Python scalar that would
+ not lose information.
+ Void arrays return a buffer object for item() unless fields are defined
+ in which case a tuple is returned.
+\end_layout
+
+\begin_layout MyCode
+>>> asc = a[0,0].item()
+\newline
+>>> type(asc)
+\newline
+<type 'int'>
+\newline
+>>> asc
+\newline
+1
+\newline
+>>> type(a[0,0])
+\newline
+<type
+ 'numpy.int32'>
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If arguments are provided, then they indicate indices into the array (either
+ a flat index or an nd-index).
+ A standard Python scalar corresponding to the item at the given location
+ is then returned.
+ This is very similar to self[args] except instead of an array scalar, a
+ standard Python scalar is returned.
+ This can be useful for speeding up access to elements of the array and
+ doing arithmetic on elements of the array using Python's optimized math.
+
+\end_layout
+
+\begin_layout Description
+itemset
+\begin_inset LatexCommand index
+name "ndarray!methods!itemset"
+
+\end_inset
+
+ (*args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ There must be at least 1 argument and define the last argument as item.
+ Then, this is equivalent to but faster than self[args] = item.
+ The item should be a scalar value and args must select a single item in
+ the array.
+\end_layout
+
+\begin_layout Description
+tostring
+\begin_inset LatexCommand index
+name "ndarray!methods!tostring"
+
+\end_inset
+
+ (order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A Python string showing a copy of the raw contents of data memory.
+ The string can be produced in either 'C' or 'Fortran', or 'Any' order (the
+ default is 'C'-order).
+ 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is
+ set, then 'Fortran' order.
+
+\end_layout
+
+\begin_layout Description
+tofile
+\begin_inset LatexCommand index
+name "ndarray!methods!tofile"
+
+\end_inset
+
+ (file=, sep='', format='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Write the contents of self to the open file object.
+ If file is a string, then open a file of that name first.
+ If sep is the empty string, then write the file in binary mode.
+ If sep is any other string, write the array in simple text mode separating
+ each element with the value of the sep string.
+ When the file is written in text mode, the format string can be used to
+ alter the appearance of each entry.
+ If format is the empty string, then it is equivalent to
+\family typewriter
+
+\begin_inset Quotes eld
+\end_inset
+
+%s
+\begin_inset Quotes erd
+\end_inset
+
+
+\family default
+.
+ Each element of the array will be converted to a Python scalar,
+\family typewriter
+o
+\family default
+, and written to the file as
+\family typewriter
+
+\begin_inset Quotes eld
+\end_inset
+
+format
+\begin_inset Quotes erd
+\end_inset
+
+ % o
+\family default
+.
+ Note that writing an array to a file does not store any information about
+ the shape, type, or endianness of an array.
+ When written in binary mode, tofile is functionally equivalent to
+\family typewriter
+fid.write(self.tostring())
+\family default
+.
+\end_layout
+
+\begin_layout MyCode
+>>> a.tofile('myfile.txt',sep=':',format='%03d')
+\end_layout
+
+\begin_layout MyCode
+Contents of myfile.txt
+\end_layout
+
+\begin_layout MyCode
+001:002:003:004:005:006
+\end_layout
+
+\begin_layout Description
+dump
+\begin_inset LatexCommand index
+name "ndarray!methods!dump"
+
+\end_inset
+
+ (file)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Pickle the contents of self to the file object represented by file.
+ Equivalent to cPickle.dump(self, file, 2)
+\end_layout
+
+\begin_layout Description
+dumps
+\begin_inset LatexCommand index
+name "ndarray!methods!dumps"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return pickled representation of self as a string.
+ Equivalent to cPickle.dumps(self, 2)
+\end_layout
+
+\begin_layout Description
+astype
+\begin_inset LatexCommand index
+name "ndarray!methods!astype"
+
+\end_inset
+
+ ({None})
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Force conversion of this array to an array with the data type provided
+ as the argument.
+ If the argument is None, or equal to the data type of self, then return
+ a copy of the array.
+
+\end_layout
+
+\begin_layout Description
+byteswap
+\begin_inset LatexCommand index
+name "ndarray!methods!byteswap"
+
+\end_inset
+
+ ({False})
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Byteswap the elements of the array and return the byteswapped array.
+ If the argument is True, then byteswap in-place and return a reference
+ to self.
+ Otherwise, return a copy of the array with the elements byteswapped.
+ The data-type descriptor is not changed so the array will have changed
+ numbers.
+\end_layout
+
+\begin_layout Description
+copy
+\begin_inset LatexCommand index
+name "ndarray!methods!copy"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a copy of the array (which is always single-segment, and ALIGNED).
+ However, the data-type is preserved (including whether or not the data
+ is byteswapped).
+
+\end_layout
+
+\begin_layout Description
+view
+\begin_inset LatexCommand index
+name "ndarray!methods!view"
+
+\end_inset
+
+ ({None})
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array using the same memory area as self.
+ If the optional argument is given, it can be either a typeobject that is
+ a sub-type of the ndarray or an object that can be converted to a data-type
+ descriptor.
+ If the argument is a typeobject then a new array of that Python type is
+ returned that uses the information from self.
+ If the argument is a data-type descriptor, then a new array of the same
+ Python type as self is returned using the given data-type.
+
+\end_layout
+
+\begin_layout MyCode
+>>> print a.view(single)
+\newline
+[[ 1.40129846e-45 2.80259693e-45 4.20389539e-45]
+\newline
+
+ [ 5.60519386e-45 7.00649232e-45 8.40779079e-45]]
+\newline
+>>> a.view(ubyte)
+\newline
+array([[1,
+ 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0],
+\newline
+ [4, 0, 0, 0, 5, 0, 0, 0, 6, 0,
+ 0, 0]], dtype=uint8)
+\end_layout
+
+\begin_layout Description
+getfield
+\begin_inset LatexCommand index
+name "ndarray!methods!getfield"
+
+\end_inset
+
+ (dtype=, offset=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a
+\emph on
+field
+\emph default
+ of the given array as an array of the given data type.
+ A field is a view of the array's data at a certain byte offset interpreted
+ as a given data type.
+ The returned array is a reference into self, therefore changes made to
+ the returned array will be reflected in self.
+ This method is particularly useful for record arrays that use a void data
+ type, but it can also be used to extract the low (high)-order bytes of
+ other array types as well.
+ For example, using getfield, you could extract fixed-length substrings
+ from an array of strings.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a = array(['Hello','World','NumPy'])
+\newline
+>>> a.getfield('S2',1)
+\newline
+array(['el',
+ 'or', 'um'],
+\newline
+ dtype='|S2')
+\end_layout
+
+\begin_layout Description
+setflags
+\begin_inset LatexCommand index
+name "ndarray!methods!setflags"
+
+\end_inset
+
+ (write=None, align=None, uic=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.
+ The ALIGNED flag can only be set to True if the data is actually aligned
+ according to the type.
+ The UPDATEIFCOPY flag can never be set to True.
+ The flag WRITEABLE can only be set True if the array owns its own memory
+ or the ultimate owner of the memory exposes a writeable buffer interface
+ (or is a string).
+ The exception for string is made so that unpickling can be done without
+ copying memory.
+
+\end_layout
+
+\begin_layout Description
+fill
+\begin_inset LatexCommand index
+name "ndarray!methods!fill"
+
+\end_inset
+
+ (scalar)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Fill an array with the scalar value (appropriately converted to the type
+ of self).
+ If the scalar value is an array or a sequence, then only the first element
+ is used.
+ This method is usually faster than a[...]=scalar or self.flat=scalar, and always
+ interprets its argument as a scalar.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Array conversion methods
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+setlength{
+\backslash
+extrarowheight}{0.1eM}
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="15" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="30text%">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Method
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Arguments
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+astype
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(dtype {None})
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Cast to another data type
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+byteswap
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(inplace {False})
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Byteswap array elements
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+copy
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Copy array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+dump
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(file)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Pickle to stream or file
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+dumps
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Get pickled string
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+fill
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(scalar)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Fill an array with scalar value
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+getfield
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(dtype=, offset=0)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Return a field of the array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+setflags
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(write=None, align=None, uic=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Set array flags
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+tofile
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(file=, sep='', format='')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Raw write to file
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+tolist
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Array as a nested list
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+item
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(*args)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Python scalar extraction
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+itemset
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(*args)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Insert scalar (last argument) into array
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+tostring
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(order='C')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+String of raw memory
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+view
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(obj)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+View as another data type or class
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Array shape manipulation
+\end_layout
+
+\begin_layout Standard
+For reshape, resize, and transpose, the single tuple argument may be replaced
+ with
+\begin_inset Formula $n$
+\end_inset
+
+ integers which will be interpreted as an
+\begin_inset Formula $n$
+\end_inset
+
+-tuple.
+\end_layout
+
+\begin_layout Description
+reshape
+\begin_inset LatexCommand index
+name "ndarray!methods!reshape"
+
+\end_inset
+
+ (newshape, order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array that uses the same data as this array but has a new shape
+ given by the newshape tuple (or a scalar to reshape as 1-d).
+ The new shape must define an array with the same total number of elements.
+ If one of the elements of the new shape tuple is -1, then that dimension
+ will be determined such that the overall number of items in the array stays
+ constant.
+ If possible, the new array will reference the data of the old one.
+ If the data must be moved in order to accomplish the reshape, then then
+ the new array will contain a copy of the data in self.
+ The order argument specifies how the array data should be viewed during
+ the reshape (either in 'C' or 'FORTRAN' order).
+ This order argument specifies both how the intrinsic raveling to a 1-d
+ array should occur as well as how that 1-d array should be used to fill-up
+ the new output array.
+
+\end_layout
+
+\begin_layout Description
+resize
+\begin_inset LatexCommand index
+name "ndarray!methods!resize"
+
+\end_inset
+
+ (newshape, refcheck=1, order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Resize an array in-place.
+ This changes self (in-place) to be an array with the new shape, reallocating
+ space for the data area if necessary.
+ If the data memory must be changed because the number of new elements is
+ different than self.size, then an error will occur if this array does not
+ own its data or if another object is referencing this one.
+ Only a single-segment array can be resized.
+ The method returns None.
+ To bypass the reference count check, then set refcheck=0.
+ The purpose of the reference count check is to make sure you don't use
+ this array as a buffer for another Python object and then reallocate the
+ memory.
+ However, reference counts can increase in other ways so if you are sure
+ that you have not shared the memory for this array to another Python object,
+ then you may safely set refcheck=0.
+
+\end_layout
+
+\begin_layout Description
+transpose
+\begin_inset LatexCommand index
+name "ndarray!methods!transpose"
+
+\end_inset
+
+ (<None>)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array view with the shape transposed according to the argument.
+ An argument of None is equivalent to range(self.ndim)[::-1].
+ The argument can either be a tuple or multiple integer arguments.
+ This method returns a new array with permuted shape and strides attributes
+ using the same data as self.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a = arange(40).reshape((2,4,5))
+\newline
+>>> b = a.transpose(2,0,1)
+\newline
+>>> print a.shape,
+ b.shape
+\newline
+(2, 4, 5) (5, 2, 4)
+\newline
+>>> print a.strides, b.strides
+\newline
+(80, 20, 4) (4, 80,
+ 20)
+\newline
+>>> print a
+\newline
+[[[ 0 1 2 3 4]
+\newline
+ [ 5 6 7 8 9]
+\newline
+ [10 11 12 13 14]
+\newline
+ [15
+ 16 17 18 19]]
+\newline
+
+\newline
+ [[20 21 22 23 24]
+\newline
+ [25 26 27 28 29]
+\newline
+ [30 31 32 33 34]
+\newline
+ [35
+ 36 37 38 39]]]
+\newline
+>>> print b
+\newline
+[[[ 0 5 10 15]
+\newline
+ [20 25 30 35]]
+\newline
+
+\newline
+ [[ 1 6 11 16]
+\newline
+
+ [21 26 31 36]]
+\newline
+
+\newline
+ [[ 2 7 12 17]
+\newline
+ [22 27 32 37]]
+\newline
+
+\newline
+ [[ 3 8 13 18]
+\newline
+ [23 28 33
+ 38]]
+\newline
+
+\newline
+ [[ 4 9 14 19]
+\newline
+ [24 29 34 39]]]
+\end_layout
+
+\begin_layout Description
+swapaxes
+\begin_inset LatexCommand index
+name "ndarray!methods!swapaxes"
+
+\end_inset
+
+ (axis1, axis2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array view with axis1 and axis2 swapped.
+ This is a special case of the transpose method with argument equal to arg=range
+(self.ndim); arg[axis1], arg[axis2] = arg[axis2], arg[axis1].
+ See the
+\series bold
+rollaxis
+\series default
+ function for a routine that transposes the array with the axes rolled instead
+ of swapped.
+
+\end_layout
+
+\begin_layout Description
+flatten
+\begin_inset LatexCommand index
+name "ndarray!methods!flatten"
+
+\end_inset
+
+ (order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new 1-d array with data copied from self.
+ Equivalent to but slightly faster then a.flat.copy().
+
+\end_layout
+
+\begin_layout Description
+ravel
+\begin_inset LatexCommand index
+name "ndarray!methods!ravel"
+
+\end_inset
+
+ (order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 1-d version of self.
+ If self is single-segment, then the new array references self, otherwise,
+ a copy is made.
+\end_layout
+
+\begin_layout Description
+squeeze
+\begin_inset LatexCommand index
+name "ndarray!methods!squeeze"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array with all unit-length dimensions squeezed out.
+\end_layout
+
+\begin_layout Subsection
+Array item selection and manipulation
+\end_layout
+
+\begin_layout Standard
+For array methods that take an axis keyword, it defaults to None.
+ If axis is None, then the array is treated as a 1-D array.
+ Any other value for axis represents the dimension along which the operation
+ should proceed.
+
+\end_layout
+
+\begin_layout Description
+take
+\begin_inset LatexCommand index
+name "ndarray!methods!take"
+
+\end_inset
+
+ (indices=, axis=None, out=None, mode='raise')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The functionality of this method is available using the advanced indexing
+ ability of the
+\family typewriter
+ndarray
+\family default
+ object.
+ However, for doing selection along a single axis it is usually faster to
+ use take.
+ If axis is not None, this method is equivalent to
+\family typewriter
+self[indxobj]
+\family default
+ preceeded by
+\family typewriter
+indxobj=[slice(None)]*self.ndim; indxobj[
+\series bold
+axis
+\series default
+] =
+\family default
+
+\family typewriter
+\series bold
+indices
+\family default
+\series default
+.
+ It returns the elements or sub-arrays from self indicated by the index
+ numbers in indices.
+ If axis is None, then this method is equivalent to
+\family typewriter
+self.flat[indices]
+\family default
+.
+ The out and mode arguments allow for specification of the output array
+ and how out-of-bounds indices will be handled ('raise': raise an error,
+ 'wrap': wrap around, 'clip': clip to range)
+\end_layout
+
+\begin_layout Description
+put
+\begin_inset LatexCommand index
+name "ndarray!methods!put"
+
+\end_inset
+
+ (indices=, values=, mode='raise')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Performs the equivalent of
+\end_layout
+
+\begin_layout LyX-Code
+for n in
+\series bold
+indices
+\series default
+:
+\end_layout
+
+\begin_layout LyX-Code
+ self.flat[n] =
+\series bold
+values
+\series default
+[n]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Values is repeated if it is too short.
+ The mode argument specifies what to do if n is too large.
+
+\end_layout
+
+\begin_layout Description
+repeat
+\begin_inset LatexCommand index
+name "ndarray!methods!repeat"
+
+\end_inset
+
+ (repeats=, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Copy elements (or sub-arrays selected along axis) of self
+\series bold
+repeats
+\series default
+ times.
+ The repeats argument must be a sequence of length self.shape[axis] or a
+ scalar.
+ The repeats argument dictates how many times the element (or sub-array)
+ will be repeated in the result array.
+
+\end_layout
+
+\begin_layout Description
+choose
+\begin_inset LatexCommand index
+name "ndarray!methods!choose"
+
+\end_inset
+
+ (choices, out=None, mode='raise')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The array must be an integer (or bool) array with entries from
+\begin_inset Formula $0$
+\end_inset
+
+ to
+\begin_inset Formula $n$
+\end_inset
+
+.
+ Choices is a tuple of
+\begin_inset Formula $n$
+\end_inset
+
+ choice arrays:
+\begin_inset Formula $b0,\, b1,\,\ldots\,,\, bn$
+\end_inset
+
+.
+ (Alternatively, choices can be replaced with
+\begin_inset Formula $n$
+\end_inset
+
+ arguments where each argument is a choice array).
+ The return array will be formed from the elements of the choice arrays
+ according to the value of the elements of self.
+ In other words, the output array will merge the choice arrays together
+ by using the value of self at a particular position to select which choice
+ array should be used for the output at a particular position.
+ The out keyword allows specification of an output array and the clip keyword
+ allows different behavior when self contains entries outside the number
+ of choices.
+ The acceptable arguments to mode are 'raise' (RAISE), 'wrap' (WRAP), and
+ 'clip' (CLIP) ('raise' produces an error, 'wrap' converts the number into
+ range by periodic wrapping so that numbers <0 have
+\begin_inset Formula $n$
+\end_inset
+
+ repeatedly added and numbers >=
+\begin_inset Formula $n$
+\end_inset
+
+ have
+\begin_inset Formula $n$
+\end_inset
+
+ repeatedly subtracted, and 'clip' will clip all entries to be within the
+ range [0,
+\begin_inset Formula $n$
+\end_inset
+
+).
+\end_layout
+
+\begin_layout MyCode
+>>> a = array([0,3,2,1])
+\newline
+>>> a.choose([0,1,2,3],[10,11,12,13],
+\newline
+...
+ [20,21,22,23],[30,31,32,33])
+\newline
+array([ 0, 31, 22, 13])
+\end_layout
+
+\begin_layout Description
+sort
+\begin_inset LatexCommand index
+name "ndarray!methods!sort"
+
+\end_inset
+
+ (axis=-1, kind='quick', order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Sort the array in-place and return None.
+ The sort takes place over the given axis using an underlying sort algorithm
+ specified by kind.
+ The sorting algorithms available are 'quick', 'heap', and 'merge'.
+ For flexible types only the quicksort algorithm is available.
+ For arrays with fields defined, the order keyword allows specification
+ of the order in which to use the field names in the sort.
+ If order is a string then it is the field name to use to define the sort.
+ If order is a list (or tuple) of strings, then it specifies a lexicographic
+ ordering so that the first listed field name is compared first if that
+ results in equality, the second listed field name is used for the comparison
+ and so on.
+ If order is None, then arrays with fields use the first field for comparison.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a=array([[0.2,1.3,2.5],[1.5,0.1,1.4]]);
+\newline
+>>> b=a.copy(); b.sort(0); print b
+\newline
+[[
+ 0.2 0.1 1.4]
+\newline
+ [ 1.5 1.3 2.5]]
+\newline
+>>> b=a.copy(); b.sort(1); print b
+\newline
+[[ 0.2 1.3 2.5]
+\newline
+
+ [ 0.1 1.4 1.5]]
+\end_layout
+
+\begin_layout Description
+argsort
+\begin_inset LatexCommand index
+name "ndarray!methods!argsort"
+
+\end_inset
+
+ (axis=-1, kind='quick', order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an index array of the same size as self showing which indices along
+ the given axis should be selected to sort self along that axis.
+ Uses an underlying sort algorithm specified by kind.
+ The sorting algorithms available are 'quick', 'heap', and 'merge'.
+ For arrays with fields defined, the order keyword allows specification
+ of the order in which to use the field names in the sort.
+ If order is a string then it is the field name to use to define the sort.
+ If order is a list (or tuple) of strings, then it specifies a lexicographic
+ ordering so that the first listed field name is compared first if that
+ results in equality, the second listed field name is used for the comparison
+ and so on.
+ If order is None, then arrays with fields use the first field for comparison.
+
+\end_layout
+
+\begin_layout MyCode
+>>> b=a.copy(); print b.argsort(0)
+\newline
+[[0 1 1]
+\newline
+ [1 0 0]]
+\newline
+>>> b=a.copy(); print b.argsort(1
+)
+\newline
+[[0 1 2]
+\newline
+ [1 2 0]]
+\end_layout
+
+\begin_layout Tip
+Complex valued arrays sort lexicographically by comparing first the real
+ parts and then the imaginary parts if the real parts are the same.
+\end_layout
+
+\begin_layout Description
+searchsorted
+\begin_inset LatexCommand index
+name "ndarray!methods!searchsorted"
+
+\end_inset
+
+ (values, side='left')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an index array (dtype=intp) of the same shape as values showing
+ the index where the value would fit in self.
+ The index is such that self[index-1]
+\begin_inset Formula $<$
+\end_inset
+
+ value
+\begin_inset Formula $\le$
+\end_inset
+
+ self[index] when side is 'left'.
+ In this formula self[self.size]=
+\begin_inset Formula $\infty$
+\end_inset
+
+ and self[-1]=
+\begin_inset Formula $-\infty$
+\end_inset
+
+.
+ Therefore, if value is larger than all elements of self, then index is
+ self.size.
+ If value is smaller than all elements of self, then index is 0.
+ Self must be a sorted 1-d array.
+ If elements of self are repeated, the index of the first occurrence is
+ used.
+ If side is 'right', then the search rule is switched so that the
+\begin_inset Formula $<$
+\end_inset
+
+ sign is on the
+\begin_inset Quotes eld
+\end_inset
+
+right
+\begin_inset Quotes erd
+\end_inset
+
+ instead of the left in the search rule.
+ In other words, the index returned is such that self[index-1]
+\begin_inset Formula $\le$
+\end_inset
+
+value
+\begin_inset Formula $<$
+\end_inset
+
+ self[index].
+\end_layout
+
+\begin_layout MyCode
+>>> b=a.ravel(); b.sort()
+\newline
+>>> b.searchsorted([0.0, 1.35, 2.0, 3.0])
+\newline
+array([0, 3,
+ 5, 6])
+\end_layout
+
+\begin_layout Description
+nonzero
+\begin_inset LatexCommand index
+name "ndarray!methods!nonzero"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the
+\begin_inset Formula $n$
+\end_inset
+
+-dimensional indices for elements of the
+\begin_inset Formula $n$
+\end_inset
+
+-dimensional array self that are nonzero into an
+\begin_inset Formula $n$
+\end_inset
+
+-tuple of equal-length index arrays.
+ In particular, notice that a 0-dimensional array always returns an empty
+ tuple.
+
+\end_layout
+
+\begin_layout MyCode
+>>> x = arange(15); y=x.reshape(3,5)
+\newline
+>>> (x>8).nonzero()
+\newline
+(array([ 9, 10, 11,
+ 12, 13, 14]),)
+\newline
+>>> (y>8).nonzero()
+\newline
+(array([1, 2, 2, 2, 2, 2]), array([4, 0,
+ 1, 2, 3, 4]))
+\end_layout
+
+\begin_layout Description
+compress
+\begin_inset LatexCommand index
+name "ndarray!methods!compress"
+
+\end_inset
+
+ (condition=, axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This method expects condition to be a one-dimensional mask array of the
+ same length as self.shape[axis].
+ If the array is less than self.shape[axis], then False is assumed for the
+ missing elements.
+ The method returns the elements (or sub-arrays along the given axis) of
+ self where condition is true.
+ The shape of the return array is self.shape with the axis dimension replaced
+ by the number of True elements of condition.
+ The same effect can often be accomplished using array indexing.
+\end_layout
+
+\begin_layout MyCode
+>>> x=array([0,1,2,3])
+\newline
+>>> x.compress(x > 2)
+\newline
+array([3])
+\newline
+>>> x[x>2]
+\newline
+array([3])
+\end_layout
+
+\begin_layout Description
+diagonal
+\begin_inset LatexCommand index
+name "ndarray!methods!diagonal"
+
+\end_inset
+
+ (offset=0, axis1=0, axis2=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If self is 2-d, return the
+\series bold
+offset
+\series default
+ (from the main diagonal) diagonal of self.
+ If self is larger than 2-d, then return an array constructed from all the
+ diagonals created from all the 2-d sub-arrays formed using all of axis1
+ and axis2.
+ The offset parameter is with respect to axis2.
+ The shape of the returned array is found by removing the axis1 and axis2
+ entries from self.shape and then appending the length of the offset diagonal
+ of each 2-d sub-array.
+\end_layout
+
+\begin_layout MyCode
+>>> a=arange(25).reshape(5,5); print a
+\newline
+[[ 0 1 2 3 4]
+\newline
+ [ 5 6 7 8 9]
+\newline
+
+ [10 11 12 13 14]
+\newline
+ [15 16 17 18 19]
+\newline
+ [20 21 22 23 24]]
+\newline
+>>> print a.diagonal()
+\newline
+[
+ 0 6 12 18 24]
+\newline
+>>> print a.diagonal(1)
+\newline
+[ 1 7 13 19]
+\newline
+>>> print a.diagonal(-1)
+\newline
+[
+ 5 11 17 23]
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Array item selection and shape manipulation methods.
+ If axis is an argument, then the calculation is performed along that axis.
+ An axis value of None means the array is flattened before calculation proceeds.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+setlength{
+\backslash
+extrarowheight}{0.25eM}
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="18" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="50text%">
+<column alignment="block" valignment="top" leftline="true" rightline="true" width="30text%">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Method
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Arguments
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+argsort
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+argsort (axis=None, kind='quick')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Indices showing how to sort array.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+choose
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+choose (c0, c1 , ..., cn, out=None, clip='raise')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Choose from different arrays based on value of self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+compress
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(condition=, axis=None, out=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Elements of self where condition is true.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+diagonal
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(offset=0, axis1=0, axis2=1)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Return a diagonal from self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+flatten
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(order='C')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+A 1-d copy of self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+nonzero
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+True where self is not zero.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+put
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(indices=, values=, mode='raise')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Place values at 1-d index locations of self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+ravel
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(order='C')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1-d version of self (no data copy if self is C-style contiguous).
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+repeat
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(repeats=, axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Repeat elements of self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+reshape
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(d1,d2,...,dn, order='C')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Return reshaped version of self.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+resize
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(d1,d2,...,dn, refcheck=1, order='Any')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Resize self in-place.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+searchsorted
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(values)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Show where values would be placed in self (assumed sorted).
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+sort
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, kind='quick')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Copy of self sorted along axis.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+squeeze
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Squeeze out all length-1 dimensions.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+swapaxes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis1, axis2)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Swap two dimensions of self.
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+take
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(indices=, axis=None, out=None, mode='raise')
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Select elements of self along axis according to indices.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+transpose
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(permute <None>)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Rearrange shape of self according to permute.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Array calculation
+\end_layout
+
+\begin_layout Standard
+Many of these methods take an argument named axis.
+ In such cases, if axis is None (the default), the array is treated as a
+ 1-d array and the operation is performed over the entire array.
+ This behavior is also the default if self is a 0-dimensional array or array
+ scalar.
+ If axis is an integer, then the operation is done over the given axis (for
+ each 1-d subarray that can be created along the given axis).
+ The parameter dtype specifies the data type over which a reduction operation
+ (like summing) should take place.
+ The default reduce data type is the same as the data type of self.
+ To avoid overflow, it can be useful to perform the reduction using a larger
+ data type.
+ For several methods, an optional out argument can be provided and the result
+ will be placed into the output array given.
+ The out argument must be an ndarray and have the same number of elements.
+ It can be of a different type in which case casting will be performed.
+
+\end_layout
+
+\begin_layout Description
+max
+\begin_inset LatexCommand index
+name "ndarray!methods!max"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the largest value in self.
+ This is a better way to compute the maximum over an array, than using max(self).
+ The latter uses the generic sequence interface to self.
+ This will be slower, and will try to get an answer by comparing whole sub-array
+s of self.
+ This will be incorrect for arrays larger than 1-d.
+\end_layout
+
+\begin_layout Description
+argmax
+\begin_inset LatexCommand index
+name "ndarray!methods!argmax"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (first, 1-d) index of the largest value in self.
+\end_layout
+
+\begin_layout Description
+min
+\begin_inset LatexCommand index
+name "ndarray!methods!min"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the smallest value in self.
+ This is a better way to compute the minimum over an array, than using min(self).
+ The latter uses the generic sequence interface to self.
+ This will be slower, and will try to get an answer by comparing whole sub-array
+s of self.
+ This will be incorrect for arrays larger than 1-d.
+\end_layout
+
+\begin_layout Description
+argmin
+\begin_inset LatexCommand index
+name "ndarray!methods!argmin"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (first, 1-d) index of the smallest value in self.
+\end_layout
+
+\begin_layout Description
+ptp
+\begin_inset LatexCommand index
+name "ndarray!methods!ptp"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the difference of the largest to the smallest value in self.
+ Equivalent to self.max(axis) - self.min(axis)
+\end_layout
+
+\begin_layout Description
+clip
+\begin_inset LatexCommand index
+name "ndarray!methods!clip"
+
+\end_inset
+
+ (min=,max=, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array where any element in self less than min is set to min
+ and any element less than max is set to max.
+ Equivalent to self[self<min]=min; self[self>max]=max.
+\end_layout
+
+\begin_layout Description
+conj
+\begin_inset LatexCommand index
+name "ndarray!methods!conj"
+
+\end_inset
+
+ (out=None)
+\end_layout
+
+\begin_layout Description
+conjugate
+\begin_inset LatexCommand index
+name "ndarray!methods!conjugate"
+
+\end_inset
+
+ (out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the conjugate of elements of the array.
+\end_layout
+
+\begin_layout Description
+round
+\begin_inset LatexCommand index
+name "ndarray!methods!round"
+
+\end_inset
+
+ (decimals=0, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Round the elements of the array to the nearest decimal.
+ For decimals < 0, the rounding is done to the nearest tens, hundreds, etc.
+ Rounding of exactly the half-interval is to the nearest even integer.
+ This is the only difference with standard Python rounding.
+\end_layout
+
+\begin_layout Description
+trace
+\begin_inset LatexCommand index
+name "ndarray!methods!trace"
+
+\end_inset
+
+ (offset=0, axis1=0, axis2=1, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Perform a summation along each diagonal specified by offset, axis1, and
+ axis2.
+ Equivalent to diagonal(offset,axis1,axis2).sum(axis=-1, dtype=dtype)
+\end_layout
+
+\begin_layout Description
+sum
+\begin_inset LatexCommand index
+name "ndarray!methods!sum"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the sum
+\begin_inset Formula \[
+\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
+
+\end_inset
+
+ where axis ':' objects are placed before the
+\begin_inset Formula $i.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+cumsum
+\begin_inset LatexCommand index
+name "ndarray!methods!cumsum"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the cumulative sum.
+ If ret is the return array of the same shape as
+\begin_inset Formula $\textrm{self},$
+\end_inset
+
+ then
+\begin_inset Formula \[
+\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\sum_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+mean
+\begin_inset LatexCommand index
+name "ndarray!methods!mean"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the average value caculated as
+\begin_inset Formula \[
+\frac{1}{N}\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
+
+\end_inset
+
+ where
+\begin_inset Formula $N$
+\end_inset
+
+ is self.shape[axis] and axis ':' objects are placed before the
+\begin_inset Formula $i.$
+\end_inset
+
+ The sum is done in the data-type of self unless self is an integer or Boolean
+ data-type and then it is done over the float data-type.
+
+\end_layout
+
+\begin_layout Description
+var
+\begin_inset LatexCommand index
+name "ndarray!methods!var"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the variance of the data calculated as
+\begin_inset Formula \[
+\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $N$
+\end_inset
+
+ is self.shape[axis] and
+\begin_inset Formula $\mu$
+\end_inset
+
+ is the mean (restored to the same number of dimensions as self with
+\begin_inset Formula $\mu$
+\end_inset
+
+ copied along the axis dimension).
+ This is equivalent to (self**2).mean - self.mean()**2 and ((self-self.mean())**2).m
+ean().
+ The value of
+\begin_inset Formula $N-1$
+\end_inset
+
+ was not chosen for normalization because while it gives an
+\begin_inset Quotes eld
+\end_inset
+
+unbiased
+\begin_inset Quotes erd
+\end_inset
+
+ estimate, it is not always prudent to return unbiased estimates as they
+ may have larger mean-square error.
+ The sum is done using a float data-type if self has integer or Boolean
+ data-type, otherwise it is done using the same data-type as self.
+
+\end_layout
+
+\begin_layout Description
+std
+\begin_inset LatexCommand index
+name "ndarray!methods!std"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the standard deviation calculated as
+\begin_inset Formula \[
+\sqrt{\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $N$
+\end_inset
+
+ is self.shape[axis] and
+\begin_inset Formula $\mu$
+\end_inset
+
+ is the mean (restored to the same number of dimensions as self with
+\begin_inset Formula $\mu$
+\end_inset
+
+ copied along the axis dimension).
+ The sum is done using the same data-type as self unless self is an integer
+ or Boolean data-type and then it is done using a float data-type.
+
+\end_layout
+
+\begin_layout Description
+prod
+\begin_inset LatexCommand index
+name "ndarray!methods!prod"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the product calculated as
+\begin_inset Formula \[
+\prod_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+cumprod
+\begin_inset LatexCommand index
+name "ndarray!methods!cumprod"
+
+\end_inset
+
+ (axis=None, dtype=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the cumulative product so that the return array, ret, is the same
+ shape as self and
+\begin_inset Formula \[
+\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\prod_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+all
+\begin_inset LatexCommand index
+name "ndarray!methods!all"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if all entries along axis evaluate True, otherwise return False.
+\end_layout
+
+\begin_layout Description
+any
+\begin_inset LatexCommand index
+name "ndarray!methods!any"
+
+\end_inset
+
+ (axis=None, out=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if any entries along axis evaluate True, otherwise return False
+\begin_inset LatexCommand index
+name "ndarray!methods|)"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Array object calculation methods.
+ If axis is an argument, then the calculation is performed along that axis.
+ An axis value of None means the array is flattened before calculation proceeds.
+ All of these methods can take an optional out= argument which can specify
+ the output array to write the results into.
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+setlength{
+\backslash
+extrarowheight}{0.5eM}
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="18" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="30text%">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Method
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Arguments
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\family sans
+\series bold
+\size large
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+all
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+true if all entries are true.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+any
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+true if any entries are true.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+argmax
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+index of largest value.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+argmin
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+index of smallest value.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+clip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(min=, max=)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+self[self>max]=max; self[self<min]=min
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+conj
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+()
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+complex conjugate
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+cumprod
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+cumulative product
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+cumsum
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+cumulative sum
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+max
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+maximum of self
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+mean
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+mean of self
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+min
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+minimum of self
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+prod
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+multiply elements of self together
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+ptp
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+self.max(axis)-self.min(axis)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+var
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+variance of self
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+std
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+standard deviation of self
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+sum
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(axis=None, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+add elements of self together
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+
+\series bold
+trace
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+(offset, axis1=0, axis2=0, dtype=None)
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+sum along a diagonal
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Array Special Methods
+\end_layout
+
+\begin_layout Standard
+Methods
+\begin_inset LatexCommand index
+name "ndarray!special methods|("
+
+\end_inset
+
+ in this chapter are not generally meant to be called directly by the user.
+ They are called by Python and are used to customize behavior of the ndarray
+ object as it interacts with the Python language and standard library.
+
+\end_layout
+
+\begin_layout Subsection
+Methods for standard library functions
+\end_layout
+
+\begin_layout Description
+__copy__
+\begin_inset LatexCommand index
+name "ndarray!special methods!copy"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ To allow copy.copy(a) to perform a shallow copy of an array.
+ Exactly the same as self.copy() (contents of object arrays are not copied).
+
+\end_layout
+
+\begin_layout Description
+__deepcopy__
+\begin_inset LatexCommand index
+name "ndarray!special methods!deepcopy"
+
+\end_inset
+
+ (memodict)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ To allow copy.deepcopy(a) to perform a deep copy.
+ This is the same as a shallow copy unless self is an object array.
+ Then, after the shallow copy is made, a copy.deepcopy(item) is called for
+ every item in the object array.
+
+\end_layout
+
+\begin_layout Description
+__reduce__
+\begin_inset LatexCommand index
+name "ndarray!special methods!reduce"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+__setstate__
+\begin_inset LatexCommand index
+name "ndarray!special methods!setstate"
+
+\end_inset
+
+ (shape, typestr, isfortran, data)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Pickling support for arrays is provided by these two methods.
+ When an array needs to be pickled, the __reduce__() method is called to
+ provide a 3-tuple of already-pickleable objects.
+ To construct a new object from the pickle, the first two elements of the
+ 3-tuple are used to construct a new (0-length) array of the correct type
+ and the last element of the 3-tuple, which is itself a 4-tuple of (shape,
+ typestr, isfortran, data) is passed to the __setstate__ method of the newly
+ created array to restore its contents.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The reduce method returns a 3-tuple consisting of (callable, args, state)
+ where callable is a simple constructor function that handles subclasses
+ of the ndarray.
+ Also, args is a 3-tuple of arguments to pass to this constructor function
+ (type(self), (0,), self.dtypechar), and state is a 4-tuple of information
+ giving the object's state (self.shape, self.dtypedescr, isfortran, string_or_list
+).
+ In this tuple, isfortran is a Bool stating whether the following flattened
+ data is in Fortran order or not, and string_or_list is a string formed
+ by self.tostring() if the data type is not object.
+ If the data type of self is an object array, then string_or_list is a flat
+ list equivalent to self.ravel().tolist().
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ On load from a pickle, the pickling code uses the first two elements from
+ the tuple returned by reduce to construct an empty 0-dimensional subclass
+ of the correct type.
+ The last element is then passed to the __setstate__ method of the newly
+ created array to restore its contents.
+
+\end_layout
+
+\begin_layout Note
+When data is a string, the __setstate__ method will directly use the string
+ memory as the array memory (new.base will point to the string).
+ The typestr contains enough information to decode how the memory should
+ be interpreted.
+\end_layout
+
+\begin_layout Subsection
+Basic customization
+\end_layout
+
+\begin_layout Description
+__new__
+\begin_inset LatexCommand index
+name "ndarray!special methods!new"
+
+\end_inset
+
+ (subtype, shape=, dtype=long_, buffer=None, offset=0, strides=None, order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This method creates a new ndarray.
+ It is typically only used in the __new__ method of a subclass.
+ This method is called to construct a new array whenever the object name
+ is called,
+\family typewriter
+a=ndarray(...)
+\family default
+.
+ It supports two basic modes of array creation:
+\end_layout
+
+\begin_layout Enumerate
+a single-segment array of the specified shape and data-type from newly allocated
+ memory;
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+uses shape, dtype, strides, and order arguments; others are ignored;
+\end_layout
+
+\begin_layout Enumerate
+The order argument allows specification of a Fortran-style contiguous memory
+ segment (order='Fortran');
+\end_layout
+
+\begin_layout Enumerate
+If strides is given, then it specifies the new strides of the array (and
+ the order keyword is ignored).
+ The strides will be checked for consistency with the dimension size so
+ that steps outside of the memory won't occur.
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+an array of the given shape and data type using the provided object, buffer,
+ which must export the buffer interface.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+all arguments can be used;
+\end_layout
+
+\begin_layout Enumerate
+strides can be given and will be checked for consistency with the shape,
+ data type, and available memory in buffer;
+\end_layout
+
+\begin_layout Enumerate
+order indicates whether the data buffer should be interpreted as Fortran-style
+ contiguous (order='Fortran') or not;
+\end_layout
+
+\begin_layout Enumerate
+offset can be used to start the array data at some offset in the buffer.
+
+\end_layout
+
+\end_deeper
+\begin_layout Note
+The ndarray uses the default no-op __init__
+\begin_inset LatexCommand index
+name "ndarray!special methods!init"
+
+\end_inset
+
+ function because the array is completely initialized after __new__ is called.
+\end_layout
+
+\begin_layout Description
+__array__
+\begin_inset LatexCommand index
+name "ndarray!special methods!array"
+
+\end_inset
+
+ (dtype {None})
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is a special method that should always return an object of type ndarray.
+ Useful for subclasses that need to get to the ndarray object.
+
+\end_layout
+
+\begin_layout Description
+__array_wrap__
+\begin_inset LatexCommand index
+name "ndarray!special methods!array\\_wrap"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is a special method that always returns an object of the same Python
+ type as self using the array passed as an argument.
+ This is mainly useful for subclasses as it is an easy way to get the subclass
+ back from an ndarray.
+\end_layout
+
+\begin_layout Description
+__lt__
+\begin_inset LatexCommand index
+name "ndarray!special methods!lt"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__le__
+\begin_inset LatexCommand index
+name "ndarray!special methods!le"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__gt__
+\begin_inset LatexCommand index
+name "ndarray!special methods!gt"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ge__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ge"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__eq__
+\begin_inset LatexCommand index
+name "ndarray!special methods!eq"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ne__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ne"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Defined to support rich comparisons (<, <=, >, >=, ==, !=) on ndarrays
+ using universal functions.
+
+\end_layout
+
+\begin_layout Description
+__str__
+\begin_inset LatexCommand index
+name "ndarray!special methods!str"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+__repr__
+\begin_inset LatexCommand index
+name "ndarray!special methods!repr"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions print the array when called by str(self) and repr(self)
+ respectively.
+ Array printing can be changed using set_string_function(..).
+ Default array printing has been borrowed from numarray whose printing code
+ was written by Perry Greenfield and J.
+ Todd Miller.
+ By default, arrays print such that
+\end_layout
+
+\begin_layout Enumerate
+The last axis is always printed left to right.
+\end_layout
+
+\begin_layout Enumerate
+The next-to-last axis is printed top to bottom.
+\end_layout
+
+\begin_layout Enumerate
+Remaining axes are printed top to bottom with increasing numbers of separators.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Five parameters of the printing can be set using keyword arguments with
+
+\family typewriter
+set_printoptions(...)
+\family default
+.
+ The parameters
+\begin_inset LatexCommand index
+name "set\\_printoptions"
+
+\end_inset
+
+ can all be retrieved using
+\family typewriter
+get_printoptions()
+\family default
+.
+ These printing options
+\begin_inset LatexCommand index
+name "get\\_printoptions"
+
+\end_inset
+
+ are
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+precision the number of digits of precision for floating point output (default
+ 8);
+\end_layout
+
+\begin_layout Description
+threshold total number of array elements which triggers summarization rather
+ than full representation (default 1000);
+\end_layout
+
+\begin_layout Description
+edgeitems number of array items in summary at beginning an end of each dimension
+ (default 3);
+\end_layout
+
+\begin_layout Description
+linewidth the number of characters per line for the purpose of inserting
+ line breaks (default 71);
+\end_layout
+
+\begin_layout Description
+suppress Boolean indicating whether or not to suppress printing of small
+ floating point values using scientific notation (default False).
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+__nonzero__
+\begin_inset LatexCommand index
+name "ndarray!special methods!nonzero"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Truth-value testing for the array as a whole.
+ It is called whenever the truth value of the ndarray as a whole object
+ is required.
+ This raises an error if the number of elements in the the array is larger
+ than 1 because the truth value of such arrays is ambiguous.
+ Use .any() and .all() instead to be clear about what is meant in such cases.
+ If the number of elements is 0 then False is returned.
+ If there is one element in the array, then the truth-value of this element
+ is returned.
+\end_layout
+
+\begin_layout Subsection
+Container customization
+\end_layout
+
+\begin_layout Description
+__len__
+\begin_inset LatexCommand index
+name "ndarray!special methods!len"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns self.shape[0].
+ It is called in response to len(self).
+ Use self.size to get the total number of elements in the array.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Notice that the default Python iterator for sequences is used when arrays
+ are used in places that expect an iterator.
+ This iterator returns successively self[0], self[1], ..., self[self.__len__()].
+ Use self.flat to get an iterator that walks through the entire array one
+ element at a time.
+\end_layout
+
+\begin_layout Description
+__getitem__
+\begin_inset LatexCommand index
+name "ndarray!special methods!getitem"
+
+\end_inset
+
+ (key)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Called when evaluating self[key] construct.
+ Items from the array can be selected using this customization.
+ This construct has both standard and extended indexing abilities which
+ are explained in Section
+\begin_inset LatexCommand ref
+reference "sec:Array-indexing"
+
+\end_inset
+
+.
+ A named field can be retrieved if key is a string and fields are defined
+ in the dtypedescr object associated with this array.
+
+\end_layout
+
+\begin_layout Description
+__setitem__
+\begin_inset LatexCommand index
+name "ndarray!special methods!setitem"
+
+\end_inset
+
+ (key, value)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Called when evaluating self[key]=value.
+ Items in the array can be set using this construct.
+ This construct is explained in Section
+\begin_inset LatexCommand ref
+reference "sec:Array-indexing"
+
+\end_inset
+
+.
+ A named field can be set if key is a string and fields are defined in the
+ dtypedescr object associated with this array.
+
+\end_layout
+
+\begin_layout Description
+__getslice__
+\begin_inset LatexCommand index
+name "ndarray!special methods!getslice"
+
+\end_inset
+
+ (i, j)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to self.__getitem__(slice(i,j)) but defined mainly so that C
+ code can use the sequence interface.
+ Called to evaluate self[i:j]
+\end_layout
+
+\begin_layout Description
+__setslice__
+\begin_inset LatexCommand index
+name "ndarray!special methods!setslice"
+
+\end_inset
+
+ (i, j, value)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to self.__setitem__(slice(i,j), value) but defined mainly so
+ C code can use the sequence interface.
+ Called to evaluate self[i:j] = value.
+\end_layout
+
+\begin_layout Description
+__contains__
+\begin_inset LatexCommand index
+name "ndarray!special methods!contains"
+
+\end_inset
+
+ (item)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Called to determine truth value of the
+\family typewriter
+item in self
+\family default
+ construct.
+ Returns the equivalent of (self==item).any()
+\end_layout
+
+\begin_layout Subsection
+Arithmetic customization
+\end_layout
+
+\begin_layout Subsubsection
+Binary
+\end_layout
+
+\begin_layout Description
+__add__
+\begin_inset LatexCommand index
+name "ndarray!special methods!add"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__sub__
+\begin_inset LatexCommand index
+name "ndarray!special methods!sub"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__mul__
+\begin_inset LatexCommand index
+name "ndarray!special methods!mul"
+
+\end_inset
+
+ (self, other)
+\end_layout
+
+\begin_layout Description
+__div__
+\begin_inset LatexCommand index
+name "ndarray!special methods!div"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__truediv__
+\begin_inset LatexCommand index
+name "ndarray!special methods!truediv"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__floordiv__
+\begin_inset LatexCommand index
+name "ndarray!special methods!floordiv"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__mod__
+\begin_inset LatexCommand index
+name "ndarray!special methods!mod"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__divmod__
+\begin_inset LatexCommand index
+name "ndarray!special methods!divmod"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__pow__
+\begin_inset LatexCommand index
+name "ndarray!special methods!pow"
+
+\end_inset
+
+ (other[,modulo])
+\end_layout
+
+\begin_layout Description
+__lshift__
+\begin_inset LatexCommand index
+name "ndarray!special methods!lshift"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__rshift__
+\begin_inset LatexCommand index
+name "ndarray!special methods!rshift"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__and__
+\begin_inset LatexCommand index
+name "ndarray!special methods!and"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__or__
+\begin_inset LatexCommand index
+name "ndarray!special methods!or"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__xor__
+\begin_inset LatexCommand index
+name "ndarray!special methods!xor"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These methods are defined for ndarrays to implement the operations (
+\family typewriter
++
+\family default
+,
+\family typewriter
+-
+\family default
+,
+\family typewriter
+*
+\family default
+,
+\family typewriter
+/,
+\family default
+
+\family typewriter
+/,
+\family default
+
+\family typewriter
+//
+\family default
+,
+\family typewriter
+%
+\family default
+,
+\family typewriter
+divmod()
+\family default
+,
+\family typewriter
+**
+\family default
+ or
+\family typewriter
+pow()
+\family default
+,
+\family typewriter
+<<,
+\family default
+
+\family typewriter
+>>
+\family default
+,
+\family typewriter
+&
+\family default
+,
+\family typewriter
+^
+\family default
+,
+\family typewriter
+|
+\family default
+).
+ This is done using calls to the corresponding universal function object
+ (add, subtract, multiply, divide, true_divide, floor_divide, remainder,
+ divide and remainder, power, left_shift, right_shift, bitwise_and, bitwise_xor,
+ bitwise_or).
+ These implement element-by-element operations for arrays that are broadcastable
+ to the same shape.
+
+\end_layout
+
+\begin_layout Itemize
+any third argument to
+\family typewriter
+pow()
+\family default
+ is silently ignored as the underlying ufunc (power) only takes two arguments.
+\end_layout
+
+\begin_layout Itemize
+the three division operators are all defined, div is active by default,
+ truediv is active when __future__.division is in effect.
+\end_layout
+
+\begin_layout Note
+Because it is a built-in type (written in C), the __r<op>__ special methods
+ are not directly defined for the ndarray.
+\end_layout
+
+\begin_layout Subsubsection
+In-place
+\end_layout
+
+\begin_layout Description
+__iadd__
+\begin_inset LatexCommand index
+name "ndarray!special methods!iadd"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__isub__
+\begin_inset LatexCommand index
+name "ndarray!special methods!isub"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__imul__
+\begin_inset LatexCommand index
+name "ndarray!special methods!imul"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__idiv__
+\begin_inset LatexCommand index
+name "ndarray!special methods!idiv"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__itruediv__
+\begin_inset LatexCommand index
+name "ndarray!special methods!itruediv"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ifloordiv__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ifloordiv"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__imod__
+\begin_inset LatexCommand index
+name "ndarray!special methods!imod"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ipow__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ipow"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ilshift__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ilshift"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__irshift__
+\begin_inset LatexCommand index
+name "ndarray!special methods!irshift"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__iand__
+\begin_inset LatexCommand index
+name "ndarray!special methods!iand"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ixor__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ixor"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+__ior__
+\begin_inset LatexCommand index
+name "ndarray!special methods!ior"
+
+\end_inset
+
+ (other)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These methods are implemented to handle the inplace operatiors (
+\family typewriter
++=
+\family default
+,
+\family typewriter
+-=
+\family default
+,
+\family typewriter
+*=
+\family default
+,
+\family typewriter
+/=
+\family default
+,
+\family typewriter
+/=
+\family default
+,
+\family typewriter
+//=
+\family default
+,
+\family typewriter
+%=
+\family default
+,
+\family typewriter
+**
+\family default
+=,
+\family typewriter
+<<
+\family default
+=,
+\family typewriter
+>>=
+\family default
+,
+\family typewriter
+&=
+\family default
+,
+\family typewriter
+^=
+\family default
+,
+\family typewriter
+|=
+\family default
+).
+ The inplace operators are implemented using the corresponding ufunc and
+ its ability to take an output argument (which is set as self).
+ Using inplace operations can save space and time and is therefore encouraged
+ whenever appropriate.
+
+\end_layout
+
+\begin_layout Warning
+In place operations will perform the calculation using the precision decided
+ by the data type of the two operands, but will silently downcast the result
+ (if necessary) so it can fit back into the array.
+ Therefore, for mixed precision calculations, a <op>= B can be different
+ than a = a <op> B.
+ For example, suppose a=ones((3,3)).
+ Then a+=3j is different than a=a+3j While they both perform the same computatio
+n, a+=3j casts the result to fit back in a, while a=a+3j re-binds the name
+ a to the result.
+\end_layout
+
+\begin_layout Subsubsection
+Unary operations
+\end_layout
+
+\begin_layout Description
+__neg__
+\begin_inset LatexCommand index
+name "ndarray!special methods!neg"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__pos__
+\begin_inset LatexCommand index
+name "ndarray!special methods!pos"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__abs__
+\begin_inset LatexCommand index
+name "ndarray!special methods!abs"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__invert__
+\begin_inset LatexCommand index
+name "ndarray!special methods!invert"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions are called in response to the unary operations (
+\family typewriter
+-
+\family default
+,
+\family typewriter
++
+\family default
+,
+\family typewriter
+abs()
+\family default
+,
+\family typewriter
+~
+\family default
+).
+ With the exception of __pos__, these are implemented using ufuncs (negative,
+ absolute, invert).
+ The unary
+\family typewriter
++
+\family default
+ operator, however simply calls self.copy(), and can therefore be used to
+ get a copy of an array.
+
+\end_layout
+
+\begin_layout Description
+__complex__
+\begin_inset LatexCommand index
+name "ndarray!special methods!complex"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__int__
+\begin_inset LatexCommand index
+name "ndarray!special methods!int"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__long__
+\begin_inset LatexCommand index
+name "ndarray!special methods!long"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__float__
+\begin_inset LatexCommand index
+name "ndarray!special methods!float"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__oct__
+\begin_inset LatexCommand index
+name "ndarray!special methods!oct"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+__hex__
+\begin_inset LatexCommand index
+name "ndarray!special methods!hex"
+
+\end_inset
+
+ (self)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions are also defined for the
+\family typewriter
+ndarray
+\family default
+ object to handle the operations
+\family typewriter
+complex()
+\family default
+,
+\family typewriter
+int()
+\family default
+,
+\family typewriter
+long()
+\family default
+,
+\family typewriter
+float()
+\family default
+,
+\family typewriter
+oct()
+\family default
+, and
+\family typewriter
+hex()
+\family default
+.
+ They work only on arrays that have one element in them and return the appropria
+te scalar
+\begin_inset LatexCommand index
+name "ndarray!special methods|)"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Tip
+The function called to implement many arithmetic special methods for arrays
+ can be modified using the function set_numeric_ops.
+ This function is called with keyword arguments indicating which operation(s)
+ to replace.
+ A dictionary is returned containing showing the old functions.
+ By default, these functions are set to the corresponding ufunc.
+
+\end_layout
+
+\begin_layout Section
+Array indexing
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "sec:Array-indexing"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+More powerful array
+\begin_inset LatexCommand index
+name "indexing|("
+
+\end_inset
+
+ indexing
+\begin_inset LatexCommand index
+name "ndarray!special methods!getitem"
+
+\end_inset
+
+ was an important extension introduced by numarray, and was therefore an
+ important part of the development of NumPy.
+ In particular, the desire to select arbitrary elements based on their position
+ in the array, and according to a mask was desirable.
+
+\end_layout
+
+\begin_layout Standard
+There are two kinds of indexing available using the
+\family typewriter
+X[obj]
+\family default
+ syntax: basic slicing, and advanced indexing
+\begin_inset LatexCommand index
+name "ndarray!special methods!setitem"
+
+\end_inset
+
+.
+ For the description of this syntax given below, X is the array to-be-sliced
+ and obj is the
+\emph on
+selection
+\emph default
+ object.
+ Furthermore, define
+\begin_inset Formula $N\equiv$
+\end_inset
+
+X.ndim.
+ These two methods of slicing have different behavior and are triggered
+ depending on obj.
+ Adding additional functionality yet remaining compatible with old uses
+ of slicing complicated the rules a little.
+ Hopefully, after studying this section, you will have a firm grasp of what
+ kind of selection will be initiated depending on the selection object.
+\end_layout
+
+\begin_layout Tip
+in Python X[(exp1, exp2, ..., expN)] is equivalent to X[exp1, exp2, ..., expN]
+ as the latter is just syntactic sugar for the former.
+\end_layout
+
+\begin_layout Subsection
+Basic Slicing
+\end_layout
+
+\begin_layout Standard
+Basic slicing
+\begin_inset LatexCommand index
+name "ndarray!special methods!getslice"
+
+\end_inset
+
+ extends Python's basic concept of slicing
+\begin_inset LatexCommand index
+name "ndarray!special methods!setslice"
+
+\end_inset
+
+ to N dimensions.
+ Basic slicing occurs when obj is a slice object (constructed by start:stop:step
+ notation inside of brackets), an integer, or a tuple of slice objects and
+ integers.
+ Ellipsis and newaxis objects can be interspersed with these as well.
+ In order to remain backward compatible with a common usage in Numeric,
+ basic slicing is also initiated if the selection object is any sequence
+ (such as a list) containing slice objects, the ellipsis
+\begin_inset LatexCommand index
+name "ellipsis"
+
+\end_inset
+
+ object, or the newaxis
+\begin_inset LatexCommand index
+name "newaxis"
+
+\end_inset
+
+ object, but no integer arrays or other embedded sequences.
+
+\end_layout
+
+\begin_layout Standard
+The standard rules of sequence slicing apply to basic slicing on a per-dimension
+ basis (including using a step index).
+ Some useful concepts to remember include:
+\end_layout
+
+\begin_layout Itemize
+The basic slice syntax is '
+\begin_inset Formula $i:j:k$
+\end_inset
+
+' where
+\begin_inset Formula $i$
+\end_inset
+
+ is the starting index,
+\begin_inset Formula $j$
+\end_inset
+
+ is the stopping index, and
+\begin_inset Formula $k$
+\end_inset
+
+ is the step (
+\begin_inset Formula $k\neq0$
+\end_inset
+
+).
+ This selects the
+\begin_inset Formula $m$
+\end_inset
+
+ elements (in the corresponding dimension) with index values
+\begin_inset Formula $i,\, i+k,\,\ldots,\, i+(m-1)k$
+\end_inset
+
+ where
+\begin_inset Formula $m=q+(r\neq0)$
+\end_inset
+
+ where
+\begin_inset Formula $q$
+\end_inset
+
+ and
+\begin_inset Formula $r$
+\end_inset
+
+ are the quotient and remainder obtained by dividing
+\begin_inset Formula $j-i$
+\end_inset
+
+ by
+\begin_inset Formula $k$
+\end_inset
+
+:
+\begin_inset Formula $j-i=qk+r$
+\end_inset
+
+, so that
+\begin_inset Formula $i+\left(m-1\right)k<j.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Itemize
+Assume
+\begin_inset Formula $n$
+\end_inset
+
+ is the number of elements in the dimension being sliced.
+ Then, if
+\begin_inset Formula $i$
+\end_inset
+
+ is not given it defaults to 0 for
+\begin_inset Formula $k>0$
+\end_inset
+
+ and
+\begin_inset Formula $n$
+\end_inset
+
+ for
+\begin_inset Formula $k<0$
+\end_inset
+
+.
+ If
+\begin_inset Formula $j$
+\end_inset
+
+ is not given it defaults to
+\begin_inset Formula $n$
+\end_inset
+
+ for
+\begin_inset Formula $k>0$
+\end_inset
+
+ and
+\begin_inset Formula $-1$
+\end_inset
+
+ for
+\begin_inset Formula $k<0$
+\end_inset
+
+.
+ If
+\begin_inset Formula $k$
+\end_inset
+
+ is not given it defaults to 1.
+ Note that '::' is the same as ':' and means select all indices along this
+ axis.
+
+\end_layout
+
+\begin_layout Itemize
+If the number of objects in the selection tuple is less than
+\begin_inset Formula $N$
+\end_inset
+
+, then ':' is assumed for any remaining dimensions.
+\end_layout
+
+\begin_layout Itemize
+Ellipsis expand to the number of ':' objects needed to make a selection
+ tuple of the same length as X.ndim.
+ Only one ellipsis is expanded, any others are interpreted as more ':'
+\end_layout
+
+\begin_layout Itemize
+Each newaxis object in the selection tuple serves to expand the dimensions
+ of the resulting selection by one unit-length dimension.
+ The added dimension is the position of the newaxis object in the selection
+ tuple.
+
+\end_layout
+
+\begin_layout Itemize
+An integer,
+\begin_inset Formula $i$
+\end_inset
+
+, returns the same values as
+\begin_inset Formula $i:i+1$
+\end_inset
+
+
+\series bold
+except
+\series default
+ the dimensionality of the returned object is reduced by 1.
+ In particular, a selection tuple with the
+\begin_inset Formula $p^{\textrm{th}}$
+\end_inset
+
+ element an integer (and all other entries ':') returns the corresponding
+ sub-array with dimension
+\begin_inset Formula $N-1$
+\end_inset
+
+.
+ If
+\begin_inset Formula $N=1,$
+\end_inset
+
+ then the returned object is an Array Scalar.
+ These objects are explained in Chapter
+\begin_inset LatexCommand ref
+reference "cha:Scalar-objects"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Itemize
+If the selection tuple has all entries ':' except the
+\begin_inset Formula $p^{\textrm{th}}$
+\end_inset
+
+ entry which is a slice object
+\begin_inset Formula $i:j:k$
+\end_inset
+
+, then the returned array has dimension
+\begin_inset Formula $N$
+\end_inset
+
+ formed by concatenating the sub-arrays returned by integer indexing of
+ elements
+\begin_inset Formula $i$
+\end_inset
+
+,
+\begin_inset Formula $i+k$
+\end_inset
+
+,
+\begin_inset Formula $i+(m-1)k<j$
+\end_inset
+
+,
+\end_layout
+
+\begin_layout Itemize
+Basic slicing with more than one non-':' entry in the slicing tuple, acts
+ like repeated application of slicing using a single non-':' entry, where
+ the non-':' entries are successively taken (with all other non-':' entries
+ replaced by ':').
+ Thus, X[ind1,...,ind2,:] acts like X[ind1][...,ind2,:] under basic slicing.
+ Note this is NOT true for advanced slicing.
+
+\end_layout
+
+\begin_layout Itemize
+You may use slicing to set values in the array, but (unlike lists) you can
+ never grow the array.
+ The size of the value to be set in X[obj] = value must be (broadcastable)
+ to the same shape as X[obj].
+
+\end_layout
+
+\begin_layout Standard
+Basic slicing always returns another
+\emph on
+view
+\begin_inset LatexCommand index
+name "ndarray!view"
+
+\end_inset
+
+
+\emph default
+ of the array.
+ In other words, the returned array from a basic slicing operation uses
+ the same data as the original array.
+ This can be confusing at first, but it is faster and can save memory.
+ A copy can always be obtained if needed using the unary + operator (which
+ has lower precedence than slicing) or the .copy() method.
+
+\end_layout
+
+\begin_layout Tip
+Remember that a slicing tuple can always be constructed as obj and used
+ in the x[obj] notation.
+ Slice objects can be used in the construction in place of the [start:stop:step]
+ notation.
+ For example,
+\family typewriter
+x[1:10:5,::-1]
+\family default
+ can also be implemented as
+\family typewriter
+obj=(slice(1,10,5), slice(None,None,-1)); X[obj]
+\family default
+.
+ This can be useful for constructing generic code that works on arrays of
+ arbitrary dimension.
+\end_layout
+
+\begin_layout Subsection
+Advanced selection
+\end_layout
+
+\begin_layout Standard
+Advanced selection is triggered when the selection object, obj, is a non-tuple
+ sequence object, an ndarray (of data type integer or bool), or a tuple
+ with at least one sequence object or ndarray (of data type integer or bool).
+ There are two types of advanced indexing: integer and Boolean.
+ Advanced selection always returns a copy of the data (contrast with basic
+ slicing that returns a view).
+
+\end_layout
+
+\begin_layout Subsubsection
+Integer
+\end_layout
+
+\begin_layout Standard
+Integer indexing allows selection of arbitrary items in the array based
+ on their
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional index.
+ This kind of selection occurs when advanced selection is triggered and
+ the selection object is not an array of data type bool.
+ For the discussion below, when the selection object is not a tuple, it
+ will be referred to as if it had been promoted to a 1-tuple, which will
+ be called the selection tuple.
+ The rules of advanced integer-style indexing are:
+\end_layout
+
+\begin_layout Itemize
+if the length of the selection tuple is larger than
+\begin_inset Formula $N$
+\end_inset
+
+(=X.ndim) an error is raised.
+\end_layout
+
+\begin_layout Itemize
+all sequences and scalars in the selection tuple are converted to intp indexing
+ arrays.
+
+\end_layout
+
+\begin_layout Itemize
+all selection tuple objects must be convertible to intp arrays, or slice
+ objects, or the Ellipsis (...) object.
+\end_layout
+
+\begin_layout Itemize
+Exactly one Ellipsis object will be expanded, any other Ellipsis objects
+ will be treated as full slice (':') objects.
+ The Ellipsis object is replaced with as many full slice (':') objects as
+ needed to make the length of the selection tuple
+\begin_inset Formula $N$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Itemize
+If the selection tuple is smaller than
+\begin_inset Formula $N$
+\end_inset
+
+, then as many ':' objects as needed are added to the end of the selection
+ tuple so that the modified selection tuple has length
+\begin_inset Formula $N$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Itemize
+The shape of all the integer indexing arrays must be broadcastable to the
+ same shape.
+ Arrays are broadcastable if any of the following are satisfied
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+The arrays all have exactly the same shape.
+\end_layout
+
+\begin_layout Enumerate
+The arrays all have the same number of dimensions and the length of each
+ dimensions is either a common length or 1.
+\end_layout
+
+\begin_layout Enumerate
+The arrays that have too few dimensions can have their shapes pre-pended
+ with a dimension of length 1 to satisfy property 2.
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+The shape of the output (or the needed shape of the object to be used for
+ setting) is the broadcasted shape.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example: If a.shape is (5,1), b.shape is (1,6), c.shape is (6,) and d.shape
+ is () so that d is a scalar, then a, b, c, and d are all broadcastable
+ to dimension (5,6).
+ The array
+\begin_inset Quotes eld
+\end_inset
+
+a
+\begin_inset Quotes erd
+\end_inset
+
+ acts like a (5,6) array where a[:,0] is broadcast to the other columns,
+
+\begin_inset Quotes eld
+\end_inset
+
+b
+\begin_inset Quotes erd
+\end_inset
+
+ acts like a (5,6) array where b[0,:] is broadcast to the other rows,
+\begin_inset Quotes eld
+\end_inset
+
+c
+\begin_inset Quotes erd
+\end_inset
+
+ acts like a (1,6) array and therefore a (5,6) where c[:] is broadcast to
+ every row, and finally
+\begin_inset Quotes eld
+\end_inset
+
+d
+\begin_inset Quotes erd
+\end_inset
+
+ acts like a (5,6) array where the single values is repeated.
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+After expanding any ellipses and filling out any missing (':') objects in
+ the selection tuple, then let
+\begin_inset Formula $N_{t}$
+\end_inset
+
+ be the number of indexing arrays, and let
+\begin_inset Formula $N_{s}=N-N_{t}$
+\end_inset
+
+ be the number of slice objects.
+ Note that
+\begin_inset Formula $N_{t}>0$
+\end_inset
+
+ (or we wouldn't be doing advanced integer indexing).
+
+\end_layout
+
+\begin_layout Itemize
+If
+\begin_inset Formula $N_{s}=0$
+\end_inset
+
+ then the
+\begin_inset Formula $M$
+\end_inset
+
+-dimensional result is constructed by varying the index tuple
+\begin_inset Formula $\left(i_{1},\ldots,i_{M}\right)$
+\end_inset
+
+ over the range of the result shape and for each value of the index tuple
+ setting:
+\begin_inset Formula \[
+\textrm{result[$i_{1},\ldots,i_{M}$]=X[ind$_{1}$[$i_{1},\ldots i_{M}$], ind$_{2}$[$i_{1},\ldots,i_{M}$], \, etc.,\, ind$_{N}$[$i_{1},\ldots,i_{M}$]}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example: Suppose the shape of the broadcasted indexing arrays is 3-dimensional
+ and
+\begin_inset Formula $N$
+\end_inset
+
+ is 2.
+ Then the result is found by letting
+\begin_inset Formula $i,j,k$
+\end_inset
+
+ run over the shape found by broadcasting
+\begin_inset Formula $\textrm{ind}_{1},$
+\end_inset
+
+ and
+\begin_inset Formula $\textrm{ind}_{2},$
+\end_inset
+
+and for each
+\begin_inset Formula $i,j,k$
+\end_inset
+
+ setting result[
+\begin_inset Formula $i,j,k$
+\end_inset
+
+] = X[
+\begin_inset Formula $\textrm{ind}_{1}[i,j,k]$
+\end_inset
+
+,
+\begin_inset Formula $\textrm{ind}_{2}[i,j,k]$
+\end_inset
+
+].
+
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+If
+\begin_inset Formula $N_{s}>0$
+\end_inset
+
+, then partial indexing is done.
+ This can be somewhat mind-boggling to understand, but if you think in terms
+ of the shapes of the arrays involved, it can be easier to grasp what happens.
+ In simple cases (
+\emph on
+i.e.
+
+\emph default
+ one indexing array and
+\begin_inset Formula $N-1$
+\end_inset
+
+ slice objects) it does exactly what you would expect (concatenation of
+ repeated application of basic slicing).
+ The rule for partial indexing is that the shape of the result (or the interpret
+ed shape of the object to be used in setting) is the shape of X with the
+ indexed subspace replaced with the broadcasted indexing subspace.
+ If the index subspaces are right next to each other, then the broadcasted
+ indexing space directly replaces all of the indexed subspaces in X.
+ If the indexing subspaces are separated (by slice objects), then the broadcaste
+d indexing space is first, followed by the sliced subspace of X.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example\InsetSpace ~
+1: Suppose X.shape is (10,20,30) and ind is a (2,3,4) indexing intp
+ array, then result=X[...,ind,:] has shape (10,2,3,4,30) because the (20,)-shaped
+ subspace has been replaced with a (2,3,4)-shaped broadcasted indexing subspace.
+ If we let
+\begin_inset Formula $i,j,k$
+\end_inset
+
+ loop over the (2,3,4)-shaped subspace then result[...,i,j,k,:] = X[...,ind[i,j,k],:].
+ This example produces the same result as X.take(ind,axis=-2).
+
+\end_layout
+
+\begin_layout Description
+Example\InsetSpace ~
+2: Now let X.shape be (10,20,30,40,50) and suppose
+\begin_inset Formula $\textrm{ind}_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $\textrm{ind}_{2}$
+\end_inset
+
+ are broadcastable to the shape (2,3,4).
+ Then X[:,ind
+\begin_inset Formula $_{1}$
+\end_inset
+
+,ind
+\begin_inset Formula $_{2}$
+\end_inset
+
+] has shape (10,2,3,4,40,50) because the (20,30)-shaped subspace from X
+ has been replaced with the (2,3,4) subspace from the indices.
+ However, X[:,ind
+\begin_inset Formula $_{1}$
+\end_inset
+
+,:,ind
+\begin_inset Formula $_{2}$
+\end_inset
+
+,:] has shape (2,3,4,10,30,50) because there is no unambiguous place to
+ drop in the indexing subspace, thus it is tacked-on to the beginning.
+ It is always possible to use .transpose() to move the sups pace anywhere
+ desired.
+ This example cannot be replicated using take.
+
+\end_layout
+
+\end_deeper
+\begin_layout Subsubsection
+Boolean
+\end_layout
+
+\begin_layout Standard
+This advanced selection occurs when obj is an array object of Boolean type
+ (such as may be returned from comparison operators).
+ It is always equivalent to (but faster than) X[obj.nonzero()] where as described
+ above obj.nonzero() returns a tuple (of length obj.ndim) of integer index
+ arrays showing the True elements of obj.
+
+\end_layout
+
+\begin_layout Standard
+The special case when obj.ndim == X.ndim is worth mentioning.
+ In this case X[obj] returns a 1-dimensional array filled with the elements
+ of X corresponding to the True values of obj.
+ It The search order will be C-style (last index varies the fastest).
+ If obj has True values at entries that are outside of the bounds of X,
+ then an index error will be raised.
+\end_layout
+
+\begin_layout Standard
+You can also use Boolean arrays as element of the selection tuple.
+ In such instances, they will always be interpreted as nonzero(obj) and
+ the equivalent integer indexing will be done.
+ In general you can think of indexing with Boolean arrays as indexing with
+ nonzero(<Boolean>).
+\end_layout
+
+\begin_layout Warning
+the definition of advanced selection means that X[(1,2,3),] is fundamentally
+ different than X[(1,2,3)].
+ The latter is equivalent to X[1,2,3] which will trigger basic selection
+ while the former will trigger advanced selection.
+ Be sure to understand why this is True.
+ You should also recognize that x[[1,2,3]] will trigger advanced selection,
+ but X[[1,2,slice(None)]] will trigger basic selection.
+\end_layout
+
+\begin_layout Subsection
+Flat Iterator indexing
+\end_layout
+
+\begin_layout Standard
+As mentioned previously, X.flat returns an iterator that will iterate over
+ the entire array (in C-contiguous style with the last index varying the
+ fastest).
+ This iterator object can also be indexed using basic slicing or advanced
+ indexing as long as the selection object is not a tuple.
+ This should be clear from the fact that X.flat is a 1-dimensional view.
+ X.flat can be used for integer indexing using 1-dimensional C-style-flat
+ indices.
+ The shape of any returned array is therefore the shape of the integer indexing
+\begin_inset LatexCommand index
+name "indexing|)"
+
+\end_inset
+
+ object
+\begin_inset LatexCommand index
+name "ndarray|)"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Chapter
+Basic Routines
+\end_layout
+
+\begin_layout Quotation
+Do not pray for tasks equal to your powers; pray for powers equal to your
+ tasks.
+ Then the doing of your work shall be no miracle, but you shall be the miracle.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Phillips Brooks
+\end_layout
+
+\begin_layout Quote
+Education isn't how much you have committed to memory, or even how much
+ you know.
+ It's being able to differentiate between what you do know and what you
+ don't.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Anatole France
+\end_layout
+
+\begin_layout Section
+Creating arrays
+\end_layout
+
+\begin_layout Description
+array
+\begin_inset LatexCommand index
+name "array"
+
+\end_inset
+
+ (object=, dtype=None, copy=True, order=None, subok=False, ndmin=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new ndarray of data type, dtype (or determined from object if
+ dtype is None).
+ The shape of the new array will be determined from object.
+ If copy is True, then ensure a copy of the object is made.
+ If copy is False, then the returned object is a copy of the array only
+ if dtype is not equivalent to the data type of object.
+ If order is 'Fortran' then the resulting array will be in Fortran order,
+ otherwise it is in C order.
+ If subok (subclasses are O.K.) is True then pass through subclasses of the
+ array object if possible.
+ If subok is False then only ndarray objects may be returned.
+ The ndmin parameter specifies that the returned array must have at least
+ the given number of dimensions.
+
+\end_layout
+
+\begin_layout Description
+asarray
+\begin_inset LatexCommand index
+name "asarray"
+
+\end_inset
+
+ (object=, dtype=None, order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Exactly the same as array(...) except the default copy argument is False,
+ and subok is always False.
+ Using this function always returns the base class ndarray.
+
+\end_layout
+
+\begin_layout Description
+asanyarray
+\begin_inset LatexCommand index
+name "asanyarray"
+
+\end_inset
+
+ (object, dtype=None, order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Thin wrapper around array(...) with subok=1.
+ You should use this routine if you are only making use of the array attributes,
+ and believe the calculations that will follow would work with any subclass
+ of the array.
+ Use of this routine increases the chance that array subclasses will interact
+ seamlessly with your function --- returning the same subclasses.
+
+\end_layout
+
+\begin_layout Description
+require
+\begin_inset LatexCommand index
+name "require"
+
+\end_inset
+
+ (object, dtype=None, requirements=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Require a Python object to be an ndarray (or a sub-class) of the given
+ data-type if it can be cast safely, otherwise raise an error.
+ The requirements, if given, are a sequence containing the requested combination
+ of the flags 'C_CONTIGUOUS' ('C'), 'F_CONTIGUOUS' ('F'), 'ALIGNED' ('A'),
+ 'WRITEABLE' ('W'), 'OWNDATA' ('O'), and the special directive 'ENSUREARRAY'
+ ('E').
+ These strings dictate which flags should be set on the return array (note
+ only one of 'F_CONTIGUOUS' or 'C_CONTIGUOUS' should be used and 'F_CONTIGUOUS'
+ over-rides 'C_CONTIGUOUS').
+ The special directive 'ENSUREARRAY' makes sure that a base-class ndarray
+ is returned instead of allowing sub-classes to pass through.
+ This function is particularly useful in a Python interface to C-code (say
+ called using ctypes
+\begin_inset LatexCommand index
+name "ctypes"
+
+\end_inset
+
+).
+
+\end_layout
+
+\begin_layout Description
+arange
+\begin_inset LatexCommand index
+name "arange"
+
+\end_inset
+
+ (start=, stop=None, step=1, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Function similar to Python's built-in range() function except it returns
+ an ndarray object.
+ Return a 1-d array of data type, dtype (or determined from the start, stop,
+ and step objects if None), that starts at start, ends
+\emph on
+before
+\emph default
+ stop and is incremented by step.
+ The returned array has length
+\begin_inset Formula $n$
+\end_inset
+
+ where
+\begin_inset Formula \[
+n=\left\lceil \frac{\textrm{stop}-\textrm{start}}{\textrm{step}}\right\rceil \]
+
+\end_inset
+
+ with element
+\begin_inset Formula $i$
+\end_inset
+
+ equal to
+\begin_inset Formula $\textrm{start}+i\cdot\textrm{step}.$
+\end_inset
+
+ If stop is None, then the first argument is interpreted as stop and start
+ is 0.
+
+\end_layout
+
+\begin_layout Note
+By definition of the ceiling function (denoted by
+\begin_inset Formula $\left\lceil x\right\rceil $
+\end_inset
+
+), we know that
+\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1$
+\end_inset
+
+, therefore this definition of the length of arange guarantees that
+\begin_inset Formula $\textrm{start}+n\cdot\textrm{step}\geq\textrm{stop}$
+\end_inset
+
+ as well as
+\begin_inset Formula $\textrm{start}+(n-1)\cdot\textrm{step}<\textrm{stop}$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+isfortran
+\begin_inset LatexCommand index
+name "isfortran"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to
+\family typewriter
+arr.flags.fnc
+\family default
+ and therefore returns True only if arr is Fortran-contiguous but not also
+ C-contiguous.
+\end_layout
+
+\begin_layout Description
+empty
+\begin_inset LatexCommand index
+name "empty"
+
+\end_inset
+
+ (shape=, dtype=int, order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an uninitialized array of data type, dtype, and given shape.
+ The memory layout defaults to C-style contiguous, but can be made Fortran-style
+ contiguous with a 'Fortran' order keyword.
+\end_layout
+
+\begin_layout Description
+empty_like
+\begin_inset LatexCommand index
+name "empty\\_like"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Syntactic sugar for empty(a.shape, a.dtype, isfortran(arr))
+\end_layout
+
+\begin_layout Description
+zeros
+\begin_inset LatexCommand index
+name "zeros"
+
+\end_inset
+
+ (shape=, dtype=int, order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of data type dtype and given shape filled with zeros.
+ The memory layout may be altered from the default C-style contiguous with
+ the order keyword.
+\end_layout
+
+\begin_layout Description
+zeros_like
+\begin_inset LatexCommand index
+name "zeros\\_like"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Syntactic sugar for zeros(a.shape, a.dtype, isfortran(arr))
+\end_layout
+
+\begin_layout Description
+ones
+\begin_inset LatexCommand index
+name "ones"
+
+\end_inset
+
+ (shape=, dtype=int, order='C')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Syntactic sugar for a = zeros(shape, dtype, order); a+= 1.
+
+\end_layout
+
+\begin_layout Description
+fromstring
+\begin_inset LatexCommand index
+name "fromstring"
+
+\end_inset
+
+ (string=,dtype=int, count=-1, sep='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If sep is '', then return a new 1-d array with data-type descriptor given
+ by dtype and with memory initialized (copied) from the raw binary data
+ in string.
+ If count is non-negative, the new array will have count elements (with
+ a
+\family typewriter
+ValueError
+\family default
+ raised if count requires more data than the string offers), otherwise the
+ size of the string must be a multiple of the itemsize implied by dtype,
+ and count will be the length of the string divided by the itemsize.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If sep is not '', then interpret the string in ASCII mode with the provided
+ separator and convert the string to an array of numbers.
+ Any additional white-space will be ignored.
+\end_layout
+
+\begin_layout Description
+fromfile
+\begin_inset LatexCommand index
+name "fromfile"
+
+\end_inset
+
+ (file=, dtype=int, count=-1, sep='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 1-d array of data type, dtype, from a file (open file object or
+ string with the name of a file to read).
+ The file will be read in binary mode if sep is the empty string.
+ Otherwise, the file will be read in text mode with sep providing the separator
+ string between the entries.
+ If count is -1, then the size will be determined from the file, otherwise,
+ up to count items will be read from the file.
+ If fewer than count items are read, then a RunTimeWarning is issued indicating
+ the number of items read.
+\end_layout
+
+\begin_layout Description
+frombuffer
+\begin_inset LatexCommand index
+name "frombuffer"
+
+\end_inset
+
+ (buffer, dtype=intp, count=-1, offset=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Very similar to (binary-mode) fromstring in interpretation of the arguments,
+ except buffer can be any object exposing the buffer interface (or any object
+ with a __buffer__ attribute that returns a buffer exposing the buffer protocol).
+ The new array shares memory with the buffer object.
+ The new array will be read-only if the buffer does not expose a writeable
+ buffer.
+
+\end_layout
+
+\begin_layout Description
+fromiter
+\begin_inset LatexCommand index
+name "fromiter"
+
+\end_inset
+
+ (iterator_or_generator, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an array from an iterator or a generator.
+ Only handles 1-dimensional cases.
+ By default the data-type is determined from the objects returned from the
+ iterator.
+
+\end_layout
+
+\begin_layout Description
+load
+\begin_inset LatexCommand index
+name "load"
+
+\end_inset
+
+ (file)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Load a NumPy binary file (.npy), a NumPy binary zipfile (.npz), or a pickled
+ Python object from an open file.
+ If file is a string, then open a file with that name first.
+ Which kind of file should be loaded is determined by the magic bytes at
+ the front of the file (not by filename extension).
+ See
+\shape italic
+save
+\shape default
+ and
+\shape italic
+savez
+\shape default
+ for functions which write .npy and .npz files from NumPy arrays.
+ If file is a binary zipfile, then an instance of NpzObj is returned.
+ This object is a simple wrapper around the zip-file which allows extraction
+ of the arrays stored within it.
+ The .files attribute of the NpzObj returns a list of all arrays in the archive.
+ These arrays are accessible through a dictionary-like interface (obj['name'])
+ or through attribute lookup through the .f attribute of the returned object
+ (obj.f.name).
+ If the file is a NumPy binary file (.npy), then the array itself is returned
+ from this function.
+ If the file contains a pickled object, then that object is returned.
+
+\end_layout
+
+\begin_layout Description
+loads
+\begin_inset LatexCommand index
+name "loads"
+
+\end_inset
+
+ (str)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Load a pickled array from a string.
+ Equivalent to cPickle.loads(str).
+ This function will likely be deprecated in the future.
+ Use cPickle instead.
+\end_layout
+
+\begin_layout Description
+save
+\begin_inset LatexCommand index
+name "save"
+
+\end_inset
+
+ (file, arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Save the array into a file which can be a string or an open file-like object.
+ If the file is given as a string, then it will have .npy appended if it
+ does not already end with that extension.
+ The .npy file format is NumPy-specific and is documented in the numpy.lib.format
+ module.
+ It only stores a single array.
+
+\end_layout
+
+\begin_layout Description
+savez
+\begin_inset LatexCommand index
+name "savez"
+
+\end_inset
+
+ (file, *args, **kwds)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Save a sequence of arrays into a NumPy binary zipfile (.npz).
+ An .npz file is a regular zip-file containing multiple .npy files.
+ If keywords are given, then the keyword names are used as filenames (with
+ the .npy extension added) in the zip-file with the corresponding values
+ being converted to arrays and stored in the specified filename.
+ Any non-keyword arguments that are passed in results in the names arr_0,
+ arr_1, etc.
+ being used in the zip-file (if a keyword by one of those names also exists,
+ then a ValueError is raised).
+
+\end_layout
+
+\begin_layout Description
+loadtxt
+\end_layout
+
+\begin_layout Description
+savetxt
+\end_layout
+
+\begin_layout Description
+DataSource
+\end_layout
+
+\begin_layout Description
+indices
+\begin_inset LatexCommand index
+name "indices"
+
+\end_inset
+
+ (dimensions, dtype=intp)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of dtype representing
+\begin_inset Formula $n$
+\end_inset
+
+(=len(dimensions)) grids of indices each with variation in a single direction.
+ The returned array has shape (
+\begin_inset Formula $n$
+\end_inset
+
+,)+dimensions.
+ Compare with mgrid.
+
+\end_layout
+
+\begin_layout MyCode
+>>> indices((2,3))
+\newline
+array([[[0, 0, 0],
+\newline
+ [1, 1, 1]],
+\newline
+
+\newline
+ [[0, 1, 2],
+\newline
+
+ [0, 1, 2]]])
+\end_layout
+
+\begin_layout Description
+fromfunction
+\begin_inset LatexCommand index
+name "fromfunction"
+
+\end_inset
+
+ (function, dimensions, **kwargs)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an array from a function called on a tuple of index grids.
+ The function should be able to take array arguments and process them like
+ ufuncs (use vectorize if it doesn't).
+ The function should accept as many arguments as there are dimensions which
+ is a sequence of numbers indicating the length of the desired output for
+ each axis.
+ Keyword arguments to function may also be passed in as keywords to fromfunction.
+\end_layout
+
+\begin_layout MyCode
+>>> print fromfunction(lambda i,j: i+j, (2,3))
+\newline
+[[ 0.
+ 1.
+ 2.]
+\newline
+ [ 1.
+ 2.
+ 3.]]
+\end_layout
+
+\begin_layout Description
+identity
+\begin_inset LatexCommand index
+name "identity"
+
+\end_inset
+
+ (n, dtype=intp)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 2-d array of shape (n,n) and data type, dtype with ones along
+ the main diagonal.
+
+\end_layout
+
+\begin_layout Description
+where
+\begin_inset LatexCommand index
+name "where"
+
+\end_inset
+
+ (condition[, x, y])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an array shaped like condition, that has the elements of x and
+ y respectively where condition is respectively true or false.
+ If x and y are not given, then it is equivalent to nonzero(condition).
+\end_layout
+
+\begin_layout Description
+flatnonzero
+\begin_inset LatexCommand index
+name "flatnonzero"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return indices that are non-zero in a flattened version of arr.
+ Equivalent to a.ravel().nonzero()[0].
+\end_layout
+
+\begin_layout Description
+putmask
+\begin_inset LatexCommand index
+name "putmask"
+
+\end_inset
+
+ (arr=, mask=, values=)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Performs the equivalent of
+\end_layout
+
+\begin_layout LyX-Code
+for n, obj in enumerate(
+\series bold
+mask
+\series default
+.flat):
+\end_layout
+
+\begin_layout LyX-Code
+ if obj:
+\end_layout
+
+\begin_layout LyX-Code
+ self.flat[n] =
+\series bold
+values
+\series default
+[n]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The values array is repeated if it is too short.
+ In particular, this means that indexing on the values array is modular
+ it's length, which might be surprising you are expecting putmask to work
+ the same as arr[mask]=values.
+\end_layout
+
+\begin_layout Description
+lexsort
+\begin_inset LatexCommand index
+name "lexsort"
+
+\end_inset
+
+ (keys=, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of indices similar to argsort except sorting is done using
+ all of the provided keys.
+ First a sort is computed using key[0], then the indices are further altered
+ by sorting on key[1].
+ This is repeated until sorting has been performed on all of the keys.
+ This is a useful function for multiple-field sorting.
+\end_layout
+
+\begin_layout MyCode
+>>> a = [1,2,1,3,1,5]; b = [0,4,5,6,2,3]
+\newline
+>>> ind = lexsort((b,a))
+\newline
+>>> print
+ take(a,ind)
+\newline
+[1 1 1 2 3 5]
+\newline
+>>> print take(b,ind)
+\newline
+[0 2 5 4 6 3]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Notice the order the keys had to be used in order to get a lexicographical
+ sorting order.
+ To clarify, suppose three equal-length sequences are fields of an underlying
+ data-type: (f1,f2,f3).
+ If we want to sort first on f1 and then on f2 and then on f3, the indices
+ that would accomplish that sort are obtained as lexsort((f3,f2,f1)).
+\end_layout
+
+\begin_layout Section
+Operations on two or more arrays
+\end_layout
+
+\begin_layout Description
+concatenate
+\begin_inset LatexCommand index
+name "concatenate"
+
+\end_inset
+
+ (seq=, axis=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new array from elements of the sequence object seq concatenated
+ along the given axis.
+ The elements of the sequence object must have compatible types and be the
+ same shape.
+ If axis is None, then flatten each element of seq before concatenating
+ together to construct a 1-d array.
+\end_layout
+
+\begin_layout Description
+correlate
+\begin_inset LatexCommand index
+name "correlate"
+
+\end_inset
+
+ (x, y, mode='valid')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the 1-d cross correlation of x and y keeping portions determined
+ by mode which may be 'valid' (0), 'same' (1), or 'full' (2).
+ The 'full' cross-correlation between two 1-d arrays is computed as
+\begin_inset Formula \[
+z\left[n\right]=\sum_{i=\max\left(n-M,0\right)}^{\min\left(n,K\right)}x\left[i\right]y\left[n+i\right],\]
+
+\end_inset
+
+for
+\begin_inset Formula $n=0\ldots K+M$
+\end_inset
+
+ where
+\begin_inset Formula $K$
+\end_inset
+
+=len(
+\begin_inset Formula $x$
+\end_inset
+
+)-1 and
+\begin_inset Formula $M$
+\end_inset
+
+=len(
+\begin_inset Formula $y$
+\end_inset
+
+)-1, and we assume
+\begin_inset Formula $K\geq M$
+\end_inset
+
+ (without loss of generality because we can interchange the roles of
+\begin_inset Formula $x$
+\end_inset
+
+ and
+\begin_inset Formula $y$
+\end_inset
+
+ without effect).
+ For this formula to work, we assume that
+\begin_inset Formula $x[i]=0$
+\end_inset
+
+ when
+\begin_inset Formula $i\notin\left[0,K-1\right]$
+\end_inset
+
+ and
+\begin_inset Formula $y[j]=0$
+\end_inset
+
+ when
+\begin_inset Formula $j\neq[0,M-1]$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If mode is 'same' then only the
+\begin_inset Formula $K$
+\end_inset
+
+ middle values are returned starting at
+\begin_inset Formula $n=\left\lfloor \frac{M-1}{2}\right\rfloor $
+\end_inset
+
+.
+ If the flag has a value of 'valid' then only the middle
+\begin_inset Formula $K-M+1=\left(K+1\right)-\left(M+1\right)+1$
+\end_inset
+
+ output values are returned starting at
+\begin_inset Formula $n=M.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+convolve
+\begin_inset LatexCommand index
+name "convolve"
+
+\end_inset
+
+ (x, y, mode='valid')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convolution is very similar to correlation except it is defined with one
+ sequence reversed:
+\begin_inset Formula \[
+z\left[n\right]=\sum_{i}x[i]y[n-i].\]
+
+\end_inset
+
+ The mode keyword has the same effect as it does for correlation.
+ Convolution ('full') between two 1-d arrays implements polynomial multiplicatio
+n where the array entries are viewed as coefficients for polynomials.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example: Consider that
+\begin_inset Formula $(x^{3}+4x^{2}+2)$
+\end_inset
+
+
+\begin_inset Formula $\left(x^{4}+3x+1\right)$
+\end_inset
+
+=
+\begin_inset Formula $x^{7}+4x^{6}+5x^{4}+13x^{3}+4x^{2}+6x+2.$
+\end_inset
+
+ This can be determined by using the code
+\family typewriter
+convolve([1,4,0,2], [1,0,0,3,1])
+\family default
+ which returns
+\family typewriter
+[1,4,0,5,13,4,6,2].
+
+\family default
+ Notice the one-to-one alignment between the elements of the arrays and
+ the coefficients on powers of
+\begin_inset Formula $x$
+\end_inset
+
+ in the polynomial.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+outer
+\begin_inset LatexCommand index
+name "outer"
+
+\end_inset
+
+ (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ compute an outerproduct which is syntactic sugar for a.ravel() [:,newaxis]
+ * b.ravel() [newaxis,:] (after first converting a and b to ndarrays).
+\end_layout
+
+\begin_layout MyCode
+>>> print outer([1,2,3],[10,100,1000])
+\newline
+[[ 10 100 1000]
+\newline
+ [ 20 200 2000]
+\newline
+
+ [ 30 300 3000]]
+\end_layout
+
+\begin_layout Description
+inner
+\begin_inset LatexCommand index
+name "inner"
+
+\end_inset
+
+ (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes the inner product between two arrays.
+ This is an array that has shape a.shape[:-1] + b.shape[:-1] with elements
+ computed as the sum of the product of the elements from the last dimensions
+ of a and b.
+ In particular, let
+\begin_inset Formula $I$
+\end_inset
+
+ and
+\begin_inset Formula $J$
+\end_inset
+
+ be the super
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+A super index is 0 or more integer indices used to index into an N-dimensional
+ array.
+ How many indices a super index represents should be implied by context.
+\end_layout
+
+\end_inset
+
+ indices selecting the 1-dimensional arrays
+\begin_inset Formula $a[I,:]$
+\end_inset
+
+ and
+\begin_inset Formula $b[J,:]$
+\end_inset
+
+, then the resulting array,
+\begin_inset Formula $r$
+\end_inset
+
+, is
+\begin_inset Formula \[
+r[I,J]=\sum_{k}a[I,k]b[J,k].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+dot
+\begin_inset LatexCommand index
+name "dot"
+
+\end_inset
+
+ (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes the dot (matrix) product between two arrays.
+ The product-sum is over the last dimension of
+\begin_inset Formula $a$
+\end_inset
+
+ and the second-to-last dimension of
+\begin_inset Formula $b$
+\end_inset
+
+.
+ Specifically, if
+\begin_inset Formula $I$
+\end_inset
+
+ and
+\begin_inset Formula $J$
+\end_inset
+
+ are super indices for
+\begin_inset Formula $a[I,:]$
+\end_inset
+
+ and
+\begin_inset Formula $b[J,:,j]$
+\end_inset
+
+ so that
+\begin_inset Formula $j$
+\end_inset
+
+ is the index of the last dimension of
+\begin_inset Formula $b$
+\end_inset
+
+.
+ Then, the shape of the resulting array is a.shape[:-1] + b.shape[:-2] + (b.shape[-
+1],) with elements.
+
+\begin_inset Formula \[
+r[I,J,j]=\sum_{k}a[I,k]b[J,k,j],\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\begin_inset LatexCommand index
+name "vdot"
+
+\end_inset
+
+vdot (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes the dot product between two arrays (flattened into one-dimensional
+ vectors) after conjugating the first vector.
+ This is an inner-product following the physicists convention of conjugating
+ the first argument.
+\begin_inset Formula \[
+r=\sum_{k}\overline{\textrm{a.flat}[k]}\textrm{b.flat}[k].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+tensordot
+\begin_inset LatexCommand index
+name "tensordot"
+
+\end_inset
+
+ (a, b, axes=(-1,0))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes a dot-product between two arrays where the sum is taken over the
+ axes specified by the 2-sequence which can have either scalar or sequence
+ entries.
+ The axes specified are summed over and the remaining axes are used to construct
+ the result.
+ So, for example, if
+\begin_inset Formula $a$
+\end_inset
+
+ is
+\begin_inset Formula $3\times4\times5$
+\end_inset
+
+ and
+\begin_inset Formula $b$
+\end_inset
+
+ is
+\begin_inset Formula $4\times3\times2$
+\end_inset
+
+ then if axes=([1,0],[0,1]) (or axes=([0,1],[1,0])) the result will be
+\begin_inset Formula $5\times2$
+\end_inset
+
+.
+ Let
+\begin_inset Formula $I$
+\end_inset
+
+ represent the indices of the un-summed axes in
+\begin_inset Formula $a$
+\end_inset
+
+, let
+\begin_inset Formula $J$
+\end_inset
+
+ represent the indices of the un-summed axes in
+\begin_inset Formula $b$
+\end_inset
+
+ and let
+\begin_inset Formula $K$
+\end_inset
+
+ represent the the indices of the axes summed over in both
+\begin_inset Formula $a$
+\end_inset
+
+ and
+\begin_inset Formula $b$
+\end_inset
+
+.
+ Also, let
+\begin_inset Formula $a_{t}$
+\end_inset
+
+ represent a transposed version of
+\begin_inset Formula $a$
+\end_inset
+
+ where the axes to be summed over are pushed to the end, and let
+\begin_inset Formula $b_{t}$
+\end_inset
+
+ represent a transposed version of
+\begin_inset Formula $b$
+\end_inset
+
+ where the axes to be summed over are pushed to the front.
+ Then, using
+\begin_inset Formula $\sum_{K}$
+\end_inset
+
+ to represent a multi-index sum, the result can be written as
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+r[I,J]=\sum_{K}a_{t}[I,K]b_{t}[K,J]\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+cross
+\begin_inset LatexCommand index
+name "cross"
+
+\end_inset
+
+ (a, b, axisa=-1, axisb=-1, axisc=-1, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the cross product of two (arrays of) vectors.
+ The cross product is performed over the axes of the input arrays indicated
+ by the axisa, and axisb arguments.
+ For both arrays, the axis used must have dimension either 2 or 3.
+ If both axes used have dimension 2, then only the z-component of the equivalent
+ 3-d cross product is returned.
+ Otherwise, the entire vector is returned.
+ The axisc argument gives the axis of the vectors in the returned cross-product
+ result.
+ If axis is not None, then it is assumed that axisa=axisb=axisc=axis (regardless
+ of what else is specified).
+
+\end_layout
+
+\begin_layout Description
+allclose
+\begin_inset LatexCommand index
+name "allclose"
+
+\end_inset
+
+ (a, b, rtol=
+\begin_inset Formula $10^{-5}$
+\end_inset
+
+, atol=
+\begin_inset Formula $10^{-8}$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns true if all components of a and b are equal subject to the given
+ relative and absolute tolerances.
+ This returns true if every element of a and b satisfy
+\begin_inset Formula \[
+\left|a-b\right|<\textrm{atol}+\textrm{rtol}\left|b\right|.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Printing arrays
+\end_layout
+
+\begin_layout Description
+array2string
+\begin_inset LatexCommand index
+name "array2string"
+
+\end_inset
+
+ (a)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The default printing mechanism uses this function to produce a string from
+ an array.
+
+\end_layout
+
+\begin_layout Description
+set_printoptions
+\begin_inset LatexCommand index
+name "set\\_printoptions"
+
+\end_inset
+
+ (precision=None, theshold=None, edgeitems=None, linewidth=None, suppress=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set options associated with representing an array.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+precision the default number of digits of precision for floating point output
+ (default 8);
+\end_layout
+
+\begin_layout Description
+threshold total number of array elements which triggers printing only the
+
+\begin_inset Quotes eld
+\end_inset
+
+ends
+\begin_inset Quotes erd
+\end_inset
+
+ of the array rather than a full representation (default 1000);
+\end_layout
+
+\begin_layout Description
+edgeitems number of array elements in summary at beginning and end of each
+ dimension (default 3);
+\end_layout
+
+\begin_layout Description
+linewidth the number of characters per line (default 75);
+\end_layout
+
+\begin_layout Description
+suppress Boolean value indicating whether or not to suppress printing of
+ small floating point values using scientific notation (default False).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+get_printoptions
+\begin_inset LatexCommand index
+name "get\\_printoptions"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the values of precision, threshold, edgeitems, linewidth, and suppress
+ that control printing of arrays.
+\end_layout
+
+\begin_layout Description
+set_string_function
+\begin_inset LatexCommand index
+name "set\\_string\\_function"
+
+\end_inset
+
+ (func, repr=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the function to use in response to str(array) or repr(array).
+ By default this function is array2string.
+ The function passed in must take an array argument and return a string.
+ If func is None, then the print function is reset to a simple internal
+ function.
+
+\end_layout
+
+\begin_layout Section
+Functions redundant with methods
+\end_layout
+
+\begin_layout Standard
+Several functions are available primarily for purposes of backward compatibility
+ with old Numeric, and are therefore redundant.
+ The functions are all simple wrappers for asarray(a).<function>(*args, **kwds),
+ or are replaceable by attribute access.
+ The following list documents them.
+ It is not recommended that these functions be used in new programs, but
+ there are no plans for removing them as in functional form they work with
+ arbitrary sequences which is sometimes desirable.
+ The functions that mirror methods and attributes are:
+\series bold
+take
+\series default
+
+\begin_inset LatexCommand index
+name "take"
+
+\end_inset
+
+,
+\series bold
+reshape
+\series default
+
+\begin_inset LatexCommand index
+name "reshape"
+
+\end_inset
+
+,
+\series bold
+squeeze
+\series default
+
+\begin_inset LatexCommand index
+name "squeeze"
+
+\end_inset
+
+,
+\series bold
+choose
+\series default
+
+\begin_inset LatexCommand index
+name "choose"
+
+\end_inset
+
+,
+\series bold
+repeat
+\series default
+
+\begin_inset LatexCommand index
+name "repeat"
+
+\end_inset
+
+,
+\series bold
+put
+\series default
+
+\begin_inset LatexCommand index
+name "put"
+
+\end_inset
+
+,
+\series bold
+swapaxes
+\series default
+
+\begin_inset LatexCommand index
+name "swapaxes"
+
+\end_inset
+
+,
+\series bold
+transpose
+\series default
+
+\begin_inset LatexCommand index
+name "transpose"
+
+\end_inset
+
+,
+\series bold
+real
+\series default
+
+\begin_inset LatexCommand index
+name "real"
+
+\end_inset
+
+,
+\series bold
+imag
+\series default
+
+\begin_inset LatexCommand index
+name "imag"
+
+\end_inset
+
+,
+\series bold
+sort
+\series default
+
+\begin_inset LatexCommand index
+name "sort"
+
+\end_inset
+
+,
+\series bold
+argsort
+\series default
+
+\begin_inset LatexCommand index
+name "argsort"
+
+\end_inset
+
+,
+\series bold
+amax
+\begin_inset LatexCommand index
+name "amax"
+
+\end_inset
+
+, argmax
+\series default
+
+\begin_inset LatexCommand index
+name "argmax"
+
+\end_inset
+
+,
+\series bold
+amin
+\begin_inset LatexCommand index
+name "amin"
+
+\end_inset
+
+
+\series default
+,
+\series bold
+argmin
+\series default
+
+\begin_inset LatexCommand index
+name "argmin"
+
+\end_inset
+
+,
+\series bold
+ptp
+\series default
+
+\begin_inset LatexCommand index
+name "ptp"
+
+\end_inset
+
+,
+\series bold
+alen
+\series default
+
+\begin_inset LatexCommand index
+name "alen"
+
+\end_inset
+
+,
+\series bold
+searchsorted
+\series default
+
+\begin_inset LatexCommand index
+name "searchsorted"
+
+\end_inset
+
+,
+\series bold
+diagonal
+\series default
+
+\begin_inset LatexCommand index
+name "diagonal"
+
+\end_inset
+
+,
+\series bold
+trace
+\series default
+
+\begin_inset LatexCommand index
+name "trace"
+
+\end_inset
+
+,
+\series bold
+ravel
+\series default
+
+\begin_inset LatexCommand index
+name "ravel"
+
+\end_inset
+
+,
+\series bold
+nonzero
+\series default
+
+\begin_inset LatexCommand index
+name "nonzero"
+
+\end_inset
+
+,
+\series bold
+shape
+\series default
+
+\begin_inset LatexCommand index
+name "shape"
+
+\end_inset
+
+,
+\series bold
+compress
+\series default
+
+\begin_inset LatexCommand index
+name "compress"
+
+\end_inset
+
+,
+\series bold
+clip
+\series default
+
+\begin_inset LatexCommand index
+name "clip"
+
+\end_inset
+
+,
+\series bold
+std
+\series default
+
+\begin_inset LatexCommand index
+name "std"
+
+\end_inset
+
+,
+\series bold
+var
+\series default
+
+\begin_inset LatexCommand index
+name "var"
+
+\end_inset
+
+,
+\series bold
+mean
+\series default
+
+\begin_inset LatexCommand index
+name "mean"
+
+\end_inset
+
+,
+\series bold
+sum
+\series default
+
+\begin_inset LatexCommand index
+name "sum"
+
+\end_inset
+
+,
+\series bold
+cumsum
+\series default
+
+\begin_inset LatexCommand index
+name "cumsum"
+
+\end_inset
+
+,
+\series bold
+product
+\series default
+
+\begin_inset LatexCommand index
+name "product"
+
+\end_inset
+
+,
+\series bold
+cumproduct
+\series default
+
+\begin_inset LatexCommand index
+name "cumproduct"
+
+\end_inset
+
+,
+\series bold
+sometrue
+\begin_inset LatexCommand index
+name "sometrue"
+
+\end_inset
+
+
+\series default
+ (method is .any),
+\series bold
+alltrue
+\begin_inset LatexCommand index
+name "alltrue"
+
+\end_inset
+
+
+\series default
+ (method is .all),
+\series bold
+around
+\begin_inset LatexCommand index
+name "around"
+
+\end_inset
+
+
+\series default
+ (method is .round),
+\series bold
+rank
+\begin_inset LatexCommand index
+name "rank"
+
+\end_inset
+
+
+\series default
+ (attribute is .ndim),
+\series bold
+shape
+\series default
+
+\begin_inset LatexCommand index
+name "shape"
+
+\end_inset
+
+,
+\series bold
+size
+\begin_inset LatexCommand index
+name "size"
+
+\end_inset
+
+
+\series default
+ (.size or .shape[axis]), and
+\series bold
+copy
+\series default
+
+\begin_inset LatexCommand index
+name "copy"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Section
+Dealing with data types
+\end_layout
+
+\begin_layout Description
+dtype (obj, align=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a data-type object from any object.
+ See Chapter
+\begin_inset LatexCommand ref
+reference "cha:Data-descriptor-objects"
+
+\end_inset
+
+ for a more detailed explanation of what can be interpreted as a data-type
+ object and the meaning of the align keyword.
+
+\end_layout
+
+\begin_layout Description
+maximum_sctype (arg)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the array-scalar type of highest precision of the same general
+ kind as arg which can be any recognized form for describing a data-type.
+\end_layout
+
+\begin_layout Description
+issctype (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns True if obj is an array data type (or a recognized alias for one)
+\end_layout
+
+\begin_layout Description
+obj2sctype (obj, default=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the array type object corresponding to obj which can be an array
+ type already, a python type object, an actual array, or any recognized
+ alias for an array type object.
+ If no suitable data type object can be determined, return default.
+\end_layout
+
+\begin_layout Description
+sctype2char (sctype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the typecode character associated with an array-scalar type dtype.
+ The first argument is first converted to a dtype if it needs to be.
+
+\end_layout
+
+\begin_layout Tip
+the type attribute of data-type objects are actual Python type objects subclasse
+d in a hierarchy of types.
+ This can often be useful to check data types generically.
+ For example, issubclass(dtype.type, integer) can check to see if the data
+ type is one of the 10 different integer types.
+ The issubclass function, however, raises an error if either argument is
+ not an actual type object.
+ NumPy defines _(arg1, arg2) that will return false instead of raise an
+ error.
+ Alternatively, dtype.kind is a character describing the class of the data-type
+ so dtype.kind in 'iu' would also check to see if the data-type is an integer
+ type.
+\end_layout
+
+\begin_layout Description
+can_cast (from=d1, to=d2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return Boolean value indicating whether or not data type d1 can be cast
+ to data type d2 safely (without losing precision or information).
+
+\end_layout
+
+\begin_layout Chapter
+Additional Convenience Routines
+\end_layout
+
+\begin_layout Quotation
+A committee is twelve men doing the work of one.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+John F.
+ Kennedy
+\end_layout
+
+\begin_layout Quotation
+Your mind can only hold one thought at a time.
+ Make it a positive and constructive one.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+H.
+ Jackson Brown Jr.
+
+\end_layout
+
+\begin_layout Section
+Shape functions
+\end_layout
+
+\begin_layout Description
+atleast_1d
+\begin_inset LatexCommand index
+name "atleast\\_1d"
+
+\end_inset
+
+ (a1,a2,...,an)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Force a sequence of arrays (including array scalars) to each be at least
+ 1-d.
+
+\end_layout
+
+\begin_layout Description
+atleast_2d
+\begin_inset LatexCommand index
+name "atleast\\_2d"
+
+\end_inset
+
+ (a1,a2,...,an)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Force a sequence of arrays (including array scalars) to each be at least
+ 2-d.
+ Dimensions of length 1 are pre-pended to reach a two-dimensional array.
+\end_layout
+
+\begin_layout Description
+atleast_3d
+\begin_inset LatexCommand index
+name "atleast\\_3d"
+
+\end_inset
+
+ (a1,a2,...,an)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Force a sequence of arrays (including array_scalars) to each be at least
+ 3-d.
+ Dimensions of length 1 are pre-pended to reach a two-dimensional array.
+\end_layout
+
+\begin_layout Description
+roll
+\begin_inset LatexCommand index
+name "roll"
+
+\end_inset
+
+ (arr, shift, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array with the contents of arr shifted (rolled) by the amount
+ given in the integer argument shift along the axis specified.
+ If axis is None, then the shift takes place in the ravelled array (but
+ the returned array has the same shape as arr).
+ Elements that shift outside the array are rolled back into the array from
+ the opposite side.
+
+\end_layout
+
+\begin_layout Description
+rollaxis
+\begin_inset LatexCommand index
+name "rollaxis"
+
+\end_inset
+
+ (arr, axis, start)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return arr transposed so that the provided axis is inserted into the shape
+ before start with the other dimensions rolled.
+ Thus, if arr.shape is (i,j,k,l) then rollaxis(arr, 2, 0) has shape (k,i,j,l)
+ and rollaxis(arr, 1, 3) has shape (i,k,j,l).
+\end_layout
+
+\begin_layout Description
+vstack
+\begin_inset LatexCommand index
+name "vstack"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Stack a sequence of arrays along the first axis (row wise).
+ Arrays in seq must have the same shape along all dimensions but the first.
+ Rebuilds array divided by vsplit.
+ All 1-d arrays will be stacked row-wise.
+\end_layout
+
+\begin_layout Description
+hstack
+\begin_inset LatexCommand index
+name "hstack"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Stack a sequence of arrays along the second axis (column wise).
+ Arrays in seq must have the same shape along all dimensions but the second.
+ Rebuilds array divided by hsplit.
+ Notice that 1-d arrays will be appended into a new 1-d array.
+ Use column_stack to get a 2-d array from 1-d arrays.
+ If some arrays are already 2-d, then the 1-d arrays need to have a dimension
+ added to the end (
+\emph on
+e.g.
+
+\emph default
+
+\family typewriter
+y[:,newaxis]
+\family default
+) in order to stack correctly.
+
+\end_layout
+
+\begin_layout Description
+column_stack
+\begin_inset LatexCommand index
+name "column\\_stack"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Stack a sequence of arrays as columns into a 2-d array.
+ 1-d arrays are converted to 2-d arrays and transposed.
+ All arrays must have shapes so that the resulting array is well defined.
+ Compare with
+\series bold
+hstack
+\series default
+.
+\end_layout
+
+\begin_layout Description
+row_stack
+\begin_inset LatexCommand index
+name "row\\_stack"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Stack a sequence of 1-d arrays as rows into a 2-d array (alias for
+\series bold
+vstack
+\series default
+).
+
+\end_layout
+
+\begin_layout Description
+dstack
+\begin_inset LatexCommand index
+name "dstack"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Stack a sequence of arrays along the third axis (depth wise).
+ Arrays in seq must have the same shape along all dimensions but the third.
+ Rebuilds array divided by vsplit.
+\end_layout
+
+\begin_layout Description
+array_split
+\begin_inset LatexCommand index
+name "array\\_split"
+
+\end_inset
+
+ (ary, i_or_s, axis=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Divide ary into a list of sub-arrays along the specified axis.
+ The i_or_s argument stands for indices_or_sections.
+ If i_or_s is an integer, ary is divided into that many equally-sized arrays.
+ If it is impossible to make an even split, each of the leading arrays in
+ the returned list have one additional member.
+ If i_or_s is a list of sorted integer, its entries define the indexes where
+ ary is split.
+ An empty list for i_or_s results in a single sub-array equal to the original
+ array.
+\end_layout
+
+\begin_layout Description
+split
+\begin_inset LatexCommand index
+name "split"
+
+\end_inset
+
+ (ary, i_or_s, axis=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The same as array_split() except if i_or_s is an integer and it is impossible
+ to make an even split, an error is raised.
+\end_layout
+
+\begin_layout Description
+hsplit
+\begin_inset LatexCommand index
+name "hsplit"
+
+\end_inset
+
+ (ary, i_or_s)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Split a single array into multiple columns of sub-arrays (along the first
+ axis if 1-d or along the second second if >1-d).
+ Only works on arrays of 1 or more dimension.
+
+\end_layout
+
+\begin_layout Description
+vsplit
+\begin_inset LatexCommand index
+name "vsplit"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Split a single array into multiple rows of sub-arrays (along the first
+ axis).
+ Only works on arrays of 2 or more dimensions.
+\end_layout
+
+\begin_layout Description
+dsplit
+\begin_inset LatexCommand index
+name "dsplit"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Split a single array into multiple sub-arrays along the third axis (depth).
+ Only works on arrays of 3 or more dimensions.
+\end_layout
+
+\begin_layout Description
+apply_along_axis
+\begin_inset LatexCommand index
+name "apply\\_along\\_axis"
+
+\end_inset
+
+ (func1d, axis, arr, *args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Execute func1d(arr[sel_i], *args) where func1d takes 1-d arrays and arr
+ is an N-d array, where sel_i is a selection object sufficient to select
+ a 1-d sub-array along the given axis.
+ The function is executed for all 1-d arrays along axis in arr.
+
+\end_layout
+
+\begin_layout Description
+apply_over_axes
+\begin_inset LatexCommand index
+name "apply\\_over\\_axes"
+
+\end_inset
+
+ (func, a, axes)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ For each axis in the axes sequence, call func as
+\family typewriter
+res=func(a, axis)
+\family default
+.
+ If res is the same shape as a then set
+\family typewriter
+a=res
+\family default
+ and continue.
+ if
+\family typewriter
+res.ndim = a.ndim -1
+\family default
+, then insert a dimension before axis and continue.
+
+\end_layout
+
+\begin_layout Description
+expand_dims
+\begin_inset LatexCommand index
+name "expand\\_dims"
+
+\end_inset
+
+ (a, axis)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Expand the shape of array a by including newaxis
+\series bold
+before
+\series default
+ the given axis.
+\end_layout
+
+\begin_layout Description
+resize
+\begin_inset LatexCommand index
+name "resize"
+
+\end_inset
+
+ (a, new_shape)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a new array with the specified shape which can be any size.
+ The new array is filled with repeated copies of a.
+ This function is similar in spirit to a.resize(new_shape) except that it
+ fills in the new array with repeated copies and returns a new array.
+
+\end_layout
+
+\begin_layout Description
+kron
+\begin_inset LatexCommand index
+name "kron"
+
+\end_inset
+
+ (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a composite array with blocks from
+\emph on
+b
+\emph default
+ scaled by elements of
+\emph on
+a
+\emph default
+.
+ The number of dimensions of
+\emph on
+a
+\emph default
+ and
+\emph on
+b
+\emph default
+ should be the same.
+ If not, then the input with fewer dimensions is pre-pended with ones (broadcast
+) to the same shape as the input with more dimensions.
+ The return array has this same number of dimensions with shape given by
+ the product of the shape of
+\emph on
+a
+\emph default
+ and the shape of
+\emph on
+b
+\emph default
+.
+ If either a or b is a scalar then this function is equivalent to multiply(a,b).
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ For example, if
+\emph on
+a
+\emph default
+ and
+\emph on
+b
+\emph default
+ are is 1-d the result is
+\begin_inset Formula \[
+\left[\begin{array}{cccc}
+a[0]*b & a[1]*b & \cdots & a[-1]*b\end{array}\right]\]
+
+\end_inset
+
+ while if
+\emph on
+a
+\emph default
+ and
+\emph on
+b
+\emph default
+ are 2-d, the result is
+\begin_inset Formula \[
+\left[\begin{array}{cccc}
+a[0,0]*b & a[0,1]*b & \cdots & a[0,-1]*b\\
+a[1,0]*b & a[1,1]*b & \cdots & a[1,-1]*b\\
+\vdots & \vdots & \ddots & \vdots\\
+a[-1,0]*b & a[-1,1]*b & \cdots & a[-1,-1]*b\end{array}\right]\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example:
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> kron([1,10,100],[5,6,7])
+\newline
+array([ 5, 6, 7, 50, 60, 70, 500, 600,
+ 700])
+\newline
+>>> kron([[1,10],[100,1000]],[[2,3],[4,5]])
+\newline
+array([[ 2, 3, 20,
+ 30],
+\newline
+ [ 4, 5, 40, 50],
+\newline
+ [ 200, 300, 2000, 3000],
+\newline
+
+ [ 400, 500, 4000, 5000]])
+\end_layout
+
+\begin_layout Description
+tile
+\begin_inset LatexCommand index
+name "tile"
+
+\end_inset
+
+ (a, reps)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Tile an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array using the shape information in reps to create a larger
+
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array.
+ This is equivalent to kron(ones(reps, a.dtype), a).
+ The number of dimensions of a and the length of shape should be the same
+ or else 1's will be pre-pended to make them the same.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example:
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> tile([5,6,7],(1,2,3))
+\newline
+array([[[5, 6, 7, 5, 6, 7, 5, 6, 7],
+\newline
+ [5,
+ 6, 7, 5, 6, 7, 5, 6, 7]]])
+\end_layout
+
+\begin_layout Section
+Basic functions
+\end_layout
+
+\begin_layout Description
+average
+\begin_inset LatexCommand index
+name "average"
+
+\end_inset
+
+ (a, axis=None, weights=None, returned=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes the average along the indicated axis.
+ If axis is None, average over the entire array.
+ Inputs can be integer or floating types; result is type float.
+ If weights are given, the result is sum(a*weights)/sum(weights).
+ Therefore, weights must have shape equal to a.shape or be 1-d with length
+ a.shape[axis].
+ Integer weights are converted to float.
+ If returned is True, then return a tuple showing both the result and the
+ sum of the weights (or count of the values).
+ The shape of these two results will be the same.
+
+\end_layout
+
+\begin_layout Description
+cov
+\begin_inset LatexCommand index
+name "cov"
+
+\end_inset
+
+ (x, y=None, rowvar=1, bias=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the covariance matrix of data in x.
+ If x is a vector and y is None, then this function is equivalent to asarray(x).v
+ar().
+ Otherwise, x is interpreted as observations of several random variables.
+ If rowvar is True (default), then the variables are in the rows and the
+ observations of the variables are in the columns.
+ Otherwise, the variables are in the columns and the observations are in
+ the rows.
+ If y is given then it is treated as another variable or set of variables
+ to be added to x.
+ By default, a so-called unbiased estimate of the covariance matrix is made.
+ If bias is non-zero, then a biased normalization factor (with better mean-squar
+e error performance) is used instead.
+ If
+\begin_inset Formula $\mathbf{X}$
+\end_inset
+
+ is a random vector, then the covariance matrix is defined as
+\begin_inset Formula \[
+\mathbf{C}=E\left[\left(\mathbf{X}-E\mathbf{X}\right)\left(\mathbf{X}-E\mathbf{X}\right)^{H}\right].\]
+
+\end_inset
+
+ It can be approximated as
+\begin_inset Formula \[
+\mathbf{C}\approx\frac{1}{P}\sum_{i=0}^{N-1}\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)^{H}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $\mathbf{x}_{i}$
+\end_inset
+
+ is an observation of
+\begin_inset Formula $\mathbf{X}$
+\end_inset
+
+ (as a column-vector),
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of observations made and
+\begin_inset Formula $P=N-1$
+\end_inset
+
+ for an unbiased estimate or
+\begin_inset Formula $P=N$
+\end_inset
+
+ for a biased (but lower mean-squared error) estimate.
+
+\end_layout
+
+\begin_layout Description
+corrcoef
+\begin_inset LatexCommand index
+name "corrcoef"
+
+\end_inset
+
+ (x, y=None, rowvar=1, bias=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Estimate the correlation coefficient of x.
+ By default, each row of x contains a random variable with observations
+ of the random variable in the columns of x.
+ (If rowvar is False, the each column is a random variable with observations
+ in the rows).
+ The y argument can be used to append additional variables to x.
+ The
+\begin_inset Formula $i^{\textrm{th}}$
+\end_inset
+
+ row and
+\begin_inset Formula $j^{\textrm{th}}$
+\end_inset
+
+ column of the correlation coefficient matrix is defined as
+\begin_inset Formula \[
+\rho_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $\mathbf{C}$
+\end_inset
+
+ is the covariance matrix.
+ The rowvar and bias arguments are passed on to the cov function to estimate
+
+\begin_inset Formula $\mathbf{C}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+msort
+\begin_inset LatexCommand index
+name "msort"
+
+\end_inset
+
+ (a)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array, sorted along the first axis.
+ Equivalent to b=a.copy(); b.sort(0)
+\end_layout
+
+\begin_layout Description
+median
+\begin_inset LatexCommand index
+name "median"
+
+\end_inset
+
+ (m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the median of m along its first dimension.
+\end_layout
+
+\begin_layout Description
+bincount
+\begin_inset LatexCommand index
+name "bincount"
+
+\end_inset
+
+ (list=, weights=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The list argument is a 1-d integer array.
+ Let
+\begin_inset Formula $r$
+\end_inset
+
+ be the returned 1-d array whose length is (list.max()+1).
+ If weights is None, then
+\begin_inset Formula $r[i]$
+\end_inset
+
+ is the number of occurrences of
+\begin_inset Formula $i$
+\end_inset
+
+ in list.
+ If weight is present, then the
+\begin_inset Formula $i^{\textrm{th}}$
+\end_inset
+
+ element is
+\begin_inset Formula \[
+r[i]=\sum_{j:\textrm{list}\left[j\right]=i}\textrm{weights}[j].\]
+
+\end_inset
+
+ Notice that if weights is None, it is equivalent to a weights array of
+ all 1.
+ The length of weights must be the same as the length of list.
+
+\end_layout
+
+\begin_layout Description
+digitize
+\begin_inset LatexCommand index
+name "digitize"
+
+\end_inset
+
+ (x=,bins=)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of integers the same length as x with values
+\begin_inset Formula $i$
+\end_inset
+
+ such that
+\begin_inset Formula $\textrm{bins}\left[i-1\right]\leq x<\textrm{bins}\left[i\right]$
+\end_inset
+
+ if bins is monotonically increasing, or
+\begin_inset Formula $\textrm{bins}[i]\leq x<\textrm{bins}[i-1]$
+\end_inset
+
+ if bins is monotonically decreasing.
+ When
+\begin_inset Formula $x$
+\end_inset
+
+ is beyond the bounds of bins, return either
+\begin_inset Formula $i=0$
+\end_inset
+
+ or
+\begin_inset Formula $i=$
+\end_inset
+
+len(bins) as appropriate.
+\end_layout
+
+\begin_layout Description
+histogram
+\begin_inset LatexCommand index
+name "histogram"
+
+\end_inset
+
+ (x=, bins=None, range=None, normed=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a histogram for the data in x (treated as one-dimensional array
+ of type float).
+ If bins is not a sequence, then bins should be the number of bins which
+ will be constructed ranging from range[0] to range[1] or x.min() to x.max()
+ if range is None.
+ If normed is True, then the histogram will be normalized and comparable
+ with a probability density function, otherwise it will be a count of the
+ number of items in each bin.
+ The return value is the tuple (n, bins) where n is the histogram.
+\end_layout
+
+\begin_layout Description
+histogram2d
+\begin_inset LatexCommand index
+name "histogram2d"
+
+\end_inset
+
+ (x, y, bins=10, range=None, normed=False)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the two-dimensional histogram for a dataset (x,y) given the bins.
+ Returns (histogram, xedges, yedges).
+ The bins argument can be either the number of bins or a sequence of the
+ bin edges if the x and y directions should have the same bins.
+ If the bins argument is a sequence of length 2, then separate bin edges
+ will be computed.
+ The first element can be either the number of bins or the bin edges for
+ the x-direction.
+ The second element is interpreted as the number of bins or the bin edges
+ for the y-direction.
+ The returned histogram array, H, is a count of the number of samples in
+ each bin.
+ The array is oriented such that H[i,j] is the number of samples falling
+ into binx[j] and biny[i] (notice the association x<->j and y<->i).
+ Setting normed to True returns a density rather than a bin-count.
+ The range argument allows specifying lower and upper bin edges (in a sequence
+ of length 2 with 2-length sequences in each entry).
+ The default is [[x.min(), x.max()],[y.min(), y.max()]].
+
+\end_layout
+
+\begin_layout Description
+histogramdd
+\begin_inset LatexCommand index
+name "histogramdd"
+
+\end_inset
+
+ (sample, bins=10, range=None, normed=False)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the
+\begin_inset Formula $D$
+\end_inset
+
+-dimensional histogram for a (vector) dataset contained in sample give the
+ bins.
+ The dataset is a sequence of
+\begin_inset Formula $D$
+\end_inset
+
+ arrays or an
+\begin_inset Formula $N\times D$
+\end_inset
+
+ array where
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of samples and
+\begin_inset Formula $D$
+\end_inset
+
+ is the number of dimensions.
+ Returns (histogram, edges) where histogram is a
+\begin_inset Formula $D$
+\end_inset
+
+-dimensional array of shape given by the number of bins selected in each
+ axis containing the number of counts that a point in the sample data fell
+ into the volume bin specified.
+ The edges sequence has
+\begin_inset Formula $D$
+\end_inset
+
+-entries to specify the edge boundaries for each dimension.
+ The bins argument is a sequence of edge arrays or a sequence of the number
+ of bins.
+ If a scalar is given, it is assumed to be the number of bins for all dimensions.
+ The range is a length-
+\begin_inset Formula $D$
+\end_inset
+
+ sequence containing lower and upper bin edges which default to the min
+ and maximum of the respective datasets.
+ If normed is True, then a density rather than a bin-count is returned.
+
+\end_layout
+
+\begin_layout Description
+logspace
+\begin_inset LatexCommand index
+name "logspace"
+
+\end_inset
+
+ (start, stop, num=50, endpoint=True,base=10.0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evenly spaced samples on a logarithmic scale.
+ Returns num evenly spaced (in logspace) samples from base**start to base**stop.
+ If endpoint is True, then the last sample is base**stop.
+\end_layout
+
+\begin_layout Description
+linspace
+\begin_inset LatexCommand index
+name "linspace"
+
+\end_inset
+
+ (start, stop, num=50, endpoint=True, retstep=False):
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evenly spaced samples.
+ Returns num evenly spaced samples from start to stop.
+ If endpoint is True, then the last sample is stop.
+ If retstep is True, then return the computed step size.
+\end_layout
+
+\begin_layout Description
+meshgrid
+\begin_inset LatexCommand index
+name "meshgrid"
+
+\end_inset
+
+ (x, y)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ For 1-d arrays x, y with lengths Nx=len(x) and Ny = len(y), return X, Y
+ where X and Y are (Ny, Nx) shaped arrays with the elements of x and y repeated
+ to fill the array.
+
+\end_layout
+
+\begin_layout MyCode
+>>> X,Y = meshgrid([1,2,3], [4,5,6,7]); print X; print Y
+\newline
+[[1 2 3]
+\newline
+ [1 2 3]
+\newline
+
+ [1 2 3]
+\newline
+ [1 2 3]]
+\newline
+[[4 4 4]
+\newline
+ [5 5 5]
+\newline
+ [6 6 6]
+\newline
+ [7 7 7]]
+\end_layout
+
+\begin_layout Description
+select
+\begin_inset LatexCommand index
+name "select"
+
+\end_inset
+
+ (condlist, choicelist, default=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an array comprised from different elements of choicelist depending
+ on the list of conditions.
+ The condlist argument is a list of Boolean condition arrays.
+ The choicelist argument is a list of choice arrays (of the same size as
+ the arrays in condlist).
+ The result has the same size as the arrays in choicelist.
+ If condlist is [
+\begin_inset Formula $c_{0},\ldots,c_{N-1}$
+\end_inset
+
+], then choicelist must be of length
+\begin_inset Formula $N$
+\end_inset
+
+.
+ The elements of choicelist can then be represented as [
+\begin_inset Formula $v_{0},\ldots,v_{N-1}$
+\end_inset
+
+].
+ The default choice if none of the conditions are met is given as the default
+ argument.
+ The conditions are tested in order and the first one satisfied is used
+ to select the choice.
+ In other words, the elements of the output array are found from the following
+ tree (evaluated on an element-by-element basis)
+\end_layout
+
+\begin_layout LyX-Code
+
+\series bold
+if
+\series default
+
+\begin_inset Formula $c_{0}$
+\end_inset
+
+:
+\begin_inset Formula $v_{0}$
+\end_inset
+
+
+\newline
+
+\series bold
+elif
+\series default
+
+\begin_inset Formula $c_{1}$
+\end_inset
+
+:
+\begin_inset Formula $v_{1}$
+\end_inset
+
+
+\newline
+...
+\newline
+
+\series bold
+elif
+\series default
+
+\begin_inset Formula $c_{N-1}$
+\end_inset
+
+:
+\begin_inset Formula $v_{N-1}$
+\end_inset
+
+
+\newline
+
+\series bold
+else
+\series default
+: default
+\end_layout
+
+\begin_layout Description
+piecewise
+\begin_inset LatexCommand index
+name "piecewise"
+
+\end_inset
+
+ (x, condlist, funclist, *args, **kw)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute a piecewise-defined function.
+ A piecewise defined function is
+\begin_inset Formula \[
+f\left(x\right)=\left\{ \begin{array}{cc}
+f_{1}\left(x\right) & x\in S_{1},\\
+f_{2}\left(x\right) & x\in S_{2},\\
+\vdots & \vdots\\
+f_{n}\left(x\right) & x\in S_{n}.\end{array}\right.\]
+
+\end_inset
+
+where
+\begin_inset Formula $S_{1}$
+\end_inset
+
+ are sets.
+ Thus, the function is defined differently over different sub-domains of
+ the input.
+ Such a function can be computed using
+\family typewriter
+select
+\family default
+ but such an implementation means calling each
+\begin_inset Formula $f_{i}$
+\end_inset
+
+ over the entire region of
+\begin_inset Formula $x.$
+\end_inset
+
+ The piecewise call guarantees that each function
+\begin_inset Formula $f_{i}$
+\end_inset
+
+ will only be called over those values of
+\begin_inset Formula $x$
+\end_inset
+
+ in
+\begin_inset Formula $S_{i}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Arguments: x is the array of values over which to call the function; condlist
+ is a sequence of Boolean (indicator) arrays (or a single Boolean array)
+ of the same shape as
+\begin_inset Formula $x$
+\end_inset
+
+ that defines the sets (True indicates that element of
+\begin_inset Formula $x$
+\end_inset
+
+ is in the set).
+ If needed, to match the length of funclist, an
+\begin_inset Quotes eld
+\end_inset
+
+otherwise
+\begin_inset Quotes erd
+\end_inset
+
+ set will be added to condlist.
+ This otherwise set is defined as
+\begin_inset Formula $S_{n}=\overline{\bigcup S_{i}}.$
+\end_inset
+
+ The argument funclist is a list of functions to be called (or items to
+ be inserted) corresponding to the conditions.
+ Each of these functions can take extra arguments and key-word arguments
+ which are passed in as *args, and **kw using standard Python syntax.
+ Each of these functions should return vector output for vector input.
+ If the function is a scalar, then it will simply be inserted where appropriate
+ into the output.
+ It is the equivalent of a constant function.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example: Suppose we want to compute
+\begin_inset Formula $f\left(x\right)=x^{2}\Pi\left(\frac{x}{3}\right)+u\left(x-5\right)$
+\end_inset
+
+ where
+\begin_inset Formula $\Pi\left(x\right)=1$
+\end_inset
+
+ only when
+\begin_inset Formula $\left|x\right|\leq1$
+\end_inset
+
+ and
+\begin_inset Formula $u\left(x\right)=1$
+\end_inset
+
+ only when
+\begin_inset Formula $x\geq0.$
+\end_inset
+
+ This could be done using the code:
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> f1 = lambda x: x*x
+\newline
+>>> x = r_[-4:6:20j]
+\newline
+>>> y = piecewise(x,abs(x)<=3,[f1,0])+
+piecewise(x,x>=0,[1,0])
+\newline
+>>> set_printoptions(precision=4); print y
+\newline
+[ 0.
+ 0.
+ 8.687 5.8615 3.59 1.8726 0.7091 0.0997
+\newline
+ 1.0443 1.5429 2.5956 4.2022
+ 6.3629 9.0776 1.
+ 1.
+ 1.
+\newline
+ 1.
+ 1.
+ 1.
+ ]
+\end_layout
+
+\begin_layout Description
+trim_zeros
+\begin_inset LatexCommand index
+name "trim\\_zeros"
+
+\end_inset
+
+ (filt, trim='fb'):
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Trim the leading ('f' in trim) and trailing ('b' in trim) zeros from a
+ sequence according to the trim keyword.
+
+\end_layout
+
+\begin_layout Description
+trapz
+\begin_inset LatexCommand index
+name "trapz"
+
+\end_inset
+
+ (y, x=None, dx=1.0, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If
+\begin_inset Formula $\mathbf{y}$
+\end_inset
+
+ contains samples of a function:
+\begin_inset Formula $y_{i}=f\left(x_{i}\right)$
+\end_inset
+
+ then trapz can be used to approximate the integral of the function using
+ the trapezoidal rule.
+ If the sampling is not evenly spaced use
+\begin_inset Formula $\mathbf{x}$
+\end_inset
+
+ to pass in the sample positions.
+ Otherwise, only the sample-spacing is needed in dx.
+ The trapz function can work with many functions at a time stored in an
+
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional array.
+ The axis argument controls which axis defines the sampling axis (the other
+ dimensions are different functions).
+ The number of dimensions of the returned result is
+\begin_inset Formula $y$
+\end_inset
+
+.ndim - 1.
+\end_layout
+
+\begin_layout Description
+diff
+\begin_inset LatexCommand index
+name "diff"
+
+\end_inset
+
+ (x, n=1, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Calculates the
+\begin_inset Formula $n^{\textrm{th}}$
+\end_inset
+
+ order, discrete difference along the given axis.
+\end_layout
+
+\begin_layout Description
+gradient
+\begin_inset LatexCommand index
+name "gradient"
+
+\end_inset
+
+ (f, *varargs)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Calculate the gradient of an N-d scalar function, f.
+ Uses central differences on the interior and first differences on boundaries
+ to give the same shape for each component of the gradient.
+ The varargs variable can contain 0, 1, or N scalars corresponding to the
+ sample distances in each direction (default 1.0).
+ If f is N-d, then N arrays are returned each of the same shape as f, giving
+ the derivative of f with respect to each dimension.
+
+\end_layout
+
+\begin_layout Description
+angle
+\begin_inset LatexCommand index
+name "angle"
+
+\end_inset
+
+ (z, deg=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the angle of a complex number z (in degrees if deg is True).
+\end_layout
+
+\begin_layout Description
+unwrap
+\begin_inset LatexCommand index
+name "unwrap"
+
+\end_inset
+
+ (p, discont=pi, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Unwraps radian phase p by changing absolute jumps greater than discont
+ to their
+\begin_inset Formula $2\pi$
+\end_inset
+
+ complement along the given axis.
+
+\end_layout
+
+\begin_layout Description
+sort_complex
+\begin_inset LatexCommand index
+name "sort\\_complex"
+
+\end_inset
+
+ (x)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is syntactic sugar for asarray(x).sort().astype(<cmplx_type>) where
+ cmplx_type is csingle if x.dtype is integral with fewer bits than intp,
+ clongfloat if x.dtype.type is longfloat, and cdouble for all other types.
+ The sorting is done by comparing the real part of the array, and then the
+ imaginary part if the real parts are the same.
+
+\end_layout
+
+\begin_layout Description
+disp
+\begin_inset LatexCommand index
+name "disp"
+
+\end_inset
+
+ (mesg, device=None, linefeed=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Display a message to device (defaults to sys.stdout) with or without a closing
+ linefeed.
+\end_layout
+
+\begin_layout Description
+unique
+\begin_inset LatexCommand index
+name "unique"
+
+\end_inset
+
+ (seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns unique items in the 1-dimensional seq.
+\end_layout
+
+\begin_layout Description
+extract
+\begin_inset LatexCommand index
+name "extract"
+
+\end_inset
+
+ (condition, arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equivalent to arr.compress(condition.flat) and arr.flat[bool_(condition.flat)]
+ which extracts the elements of (flattened) arr according to the elements
+ of (flattened) condition that are True.
+
+\end_layout
+
+\begin_layout Description
+place
+\begin_inset LatexCommand index
+name "place"
+
+\end_inset
+
+ (arr, mask, vals)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Inverse of extract.
+ Equivalent to arr[abool(mask)] = vals but it uses a different algorithm.
+
+\end_layout
+
+\begin_layout Description
+delete
+\begin_inset LatexCommand index
+name "delete"
+
+\end_inset
+
+ (arr, indices, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array with the sub-arrays indicated by indices along axis
+ removed.
+ If axis is None, then first ravel the array and set axis to -1.
+ The indices argument describes which sub-arrays along the given axis should
+ be removed.
+ It can be an integer, a slice object, or a sequence of integers.
+ A new array is created with the corresponding sub-arrays are removed.
+
+\end_layout
+
+\begin_layout Description
+insert
+\begin_inset LatexCommand index
+name "insert"
+
+\end_inset
+
+ (arr, indices, values, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new array with values inserted into arr before indices.
+ If axis is None, then first ravel the array and set axis to -1.
+ The indices argument describes which indices along the provided axis the
+ values should be inserted before.
+ It can be an integer, a slice object, or a sequence of integers.
+ The values argument must be broadcastable to the shape implied by where
+ they will be inserted.
+
+\end_layout
+
+\begin_layout Description
+append
+\begin_inset LatexCommand index
+name "append"
+
+\end_inset
+
+ (arr, values, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a new array with values appended to the end of the array along axis.
+
+\end_layout
+
+\begin_layout Description
+nansum
+\begin_inset LatexCommand index
+name "nansum"
+
+\end_inset
+
+ (x, axis=None)
+\end_layout
+
+\begin_layout Description
+nanmax
+\begin_inset LatexCommand index
+name "nanmax"
+
+\end_inset
+
+ (x, axis=None)
+\end_layout
+
+\begin_layout Description
+nanargmax
+\begin_inset LatexCommand index
+name "nanargmax"
+
+\end_inset
+
+ (x, axis=None)
+\end_layout
+
+\begin_layout Description
+nanargmin
+\begin_inset LatexCommand index
+name "nanargmin"
+
+\end_inset
+
+ (x, axis=None)
+\end_layout
+
+\begin_layout Description
+nanmin
+\begin_inset LatexCommand index
+name "nanmin"
+
+\end_inset
+
+ (x, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions perform their respective operations over the given axis
+ (or the entire array if axis is None), after replacing any nans with appropriat
+e values so as not to affect the calculation.
+
+\end_layout
+
+\begin_layout Description
+vectorize
+\begin_inset LatexCommand index
+name "vectorize"
+
+\end_inset
+
+ (pyfunc, otypes=None, doc=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This creates a class whose instances have a call method that invokes a
+ ufunc that has been dynamically built to call the python function pyfunc
+ internally.
+ The output types can be controlled by the otypes argument.
+ If it is None, then the output types will be determined upon first call
+ to the function using the provided inputs.
+ This can be reset, by re-setting the otypes attribute to
+\begin_inset Quotes eld
+\end_inset
+
+
+\begin_inset Quotes erd
+\end_inset
+
+.
+ The normal rules of array broadcasting are followed by the returned object.
+\end_layout
+
+\begin_layout MyCode
+>>> def myfunc(a,b):
+\newline
+...
+ if (a>b): return a
+\newline
+...
+ else: return b-1
+\newline
+>>> vecfunc = vectorize(myfunc)
+\newline
+>>> vecfunc([[1,2,3],[5,6,9]
+],[7,4,5])
+\newline
+array([[6, 3, 4],
+\newline
+ [6, 6, 9]])
+\end_layout
+
+\begin_layout Description
+asarray_chkfinite
+\begin_inset LatexCommand index
+name "asarray\\_chkfinite"
+
+\end_inset
+
+ (x)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Like asarray(x) except an error is raised if any of the values in x are
+ not finite.
+
+\end_layout
+
+\begin_layout Description
+round_
+\begin_inset LatexCommand index
+name "round\\_"
+
+\end_inset
+
+ (x, decimals=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array with all the elements of x rounded to decimals places.
+ Returns x if array is not floating point and rounds both the real and imaginary
+ parts separately if array is complex.
+ Rounds in the same way as standard python except for half-way values are
+ rounded to the nearest
+\emph on
+even
+\emph default
+ number.
+\end_layout
+
+\begin_layout Description
+packbits (array, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Pack an integer array of logical data (zero/non-zero) into bits of a uint8
+ data-type along the dimension given by axis.
+ This dimension is shrunk by a factor of 8 (rounded up).
+ Each element in the input is converted to a bit in the output which is
+ set to 1 or 0 depending on whether the input is non-zero or not.
+ Thus, every 8-element chunk of the input is converted to a single byte
+ in the output.
+ If axis is None, then the bit-packing is done on the entire array as if
+ it were raveled.
+\end_layout
+
+\begin_layout Description
+unpackbits (array, axis=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Unpack bits of an array of uint8 data-type into a single uint8 byte for
+ each bit along the dimension given by axis.
+ This dimension is thus expanded 8-fold, but otherwise the output has the
+ same shape as the input.
+ If axis is None, then the input is treated as a 1-d array and expanded
+ 8-fold so that each bit of the input is given an output byte.
+
+\end_layout
+
+\begin_layout Description
+add_docstring
+\begin_inset LatexCommand index
+name "add\\_docstring"
+
+\end_inset
+
+ (obj, doc)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Adds a docstring to a built-in object, obj, that does not have a docstring
+ defined already.
+ The obj can be a built-in function-or-method, a typeobject, a method descriptor
+, a getset descriptor, or a member descriptor.
+ This is useful for improving the documentation of objects defined in C-compiled
+ code without re-compiling.
+ If the object already has a docstring, a RuntimeError is raised.
+ If the object is not a supported type the code can add a docstring to,
+ a TypeError is raised.
+
+\end_layout
+
+\begin_layout Description
+add_newdoc
+\begin_inset LatexCommand index
+name "add\\_newdoc"
+
+\end_inset
+
+ (place, obj, doc)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Adds a docstring to the
+\emph on
+obj
+\emph default
+ imported from
+\emph on
+place
+\emph default
+ using exec 'from %s import %s' % (place, obj).
+ Thus, both place and obj should be strings.
+ If doc is a string, then a single docstring is added to obj from place.
+ If doc is a 2-tuple, then obj must be an object with attributes that need
+ to be commented.
+ The first element of the doc tuple is the attribute to be commented on
+ and the second element is the actual docstring.
+ If doc is a list, then it must be composed of elements that are 2-tuples
+ indicating that obj has several attributes that need to be documented.
+
+\end_layout
+
+\begin_layout Section
+Polynomial functions
+\end_layout
+
+\begin_layout Standard
+There are two interfaces for dealing with polynomials
+\begin_inset LatexCommand index
+name "polynomials"
+
+\end_inset
+
+: a class-based interface, and a collection of functions to deal with a
+ polynomials represented as a simple list of coefficients.
+ This latter representation results from the is a one-to-one correspondence
+ between a length-
+\begin_inset Formula $\left(n+1\right)$
+\end_inset
+
+ sequence of coefficients
+\begin_inset Formula $a_{n}\equiv a[n]$
+\end_inset
+
+ and an
+\begin_inset Formula $n^{\textrm{th}}$
+\end_inset
+
+ order polynomial:
+\begin_inset Formula \[
+p\left(x\right)=a_{0}x^{n}+a_{1}x^{n-1}+\cdots+a_{n-1}x+a_{n}.\]
+
+\end_inset
+
+ Most of the functions below operate on and return a simple sequence of
+ coefficients representing a polynomial.
+ There is, however, a simple polynomial class that provides some utility
+ for doing simple algebra on polynomials.
+
+\end_layout
+
+\begin_layout Description
+poly1d
+\begin_inset LatexCommand index
+name "poly1d"
+
+\end_inset
+
+ (c_or_r, r=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This construction returns an instance of a simple polynomial class.
+ It can take either a list of coefficients on polynomial powers, or a sequence
+ of roots (if r=1).
+ The returned polynomial can be added, subtracted, multiplied, divided,
+ and taken to integer powers, resulting in new polynomials.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+.r roots of the polynomial
+\end_layout
+
+\begin_layout Description
+.o order of the polynomial
+\end_layout
+
+\begin_layout Description
+.c polynomial coefficients as an array (also
+\series bold
+__array__()
+\series default
+ )
+\end_layout
+
+\begin_layout Description
+__call__(x) evaluate the polynomial at x (can be an array)
+\end_layout
+
+\begin_layout Description
+__getitem__(x) p[k] returns the coefficient on the kth power of x (backwards
+ from indexing the coefficient array)
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> p=poly1d([2,5,7])
+\newline
+>>> print p
+\newline
+2
+\newline
+2 x + 5 x + 7
+\newline
+>>> print p*[1,3,1]
+\newline
+4
+ 3 2
+\newline
+2 x + 11 x + 24 x + 26 x + 7
+\newline
+>>> print p([0.5,0.6,3])
+\newline
+[ 10.
+ 10.72 40.
+ ]
+\newline
+>>> print p.r
+\newline
+[-1.25+1.3919j -1.25-1.3919j]
+\end_layout
+
+\begin_layout Description
+poly
+\begin_inset LatexCommand index
+name "poly"
+
+\end_inset
+
+ (roots_or_matrix)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a sequence of coefficients representing a polynomial given the sequence
+ of roots as an argument.
+ Alternatively, if the argument is a 2-d array, then return the characteristic
+ polynomial of the matrix.
+
+\end_layout
+
+\begin_layout Description
+roots
+\begin_inset LatexCommand index
+name "roots"
+
+\end_inset
+
+ (poly)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the roots of the polynomial represented by coefficients in poly
+\end_layout
+
+\begin_layout Description
+polyint
+\begin_inset LatexCommand index
+name "polyint"
+
+\end_inset
+
+ (poly, m=1, k=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an exact
+\begin_inset Formula $m^{\textrm{th}}$
+\end_inset
+
+-order integral of the polynomial represented in poly.
+ If k is None, then use 0 for the integrating constants.
+ Otherwise, use the scalars in the sequence k as integrating constants.
+ Also available as .integ (m=1,k=0) method of poly1d objects.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example:
+\begin_inset Formula \begin{eqnarray*}
+p\left(x\right) & = & x^{2}+3x+4\\
+\int\int p\left(x\right) & = & \frac{1}{12}x^{4}+\frac{1}{2}x^{3}+2x^{2}+k_{0}x+k_{1}\end{eqnarray*}
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> print polyint([1,3,4],m=2,k=[5,3])
+\newline
+[ 0.0833 0.5 2.
+ 5.
+ 3.
+ ]
+\end_layout
+
+\begin_layout Description
+polyder
+\begin_inset LatexCommand index
+name "polyder"
+
+\end_inset
+
+ (poly, m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an exact
+\begin_inset Formula $m^{\textrm{th}}$
+\end_inset
+
+-order derivative of the polynomial represented in poly.
+ Also available as .deriv(m=1) method of poly1d objects.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example:
+\begin_inset Formula \begin{eqnarray*}
+p\left(x\right) & = & x^{3}+2x^{2}+4x+3\\
+\frac{dp}{dx}\left(x\right) & = & 3x^{2}+4x+4\end{eqnarray*}
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout MyCode
+>>> polyder([1,2,4,3])
+\newline
+array([3, 4, 4])
+\end_layout
+
+\begin_layout Description
+polyadd
+\begin_inset LatexCommand index
+name "polyadd"
+
+\end_inset
+
+ (p1, p2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add the two polynomials represented by coefficients:
+\begin_inset Formula $p_{1}\left(x\right)+p_{2}\left(x\right)$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+polysub
+\begin_inset LatexCommand index
+name "polysub"
+
+\end_inset
+
+ (p1, p2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return coefficients for the polynomial found by subtracting the two polynomials
+ represented by
+\begin_inset Formula $p_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $p_{2}$
+\end_inset
+
+:
+\begin_inset Formula $p_{1}\left(x\right)-p_{2}\left(x\right)$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+polymul
+\begin_inset LatexCommand index
+name "polymul"
+
+\end_inset
+
+ (p1, p2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the coefficients for
+\begin_inset Formula $p_{1}\left(x\right)p_{2}\left(x\right)$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+polydiv
+\begin_inset LatexCommand index
+name "polydiv"
+
+\end_inset
+
+ (p1, p2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the quotient,
+\begin_inset Formula $q\left(x\right)$
+\end_inset
+
+, and remainder,
+\begin_inset Formula $r\left(x\right)$
+\end_inset
+
+, so that
+\begin_inset Formula $p_{1}\left(x\right)=q\left(x\right)p_{2}\left(x\right)+r\left(x\right),$
+\end_inset
+
+ with the order of
+\begin_inset Formula $r\left(x\right)$
+\end_inset
+
+ less than the order of
+\begin_inset Formula $p_{2}\left(x\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+polyval
+\begin_inset LatexCommand index
+name "polyval"
+
+\end_inset
+
+ (p, y)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Evaluate the polynomial
+\begin_inset Formula $p$
+\end_inset
+
+ at
+\begin_inset Formula $y$
+\end_inset
+
+.
+ The argument,
+\begin_inset Formula $y$
+\end_inset
+
+, can be a number or an array or a polynomial object.
+ If x is a polynomial object, then polyval performs polynomial composition:
+
+\begin_inset Formula $p\left(y\left(x\right)\right),$
+\end_inset
+
+ otherwise polyval computes the value of the polynomial at each
+\begin_inset Formula $y$
+\end_inset
+
+.
+ Uses Horner's rule for evaluation, but this can still lead to numerical
+ instabilities for wildly fluctuating coefficients.
+\end_layout
+
+\begin_layout Description
+polyfit
+\begin_inset LatexCommand index
+name "polyfit"
+
+\end_inset
+
+ (x,y,N)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute a best-fit polynomial in
+\begin_inset Formula $x$
+\end_inset
+
+ of order
+\begin_inset Formula $N$
+\end_inset
+
+, to the data,
+\begin_inset Formula $y$
+\end_inset
+
+, in the sense of minimizing averaged-squared error between the measurement
+ and the model.
+ Useful for quick line-fitting
+\begin_inset LatexCommand index
+name "fitting"
+
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Section
+Set Operations
+\end_layout
+
+\begin_layout Standard
+The set operations
+\begin_inset LatexCommand index
+name "set operations|("
+
+\end_inset
+
+ were kindly contributed by Robert Cimrman.
+ These set operations are based on sorting functions and all expect 1-d
+ sequences with unique elements with the exception of unique1d and intersect1d_n
+u which will flatten N-d nested-sequences to 1-d arrays and can handle non-uniqu
+e elements.
+
+\end_layout
+
+\begin_layout Description
+unique1d
+\begin_inset LatexCommand index
+name "unique1d"
+
+\end_inset
+
+ (arr, retindx=False)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the unique elements of arr as a 1-d array.
+ If retindx is True, then also return the indices, ind, such that arr.flat[ind]
+ is the set of unique values.
+\end_layout
+
+\begin_layout Description
+intersect1d
+\begin_inset LatexCommand index
+name "intersect1d"
+
+\end_inset
+
+ (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (sorted) intersection of a1 and a2 which is an array containing
+ the elements of a1 that are also in a2.
+
+\end_layout
+
+\begin_layout Description
+intersect1d_nu
+\begin_inset LatexCommand index
+name "intersect1d\\_nu"
+
+\end_inset
+
+ (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (sorted) intersection of a1 and a2 but allow a1 and a2 to be
+ N-d arrays with non-unique elements.
+ Equivalent to intersect1d(unique1d(a1), unique1d(a2)).
+
+\end_layout
+
+\begin_layout Description
+union1d
+\begin_inset LatexCommand index
+name "union1d"
+
+\end_inset
+
+ (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (sorted) union of a1 and a2 which is an array containing elements
+ that are in either a1 or a2.
+
+\end_layout
+
+\begin_layout Description
+setdiff1d
+\begin_inset LatexCommand index
+name "setdiff1d"
+
+\end_inset
+
+ (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the set-difference of a1 and a2 which is an array containing the
+ elements of a1 that are
+\series bold
+not
+\series default
+ in a2.
+\end_layout
+
+\begin_layout Description
+setxor1d
+\begin_inset LatexCommand index
+name "setxor1d"
+
+\end_inset
+
+ (a1, a2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (sorted) set containing the exclusive-or of the arrays a1 and
+ a2.
+ The exclusive-or contains elements that are in a1 or in a2 as long as the
+ element is not in both a1 and a2.
+
+\end_layout
+
+\begin_layout Description
+setmember1d
+\begin_inset LatexCommand index
+name "setmember1d"
+
+\end_inset
+
+ (tocheck, set)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a Boolean 1-d array of the length of tocheck which is True whenever
+ that element is contained in set and false when it is not.
+ Equivalent
+\begin_inset LatexCommand index
+name "set operations|)"
+
+\end_inset
+
+ to array([x in set for x in tocheck]).
+\end_layout
+
+\begin_layout Section
+Array construction using index tricks
+\end_layout
+
+\begin_layout Standard
+The functions and classes in this category make it simpler to construct
+ arrays.
+
+\end_layout
+
+\begin_layout Description
+ix_
+\begin_inset LatexCommand index
+name "ix\\_"
+
+\end_inset
+
+ (*args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This indexing cross function is useful for forming indexing arrays necessary
+ to select out the cross-product of
+\begin_inset Formula $N$
+\end_inset
+
+ 1-dimensional arrays.
+ Note that the default indexing does not do a cross-product (which might
+ be unexpected for someone coming from other programming environments).
+ The default indexing is more general purpose.
+ Using the ix_ constructor can produce the indexing arrays necessary to
+ select a cross-product.
+\end_layout
+
+\begin_layout Description
+mgrid [index expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is an instance of a class.
+ It can be used to construct a filled
+\begin_inset Quotes eld
+\end_inset
+
+mesh-grid
+\begin_inset Quotes erd
+\end_inset
+
+ using slicing syntax.
+
+\end_layout
+
+\begin_layout Description
+ogrid [index expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is similar to mgrid except it returns an open grid, so as to save
+ space and time.
+ The broadcasting rules will ensure that any universal function operating
+ on the grid will act as if the ogrid had been the result of mgrid.
+\end_layout
+
+\begin_layout Description
+r_
+\begin_inset LatexCommand index
+name "r\\_"
+
+\end_inset
+
+ [index expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is a simple way to build up arrays quickly.
+ There are two use cases.
+ 1) If the index expression contains comma separated arrays, then stack
+ them along their first axis.
+ 2) If the index expression contains slice notation or scalars then create
+ a 1-d array with a range indicated by the slice notation.
+ In other-words the slice syntax start:stop:step is equivalent to arange(start,
+ stop, step) inside of the brackets.
+ However, if step is an imaginary number (i.e.
+ 100j) then its integer portion is interpreted as a number-of-points desired
+ and the start and stop are inclusive.
+ In other words start:stop:step
+\family typewriter
+j
+\family default
+ is interpreted as linspace(start, stop, step, endpoint=1) inside of the
+ brackets.
+ After expansion of slice notation, all comma separated sequences are concatenat
+ed together.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Optional character strings placed as the first element of the index expression
+ can be used to change the output.
+ The strings 'r' or 'c' result in matrix output.
+ If the result is 1-d and 'r' is specified a
+\begin_inset Formula $1\times N$
+\end_inset
+
+ (row) matrix is produced.
+ If the result is 1-d and 'c' is specified, then a
+\begin_inset Formula $N\times1$
+\end_inset
+
+ (column) matrix is produced.
+ If the result is 2-d then both provide the same matrix result.
+
+\end_layout
+
+\begin_layout MyCode
+>>> print r_[-1:1:9j,[0]*10,5,6]
+\newline
+[-1.
+ -0.75 -0.5 -0.25 0.
+ 0.25 0.5 0.75 1.
+ 0.
+ 0.
+\newline
+ 0.
+ 0.
+ 0.
+ 0.
+ 0.
+ 0.
+ 0.
+ 0.
+ 5.
+ 6.
+ ]
+\newline
+>>> print r_['r',1,2,5,6]
+\newline
+[[1 2 5 6]]
+\newline
+>>> print r_['c',1,2,5,6]
+\newline
+[[1]
+\newline
+ [2]
+\newline
+
+ [5]
+\newline
+ [6]]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A string integer specifies which axis to stack multiple comma separated
+ arrays along.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a=arange(6).reshape(2,3)
+\newline
+>>> r_[a,a]
+\newline
+array([[0, 1, 2],
+\newline
+ [3, 4, 5],
+\newline
+
+ [0, 1, 2],
+\newline
+ [3, 4, 5]])
+\newline
+>>> r_['-1',a,a]
+\newline
+array([[0, 1, 2, 0, 1,
+ 2],
+\newline
+ [3, 4, 5, 3, 4, 5]])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A string of two comma-separated integers allows indication of the minimum
+ number of dimensions to force each entry into as the second integer (the
+ axis to concatenate along is still the first integer).
+
+\end_layout
+
+\begin_layout MyCode
+>>> r_['0,2',[1,2,3],[4,5,6]]
+\newline
+array([[1, 2, 3],
+\newline
+ [4, 5, 6]])
+\newline
+>>> r_['1,2',[1,
+2,3],[4,5,6]]
+\newline
+array([[1, 2, 3, 4, 5, 6]])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A string with three comma-separated integers allows specification of the
+ axis to concatenate along, the minimum number of dimensions to force the
+ entries to, and which axis should contain the start of the arrays which
+ are less than the specified number of dimensions.
+ In other words the third integer allows you to specify where the the 1's
+ should be placed in the shape of the arrays that have their shapes upgraded.
+ By default, they are placed in the front of the shape tuple.
+ The third argument allows you to specify where the start of the array should
+ be instead.
+ Thus, a third argument of '0' would place the 1's at the end of the array
+ shape.
+ Negative integers specify where in the new shape tuple the last dimension
+ of upgraded arrays should be placed, so the default is '-1'.
+\end_layout
+
+\begin_layout MyCode
+>>> r_['0,2,0', [1,2,3], [4,5,6]]
+\newline
+array([[1],
+\newline
+ [2],
+\newline
+ [3],
+\newline
+
+ [4],
+\newline
+ [5],
+\newline
+ [6]])
+\newline
+>>> r_['1,2,0', [1,2,3], [4,5,6]]
+\newline
+array([[1,
+ 4],
+\newline
+ [2, 5],
+\newline
+ [3, 6]])
+\end_layout
+
+\begin_layout Description
+c_
+\begin_inset LatexCommand index
+name "c\\_"
+
+\end_inset
+
+ [index_expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is short-hand for r_['-1,2,0', index_expression] useful because of
+ its common occurence.
+ In particular, arrays will be stacked along their last axis after being
+ upgraded to at least 2-d with 1's post-pended to the shape (column vectors
+ made out of 1-d arrays).
+
+\end_layout
+
+\begin_layout Section
+Other indexing devices
+\end_layout
+
+\begin_layout Description
+index_exp
+\begin_inset LatexCommand index
+name "index\\_exp"
+
+\end_inset
+
+ [index expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a tuple of Python objects that implements the index expression and
+ can be modified and placed in any other index expression.
+
+\end_layout
+
+\begin_layout MyCode
+>>> index_exp[2:5,...,4,::-1]
+\newline
+(slice(2, 5, None), Ellipsis, 4, slice(None, None,
+ -1))
+\end_layout
+
+\begin_layout Description
+s_
+\begin_inset LatexCommand index
+name "s\\_"
+
+\end_inset
+
+ [index expression]
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Translate index expressions into the equivalent Python objects.
+ This is similar to index_expression except a tuple is not always returned.
+ For example:
+\end_layout
+
+\begin_layout MyCode
+>>> s_[1:10]
+\newline
+slice(1, 10, None)
+\newline
+>>> s_[1:10,-3:4:0.5]
+\newline
+(slice(1, 10, None), slice(-3,
+ 4, 0.5))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This provides a standard way to construct index expressions to pass to
+ functions and methods because Python does not allow slice expressions anywhere
+ except for inside brackets.
+
+\end_layout
+
+\begin_layout Description
+ndindex
+\begin_inset LatexCommand index
+name "ndindex"
+
+\end_inset
+
+ (*seq)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A sequence of
+\begin_inset Formula $N$
+\end_inset
+
+ integers are passed in as separate arguments.
+ These integers are used as the upper boundaries of an
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional counter that starts at 0.
+ The object returned is an iterator that implements the counter.
+\end_layout
+
+\begin_layout MyCode
+>>> for index in ndindex(3,3,2):
+\newline
+...
+ print index,
+\newline
+(0, 0, 0) (0, 0, 1) (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2,
+ 1) (1, 0, 0) (1, 0, 1) (1, 1, 0) (1, 1, 1) (1, 2, 0) (1, 2, 1) (2, 0, 0)
+ (2, 0, 1) (2, 1, 0) (2, 1, 1) (2, 2, 0) (2, 2, 1)
+\end_layout
+
+\begin_layout Description
+unravel_index
+\begin_inset LatexCommand index
+name "unravel\\_index"
+
+\end_inset
+
+ (indx, dims)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert a flat index, indx, into an index tuple for an array of the given
+ shape.
+ Keep in mind that it may be more convenient to use indx with a.flat, then
+ to unravel the index.
+\end_layout
+
+\begin_layout Section
+Two-dimensional functions
+\end_layout
+
+\begin_layout Standard
+These functions all deal with or return two dimensional arrays.
+\end_layout
+
+\begin_layout Description
+eye
+\begin_inset LatexCommand index
+name "eye"
+
+\end_inset
+
+ (
+\begin_inset Formula $N$
+\end_inset
+
+,
+\begin_inset Formula $M$
+\end_inset
+
+=None,
+\begin_inset Formula $k$
+\end_inset
+
+=0, dtype=float)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an
+\begin_inset Formula $N\times M$
+\end_inset
+
+ array of the given type with ones down the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ diagonal.
+ If
+\begin_inset Formula $M$
+\end_inset
+
+ is None, it defaults to
+\begin_inset Formula $N$
+\end_inset
+
+.
+ Alternatively, if
+\begin_inset Formula $M$
+\end_inset
+
+ is a valid data type, then it becomes the data-type used.
+
+\end_layout
+
+\begin_layout Description
+vander
+\begin_inset LatexCommand index
+name "vander"
+
+\end_inset
+
+ (
+\begin_inset Formula $x$
+\end_inset
+
+,
+\begin_inset Formula $N$
+\end_inset
+
+=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The Vandermonde matrix of vector,
+\begin_inset Formula $x$
+\end_inset
+
+.
+ The
+\begin_inset Formula $i^{\textrm{th}}$
+\end_inset
+
+ column of the return matrix is the
+\begin_inset Formula $m_{i}^{\textrm{th}}$
+\end_inset
+
+ power of
+\begin_inset Formula $x$
+\end_inset
+
+ where
+\begin_inset Formula $m_{i}=N-i-1$
+\end_inset
+
+.
+ If
+\begin_inset Formula $N$
+\end_inset
+
+ is None, it defaults to the length of
+\begin_inset Formula $x$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout MyCode
+>>> vander([1,2,3,4,5],3)
+\newline
+array([[ 1, 1, 1],
+\newline
+ [ 4, 2, 1],
+\newline
+
+ [ 9, 3, 1],
+\newline
+ [16, 4, 1],
+\newline
+ [25, 5, 1]])
+\end_layout
+
+\begin_layout Description
+diag
+\begin_inset LatexCommand index
+name "diag"
+
+\end_inset
+
+ (
+\begin_inset Formula $v$
+\end_inset
+
+,
+\begin_inset Formula $k$
+\end_inset
+
+=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ diagonal if
+\begin_inset Formula $v$
+\end_inset
+
+ is a 2-d array, or returns an array with
+\begin_inset Formula $v$
+\end_inset
+
+ as the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ diagonal if
+\begin_inset Formula $v$
+\end_inset
+
+ is a 1-d array.
+
+\end_layout
+
+\begin_layout MyCode
+>>> diag(arange(12).reshape(4,3),k=1)
+\newline
+array([1, 5])
+\newline
+>>> diag([1,4,5,7],k=-1)
+\newline
+array([
+[0, 0, 0, 0, 0],
+\newline
+ [1, 0, 0, 0, 0],
+\newline
+ [0, 4, 0, 0, 0],
+\newline
+ [0,
+ 0, 5, 0, 0],
+\newline
+ [0, 0, 0, 7, 0]])
+\end_layout
+
+\begin_layout Description
+diagflat
+\begin_inset LatexCommand index
+name "diagflat"
+
+\end_inset
+
+ (
+\begin_inset Formula $v$
+\end_inset
+
+,
+\begin_inset Formula $k$
+\end_inset
+
+=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 2-d array (of the same class as
+\begin_inset Formula $v$
+\end_inset
+
+) by placing a flattened version of
+\begin_inset Formula $v$
+\end_inset
+
+ along the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ diagonal.
+ This differs from diag in that it only creates 2-d arrays and will work
+ with any object that can be converted to an array (returning that object
+ if it also defines an __array_wrap__ method).
+
+\end_layout
+
+\begin_layout Description
+fliplr
+\begin_inset LatexCommand index
+name "fliplr"
+
+\end_inset
+
+ (m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the array, m, with rows preserved and columns reversed in the left-right
+ direction.
+ For m.ndim > 2, this works on the first two dimensions (equivalent to m[:,::-1])
+\end_layout
+
+\begin_layout Description
+flipud
+\begin_inset LatexCommand index
+name "flipud"
+
+\end_inset
+
+ (m)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the array, m, with columns preserved and rows reversed in the up-down
+ direction.
+ For m.ndim > 1, this works on the first dimension (equivalent to m[::-1])
+\end_layout
+
+\begin_layout Description
+rot90
+\begin_inset LatexCommand index
+name "rot90"
+
+\end_inset
+
+ (m, k=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Rotate the first two dimensions of an array, m, by k*90 degrees in the
+ counterclockwise direction.
+ Must have m.ndim >=2.
+\end_layout
+
+\begin_layout Description
+tri
+\begin_inset LatexCommand index
+name "tri"
+
+\end_inset
+
+ (
+\begin_inset Formula $N$
+\end_inset
+
+,
+\begin_inset Formula $M$
+\end_inset
+
+=
+\begin_inset Formula $N$
+\end_inset
+
+, k=0, dtype=aint)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $N\times M$
+\end_inset
+
+ array where all the diagonals starting from the lower left corner up to
+ the
+\begin_inset Formula $\textrm{k}^{\textrm{th}}$
+\end_inset
+
+ diagonal are all ones.
+
+\end_layout
+
+\begin_layout Description
+triu
+\begin_inset LatexCommand index
+name "triu"
+
+\end_inset
+
+ (m, k=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a upper-triangular 2-d array from m with all the elements below
+ the
+\begin_inset Formula $\textrm{k}^{\textrm{th}}$
+\end_inset
+
+ diagonal set to 0.
+
+\end_layout
+
+\begin_layout Description
+tril
+\begin_inset LatexCommand index
+name "tril"
+
+\end_inset
+
+ (m, k=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a lower-triangular 2-d array from m with all the elements above
+ the
+\begin_inset Formula $\textrm{k}^{\textrm{th}}$
+\end_inset
+
+ diagonal set to 0.
+
+\end_layout
+
+\begin_layout Description
+mat
+\begin_inset LatexCommand index
+name "mat"
+
+\end_inset
+
+ (data, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a matrix from data.
+ Alias for numpy.asmatrix.
+ The calling syntax is the same as that function.
+ Note that data can be a string in which case the routine uses spaces and
+ semi-colons to construct the matrix:
+\end_layout
+
+\begin_layout MyCode
+>>> mat('1 3 4; 5 6 9')
+\newline
+matrix([[1, 3, 4],
+\newline
+ [5, 6, 9]])
+\end_layout
+
+\begin_layout Description
+bmat
+\begin_inset LatexCommand index
+name "bmat"
+
+\end_inset
+
+ (obj, ldict=None, gdict=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Build a matrix from sub-blocks.
+ This is similar to mat, except the items in the nested-sequence, or string,
+ should be appropriately shaped 2-d arrays.
+ If obj is a string, then ldict and gdict can be used to alter where the
+ names represented in the string are found (default is current local and
+ global namespace).
+
+\end_layout
+
+\begin_layout MyCode
+>>> A=mat('1 2; 3 4'); B=mat('5 6; 7 8')
+\newline
+>>> bmat('A, B; B, A')
+\newline
+matrix([[1,
+ 2, 5, 6],
+\newline
+ [3, 4, 7, 8],
+\newline
+ [5, 6, 1, 2],
+\newline
+ [7, 8, 3, 4]])
+\end_layout
+
+\begin_layout Section
+More data type functions
+\end_layout
+
+\begin_layout Description
+issubclass_
+\begin_inset LatexCommand index
+name "issubclass\\_"
+
+\end_inset
+
+ (arg1, arg2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns True if arg1 is a sub-class of arg2, otherwise returns False.
+ Similar to the built-in issubclass except it does not raise an error if
+ arg1 or arg2 are not types.
+
+\end_layout
+
+\begin_layout Description
+issubdtype
+\begin_inset LatexCommand index
+name "issubdtype"
+
+\end_inset
+
+ (arg1, arg2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns True if the type-object of the data-type represented by arg1 is
+ a sub class of the type-object of the data-type represented by arg2.
+\end_layout
+
+\begin_layout Description
+iscomplexobj
+\begin_inset LatexCommand index
+name "iscomplexobj"
+
+\end_inset
+
+ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a single True or False value depending on whether or not obj would
+ be interpreted as an array with complex-valued data type.
+\end_layout
+
+\begin_layout Description
+isrealobj
+\begin_inset LatexCommand index
+name "isrealobj"
+
+\end_inset
+
+ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a single True or False value depending on whether or not obj would
+ be interpreted as an array with real-valued data type.
+\end_layout
+
+\begin_layout Description
+isscalar
+\begin_inset LatexCommand index
+name "isscalar"
+
+\end_inset
+
+ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if obj is a scalar (an instance of an array data type, or a standard
+ Python scalar type).
+ There is also a sequence of called ScalarType defined in NumPy, so that
+ this can also be tested as type(obj) in numpy.ScalarType.
+
+\end_layout
+
+\begin_layout Description
+nan_to_num
+\begin_inset LatexCommand index
+name "nan\\_to\\_num"
+
+\end_inset
+
+ (arr)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an array with non-finite numbers changed to finite numbers.
+ The mapping converts
+\family typewriter
+nan
+\family default
+ to 0,
+\family typewriter
+inf
+\family default
+ to the maximum value for the data type and
+\family typewriter
+-inf
+\family default
+ to the minimum value for the data type.
+\end_layout
+
+\begin_layout Description
+real_if_close
+\begin_inset LatexCommand index
+name "real\\_if\\_close"
+
+\end_inset
+
+ (arr, tol=100)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a real arr if arr is complex with imaginary parts less than some
+ tolerance.
+ If tol > 1, then it represents a multiplicative factor on the value of
+ epsilon for the data type of arr.
+\end_layout
+
+\begin_layout Description
+cast
+\begin_inset LatexCommand index
+name "cast"
+
+\end_inset
+
+ [dtype_or_alias] (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Cast obj to an array of the given type.
+ This is equivalent to array(obj, copy=0).astype(dtype_or_alias).
+ When one type is cast to another in this fashion, a very low-level operation
+ takes place.
+ Typically, you get what your C-compiler produces for the cast, but notice
+ that in the case of casting to a bool type, the value becomes either a
+ 0 or a 1.
+
+\end_layout
+
+\begin_layout MyCode
+>>> cast[bool]([1,2,0,4,0]).astype(int)
+\newline
+array([1, 1, 0, 1, 0])
+\end_layout
+
+\begin_layout Description
+asfarray
+\begin_inset LatexCommand index
+name "asfarray"
+
+\end_inset
+
+ (a, dtype=float)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of inexact data type (floating or complexfloating).
+
+\end_layout
+
+\begin_layout Description
+mintypecode
+\begin_inset LatexCommand index
+name "mintypecode"
+
+\end_inset
+
+ (typechars, typeset='GDFgdf', default='d')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a minimum data type character from typeset that handles all given
+ typechars.
+ The returned type character must correspond to the data type of the smallest
+ size such that an array of the returned type can handle the data from an
+ array of type t for each t in typechars.
+ If the typechars does not intersect with the typeset, then default is returned.
+ If an element of typechars is not a string, then t=asarray(t).dtypechar
+ is applied.
+\end_layout
+
+\begin_layout Description
+finfo
+\begin_inset LatexCommand index
+name "finfo"
+
+\end_inset
+
+ (dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This class allows exploration of the details of how a floating point number
+ is represented in the computer.
+ It can be instantiated by an inexact data type object (or an alias for
+ one).
+ Complex-valued data types are acceptable and are equivalent to their real-value
+d counterparts.
+ The attributes of the class are
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+nmant The number of bits in the floating point mantissa, or fraction.
+\end_layout
+
+\begin_layout Description
+nexp The number of bits in the floating point exponent
+\end_layout
+
+\begin_layout Description
+machep Exponent of the smallest (most negative) power of 2 that when added
+ to 1.0 gives something different than 1.0.
+
+\end_layout
+
+\begin_layout Description
+eps Floating point precision: 2**machep.
+\end_layout
+
+\begin_layout Description
+precision Number of decimal digits of precision: int(-log10(eps))
+\end_layout
+
+\begin_layout Description
+resolution 10**(-precision)
+\end_layout
+
+\begin_layout Description
+negep Exponent of the smallest power of 2 that, subtracted from 1.0, gives
+ something different than 1.0.
+\end_layout
+
+\begin_layout Description
+epsneg Floating point precision: 2**negep.
+\end_layout
+
+\begin_layout Description
+minexp Smallest (most negative) power of 2 producing
+\begin_inset Quotes eld
+\end_inset
+
+normal
+\begin_inset Quotes erd
+\end_inset
+
+ numbers (no leading zeros in the mantissa).
+
+\end_layout
+
+\begin_layout Description
+tiny The smallest (in magnitude) usable floating point number equal to 2**minexp.
+\end_layout
+
+\begin_layout Description
+maxexp Smallest (positive) power of 2 that causes overflow.
+\end_layout
+
+\begin_layout Description
+max The largest usable floating value: (1-epsneg)* (2**maxep)
+\end_layout
+
+\begin_layout Description
+min The most negative usable floating value: -max
+\end_layout
+
+\end_deeper
+\begin_layout Description
+\InsetSpace ~
+ The most useful attributes are probably eps, max, min, and tiny.
+\end_layout
+
+\begin_layout Section
+Functions that behave like ufuncs
+\end_layout
+
+\begin_layout Standard
+These functions are Python functions built on top of universal functions
+ (ufuncs) and also take optional output arguments.
+ They broadcast like ufuncs but do not have ufunc attributes.
+\end_layout
+
+\begin_layout Description
+fix
+\begin_inset LatexCommand index
+name "fix"
+
+\end_inset
+
+ (x, y=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Round x to the nearest integer towards zero.
+\end_layout
+
+\begin_layout Description
+isneginf
+\begin_inset LatexCommand index
+name "isneginf"
+
+\end_inset
+
+ (x, y=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x=-\infty$
+\end_inset
+
+.
+ Should be the same as
+\family typewriter
+x==NumPy.NINF
+\family default
+.
+\end_layout
+
+\begin_layout Description
+isposinf
+\begin_inset LatexCommand index
+name "isposinf"
+
+\end_inset
+
+ (x, y=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x=+\infty.$
+\end_inset
+
+ Should be the same as
+\family typewriter
+x==NumPy.PINF
+\family default
+.
+\end_layout
+
+\begin_layout Description
+log2
+\begin_inset LatexCommand index
+name "log2"
+
+\end_inset
+
+ (x, y=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the logarithm to the base 2 of
+\begin_inset Formula $x.$
+\end_inset
+
+ An optional output array may be provided.
+\end_layout
+
+\begin_layout Section
+Miscellaneous Functions
+\end_layout
+
+\begin_layout Standard
+Some miscellaneous functions are available in NumPy which are included largely
+ for compatibility with MLab of the old Numeric package.
+ One notable difference, however, is that due to a separate implementation
+ of the modified Bessel function, the kaiser window is available without
+ needing a separate library.
+
+\end_layout
+
+\begin_layout Description
+sinc
+\begin_inset LatexCommand index
+name "sinc"
+
+\end_inset
+
+ (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the sinc function for
+\begin_inset Formula $x$
+\end_inset
+
+ which can be a scalar or array.
+ The sinc is defined as
+\begin_inset Formula $y=\textrm{sinc}\left(x\right)=\frac{\sin\left(\pi x\right)}{\pi x}$
+\end_inset
+
+ with the caveat that the limiting value (1.0) of the ratio is taken for
+
+\begin_inset Formula $x=0.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+i0
+\begin_inset LatexCommand index
+name "i0"
+
+\end_inset
+
+ (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Modified Bessel function of the first kind of order 0.
+ Needed to compute the kaiser window.
+ The modified Bessel function is defined as
+\begin_inset Formula \[
+I_{0}\left(x\right)=\frac{1}{\pi}\int_{0}^{\pi}e^{x\cos\theta}d\theta=\sum_{k=0}^{\infty}\frac{x^{2k}}{4^{k}\left(k!\right)^{2}}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+blackman
+\begin_inset LatexCommand index
+name "blackman"
+
+\end_inset
+
+ (
+\begin_inset Formula $M$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $M$
+\end_inset
+
+-point Blackman smoothing window which is sequence of length
+\begin_inset Formula $M$
+\end_inset
+
+ with values given for
+\begin_inset Formula $n=0\ldots M-1$
+\end_inset
+
+ by
+\begin_inset Formula \[
+w\left[n\right]=0.42-0.5\cos\left(2\pi\frac{n}{M-1}\right)+0.08\cos\left(4\pi\frac{n}{M-1}\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+bartlett
+\begin_inset LatexCommand index
+name "bartlett"
+
+\end_inset
+
+ (
+\begin_inset Formula $M$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $M$
+\end_inset
+
+-point Bartlett (triangular) smoothing window as
+\begin_inset Formula \[
+w\left[n\right]=\left\{ \begin{array}{cc}
+2\frac{n}{M-1} & 0\leq n\leq\frac{M-1}{2},\\
+2-2\frac{n}{M-1} & \frac{M-1}{2}<n\leq M-1.\end{array}\right.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+hanning
+\begin_inset LatexCommand index
+name "hanning"
+
+\end_inset
+
+ (
+\begin_inset Formula $M$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $M$
+\end_inset
+
+-point Hanning smoothing window defined as
+\begin_inset Formula \[
+w\left[n\right]=\frac{1}{2}-\frac{1}{2}\cos\left(2\pi\frac{n}{M-1}\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+hamming
+\begin_inset LatexCommand index
+name "hamming"
+
+\end_inset
+
+ (
+\begin_inset Formula $M$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $M$
+\end_inset
+
+-point Hamming smoothing window defined for
+\begin_inset Formula $n=0\ldots M-1$
+\end_inset
+
+ as
+\begin_inset Formula \[
+w\left[n\right]=0.54-0.46\cos\left(2\pi\frac{n}{M-1}\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ All of the windowing functions are smoothing windows that attempt to balance
+ the inherent trade off between side-lobe height (ringing) and main-lobe
+ width (resolution) in the frequency domain.
+ A rectangular window has the smallest main-lobe width but the largest side-lobe
+ height.
+ A windowing (tapering) function tries to can help trade off main-lobe width
+ By sacrificing a little in resolution using a windowing function These
+ windows can be used to smooth data using the convolve function.
+ Figure
+\begin_inset LatexCommand ref
+reference "cap:window functions"
+
+\end_inset
+
+ shows the windowing functions described so far and their time- and frequency-do
+main behavior.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Graphics
+ filename Figures/fig1.eps
+ lyxscale 48
+ width 49line%
+ keepAspectRatio
+
+\end_inset
+
+
+\hfill
+
+\begin_inset Graphics
+ filename Figures/fig2.eps
+ lyxscale 48
+ width 49line%
+ keepAspectRatio
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:window functions"
+
+\end_inset
+
+Blackman, Bartlett, Hanning, and Hamming windows in the time and frequency
+ domain showing the trade-off between main-lobe width and side-lobe height
+ (Figures made with matplotlib).
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The trade-off between main-lobe and side-lobe has been studied extensively.
+ Solutions that maximize energy in the main-lobe compared to energy in the
+ side-lobes can be found by finding an eigenvector which can be expensive
+ to compute for large window sizes.
+ A good approximation to these prolate-spheroidal windows is the Kaiser
+ window.
+
+\end_layout
+
+\begin_layout Description
+kaiser
+\begin_inset LatexCommand index
+name "kaiser"
+
+\end_inset
+
+ (
+\begin_inset Formula $M$
+\end_inset
+
+,
+\begin_inset Formula $\beta$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an
+\begin_inset Formula $M$
+\end_inset
+
+-point Kaiser smoothing window.
+ The
+\begin_inset Formula $\beta$
+\end_inset
+
+ parameter controls the width of the window (and the frequency-domain side-lobe
+ height and main-lobe width).
+ The window is defined as
+\begin_inset Formula \[
+w\left[n\right]=\frac{1}{I_{0}\left(\beta\right)}I_{0}\left(\beta\sqrt{1-\frac{\left(2n-M-1\right)^{2}}{\left(M-1\right)^{2}}}\right).\]
+
+\end_inset
+
+ There is an empirical relationship between
+\begin_inset Formula $\beta$
+\end_inset
+
+ and the side-lobe height which can be used in FIR filter design.
+ To achieve a side-lobe height of
+\begin_inset Formula $-\alpha$
+\end_inset
+
+dB, the
+\begin_inset Formula $\beta$
+\end_inset
+
+ parameter is
+\begin_inset Formula \[
+\beta=\left\{ \begin{array}{cc}
+0.1002\left(\alpha-8.7\right) & \alpha>50,\\
+0.5842\left(\alpha-21\right)^{0.4}+0.07886\left(\alpha-21\right) & 21\leq\alpha\leq50,\\
+0 & \alpha<21.\end{array}\right.\]
+
+\end_inset
+
+ The length
+\begin_inset Formula $M$
+\end_inset
+
+ of the window determines the transition width.
+ To obtain a transition width of
+\begin_inset Formula $\Delta\omega$
+\end_inset
+
+rad/s the window-length must be at least:
+\begin_inset Formula \[
+M=\frac{\alpha-8}{2.285\Delta\omega}+1.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Utility functions
+\end_layout
+
+\begin_layout Description
+set_numeric_ops
+\begin_inset LatexCommand index
+name "set\\_numeric\\_ops"
+
+\end_inset
+
+ (<op1>=func1, <op2>=func2, ...)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function can be used to alter the operations used for internal array
+ calculations and array special methods.
+ Replaceable operations (and possible entries for <opN>) are add, subtract,
+ multiply, divide, remainder, power, sqrt, negative, absolute, invert, left_shif
+t, right_shift, bitwise_and, bitwise_or, less, less_equal, equal, not_equal,
+ greater, greater_equal, floor_divide, true_divide, logical_or, logical_and,
+ floor, ceil, maximum, and minimum.
+ The example code below changes, then restores, the old Numeric behavior
+ of remainder (which was changed because it was not consistent with Python).
+
+\end_layout
+
+\begin_layout MyCode
+>>> a = array([-3.,-2,-1,0,1,2,3])
+\newline
+>>> print a % -2.1
+\newline
+[-0.9 -2.
+ -1.
+ 0.
+ -1.1 -0.1 -1.2]
+\newline
+>>> oldops = set_numeric_ops(remainder=fmod)
+\newline
+>>> print a %
+ -2.1
+\newline
+[-0.9 -2.
+ -1.
+ 0.
+ 1.
+ 2.
+ 0.9]
+\newline
+>>> newops = set_numeric_ops(**oldops)
+\newline
+>>> print a % -2.1
+\newline
+[-0.9 -2.
+ -1.
+ 0.
+ -1.1 -0.1 -1.2]
+\newline
+>>> print 3 % -2.1 # comparison
+\newline
+-1.2
+\end_layout
+
+\begin_layout Description
+get_include
+\begin_inset LatexCommand index
+name "get\\_include"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the directory that contains the numpy include files.
+ The numpy.distutils automatically includes this directory in building extensions.
+
+\end_layout
+
+\begin_layout Description
+get_numarray_include
+\begin_inset LatexCommand index
+name "get\\_numarray\\_include"
+
+\end_inset
+
+ (type=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the directory that contains the numarray compatible C-API include
+ files.
+ If type is not None, then return a list containing both the numarray compatible
+ C-API include files and the numpy include files.
+ The latter form is only needed when building an extension without the use
+ of numpy.distutils.
+
+\end_layout
+
+\begin_layout Description
+deprecate
+\begin_inset LatexCommand index
+name "deprecate"
+
+\end_inset
+
+ (func, oldname, newname)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a deprecated function named 'oldname' that has been replaced by
+ 'newname'.
+ This new deprecated function issues a warning before calling the old function.
+ The name and docs of the function are also updated to be oldname instead
+ of the name that func has.
+ Example usage.
+ If you want to deprecate the function named 'old' in favor of a new function
+ named 'new' which has the same calling conention then this could be done
+ with the assignment
+\end_layout
+
+\begin_deeper
+\begin_layout LyX-Code
+old = deprecate(new, 'old', 'new')
+\end_layout
+
+\end_deeper
+\begin_layout Chapter
+Scalar objects
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cha:Scalar-objects"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Quotation
+Never worry about numbers.
+ Help one person at a time, and always start with the person nearest you.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Mother Teresa
+\end_layout
+
+\begin_layout Quotation
+A great many people think they are thinking when they are merely rearranging
+ their prejudices.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+William James
+\end_layout
+
+\begin_layout Standard
+One
+\begin_inset LatexCommand index
+name "array scalars|("
+
+\end_inset
+
+ important new feature of NumPy is the addition of a new scalar object for
+ each of the 21 different data types that an array can have.
+ Do not confuse these scalar objects with the data-type objects.
+ There is one data-type object.
+ It contains a
+\family typewriter
+.type
+\family default
+ attribute which points to the Python type that each element of the array
+ will be returned as
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+with the exception of object data-types which return the underlying object
+ and not a
+\begin_inset Quotes eld
+\end_inset
+
+scalar
+\begin_inset Quotes erd
+\end_inset
+
+ type.
+
+\end_layout
+
+\end_inset
+
+.
+ The built-in data-types point have .
+\family typewriter
+type
+\family default
+ attributes that point to these scalar objects.
+ Five (or six) of these new scalar objects are essentially equivalent to
+ fundamental Python types and therefore inherit from them as well as from
+ the generic array scalar type.
+ The bool_ data type is very similar to the Python BooleanType but does
+ not inherit from it because Python's BooleanType does not allow itself
+ to be inherited from, and on the C-level the size of the actual bool_ data
+ is not the same as a Python Boolean scalar.
+ Table
+\begin_inset LatexCommand ref
+reference "cap:Array-scalar-types"
+
+\end_inset
+
+ shows which array scalars inherit from basic Python types.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Array-scalar-types"
+
+\end_inset
+
+Array scalar types that inherit from basic Python types.
+ The intc array data type might also inherit from the IntType if it has
+ the same number of bits as the int_ array data type on your platform.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="2">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+array data type
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Python type
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+int_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+IntType
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+float_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+FloatType
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+complex_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+ComplexType
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+str_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+StringType
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+unicode_
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+UnicodeType
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The array scalars have the same attributes and methods as arrays and live
+ in a hierarchy of scalar types so they can be easily classified based on
+ their type objects.
+ However, because array scalars are immutable, and attributes change intrinsic
+ properties of the object, the
+\series bold
+array scalar attributes are not settable
+\series default
+.
+\end_layout
+
+\begin_layout Standard
+Array scalars can be detected using the hierarchy of data types.
+ For example,
+\family typewriter
+isinstance(val, generic)
+\family default
+ will return True if val is an array scalar object.
+ Alternatively, what kind of array scalar is present can be determined using
+ other members of the data type hierarchy.
+ Thus, for example
+\family typewriter
+isinstance(val, complexfloating)
+\family default
+ will return True if val is a complex valued type, while
+\family typewriter
+isinstance(val, flexible)
+\family default
+ will return true if val is one of the flexible itemsize array types (string,
+ unicode, void).
+
+\end_layout
+
+\begin_layout Warning
+The bool_ type is not a subclass of the int_ type (the bool_ type is not
+ even a number type).
+ This is different than Python's default implementation of bool as a sub-class
+ of int.
+\end_layout
+
+\begin_layout Section
+Attributes of array scalars
+\end_layout
+
+\begin_layout Standard
+The array scalar objects have an
+\family typewriter
+__array_priority__
+\family default
+ of NPY_SCALAR_PRIORITY (-1,000,000.0).
+ They also do not (yet) have a ctypes attribute.
+ Otherwise, they share the same attributes as arrays:
+\end_layout
+
+\begin_layout Description
+flags
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns True for CONTIGUOUS, OWNDATA, FORTRAN, and ALIGNED.
+ Always returns False for WRITEABLE, and UPDATEIFCOPY.
+
+\end_layout
+
+\begin_layout Description
+shape
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns ().
+\end_layout
+
+\begin_layout Description
+strides
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns ().
+\end_layout
+
+\begin_layout Description
+ndim
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns 0.
+\end_layout
+
+\begin_layout Description
+data
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A read-only buffer object of size self.itemsize,
+\end_layout
+
+\begin_layout Description
+size
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return 1.
+\end_layout
+
+\begin_layout Description
+itemsize
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The number of bytes this scalar requires.
+\end_layout
+
+\begin_layout Description
+base
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns None.
+\end_layout
+
+\begin_layout Description
+dtype
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns data type descriptor corresponding to this array scalar.
+
+\end_layout
+
+\begin_layout Description
+real
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The real part of the scalar.
+\end_layout
+
+\begin_layout Description
+imag
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The imaginary part of the scalar (or 0 if this is real).
+\end_layout
+
+\begin_layout Description
+flat
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a 1-d iterator object (of size 1).
+\end_layout
+
+\begin_layout Description
+T
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a reference to self.
+\end_layout
+
+\begin_layout Description
+__array_interface__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The Python-side to the array interface.
+
+\end_layout
+
+\begin_layout Description
+__array_struct__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The C-side to the array interface
+\end_layout
+
+\begin_layout Description
+__array_priority__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ -100.0 (very low-priority).
+
+\end_layout
+
+\begin_layout Description
+__array_wrap__ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an array scalar from an array
+\end_layout
+
+\begin_layout Section
+Methods of array scalars
+\end_layout
+
+\begin_layout Standard
+Array scalars have exactly the same methods as arrays.
+ The default behavior of these methods is to internally convert the scalar
+ to an equivalent 0-dimensional array and to call the corresponding array
+ method.
+ The exceptions to these rules are given below.
+ In addition, math operations on array scalars are defined so that the same
+ hardware flags are set and used to interpret the results as for ufunc.
+ Therefore the error state used for ufuncs also carries over to the math
+ on array scalars.
+\end_layout
+
+\begin_layout Description
+__new__ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The default behavior is to return a new array or array scalar by calling
+ array(obj) with the corresponding data type.
+ There are two situations when this default behavior is delayed until another
+ approach is tried.
+ First, when the array scalar type inherits from a Python type, then the
+ Python types new method is called first and the default method is called
+ only if that approach fails.
+ The second situation is for the
+\family typewriter
+void
+\family default
+ data type where a single integer-like argument will cause a void scalar
+ of that size to be created and initialized to 0.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Notice that because array(obj) is called for new, if obj is a nested sequence,
+ then the return object could actually be an
+\family typewriter
+ndarray
+\family default
+.
+ Thus, arrays of the correct type can also be created by calling the array
+ data type name directly:
+\end_layout
+
+\begin_layout MyCode
+>>> uint32([[5,6,7,8],[1,2,3,4]])
+\newline
+array([[5, 6, 7, 8],
+\newline
+ [1, 2, 3, 4]],
+ dtype=uint32)
+\end_layout
+
+\begin_layout Description
+__array__ (<None>)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a 0-dimensional array of the given data type, or of type(self)
+ if argument is None.
+\end_layout
+
+\begin_layout Description
+__array_wrap__ (array)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a scalar array object from the first-element of the array.
+\end_layout
+
+\begin_layout Description
+__squeeze__ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns self.
+\end_layout
+
+\begin_layout Description
+byteswap (<False>)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Trying to set the first (inplace) argument to True raises a ValueError.
+ Otherwise, this returns a new array scalar with the data byteswapped.
+
+\end_layout
+
+\begin_layout Description
+__reduce__ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is called to pickle an array scalar.
+ It returns a tuple of (numpy.core.multiarray.scalar, self.dtypestr, obj or
+ self.tostring()) which can be used to reconstruct the scalar on unpickling.
+ Notice that no state is written, because the entire scalar can be constructed
+ from just the string.
+ Also, if this is an object array scalar, then the Python object being reference
+d is written.
+\end_layout
+
+\begin_layout Description
+__setstate__ ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Does nothing but return None.
+\end_layout
+
+\begin_layout Description
+setflags ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Does nothing, as flags cannot be set for scalars
+\begin_inset LatexCommand index
+name "array scalars|)"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Section
+Defining New Types
+\end_layout
+
+\begin_layout Standard
+There are two ways to effectively define a new type of array.
+ One way is to simply subclass the ndarray and overwrite the methods of
+ interest.
+ This will work to a degree, but internally certain behaviors are fixed
+ by the data type of the array.
+ To fully customize the data type of an array you need to define a new data-type
+ for the array, and register it with NumPy.
+ This new type can only be defined in C.
+ How to define a new data type in C will be discussed in the next part of
+ the book.
+\end_layout
+
+\begin_layout Chapter
+Data-type (
+\family typewriter
+dtype
+\family default
+) Objects
+\end_layout
+
+\begin_layout Quotation
+We cannot expect that all nations will adopt like systems, for conformity
+ is the jailer of freedom and the enemy of growth.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+John F.
+ Kennedy
+\end_layout
+
+\begin_layout Quotation
+What information consumes is rather obvious: it consumes the attention of
+ its recipients.
+ Hence, a wealth of information creates a poverty of attention and a need
+ to allocate that attention efficiently among the overabundance of information
+ sources that might consume it.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Herbert Simon
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cha:Data-descriptor-objects"
+
+\end_inset
+
+It
+\begin_inset LatexCommand index
+name "dtype|("
+
+\end_inset
+
+ is important not to confuse the
+\begin_inset Quotes eld
+\end_inset
+
+array-scalars
+\begin_inset Quotes erd
+\end_inset
+
+ with the
+\begin_inset Quotes eld
+\end_inset
+
+data-type objects.
+\begin_inset Quotes erd
+\end_inset
+
+ It is true that an array-scalar can be interpreted as a data-type object
+ and so can be used to refer to the data-type of an array.
+ However, the data-type object is a separate Python object.
+ Every ndarray has an associated data-type object that completely defines
+ the data in the array (including any named fields).
+ For every built-in data-type object there is an associated type object
+ whose instances are the array-scalars.
+ Because of the association between each data-type object and a type-object
+ of the corresponding array scalar, the array-scalar type-objects can also
+ be thought of as data-types.
+ However, for the type objects of flexible array-scalars (string, unicode_,
+ and void), the type-objects alone are not enough to specify the full data-type
+ because the length is not given.
+ The data-type constructor,
+\series bold
+numpy.dtype
+\series default
+, converts any object that can be considered as a data-type into a data-type
+ object which is the actual object an ndarray looks to in order to interpret
+ each element of its data region.
+ Whenever a data-type is required in a NumPy function or method, supplying
+ a dtype object is always fastest.
+ If the object supplied is not a dtype object, then it will be converted
+ to one using dtype(obj).
+ Therefore, understanding data-type objects is the key to understanding
+ how data types are really represented and understood in NumPy.
+\end_layout
+
+\begin_layout Section
+Attributes
+\begin_inset LatexCommand index
+name "dtype!attributes|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+type
+\begin_inset LatexCommand index
+name "dtype!attributes!type"
+
+\end_inset
+
+ The
+\begin_inset LatexCommand index
+name "The"
+
+\end_inset
+
+ type object used to instantiate a scalar of this data-type.
+\end_layout
+
+\begin_layout Description
+kind
+\begin_inset LatexCommand index
+name "dtype!attributes!kind"
+
+\end_inset
+
+ A character code (one of 'biufcSUV') identifying the general kind of data.
+
+\end_layout
+
+\begin_layout Description
+char
+\begin_inset LatexCommand index
+name "dtype!attributes!char"
+
+\end_inset
+
+ A unique character code for each of the 21 different built-in types.
+
+\end_layout
+
+\begin_layout Description
+num
+\begin_inset LatexCommand index
+name "dtype!attributes!num"
+
+\end_inset
+
+ A unique number for each of the 21 different built-in types roughly ordered
+ from least-to-most precision.
+
+\end_layout
+
+\begin_layout Description
+str
+\begin_inset LatexCommand index
+name "dtype!attributes!str"
+
+\end_inset
+
+ The array-protocol typestring of this data-type object.
+\end_layout
+
+\begin_layout Description
+name
+\begin_inset LatexCommand index
+name "dtype!attributes!name"
+
+\end_inset
+
+ A bit-width name for this data-type (un-sized flexible data-type objects
+ are missing the width).
+
+\end_layout
+
+\begin_layout Description
+byteorder
+\begin_inset LatexCommand index
+name "dtype!attributes!byteorder"
+
+\end_inset
+
+ A character indicating the byte-order of this data-type object ('=' : native,
+ '<' : little-endian, '>' : big-endian, '|' : not applicable).
+ All built-in data-type objects have byteorder either '=' or '|'.
+
+\end_layout
+
+\begin_layout Description
+itemsize
+\begin_inset LatexCommand index
+name "dtype!attributes!itemsize"
+
+\end_inset
+
+ The element size of this data-type object.
+ For 18 of the 21 types this number is fixed by the data-type.
+ For the flexible data-types, this number can be anything.
+
+\end_layout
+
+\begin_layout Description
+alignment
+\begin_inset LatexCommand index
+name "dtype!attributes!alignment"
+
+\end_inset
+
+ The required alignment (in bytes) of this data-type according to the compiler.
+ More information is available in the C-API section.
+
+\end_layout
+
+\begin_layout Description
+fields
+\begin_inset LatexCommand index
+name "dtype!attributes!fields"
+
+\end_inset
+
+ A dictionary showing any named fields that have been defined for this data-type
+ (or None if there are no named fields).
+ Fields can be assigned to any built-in data-type (
+\emph on
+e.g.
+
+\emph default
+ using the tuple input to the dtype constructor).
+ However, fields are most useful for (subtypes of) void data-types which
+ can be any size.
+ Fields are a convenient way to keep track of fixed-size sub-parts of the
+ total fixed-size array-element, or record.
+ A field is defined in terms of another dtype object and an offset (in bytes)
+ into the current record.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The fields dictionary is indexed by keys that are the names of the fields.
+ Each entry in the dictionary is a tuple fully describing the field: (dtype,
+ offset[, title]).
+ If present, the optional title can actually be any object (if it is string
+ or unicode then it will also be a key in the fields dictionary, otherwise
+ it's meta-data).
+ Notice also, that the first two elements of the tuple can be passed directly
+ as arguments to the getfield and setfield attributes of an ndarray.
+ If field names are not specified in a constructor, they default to 'f0',
+ 'f2', ..., 'f<n-1>'.
+
+\end_layout
+
+\begin_layout Description
+names
+\begin_inset LatexCommand index
+name "dtype!attributes!char"
+
+\end_inset
+
+ An ordered list of field names.
+ This can be used to walk through all of the named fields in offset order.
+ Notice that the defined fields do not have to
+\begin_inset Quotes eld
+\end_inset
+
+cover
+\begin_inset Quotes erd
+\end_inset
+
+ the record, but the itemsize of the container data-type object must always
+ be at least as large as the itemsizes of the data-type objects in the defined
+ fields.
+ This attribute is None if there are no fields.
+\end_layout
+
+\begin_layout Description
+subdtype
+\begin_inset LatexCommand index
+name "dtype!attributes!subdtype"
+
+\end_inset
+
+ Numarray introduced the concept of a fixed-length record having fields
+ that were themselves arrays of another data-type.
+ This is supported at a fundamental level in NumPy using this attribute
+ which maintains the simplicity of defining a field by another data-type
+ object.
+ It either returns None or a tuple (base dtype, shape) where shape is a
+ tuple showing the size of the C-contiguous array and the base dtype object
+ indicates the data-type in each element of the subarray.
+ If a field whose dtype object has this attribute is retrieved, then the
+ extra dimensions implied by the shape are tacked on to the end of the retrieved
+ array.
+
+\end_layout
+
+\begin_layout Description
+descr
+\begin_inset LatexCommand index
+name "dtype!attributes!descr"
+
+\end_inset
+
+ An array-interface-compliant full description of the data-type.
+ The format is that required by the 'descr' key in the __array_interface__.
+\end_layout
+
+\begin_layout Description
+isbuiltin
+\begin_inset LatexCommand index
+name "dtype!attributes!isbuiltin"
+
+\end_inset
+
+ A 1 if self is one of the built-in dtype objects; a 2 if self is a user-defined
+ dtype object; a 0, otherwise.
+\end_layout
+
+\begin_layout Description
+isnative
+\begin_inset LatexCommand index
+name "dtype!attributes!isnative"
+
+\end_inset
+
+ True if this data-type object has a byteorder that is native to the platform;
+ otherwise False.
+\end_layout
+
+\begin_layout Description
+hasobject
+\begin_inset LatexCommand index
+name "dtype!attributes!hasobject"
+
+\end_inset
+
+ True if self contains reference-counted objects in any of it's fields or
+ sub data-types.
+ Recall that what is actually in the ndarray memory representing the Python
+ object is the memory address of that object (a pointer).
+ Special handling may be required and this attribute is useful for distinguishin
+g data-types that may contain arbitrary Python objects and data-types that
+ won't.
+
+\end_layout
+
+\begin_layout Description
+flags
+\begin_inset LatexCommand index
+name "dtype!attributes!flags"
+
+\end_inset
+
+ Bit-flags for the data-type describing how the data-type will be interpreted.
+ Bit-masks are in numpy.core.multiarray as the constants ITEM_HASOBJECT, LIST_PICK
+LE, ITEM_IS_POINTER, NEEDS_INIT, NEEDS_PYAPI, USE_GETITEM, USE_SETITEM.
+ A full explanation of these flags is in the second part of this book.
+ These flags are largely useful for user-defined data-types.
+
+\begin_inset LatexCommand index
+name "dtype!attributes|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Construction
+\end_layout
+
+\begin_layout Description
+dtype (obj, align=0, copy=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "dtype!construction|("
+
+\end_inset
+
+Return a new data-type object from obj.
+ The keyword argument, align, can only be nonzero if obj is a dictionary,
+ or a comma-separated string.
+ If it is non-zero in those cases it is used to add padding as needed to
+ the fields to match what the compiler that compiled NumPy would do to a
+ similar C-struct.
+ The copy argument guarantees a new copy of the data-type object, otherwise,
+ the result may just be a reference to a built-in data-type object.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Objects that can be converted to a data-type object are described in the
+ following list.
+ Because every object in this list can be converted to a data-type object
+ it can also be used whenever a
+\family typewriter
+dtype
+\family default
+ is requested by a function or method in NumPy.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+dtype
+\begin_inset LatexCommand index
+name "dtype!construction!from float"
+
+\end_inset
+
+Returns itself.
+\end_layout
+
+\begin_layout Description
+None
+\begin_inset LatexCommand index
+name "dtype!construction!from None"
+
+\end_inset
+
+Returns the default data-type descriptor object: float.
+\end_layout
+
+\begin_layout Description
+type-object
+\begin_inset LatexCommand index
+name "dtype!construction!from type"
+
+\end_inset
+
+Many Python type objects can be converted to data-type objects.
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+Array-scalar types: The type-objects of the 21 built-in array scalars all
+ convert to an associated data-type object.
+ This is true for sub-classes as well.
+ Not all data-type information can be supplied with a type-object.
+ Flexible data-types with default itemsizes of 0, for example, require an
+ itemsize to be useful.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: int32, float64, uint16, complex128
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Generic types: The generic hierarchical type objects convert to corresponding
+ dtype objects according to the associations: (numeric, inexact, floating)
+ --> float; complexfloating --> cfloat; (integer, signedinteger) --> int_;
+ unsignedinteger --> uint; character --> string; (generic, flexible) -->
+ void.
+
+\end_layout
+
+\begin_layout Enumerate
+Builtin types: Several python types are equivalent to a corresponding array
+ scalar when used to generate a dtype object: int --> int_; bool --> bool_;
+ float --> float_; complex --> cfloat; str --> string; unicode --> unicode_;
+ buffer --> void; (all others) --> object_.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: object, str, float, int
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Any type object with the dtype attribute: The attribute will be accessed
+ and used directly.
+ The attribute must return something that is convertible into a dtype object.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+string
+\begin_inset LatexCommand index
+name "dtype!construction!from string"
+
+\end_inset
+
+Several kinds of strings can be converted.
+ Recognized strings can be pre-pended with '>', or '<', to specify the byteorder.
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+One-character strings: Each built-in data-type has a character code (the
+ updated Numeric typecodes), that uniquely identifies it.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: 'b', 'H', 'f', 'd', 'F', 'D', Float64, Int32, UInt16
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Array-protocol type strings: The first character specifies the kind of data
+ and the remaining characters specify how many bytes of data.
+ The supported kinds are 'b' --> Boolean, 'i' --> (signed) integer, 'u'
+ --> unsigned integer, 'f' --> floating-point, 'c' --> complex-floating
+ point, 'S', 'a' --> string, 'U' --> unicode, 'V' --> anything (void).
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: 'i4', 'f8', 'c16', 'b1', 'S10', 'a25'
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Comma-separated field formats: numarray introduced a short-hand notation
+ for specifying the format of a record as a comma-separated string of basic
+ formats.
+ A basic format in this context is an optional shape specifier followed
+ by an array-protocol type string.
+ Parenthesis are required on the shape if it is greater than 1-d.
+ NumPy allows a modification on the format in that any string that can uniquely
+ identify the type can be used to specify the data-type in a field.
+ This data-type defines fields named 'f0', 'f2', ..., 'f<N-1>' where N (>1)
+ is the number of comma-separated basic formats in the string.
+ If the optional shape specifier is provided, then the data-type for the
+ corresponding field contains a subdtype attribute providing the shape.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples:
+\begin_inset Quotes eld
+\end_inset
+
+i4, (2,3)f8, f4
+\begin_inset Quotes erd
+\end_inset
+
+;
+\begin_inset Quotes eld
+\end_inset
+
+a3, 3u8, (3,4)a10
+\begin_inset Quotes erd
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Any string in NumPy.sctypeDict.keys():
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: 'uint32', 'Int16', 'Uint64', 'Float64', 'Complex64'
+\end_layout
+
+\end_deeper
+\end_deeper
+\begin_layout Description
+tuple
+\begin_inset LatexCommand index
+name "dtype!construction!from tuple"
+
+\end_inset
+
+Three kinds of tuples each of length 2 can be converted into a data-type
+ object:
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+(flexible dtype, itemsize): The first argument must be an object that is
+ converted to a flexible data-type object (one whose element size is 0),
+ the second argument is an integer providing the desired itemsize.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: (void, 10); (str, 35), ('U', 10)
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+(fixed dtype, shape): The first argument is any object that can be converted
+ into a fixed-size data-type object.
+ The second argument is the desired shape of this type.
+ If the shape parameter is 1, then the data-type object is equivalent to
+ fixed dtype.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: (int32, (2,5)); ('S10', 1)=='S10'; ('i4, (2,3)f8, f4', (2,3))
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+(base dtype, new dtype): Both arguments must be convertible to data-type
+ objects in this case.
+ The base dtype is the data-type object that the new data-type builds on.
+ This is how you could assign named fields to any built-in data-type object.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: (int32, {'real':(int16,0), 'imag':(int16,2)}); (int32, (int8,
+ 4));
+\newline
+('i4', [('r','u1'),('g','u1'),('b','u1'),('a','u1')])
+\end_layout
+
+\end_deeper
+\end_deeper
+\begin_layout Description
+list
+\begin_inset LatexCommand index
+name "dtype!construction!from list"
+
+\end_inset
+
+(array description interface): This style is more fully described at
+\begin_inset LatexCommand url
+name "this site"
+target "http://numpy.scipy.org/array_interface.html"
+
+\end_inset
+
+.
+ It consists of a list of fields where each field is described by a tuple
+ of length 2 or 3.
+ The first element of the tuple is the field name (if this is '' then a
+ standard field name, 'f#', is assigned).
+ The field name may also be a 2-tuple of strings where the first string
+ is either a
+\begin_inset Quotes eld
+\end_inset
+
+title
+\begin_inset Quotes erd
+\end_inset
+
+ (which may be any string or unicode string) or meta-data for the field
+ which can be any object, and the second string is the
+\begin_inset Quotes eld
+\end_inset
+
+name
+\begin_inset Quotes erd
+\end_inset
+
+ which must be a valid Python identifier.
+ The second element of the tuple can be anything that can be interpreted
+ as a data-type.
+ The optional third element of the tuple contains the shape if this field
+ represents an array of the data-type in the second element.
+ This style does not accept align=1 as it is assumed that all of the memory
+ is accounted for by the array interface description.
+ See the web-page for more examples.
+ Note that a 3-tuple with a third argument equal to 1 is equivalent to a
+ 2-tuple.
+\end_layout
+
+\begin_layout Description
+Examples: [('big','>i4'), ('little','<i4')]; [('R','u1'), ('G','u1'), ('B','u1')
+, ('A','u1')]
+\end_layout
+
+\begin_layout Description
+dictionary
+\begin_inset LatexCommand index
+name "dtype!construction!from dict"
+
+\end_inset
+
+There are two dictionary styles.
+ The first is a standard dictionary format while the second accepted format
+ allows the fields attribute of dtype objects to be interpreted as a data-type.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+names and formats: This style has two required and two optional keys.
+ The 'names' and 'formats' keys are required.
+ Their respective values are equal-length lists with the field names and
+ the field formats.
+ The field names must be strings and the field formats can be any object
+ accepted by dtypedescr constructor.
+ The optional keys in the dictionary are 'offsets' and 'titles' and their
+ values must each be lists of the same length as the 'names' and 'formats'
+ lists.
+ The 'offsets' value is a list of integer offsets for each field, while
+ the 'titles' value is a list of titles for each field (None can be used
+ if no title is desired for that field).
+ The titles can be any string or unicode object and will add another entry
+ to the fields dictionary keyed by the title and referencing the same field
+ tuple which will contain the title as an additional tuple member.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: {'names': ['r','g','b','a'], 'formats': [uint8, uint8, uint8,
+ uint8]}; {'names':['r','b'], 'formats': ['u1', 'u1'], 'offsets': [0, 2],
+ 'titles': ['Red pixel', 'Blue pixel']}
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+data-type object fields: This style is patterned after the format of the
+ fields dictionary in a data-type object.
+ It contains string or unicode keys that refer to (data-type, offset) or
+ (data-type, offset, title) tuples.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Examples: {'col1': ('S10', 0), 'col2': (float32, 10), 'col3': (int, 14)}
+\begin_inset LatexCommand index
+name "dtype!construction|)"
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\end_deeper
+\end_deeper
+\begin_layout Section
+Methods
+\begin_inset LatexCommand index
+name "dtype!methods|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+newbyteorder
+\begin_inset LatexCommand index
+name "dtype!methods!newbyteorder"
+
+\end_inset
+
+(<'swap'>)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a new copy of self with its byteorder changed according to the
+ optional argument.
+ All changes are also propagated to the data-type objects of all fields
+ and sub-arrays.
+ If a byteorder of '|' (meaning ignore) is encountered it is left unchanged.
+ The default behavior is to swap the byteorder.
+ Other possible arguments are 'big' ('>'), 'little' ('<'), and 'native'
+ ('=') which recursively forces the byteorder of self (and it's field data-type
+ objects and any sub-arrays) to the corresponding byteorder.
+
+\end_layout
+
+\begin_layout Description
+__reduce__
+\begin_inset LatexCommand index
+name "dtype!methods!\\_\\_reduce\\_\\_"
+
+\end_inset
+
+ ()
+\end_layout
+
+\begin_layout Description
+__setstate__
+\begin_inset LatexCommand index
+name "dtype!methods!\\_\\_setstate\\_\\_"
+
+\end_inset
+
+ (state)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Data-type objects can be pickled because of these two methods.
+ The __reduce__() method returns a 3-tuple consisting of (callable object,
+ args, state), where the callable object is numpy.core.multiarray.dtype and
+ args is (typestring, 0, 1) unless the data-type inherits from void (or
+ is user-defined) in which case args is (typeobj, 0, 1).
+ The state is an 8-tuple with (version, endian, self.subdtype, self.names,
+ self.fields, self.itemsize, self.alignment, self.flags).
+ The self.itemsize and self.alignment entries are both -1 if the data-type
+ object is built-in and not flexible (because they are fixed on creation).
+ The setstate method takes the saved state and updates the date-type
+\begin_inset LatexCommand index
+name "dtype!methods|)"
+
+\end_inset
+
+object.
+\begin_inset LatexCommand index
+name "dtype|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Standard Classes
+\end_layout
+
+\begin_layout Quotation
+To generalize is to be an idiot.
+
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+William Blake
+\end_layout
+
+\begin_layout Quotation
+Not everything that can be counted counts, and not everything that counts
+ can be counted.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Albert Einstein
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ndarray!subtyping|("
+
+\end_inset
+
+The ndarray in NumPy is a
+\begin_inset Quotes eld
+\end_inset
+
+new-style
+\begin_inset Quotes erd
+\end_inset
+
+ Python built-in-type.
+ Therefore, it can be inherited from (in Python or in C) if desired.
+ Therefore, it can form a foundation for many useful classes.
+ Often whether to sub-class the array object or to simply use the core array
+ component as an internal part of a new class is a difficult decision, and
+ can be simply a matter of choice.
+ NumPy has several tools for simplifying how your new object interacts with
+ other array objects, and so the choice may not be significant in the end.
+ One way to simplify the question is by asking yourself if the object you
+ are interested can be replaced as a single array or does it really require
+ two or more arrays at it's core.
+ For example, in the standard NumPy distribution, the matrix and records
+ classes inherit from the ndarray, while masked arrays use two ndarrays
+ as objects of its internal structure.
+\end_layout
+
+\begin_layout Standard
+Note that asarray(a) always returns the base-class ndarray.
+ If you are confident that your use of the array object can handle any subclass
+ of an ndarray, then asanyarray(a) can be used to allow subclasses to propagate
+ more cleanly through your subroutine.
+ In principal a subclass could redefine any aspect of the array and therefore,
+ under strict guidelines, asanyarray(a) would rarely be useful.
+ However, most subclasses of the arrayobject will not redefine certain aspects
+ of the array object such as the buffer interface, or the attributes of
+ the array.
+ One of important example, however, of why your subroutine may not be able
+ to handle an arbitrary subclass of an array is that matrices redefine the
+ '*' operator to be matrix-multiplication, rather than element-by-element
+ multiplication.
+\end_layout
+
+\begin_layout Section
+Special attributes and methods recognized by NumPy
+\begin_inset LatexCommand index
+name "ndarray!attributes!recognized by|("
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+__array_finalize__ (obj)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This method is called whenever the system internally allocates a new array
+ from obj, where obj is a subclass (subtype) of the (big)ndarray.
+ It can be used to change attributes of self after construction (so as to
+ ensure a 2-d matrix for example), or to update meta-information from the
+
+\begin_inset Quotes eld
+\end_inset
+
+parent.
+\begin_inset Quotes erd
+\end_inset
+
+ Subclasses inherit a default implementation of this method that does nothing.
+\end_layout
+
+\begin_layout Description
+__array_wrap__ (array)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This method should return an instance of the class from the ndarray object
+ passed in.
+ For example, this is called after every ufunc for the object with the highest
+ __array_priority__.
+ The ufunc-computed array object is passed in and whatever is returned is
+ passed to the user.
+ Subclasses inherit a default implementation of this method.
+\end_layout
+
+\begin_layout Description
+__array__ (dtype <None>)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This method is called to obtain an ndarray object when needed.
+ You should always guarantee this returns an actual ndarray object.
+ Subclasses inherit a default implementation of this method.
+
+\end_layout
+
+\begin_layout Description
+__array_priority__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The value of this attribute is used to determine what type of object to
+ return in situations where there is more than one possibility for the Python
+ type of the returned object.
+ Subclasses inherit a default value of 1.0 for this attribute.
+\begin_inset LatexCommand index
+name "ndarray!attributes!recognized by|)"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "ndarray!subtyping|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Matrix Objects
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "matrix|("
+
+\end_inset
+
+Matrix objects inherit from the ndarray and therefore, they have the same
+ attributes and methods of ndarrays.
+ There are six important differences of matrix objects, however that may
+ lead to unexpected results when you use matrices but expect them to act
+ like arrays:
+\end_layout
+
+\begin_layout Enumerate
+Matrix objects can be created using a string notation to allow Matlab-style
+ syntax where spaces separate columns and semicolons (';') separate rows.
+
+\end_layout
+
+\begin_layout Enumerate
+Matrix objects are always two-dimensional.
+ This has far-reaching implications, in that m.ravel() is still two-dimensional
+ (with a 1 in the first dimension) and item selection returns two-dimensional
+ objects so that sequence behavior is fundamentally different than arrays.
+\end_layout
+
+\begin_layout Enumerate
+Matrix objects over-ride multiplication to be matrix-multiplication.
+
+\series bold
+Make sure you understand this for functions that you may want to receive
+ matrices.
+ Especially in light of the fact that asanyarray(m) returns a matrix when
+ m is a matrix.
+\end_layout
+
+\begin_layout Enumerate
+Matrix objects over-ride power to be matrix raised to a power.
+ The same warning about using power inside a function that uses asanyarray(...)
+ to get an array object holds for this fact.
+
+\end_layout
+
+\begin_layout Enumerate
+The default __array_priority__ of matrix objects is 10.0, and therefore mixed
+ operations with ndarrays always produce matrices.
+
+\end_layout
+
+\begin_layout Enumerate
+Matrices have special attributes which make calculations easier.
+ These are
+\end_layout
+
+\begin_deeper
+\begin_layout Enumerate
+.T --- return the transpose of self
+\end_layout
+
+\begin_layout Enumerate
+.H --- return the conjugate transpose of self
+\end_layout
+
+\begin_layout Enumerate
+.I --- return the inverse of self
+\end_layout
+
+\begin_layout Enumerate
+.A --- return a view of the data of self as a 2d array (no copy is done).
+\end_layout
+
+\end_deeper
+\begin_layout Warning
+Matrix objects over-ride multiplication, '*', and power, '**', to be matrix-mult
+iplication and matrix power, respectively.
+ If your subroutine can accept sub-classes and you do not convert to base-class
+ arrays, then you must use the ufuncs multiply and power to be sure that
+ you are performing the correct operation for all inputs.
+
+\end_layout
+
+\begin_layout Standard
+The matrix class is a Python subclass of the ndarray and can be used as
+ a reference for how to construct your own subclass of the ndarray.
+ Matrices can be created from other matrices, strings, and anything else
+ that can be converted to an
+\family typewriter
+ndarray
+\family default
+.
+ The name
+\begin_inset Quotes eld
+\end_inset
+
+mat
+\begin_inset Quotes erd
+\end_inset
+
+ is an alias for
+\begin_inset Quotes eld
+\end_inset
+
+matrix
+\begin_inset Quotes erd
+\end_inset
+
+ in NumPy.
+\end_layout
+
+\begin_layout Description
+Example\InsetSpace ~
+1: Matrix creation from a string
+\end_layout
+
+\begin_layout MyCode
+>>> a=mat('1 2 3; 4 5 3')
+\newline
+>>> print (a*a.T).I
+\newline
+[[ 0.2924 -0.1345]
+\newline
+ [-0.1345 0.0819]]
+\end_layout
+
+\begin_layout Description
+Example\InsetSpace ~
+2: Matrix creation from nested sequence
+\end_layout
+
+\begin_layout MyCode
+>>> mat([[1,5,10],[1.0,3,4j]])
+\newline
+matrix([[ 1.+0.j, 5.+0.j, 10.+0.j],
+\newline
+ [
+ 1.+0.j, 3.+0.j, 0.+4.j]])
+\end_layout
+
+\begin_layout Description
+Example\InsetSpace ~
+3: Matrix creation from an array
+\end_layout
+
+\begin_layout MyCode
+>>> mat(random.rand(3,3)).T
+\newline
+matrix([[ 0.7699, 0.7922, 0.3294],
+\newline
+ [ 0.2792,
+ 0.0101, 0.9219],
+\newline
+ [ 0.3398, 0.7571, 0.8197]])
+\end_layout
+
+\begin_layout Description
+matrix (data, dtype=None, copy=True)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The sequence to convert to a matrix is passed in as data.
+ If dtype is None, then the data-type is determined from the data.
+ If copy is True, then a copy of the data is made, otherwise, the same data
+ buffer is used.
+ If no buffer can be found for data, then a copy is also made.
+ Note: The matrix object is actually a class and so using this syntax calls
+ matrix.__new__(matrix, data, dtype, copy) which is what happens whenever
+ you
+\begin_inset Quotes eld
+\end_inset
+
+call
+\begin_inset Quotes erd
+\end_inset
+
+ any class object as a function.
+\end_layout
+
+\begin_layout Description
+mat
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Just another name for matrix.
+\end_layout
+
+\begin_layout Description
+asmatrix (data, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the data without copying.
+ Equivalent to matrix(data, dtype, copy=False).
+\end_layout
+
+\begin_layout Description
+bmat (obj, ldict=None, gdict=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Build a matrix object from a string, nested sequence or an array.
+ This command lets you build up matrices from other other objects.
+ The ldict and gdict parameters are local and module (global) dictionaries
+ that are only used when obj is a string.
+ If they are not provided, then the local and module dictionaries present
+ when bmat is called are used.
+\begin_inset LatexCommand index
+name "matrix|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout MyCode
+>>> A = mat('2 2; 2 2'); B=mat('1 1; 1 1');
+\newline
+>>> print bmat('A B; B A')
+\newline
+[[2
+ 2 1 1]
+\newline
+ [2 2 1 1]
+\newline
+ [1 1 2 2]
+\newline
+ [1 1 2 2]]
+\end_layout
+
+\begin_layout Section
+Memory-mapped-file arrays
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "memory maps|("
+
+\end_inset
+
+Memory-mapped files are useful for reading and/or modifying small segments
+ of a large file with regular layout, without reading the entire file into
+ memory.
+ A simple subclass of the ndarray uses a memory-mapped file for the data
+ buffer of the array.
+ For small files, the over-head of reading the entire file into memory is
+ typically not significant, however for large files using memory mapping
+ can save considerable resources.
+
+\end_layout
+
+\begin_layout Note
+Memory-mapped arrays use the the Python memory-map object which (prior to
+ Python 2.5) does not allow files to be larger than a certain size depending
+ on the platform.
+ This size is always < 2GB even on 64-bit systems.
+
+\end_layout
+
+\begin_layout Standard
+The class is called memmap and is available in the NumPy namespace.
+ The __new__ method of the class has been re-written to have the following
+ syntax:
+\end_layout
+
+\begin_layout Description
+__new__ (cls, filename, dtype=uint8, mode='r+', offset=0, shape=None, order=0)
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+filename The file name to be used as the array data buffer
+\end_layout
+
+\begin_layout Description
+dtype A data-type object used to interpret the file contents (including
+ byteorder).
+\end_layout
+
+\begin_layout Description
+mode The mode to open the file in.
+ Valid modes are 'readonly' or 'r', 'copyonwrite' or 'c', 'readwrite' or
+ 'r+', and 'write' or 'w+'.
+ This mode determines the WRITEABLE flag of the returned array.
+\end_layout
+
+\begin_layout Description
+offset An offset into the file to start the array data.
+\end_layout
+
+\begin_layout Description
+shape The desired shape of the array.
+ If this is None, then the returned array will be 1-d with the number of
+ elements determined by the file size and data type.
+\end_layout
+
+\begin_layout Description
+order Either 'C' or 'Fortran' to indicate the order that an N-D array should
+ be interpreted.
+ This only has an effect if the shape is greater than 2-D.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+Memory-mapped-file arrays have one additional method (besides those they
+ inherit from the ndarray): self.
+\series bold
+sync
+\series default
+() which must be called manually by the user to ensure that any changes
+ to the array actually get written to disk.
+
+\end_layout
+
+\begin_layout Description
+Example:
+\end_layout
+
+\begin_layout MyCode
+>>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000)
+\newline
+>>> a[10]
+ = 10.0
+\newline
+>>> a[30] = 30.0
+\newline
+>>> del a
+\newline
+>>> b = fromfile('newfile.dat', dtype=float)
+\newline
+>>>
+ print b[10], b[30]
+\newline
+10.0 30.0
+\newline
+>>> a = memmap('newfile.dat', dtype=float)
+\newline
+>>> print
+ a[10], a[30]
+\newline
+10.0 30.0
+\end_layout
+
+\begin_layout Section
+Character arrays (numpy.char)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "character arrays|("
+
+\end_inset
+
+These are enhanced arrays of either string type or unicode_ type.
+ These arrays inherit from the ndarray, but specially-define the operations
+ +, *, and % on a (broadcasting) element-by-element basis.
+ These operations are not available on the standard ndarray of character
+ type.
+ In addition, the chararray has all of the standard string (and unicode)
+ methods, executing them on an element-by-element basis.
+ Perhaps the easiest way to create a chararray is to use self.view(chararray)
+ where self is an ndarray of string or unicode data-type.
+ However, a chararray can also be created using the numpy.chararray.__new__
+ method.
+\end_layout
+
+\begin_layout Description
+__new__ (shape, itemsize, unicode=False, buffer=None, offset=0, strides=None,
+ order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a new character array of string or unicode type and itemsize characters.
+ Create the array using buffer (with offset and strides) if it is not None.
+ If buffer is None, then construct a new array with strides in Fortran order
+ if len(shape) >=2 and order is 'Fortran' (otherwise the strides will be
+ in 'C' order).
+
+\end_layout
+
+\begin_layout Description
+char.array (obj, itemsize=None, copy=True, unicode=False, order=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a chararray from the nested sequence obj.
+ If obj is an ndarray of data-type unicode_ or string, then its data is
+ wrapped by the chararray object and converted to the desired type (string
+ or unicode).
+
+\end_layout
+
+\begin_layout Standard
+Another difference with the standard ndarray of string data-type is that
+ the chararray inherits the feature introduced by Numarray that white-space
+ at the end of any element in the array will be ignored on item retrieval
+ and comparison operations.
+
+\begin_inset LatexCommand index
+name "character arrays|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Record Arrays (numpy.rec)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "record arrays|("
+
+\end_inset
+
+NumPy provides a powerful data-type object that allows any ndarray to hold
+ (arbitrarily nested) record-like items with named-field access to the sub-types.
+ This is possible without any special record-array sub-class.
+ Consider the example where each item in the array is a simple record of
+ name, age, and weight.
+ You could specify a data-type for an array of such records using the following
+ data-type object:
+\end_layout
+
+\begin_layout MyCode
+>>> desc = dtype({'names': ['name', 'age', 'weight'], 'formats': ['S30',
+ 'i2', 'f4']})
+\newline
+>>> a = array([('Bill',31,260.0),('Fred', 15, 145.0)],dtype=desc)
+\newline
+>>>
+ print a[0]
+\newline
+('Bill', 31, 260.0)
+\newline
+>>> print a['name']
+\newline
+['Bill' 'Fred']
+\newline
+>>> print
+ a['age']
+\newline
+[31 15]
+\newline
+>>> print a['weight']
+\newline
+[ 260.
+ 145.]
+\newline
+>>> print a[0]['name'], a[0]['age'], a[0]['weight']
+\newline
+Bill 31 260.0
+\newline
+>>>
+ print len(a[0])
+\newline
+3
+\end_layout
+
+\begin_layout Standard
+This example shows how a general array can be assigned named fields and
+ how these fields can be accessed.
+ In this case the a[0] object is an array-scalar of type void.
+ The void array-scalars are unique in that they contain references to (rather
+ than copies of) the underlying data whenever fields are defined.
+ Therefore, the record data can be modified in place:
+\end_layout
+
+\begin_layout MyCode
+>>> a[0]['name'] = 'George'; print a
+\newline
+[('George', 31, 260.0) ('Fred', 15, 145.0)]
+\end_layout
+
+\begin_layout Standard
+The recarray subclass and its accompanying record item add the ability to
+ access named fields through attribute lookup.
+ A quick way to get a record array is to use the view method of the ndarray.
+
+\end_layout
+
+\begin_layout MyCode
+>>> r = a.view(recarray)
+\newline
+>>> print r.name
+\newline
+['George' 'Fred']
+\end_layout
+
+\begin_layout Standard
+The numpy.core.records module (aliased to nump.rec when numpy is imported)
+ contains additional convenience functions for constructing record arrays.
+ All of the following constructors have two different mechanisms for specifying
+ the data-type.
+ Either the dtype= argument can be specified or the argument formats= can
+ be specified along with an optional set of four additional keyword arguments
+ (names=, titles=, aligned= and byteorder=).
+ In some cases neither dtype= nor formats= is required as the data-type
+ can be inferred from the object passed in as the first argument.
+\end_layout
+
+\begin_layout Standard
+The five argument method for specifying a data-type constructs a data-type
+ object internally.
+ The comma-separated formats string is used to specify the fields.
+ The names (and optional titles) of the fields can be specified by a comma-separ
+ated string of names (or titles).
+ The aligned flag determines whether the fields are packed (False) or padded
+ (True) according to the platform compiler rules.
+ The byteorder argument allows specification of the byte-order for all of
+ the fields at once (they can also be specified individually in the formats
+ string).
+ The default byte-order is native to the platform.
+
+\end_layout
+
+\begin_layout Description
+array (obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
+ names=None, titles=None, aligned=False, byteorder=None, copy=True)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A general-purpose record array constructor that is a front-end to the other
+ constructors If obj is None, then call the
+\series bold
+recarray
+\series default
+ constructor.
+ If obj is a string, then call the
+\series bold
+fromstring
+\series default
+ constructor.
+ If obj is a list or a tuple then if the first object is an ndarray, then
+ call
+\series bold
+fromarrays
+\series default
+, otherwise call
+\series bold
+fromrecords
+\series default
+.
+ If obj is a recarray, then make a copy of the data in recarray (if copy
+ is True) and use the new formats, names, and titles.
+ If obj is a file then call
+\series bold
+fromfile
+\series default
+.
+ Finally, if obj is an ndarray, then return obj.view(recarray) and make a
+ copy of the data if copy is True.
+ Otherwise, call the __array_interface__ attribute and try to convert using
+ the information returned from that object.
+ Either dtype or the formats argument must be given if obj is None, a string,
+ or a file, and if obj is None so the recarray constructor will be called,
+ then shape must be given as well.
+
+\end_layout
+
+\begin_layout Description
+fromarrays (array_list, dtype=None, shape=None, formats=None, names=None,
+ titles=None, aligned=False, byteorder=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a record array from a (flat) list of ndarrays.
+ The data from the arrays will be copied into the fields.
+ If formats is None and dtype is None, then the formats will be determined
+ from the arrays.
+ The names and titles arguments can be a list, tuple or a (comma-separated)
+ string specifying the names and/or titles to use for the fields.
+ If aligned is True, then the structure will be padded according to the
+ rules of the compiler that NumPy was compiled with.
+\end_layout
+
+\begin_layout MyCode
+>>> x1 = array([21,32,14])
+\newline
+>>> x2 = array(['my','first','name'])
+\newline
+>>> x3 =
+ array([3.1, 4.5, 6.2])
+\newline
+>>> r = rec.fromarrays([x1,x2,x3], names='id, word, number')
+\newline
+>
+>> print r[1]
+\newline
+(32, 'first', 4.5)
+\newline
+>>> r.number
+\newline
+array([ 3.1, 4.5, 6.2])
+\newline
+>>> r.word
+\newline
+chararra
+y(['my', 'first', 'name'],
+\newline
+ dtype='|S5')
+\end_layout
+
+\begin_layout Description
+fromrecords (rec_list, dtype=None, shape=None, formats=None, names=None,
+ titles=None, aligned=False, byteorder=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a record array from a (nested) sequence of tuples that define
+ the records.
+ If formats are not given, they are deduced from the records, but this is
+ slower.
+ The field names and field titles can be specified.
+ If aligned is non-zero, then the record array is padded so that fields
+ are aligned as the platform compiler would do if the fields represented
+ a C-struct.
+\end_layout
+
+\begin_layout MyCode
+>>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)]
+\newline
+>>> r = rec.fromrecords(recs,
+ formats='S30,i2,f4', names='name, age, weight')
+\newline
+>>> print r.name
+\newline
+['Bill' 'Fred']
+\newline
+>>
+> print r.age
+\newline
+[31 15]
+\newline
+>>> print r.weight
+\newline
+[ 260.
+ 145.]
+\end_layout
+
+\begin_layout Description
+fromstring (datastring, dtype=None, shape=None, offset=0, formats=None,
+ names=None, titles=None, aligned=0, byteorder=None):
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a record array using the provided datastring (at the given offset)
+ as the memory.
+ The record array will be read-only.
+ The byteorder argument may be used to specify the byteorder of all of the
+ fields at the same time.
+ A True aligned argument causes padding fields to be added as needed so
+ that the fields are aligned on boundaries determined by the compiler.
+ The shape of the returned array can also be specified.
+
+\end_layout
+
+\begin_layout Description
+fromfile (fd, dtype=None, shape=None, offset=0, formats=None, names=None,
+ titles=None, aligned=False, byteorder=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a record array from the (binary) data in the given file object,
+ fd.
+ This object may be an open file or a string to indicate a file to read
+ from.
+ If offset is non-zero, then data is read from the file at offset bytes
+ from the current position.
+
+\end_layout
+
+\begin_layout Standard
+The following classes are also available in the numpy.core (and therefore
+ the numpy) namespace
+\end_layout
+
+\begin_layout Description
+record A subclass of the void array scalar type that allows field access
+ using attributes.
+
+\end_layout
+
+\begin_layout Description
+recarray A subclass of the ndarray that allows field access using attributes
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+__new__ (subtype, shape, formats, names=None, titles=None, buf=None, offset=0,
+ strides=None, byteorder=None, aligned=0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct an array of the given subtype and shape with data-type (record,
+ dtype) where dtype is constructed from formats, names, and titles.
+ If buf is None, then create new memory.
+ Otherwise, use the memory of buf exposed through the buffer protocol.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+format_parser A class useful for creating a data-type descriptor from formats,
+ names, titles, and aligned arguments.
+ This is used by several of the record array constructors for consistency
+ in behavior.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+__init__ (self, formats, names, titles, aligned=False, byteorder=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Construct a data-type object from formats, names, titles, aligned, and
+ byteorder arguments.
+ Upon completion the constructed data-type object is in self._descr.
+
+\begin_inset LatexCommand index
+name "record arrays|)"
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Section
+Masked Arrays (numpy.ma)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "masked arrays|("
+
+\end_inset
+
+These are adapted from the masked arrays provided with Numeric.
+ Masked Arrays do not inherit from the ndarray, they simply use two ndarray
+ objects in their internal representation.
+ Fortunately, as I have not used masked arrays in my work, Paul Dubois (the
+ original author of MA for Numeric) adapted and modified the code for use
+ by NumPy.
+ Alexander Belopolsky (Sasha) added additional functions and improvements
+
+\end_layout
+
+\begin_layout Standard
+Masked arrays are created using the masked array creation function.
+
+\end_layout
+
+\begin_layout Description
+ma.array (data, dtype=None, copy=True, order='C', mask=ma.nomask, fill_value=None)
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+data Something that can be converted to an array.
+ If data is already a masked array, then if mask is ma.nomask, the mask used
+ be data.mask and the data used data.data.
+
+\end_layout
+
+\begin_layout Description
+dtype The data-type of the underlying array
+\end_layout
+
+\begin_layout Description
+copy If copy is False, then every effort will be made to not copy the data.
+
+\end_layout
+
+\begin_layout Description
+order Specify whether the array is in 'C', 'Fortran', or 'Any' order
+\end_layout
+
+\begin_layout Description
+mask Masked values are excluded from calculations.
+ If this is ma.nomask, then there are no masked values.
+ Otherwise, this should be an object that is convertible to an array of
+ Booleans with the same shape as data.
+\end_layout
+
+\begin_layout Description
+fill_value This value is used to fill in masked values when necessary.
+ The fill_value is not used for computation for functions within the ma
+ module.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+Masked arrays have the same methods and attributes as arrays with the addition
+ of the mask attribute as well as the
+\begin_inset Quotes eld
+\end_inset
+
+hidden
+\begin_inset Quotes erd
+\end_inset
+
+ attributes ._data and ._mask.
+
+\begin_inset LatexCommand index
+name "masked arrays|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Standard container class
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "user\\_array"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "container class"
+
+\end_inset
+
+For backward compatibility and as a standard
+\begin_inset Quotes eld
+\end_inset
+
+container
+\begin_inset Quotes erd
+\end_inset
+
+ class, the UserArray from Numeric has been brought over to NumPy and named
+
+\series bold
+numpy.lib.user_array.container
+\series default
+ The container class is a Python class whose self.array attribute is an ndarray.
+ Multiple inheritance is probably easier with numpy.lib.user_array.container
+ than with the ndarray itself and so it is included by default.
+ It is not documented here beyond mentioning its existence because you are
+ encouraged to use the ndarray class directly if you can.
+
+\end_layout
+
+\begin_layout Section
+Array Iterators
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "array iterator"
+
+\end_inset
+
+Iterators are a powerful concept for array processing.
+ Essentially, iterators implement a generalized for-loop.
+ If myiter is an iterator object, then the Python code
+\end_layout
+
+\begin_layout LyX-Code
+for val in myiter:
+\end_layout
+
+\begin_layout LyX-Code
+ ...
+\end_layout
+
+\begin_layout LyX-Code
+ some code involving val
+\end_layout
+
+\begin_layout LyX-Code
+ ...
+\end_layout
+
+\begin_layout Standard
+calls val=myiter.next() repeatedly until StopIteration is raised by the iterator.
+ There are several ways to iterate over an array that may be useful: default
+ iteration, flat iteration, and
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional enumeration.
+\end_layout
+
+\begin_layout Subsection
+Default iteration
+\end_layout
+
+\begin_layout Standard
+The default iterator of an ndarray object is the default Python iterator
+ of a sequence type.
+ Thus, when the array object itself is used as an iterator.
+ The default behavior is equivalent to:
+\end_layout
+
+\begin_layout LyX-Code
+for i in arr.shape[0]:
+\end_layout
+
+\begin_layout LyX-Code
+ val = arr[i]
+\end_layout
+
+\begin_layout Standard
+This default iterator selects a sub-array of dimension
+\begin_inset Formula $N-1$
+\end_inset
+
+ from the array.
+ This can be a useful construct for defining recursive algorithms.
+ To loop over the entire array requires
+\begin_inset Formula $N$
+\end_inset
+
+ for-loops.
+
+\end_layout
+
+\begin_layout MyCode
+>>> a = arange(24).reshape(3,2,4)+10
+\newline
+>>> for val in a:
+\newline
+...
+ print 'item:', val
+\newline
+item: [[10 11 12 13]
+\newline
+ [14 15 16 17]]
+\newline
+item: [[18 19
+ 20 21]
+\newline
+ [22 23 24 25]]
+\newline
+item: [[26 27 28 29]
+\newline
+ [30 31 32 33]]
+\end_layout
+
+\begin_layout Subsection
+Flat iteration
+\end_layout
+
+\begin_layout Standard
+As mentioned previously, the flat attribute of ndarray objects returns an
+ iterator that will cycle over the entire array in C-style contiguous order.
+
+\end_layout
+
+\begin_layout MyCode
+>>> for i, val in enumerate(a.flat):
+\newline
+...
+ if i%5 == 0: print i, val
+\newline
+0 10
+\newline
+5 15
+\newline
+10 20
+\newline
+15 25
+\newline
+20 30
+\end_layout
+
+\begin_layout Standard
+Here, I've used the built-in enumerate iterator to return the iterator index
+ as well as the value.
+\end_layout
+
+\begin_layout Subsection
+N-dimensional enumeration
+\end_layout
+
+\begin_layout Standard
+Sometimes it may be useful to get the N-dimensional index while iterating.
+ The ndenumerate iterator can achieve this.
+\end_layout
+
+\begin_layout MyCode
+>>> for i, val in ndenumerate(a):
+\newline
+...
+ if sum(i)%5 == 0: print i, val
+\newline
+(0, 0, 0) 10
+\newline
+(1, 1, 3) 25
+\newline
+(2, 0, 3) 29
+\newline
+(2,
+ 1, 2) 32
+\end_layout
+
+\begin_layout Subsection
+Iterator for broadcasting
+\end_layout
+
+\begin_layout Standard
+The general concept of broadcasting is also available from Python using
+ the
+\series bold
+broadcast
+\series default
+ iterator.
+ This object takes
+\begin_inset Formula $N$
+\end_inset
+
+ objects as inputs and returns an iterator that returns tuples providing
+ each of the input sequence elements in the broadcasted result.
+\end_layout
+
+\begin_layout MyCode
+>>> for val in broadcast([[1,0],[2,3]],[0,1]):
+\newline
+...
+ print val
+\newline
+(1, 0)
+\newline
+(0, 1)
+\newline
+(2, 0)
+\newline
+(3, 1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The methods and attributes of the broadcast object are:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+nd the number of dimensions in the broadcasted result.
+\end_layout
+
+\begin_layout Description
+shape the shape of the broadcasted result.
+\end_layout
+
+\begin_layout Description
+size the total size of the broadcasted result.
+\end_layout
+
+\begin_layout Description
+index the current (flat) index into the broadcasted array
+\end_layout
+
+\begin_layout Description
+iters a tuple of (broadcasted) NumPy.flatiter objects, one for each array.
+\end_layout
+
+\begin_layout Description
+reset ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Reset the multiter object to the beginning.
+\end_layout
+
+\begin_layout Description
+next ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Get the next tuple of objects from the (broadcasted) arrays
+\end_layout
+
+\end_deeper
+\begin_layout Chapter
+Universal Functions
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "par:The-Ufunc-Object"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Quotation
+Computers make it easier to do a lot of things, but most of the things they
+ make it easier to do don't need to be done.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Andy Rooney
+\end_layout
+
+\begin_layout Quotation
+People think computers will keep them from making mistakes.
+ They're wrong.
+ With computers you make mistakes faster.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Adam Osborne
+\end_layout
+
+\begin_layout Section
+Description
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc|("
+
+\end_inset
+
+Universal functions are wrappers that provide a common interface to mathematical
+ functions that operate on scalars, and can be made to operate on arrays
+ in an element-by-element fashion.
+ All
+\family typewriter
+u
+\family default
+niversal
+\family typewriter
+func
+\family default
+tion
+\family typewriter
+s
+\family default
+ (
+\family typewriter
+ufuncs
+\family default
+) wrap some core function that takes
+\begin_inset Formula $n_{i}$
+\end_inset
+
+ (scalar) inputs and produces
+\begin_inset Formula $n_{o}$
+\end_inset
+
+ (scalar) outputs.
+ Typically, this core function is implemented in compiled code but a Python
+ function can also be wrapped into a universal function using the basic
+ method
+\family typewriter
+frompyfunc
+\family default
+ in the umath module.
+
+\end_layout
+
+\begin_layout Description
+frompyfunc (func, nin, nout)
+\begin_inset LatexCommand index
+name "frompyfunc"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This function returns a new universal function wrapping a Python function
+ func with nin inputs and nout outputs.
+ The resulting universal function works using Object arrays for both input
+ and output.
+ The vectorize class makes use of frompyfunc internally.
+ You can view the source code using numpy.source(numpy.vectorize).
+\end_layout
+
+\begin_layout Subsection
+Broadcasting
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "broadcasting"
+
+\end_inset
+
+Each universal function takes array inputs and produces array outputs by
+ performing the core function element-wise on the inputs.
+ The standard broadcasting rules are applied so that inputs without exactly
+ the same shapes can still be usefully operated on.
+ Broadcasting can be understood by four rules:
+\end_layout
+
+\begin_layout Enumerate
+All input arrays with ndim smaller than the input array of largest ndim
+ have 1's pre-pended to their shapes.
+\end_layout
+
+\begin_layout Enumerate
+The size in each dimension of the output shape is the maximum of all the
+ input shapes in that dimension.
+\end_layout
+
+\begin_layout Enumerate
+An input can be used in the calculation if it's shape in a particular dimension
+ either matches the output shape or has value exactly 1.
+\end_layout
+
+\begin_layout Enumerate
+If an input has a dimension size of 1 in its shape, the first data entry
+ in that dimension will be used for all calculations along that dimension.
+ In other words, the stepping machinery of the ufunc will simply not step
+ along that dimension when otherwise needed (the stride will be 0 for that
+ dimension).
+
+\end_layout
+
+\begin_layout Standard
+While perhaps a bit difficult to explain, broadcasting can be quite useful
+ and becomes second nature rather quickly.
+ Broadcasting is used throughout NumPy to decide how to handle non equally-shape
+d arrays.
+
+\end_layout
+
+\begin_layout Subsection
+Output type determination
+\end_layout
+
+\begin_layout Standard
+The output of the ufunc (and its methods) does not have to be an ndarray.
+ All output arrays will be passed to the __array_wrap__ method of any input
+ (besides ndarrays, and scalars) that defines it
+\series bold
+and
+\series default
+ has the highest __array_priority__ of any other input to the universal
+ function.
+ The default __array_priority__ of the ndarray is 0.0, and the default __array_pr
+iority__ of a subtype is 1.0.
+ Matrices have __array_priority__ equal to 10.0.
+
+\end_layout
+
+\begin_layout Standard
+The ufuncs can also all take output arguments.
+ The output will be cast if necessary to the provided output array.
+ If a class with an __array__ method is used for the output, results will
+ be written to the object returned by __array__.
+ Then, if the class also has an __array_wrap__ method, the returned
+\family typewriter
+ndarray
+\family default
+ result will be passed to that method just before passing control back to
+ the caller.
+
+\end_layout
+
+\begin_layout Subsection
+Use of internal buffers
+\end_layout
+
+\begin_layout Standard
+Internally, buffers are used for misaligned data, swapped data, and data
+ that has to be converted from one data type to another.
+ The size of the internal buffers is settable on a per-thread basis.
+ There can be up to
+\begin_inset Formula $2\left(n_{i}+n_{o}\right)$
+\end_inset
+
+ buffers of the specified size created to handle the data from all the inputs
+ and outputs of a ufunc.
+ The default size of the buffer is 10,000 elements.
+ Whenever buffer-based calculation would be needed, but all input arrays
+ are smaller than the buffer size, those misbehaved or incorrect typed arrays
+ will be copied before the calculation proceeds.
+ Adjusting the size of the buffer may therefore alter the speed at which
+ ufunc calculations of various sorts are completed.
+ A simple interface for setting this variable is accessible using the function
+
+\end_layout
+
+\begin_layout Description
+setbufsize (size)
+\begin_inset LatexCommand index
+name "setbufsize"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the buffer size to the given number of elements in the current thread.
+ Return the old buffer size (so that it can be reset later if desired).
+
+\end_layout
+
+\begin_layout Subsection
+Error handling
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "error handling"
+
+\end_inset
+
+Universal functions can trip special floating point status registers in
+ your hardware (such as divide-by-zero).
+ If available on your platform, these registers will be regularly checked
+ during calculation.
+ The user can determine what should be done if errors are encountered.
+ Error handling is controlled on a per-thread basis.
+ Four errors can be individually configured: divide-by-zero, overflow, underflow
+, and invalid.
+ The errors can each be set to ignore, warn, raise, or call.
+ The easiest way to configure the error mask is using the function
+\end_layout
+
+\begin_layout Description
+seterr (all=None, divide=None, over=None, under=None, invalid=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "seterr"
+
+\end_inset
+
+This will set the current thread so that errors can be handled if desired.
+ If one of the errors is set to 'call', then a function must be provided
+ using the seterrcall() routine.
+ If any of the arguments are None, then that error mask will be unchanged.
+ The return value of this function is a dictionary with the old error conditions.
+ Thus, you can restore the old condition after you are finished with your
+ function by calling seterr(**old).
+ If all is set, then all errors will be set to the specified value.
+
+\end_layout
+
+\begin_layout Description
+seterrcall (callable)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "seterrcall"
+
+\end_inset
+
+This sets the function to call when an error is triggered for an error condition
+ configured with the
+\begin_inset Quotes eld
+\end_inset
+
+call
+\begin_inset Quotes erd
+\end_inset
+
+ handler.
+ This function should take two arguments: a string showing the type of error
+ that triggered the call, and an integer showing the state of the floating
+ point status registers.
+ Any return value of the call function will be ignored, but errors can be
+ raised by the function.
+ Only one error function handler can be specified for all the errors.
+ The status argument shows which errors were raised.
+ The return value of this routine is the old callable.
+ The argument passed in to this function must be any callable object with
+ the right signature or None.
+
+\end_layout
+
+\begin_layout Note
+FPE_DIVIDEBYZERO, FPE_OVERFLOW, FPE_UNDERFLOW, and FPE_INVALID, are all
+ defined constants in NumPy.
+ The status flag returned for a 'call' error handling type shows which errors
+ were raised by adding these constants together.
+\end_layout
+
+\begin_layout Subsection
+Optional keyword arguments
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!keyword arguments"
+
+\end_inset
+
+All ufuncs take optional keyword arguments.
+ These represent rather advanced usage and will likely not be used by most
+ users.
+
+\end_layout
+
+\begin_layout Description
+sig= either a data-type, a tuple of data-types, or a special signature string
+ indicating the input and output types of a ufunc.
+ This argument allows you to specify a specific signature for a the 1-d
+ loop to use in the underlying calculation.
+ If the loop specified does not exist for the ufunc, then a TypeError is
+ raised.
+ Normally a suitable loop is found automatically by comparing the input
+ types with what is available and searching for a loop with data-types to
+ which all inputs can be cast safely.
+ This key-word argument lets you by-pass that search and choose a loop you
+ want.
+ A list of available signatures is available in the
+\series bold
+types
+\series default
+ attribute of the ufunc object.
+
+\end_layout
+
+\begin_layout Description
+extobj= a list of length 1, 2, or 3 specifying the ufunc buffer-size, the
+ error mode integer, and the error call-back function.
+ Normally, these values are looked-up in a thread-specific dictionary.
+ Passing them here bypasses that look-up and uses the low-level specification
+ provided for the error-mode.
+ This may be useful as an optimization for calculations requiring lots of
+ ufuncs on small arrays in a loop.
+
+\end_layout
+
+\begin_layout Section
+Attributes
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!attributes"
+
+\end_inset
+
+There are some informational attributes that universal functions possess.
+ None of the attributes can be set.
+
+\end_layout
+
+\begin_layout Description
+__doc__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A docstring for each ufunc.
+ The first part of the docstring is dynamically generated from the number
+ of outputs, the name, and the number of inputs.
+ The second part of the doc string is provided at creation time and stored
+ with the ufunc.
+
+\end_layout
+
+\begin_layout Description
+__name__
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The name of this ufunc.
+\end_layout
+
+\begin_layout Description
+nin
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The number of inputs
+\end_layout
+
+\begin_layout Description
+nout
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The number of outputs
+\end_layout
+
+\begin_layout Description
+nargs
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The total number of inputs + outputs
+\end_layout
+
+\begin_layout Description
+ntypes
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The total number of different types for which this ufunc is defined.
+\end_layout
+
+\begin_layout Description
+types
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A list of length ntypes containing strings showing the types for which
+ this ufunc is defined.
+ Other types may still be used as inputs (and as output arrays), they will
+ just need casting.
+ For inputs, standard casting rules will be used to determine which of the
+ supplied internal functions that will be used (and therefore the default
+ type of the output).
+ Results will always be force-cast to any array provided to hold the output.
+
+\end_layout
+
+\begin_layout Description
+identity
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A 1, 0, or None to show the identity for this universal function.
+ This identity is used for reduction on zero-sized arrays (arrays with a
+ shape that includes a 0).
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Universal function (ufunc) attributes.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="9" columns="2">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Name
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+__doc__
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Dynamic docstring.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+__name__
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Name of ufunc
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+nin
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Number of input arguments
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+nout
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Number of output arguments
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+nargs
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Total number of arguments
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+ntypes
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Number of defined inner loops.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+types
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+List showing types for which inner loop is defined.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+identity
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Identity for this ufunc.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Casting Rules
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!casting rules"
+
+\end_inset
+
+At the core of every ufunc is a one-dimensional strided loop that implements
+ the actual function for a specific type combination.
+ When a ufunc is created, it is given a static list of inner loops and a
+ corresponding list of type signatures over which the ufunc operates.
+ The ufunc machinery uses this list to determine which inner loop to use
+ for a particular case.
+ You can inspect the
+\family typewriter
+.types
+\family default
+ attribute for a particular ufunc to see which type combinations have a
+ defined inner loop and which output type they produce (the character codes
+ are used in that output for brevity).
+
+\end_layout
+
+\begin_layout Standard
+Casting must be done on one or more of the inputs whenever the ufunc does
+ not have a core loop implementation for the input types provided.
+ If an implementation for the input types cannot be found, then the algorithm
+ searches for an implementation with a type signature to which all of the
+ inputs can be cast
+\begin_inset Quotes eld
+\end_inset
+
+safely.
+\begin_inset Quotes erd
+\end_inset
+
+ The first one it finds in its internal list of loops is selected and performed
+ with types cast.
+ Recall that internal copies during ufuncs (even for casting) are limited
+ to the size of an internal buffer which is user settable.
+
+\end_layout
+
+\begin_layout Note
+Universal functions in NumPy are flexible enough to have mixed type signatures.
+ Thus, for example, a universal function could be defined that works with
+ floating point and integer values.
+ See ldexp for an example.
+\end_layout
+
+\begin_layout Standard
+By the above description, the casting rules are essentially implemented
+ by the question of when a data type can be cast
+\begin_inset Quotes eld
+\end_inset
+
+safely
+\begin_inset Quotes erd
+\end_inset
+
+ to another data type.
+ The answer to this question can be determined in Python with a function
+ call: can_cast (fromtype, totype).
+ Figure shows the results of this call for my 32-bit system on the 21 internally
+ supported types.
+ You can generate this table for your system with code shown in that Figure.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout MyCode
+>>> def print_table(ntypes):
+\newline
+...
+ print 'X',
+\newline
+...
+ for char in ntypes: print char,
+\newline
+...
+ print
+\newline
+...
+ for row in ntypes:
+\newline
+...
+ print row,
+\newline
+...
+ for col in ntypes:
+\newline
+...
+ print int(can_cast(row, col)),
+\newline
+...
+ print
+\newline
+>>> print_table(typecodes['All'])
+\newline
+X ? b h i l q p B H I L Q
+ P f d g F D G S U V O
+\newline
+? 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+\newline
+b 0
+ 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
+\newline
+h 0 0 1 1 1 1 1 0 0 0 0 0 0
+ 1 1 1 1 1 1 1 1 1 1
+\newline
+i 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
+\newline
+l 0 0
+ 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
+\newline
+q 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+ 1 1 0 1 1 1 1 1 1
+\newline
+p 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
+\newline
+B 0 0 1
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+\newline
+H 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+ 1 1 1 1 1 1 1 1
+\newline
+I 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
+\newline
+L 0 0 0 0
+ 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
+\newline
+Q 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1
+ 0 1 1 1 1 1 1
+\newline
+P 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
+\newline
+f 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
+\newline
+d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
+ 1 1 1 1 1 1
+\newline
+g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1
+\newline
+F 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
+\newline
+D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+ 1 1 1 1 1
+\newline
+G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
+\newline
+S 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+\newline
+U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 1 1 1
+\newline
+V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
+\newline
+O 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
+\end_layout
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+Code segment showing the can cast safely table for a 32-bit system.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+You should note that, while included in the table for completeness, the
+ 'S', 'U', and 'V' types cannot be operated on by ufuncs.
+ Also, note that on a 64-bit system the integer types may have different
+ sizes resulting in a slightly altered table.
+
+\end_layout
+
+\begin_layout Standard
+Mixed scalar-array operations use a different set of casting rules that
+ ensure that a scalar cannot upcast an array unless the scalar is of a fundament
+ally different kind of data (
+\emph on
+i.e.
+
+\emph default
+ under a different hierachy in the data type hierarchy) then the array.
+ This rule enables you to use scalar constants in your code (which as Python
+ types are interpreted accordingly in ufuncs) without worrying about whether
+ the precision of the scalar constant will cause upcasting on your large
+ (small precision) array.
+
+\end_layout
+
+\begin_layout Section
+Methods
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ufunc!methods|("
+
+\end_inset
+
+All ufuncs have 4 methods.
+ However, these methods only make sense on ufuncs that take two input arguments
+ and return one output argument.
+ Attempting to call these methods on other ufuncs will cause a
+\family typewriter
+ValueError
+\family default
+.
+ The reduce-like methods all take an axis keyword and a dtype keyword, and
+ the arrays must all have dimension >= 1.
+ The
+\emph on
+axis
+\emph default
+ keyword specifies which axis of the array the reduction will take place
+ over and may be negative, but must be an integer.
+ The
+\emph on
+dtype
+\emph default
+ keyword allows you to manage a very common problem that arises when naively
+ using <op>.reduce.
+ Sometimes you may have an array of a certain data type and wish to add
+ up all of its elements, but the result does not fit into the data type
+ of the array.
+ This commonly happens if you have an array of single-byte integers.
+ The dtype keyword allows you to alter the data type that the reduction
+ takes place over (and therefore the type of the output).
+ Thus, you can ensure that the output is a data type with large-enough precision
+ to handle your output.
+ The responsibility of altering the reduce type is mostly up to you.
+ There is one exception: if no dtype is given for a reduction on the
+\begin_inset Quotes eld
+\end_inset
+
+add
+\begin_inset Quotes erd
+\end_inset
+
+ or
+\begin_inset Quotes eld
+\end_inset
+
+multiply
+\begin_inset Quotes erd
+\end_inset
+
+ operations, then if the input type is an integer (or boolean) data-type
+ and smaller than the size of the int_ data type, it will be internally
+ upcast to the int_ (or uint) data type.
+
+\end_layout
+
+\begin_layout Warning
+A reduce-like operation on an array with a data type that has range
+\begin_inset Quotes eld
+\end_inset
+
+too small
+\begin_inset Quotes erd
+\end_inset
+
+ to handle the result will silently wrap.
+ You should use dtype to increase the data type over which reduction takes
+ place.
+\end_layout
+
+\begin_layout Subsection
+Reduce
+\end_layout
+
+\begin_layout Description
+<op>.reduce (array=, axis=0, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "ufunc!methods!reduce"
+
+\end_inset
+
+For each one-dimensional sequence along the
+\emph on
+axis
+\emph default
+ dimension of the array, return a single number resulting from recursively
+ applying the operation to succesive elements along that dimension.
+ If the input array has
+\begin_inset Formula $N$
+\end_inset
+
+ dimensions, then the returned array has
+\begin_inset Formula $N-1$
+\end_inset
+
+ dimensions.
+ This produces the equivalent of the following Python code :
+\end_layout
+
+\begin_layout LyX-Code
+>>> indx = [index_exp[:]]*array.ndim
+\newline
+>>> indx[axis] = 0; N=array.shape[axis]
+\newline
+>>>
+ result = array[indx].astype(dtype)
+\newline
+>>> for i in range(1,N):
+\newline
+...
+ indx[axis] = i
+\newline
+...
+ <op>(result, array[indx], result)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Studying the above code can also help you gain an appreciation for how
+ to do generic indexing in Python using
+\family typewriter
+index_exp
+\family default
+.
+ For example, if <op> is add, then <op>.reduce produces a summation along
+ the given axis.
+ If <op> is prod, then a repeated multiply is performed.
+\end_layout
+
+\begin_layout Subsection
+Accumulate
+\end_layout
+
+\begin_layout Description
+<op>.accumulate (array=, axis=0, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "ufunc!methods!accumulate"
+
+\end_inset
+
+This method is similar to reduce, except it returns an array of the same
+ shape as the input, and keeps intermediate calculations.
+ The operation is still performed along the access.
+ This method underlies the operations of the cumsum and cumprod methods
+ of arrays.
+ The following Python code implements an equivalent of the accumulate method.
+\end_layout
+
+\begin_layout LyX-Code
+>>> i1 = [index_exp[:]]*array.ndim
+\newline
+>>> i2 = [index_exp[:]]*array.ndim
+\newline
+>>> i1[axis]
+ = 0; N=array.shape[axis]
+\newline
+>>> result = array.astype(dtype)
+\newline
+>>> for i in range(1,N):
+\newline
+...
+ i1[axis] = i
+\newline
+...
+ i2[axis] = i-1
+\newline
+...
+ <op>(result[i1], array[i1], result[i2])
+\end_layout
+
+\begin_layout Subsection
+Reduceat
+\end_layout
+
+\begin_layout Description
+<op>.reduceat (array=, indices=, axis=0, dtype=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "ufunc!methods!reduceat"
+
+\end_inset
+
+This method is a generalization of both reduce and accumulate.
+ It offers the ability to reduce along an axis but only between certain
+ indices.
+ The indices input must be a one dimensional (index) sequence.
+ Then, if
+\begin_inset Formula $I_{k}$
+\end_inset
+
+ is the
+\begin_inset Formula $k^{\textrm{th}}$
+\end_inset
+
+ element of indices, the reduceat method computes <op>.reduce(array[
+\begin_inset Formula $I_{k}$
+\end_inset
+
+:
+\begin_inset Formula $I_{k+1}$
+\end_inset
+
+]).
+ This formula assumes
+\begin_inset Formula $I_{k+1}>I_{k}$
+\end_inset
+
+, and also that
+\begin_inset Formula $I_{k+1}$
+\end_inset
+
+ is the length of the input array when
+\begin_inset Formula $I_{k}$
+\end_inset
+
+ is the last element.
+ There is no requirement that the indices be monotonic.
+ If
+\begin_inset Formula $I_{k+1}\leq I_{k},$
+\end_inset
+
+ then reduceat simply returns array[
+\begin_inset Formula $I_{k}$
+\end_inset
+
+] for that particular element of indices.
+ In these formulas, we have assumed that array is one dimensional (or axis
+ is 0).
+ If the array is
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional and axis>0, then the index expression needs axis ':' (full
+ slice objects) inserted (i.e.
+ array[
+\begin_inset Formula $\underbrace{:,\ldots,:}_{\textrm{axis}},I_{k}:I_{k+1}$
+\end_inset
+
+]).
+ The effect is to slice along the axis dimension.
+ Equivalent Python code is
+\end_layout
+
+\begin_layout LyX-Code
+>>> i1 = [index_exp[:]]*array.ndim
+\newline
+>>> i2 = [index_exp[:]]*array.ndim
+\newline
+>>> outshape
+ = list(array.shape)
+\newline
+>>> N = array.shape[axis]
+\newline
+>>> outshape[axis] = len(indices)
+\newline
+>>>
+ result = zeros(outshape, dtype or array.dtype)
+\newline
+>>> for k,Ik in enumerate(indices
+):
+\newline
+...
+ i1[axis] = k
+\newline
+...
+ try:
+\newline
+...
+ Ikp1 = indices[k+1]
+\newline
+...
+ except IndexError:
+\newline
+...
+ Ikp1 = N
+\newline
+...
+ if (Ikp1 > Ik):
+\end_layout
+
+\begin_layout LyX-Code
+...
+ i2[axis] = index_exp[Ik:Ikp1]
+\newline
+...
+ result[i1] = <op>.reduce(array[i2],axis=axis,dtype=dtype)
+\newline
+...
+ else:
+\newline
+...
+ result[i1] = array[Ik].astype(dtype)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The returned array has as many dimensions as the input array, and is the
+ same shape except for the
+\emph on
+axis
+\emph default
+ dimension which has shape equal to the length of indices (the number of
+ reduce operations that were performed).
+ If you ever have a need to compute multiple reductions over portions of
+ an array, then (if you can get your mind around what it is doing) reduceat
+ may be just what you were looking for.
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+Example: Suppose a is a two-dimensional array of shape
+\begin_inset Formula $10\times20$
+\end_inset
+
+.
+ Then, res=add.reduce (a, [0,3,1]) returns a
+\begin_inset Formula $3\times20$
+\end_inset
+
+ array with res[0,:] = add.reduce(a[:,0:3]), res[1,:] = a[:,3], and res[2,:]
+ = add.reduce(a[:,1:]).
+
+\end_layout
+
+\end_deeper
+\begin_layout Subsection
+Outer
+\end_layout
+
+\begin_layout Description
+<op>.outer (a, b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "ufunc!methods!outer"
+
+\end_inset
+
+This method computes an outer operation on <op>.
+ It computes <op>(a2, b2) where a2 is 'a' with b.ndim 1's post-pended to
+ it's shape and b2 is 'b' with a.ndim 1's pre-pended to its shape (broadcasting
+ takes care of this automatically in the code below).
+ The return shape has a.ndim + b.ndim dimensions.
+ Equivalent Python code is
+\end_layout
+
+\begin_layout LyX-Code
+>>> a.shape += (1,)*b.ndim
+\newline
+>>> <op>(a,b)
+\newline
+>>> a = a.squeeze()
+\end_layout
+
+\begin_layout Standard
+\InsetSpace ~
+ Among many other uses, arithmetic tables can be conveniently built using
+ outer:
+\begin_inset LatexCommand index
+name "ufunc!methods|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout MyCode
+>>> multiply.outer([1,7,9,12],arange(5,12))
+\newline
+array([[ 5, 6, 7, 8,
+ 9, 10, 11],
+\newline
+ [ 35, 42, 49, 56, 63, 70, 77],
+\newline
+ [ 45, 54,
+ 63, 72, 81, 90, 99],
+\newline
+ [ 60, 72, 84, 96, 108, 120, 132]])
+\end_layout
+
+\begin_layout Section
+Available ufuncs
+\end_layout
+
+\begin_layout Standard
+There are currently more than 60 universal functions defined on one or more
+ types, covering a wide variety of operations.
+ Some of these ufuncs are called automatically on arrays when the relevant
+ infix notation is used (i.e.
+ add(a,b) is called internally when a + b is written and a or b is an ndarray).
+ Nonetheless, you may still want to use the ufunc call in order to use the
+ optional output argument(s) to place the output(s) in an object (or in
+ objects) of your choice.
+
+\end_layout
+
+\begin_layout Standard
+Recall that each ufunc operates element-by-element.
+ Therefore, each ufunc will be described as if acting on a set of scalar
+ inputs to return a set of scalar outputs.
+\end_layout
+
+\begin_layout Note
+The ufunc still returns its output(s) even if you use the optional output
+ argument(s).
+
+\end_layout
+
+\begin_layout Subsection
+Math operations
+\end_layout
+
+\begin_layout Description
+add (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "add"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x_{1}+x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1+x2
+\family default
+ for arrays
+\end_layout
+
+\begin_layout Description
+subtract (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "subtract"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x_{1}-x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1-x2
+\family default
+ for arrays
+\end_layout
+
+\begin_layout Description
+multiply (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "multiply"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x_{1}\cdot x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1*x2
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+divide (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "divide"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x_{1}/x_{2}$
+\end_inset
+
+ Integer division results in truncation.
+ Floating-point does not.
+ Called to implement
+\family typewriter
+x1/x2
+\family default
+ for arrays (when __future__.division is not active).
+
+\end_layout
+
+\begin_layout Description
+true_divide (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "true\\_divide"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This version of division always returns an inexact number so that integer
+ division returns floating point.
+ Called with __future__.division is active to implement
+\family typewriter
+x1/x2
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+floor_divide (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "floor\\_divide"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This version of division always results in truncation of an fractional
+ part remaining.
+ Called to implement
+\family typewriter
+x1//x2
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+negative (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "negative"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=-x$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+-x
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+power (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "power"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x_{1}^{x_{2}}$
+\end_inset
+
+.
+ There is no three-term power ufunc defined.
+ This two-term power function is called to implement
+\family typewriter
+pow(x1,x2,<any>)
+\family default
+ or
+\family typewriter
+x1**x2
+\family default
+ for arrays.
+ Note that the third term in
+\family typewriter
+pow
+\family default
+ is ignored for array arguments.
+\end_layout
+
+\begin_layout Description
+remainder (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "remainder"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns
+\begin_inset Formula $x-y$
+\end_inset
+
+*floor(
+\begin_inset Formula $x/y$
+\end_inset
+
+).
+ Result has the sign of
+\begin_inset Formula $y$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1%x2
+\family default
+.
+\end_layout
+
+\begin_layout Description
+mod (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Same as remainder (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+]).
+
+\end_layout
+
+\begin_layout Description
+fmod (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $x_{1}=kx_{2}+y$
+\end_inset
+
+ where
+\begin_inset Formula $k$
+\end_inset
+
+ is the largest integer satisfying this equation.
+ Computes C-like
+\begin_inset Formula $x_{1}\%x_{2}$
+\end_inset
+
+ element-wise.
+ This was the behavior of
+\family typewriter
+x1%x2
+\family default
+ in old Numeric.
+\end_layout
+
+\begin_layout Description
+absolute (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "absolute"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\left|x\right|.$
+\end_inset
+
+ Called to implement
+\family typewriter
+abs(x)
+\family default
+ for arrays.
+
+\end_layout
+
+\begin_layout Description
+rint (x, [, y])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Round
+\begin_inset Formula $x$
+\end_inset
+
+ to the nearest integer.
+ Rounds half-way cases to the nearest even integer.
+\end_layout
+
+\begin_layout Description
+sign (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Sets
+\begin_inset Formula $y$
+\end_inset
+
+ according to
+\begin_inset Formula \[
+\textrm{sign}\left(x\right)=\left\{ \begin{array}{cc}
+1 & x:>0,\\
+0 & x=0,\\
+-1 & x<0.\end{array}\right.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+conj (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "conj"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+conjugate (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "conjugate"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\overline{x}$
+\end_inset
+
+; in other words, the complex conjugate of
+\begin_inset Formula $x$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+exp (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "exp"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=e^{x}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+log (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "log"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\log\left(x\right)$
+\end_inset
+
+.
+ In other words,
+\begin_inset Formula $y$
+\end_inset
+
+ is the number so that
+\begin_inset Formula $e^{y}=x$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+expm1 (
+\begin_inset Formula $x$
+\end_inset
+
+, [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=e^{x}-1.$
+\end_inset
+
+ Calculated so that it is accurate for small
+\begin_inset Formula $\left|x\right|.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+log1p (
+\begin_inset Formula $x$
+\end_inset
+
+, [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\log\left(1+x\right)$
+\end_inset
+
+ but accurate for small
+\begin_inset Formula $\left|x\right|.$
+\end_inset
+
+ Returns the number
+\begin_inset Formula $y$
+\end_inset
+
+ such that
+\begin_inset Formula $e^{y}-1=x$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+log10 (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "log10"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\log10\left(x\right)$
+\end_inset
+
+.
+ In other words,
+\begin_inset Formula $y$
+\end_inset
+
+ is the number so that
+\begin_inset Formula $10^{y}=x.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+sqrt (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "sqrt"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=\sqrt{x}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+square (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=x*x$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+reciprocal (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=1/x$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+ones_like (
+\begin_inset Formula $x$
+\end_inset
+
+, [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset Formula $y=1$
+\end_inset
+
+ If an output argument is not given the returned data-type is the same as
+ the input data type.
+\end_layout
+
+\begin_layout Tip
+The optional output arguments can be used to help you save memory for large
+ calculations.
+ If your arrays are large, complicated expressions can take longer than
+ absolutely necessary due to the creation and (later) destruction of temporary
+ calculation spaces.
+ For example, the expression 'G=a*b+c' is equivalent to t1=A*B; G=T1+C;
+ del t1; It will be more quickly executed as G=A*B; add(G,C,G) which is
+ the same as G=A*B; G+=C.
+\end_layout
+
+\begin_layout Subsection
+Trigonometric functions
+\end_layout
+
+\begin_layout Standard
+All trigonometric functions use radians when an angle is called for.
+ The ratio of degrees to radians is
+\begin_inset Formula $180^{\circ}/\pi.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+sin (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "sin"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+cos (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "cos"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+tan (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "tan"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The standard trignometric functions.
+
+\begin_inset Formula $y=\sin\left(x\right),$
+\end_inset
+
+
+\begin_inset Formula $y=\cos\left(x\right),$
+\end_inset
+
+ and
+\begin_inset Formula $y=\tan\left(x\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arcsin (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arcsin"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arccos (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arccos"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arctan (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arctan"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The inverse trigonometric functions:
+\begin_inset Formula $y=\sin^{-1}\left(x\right),$
+\end_inset
+
+
+\begin_inset Formula $y=\cos^{-1}\left(x\right)$
+\end_inset
+
+,
+\begin_inset Formula $y=\tan^{-1}\left(x\right).$
+\end_inset
+
+ These return the value of
+\begin_inset Formula $y$
+\end_inset
+
+ (in radians) such that
+\begin_inset Formula $\sin\left(y\right)=x$
+\end_inset
+
+ with
+\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
+\end_inset
+
+;
+\begin_inset Formula $\cos\left(y\right)=x$
+\end_inset
+
+ with
+\begin_inset Formula $y\in\left[0,\pi\right]$
+\end_inset
+
+; and
+\begin_inset Formula $\tan\left(y\right)=x$
+\end_inset
+
+ with
+\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
+\end_inset
+
+, respectively.
+
+\end_layout
+
+\begin_layout Description
+arctan2 (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arctan2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns
+\begin_inset Formula $\tan^{-1}\left(\frac{x_{1}}{x_{2}}\right)$
+\end_inset
+
+ but takes into account the sign on
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ to place the angle in the correct quadrant.
+ The angle
+\begin_inset Formula $y$
+\end_inset
+
+ is returned in the full range
+\begin_inset Formula $-\pi<y\leq\pi$
+\end_inset
+
+.
+ The angle is chosen so that
+\begin_inset Formula $\sin\left(y\right)=\frac{x_{1}}{\sqrt{x_{1}^{2}+x_{2}^{2}}},$
+\end_inset
+
+ and
+\begin_inset Formula $\cos\left(y\right)=\frac{x_{2}}{\sqrt{x_{1}^{2}+x_{2}^{2}}}.$
+\end_inset
+
+ Particular values are showin in the following table:
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="5" columns="3">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $x_{1}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $x_{2}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $y=\textrm{arctan2}\left(x_{1},x_{2}\right)$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $\frac{\pi}{2}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $\pi$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+-1
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+\begin_inset Formula $-\frac{\pi}{2}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+hypot (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "hypot"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns
+\begin_inset Formula $y=\sqrt{x_{1}^{2}+x_{2}^{2}}.$
+\end_inset
+
+ Given a complex number in cartesian form, arctan2 and hypot can be used
+ to compute phase and magnitude, quickly.
+\end_layout
+
+\begin_layout Description
+sinh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "sinh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes
+\begin_inset Formula $y=\sinh\left(x\right)$
+\end_inset
+
+ which is defined as
+\begin_inset Formula $\frac{1}{2}\left(e^{x}-e^{-x}\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+cosh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "cosh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes
+\begin_inset Formula $y=\cosh\left(x\right)$
+\end_inset
+
+ which is defined as
+\begin_inset Formula $\frac{1}{2}\left(e^{x}+e^{-x}\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+tanh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "tanh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes
+\begin_inset Formula $y=\tanh\left(x\right)$
+\end_inset
+
+ which is defined as
+\begin_inset Formula $\left(e^{x}-e^{-x}\right)/\left(e^{x}+e^{-x}\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arcsinh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arcsinh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arccosh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arccosh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+arctanh (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "arctanh"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These compute the inverse hyperpolic functions.
+
+\begin_inset Formula $y=\textrm{arc}func\left(x\right)$
+\end_inset
+
+ is the (principal) value of
+\begin_inset Formula $y$
+\end_inset
+
+ such that
+\begin_inset Formula $func\left(y\right)=x.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Bit-twiddling functions
+\end_layout
+
+\begin_layout Standard
+These function all need integer arguments and they maniuplate the bit-pattern
+ of those arguments.
+\end_layout
+
+\begin_layout Description
+bitwise_and (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "bitwise\\_and"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Each bit in
+\begin_inset Formula $y$
+\end_inset
+
+ is the result of a bit-wise 'and' operation on the corresponding bits in
+
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1&x2
+\family default
+ for arrays.
+
+\end_layout
+
+\begin_layout Description
+bitwise_or (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "bitwise\\_or"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Each bit in
+\begin_inset Formula $y$
+\end_inset
+
+ is the result of a bit-wise 'or' operation on the corresponding bits in
+
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1|x2
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+bitwise_xor (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "bitwise\\_xor"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Each bit in
+\begin_inset Formula $y$
+\end_inset
+
+ is the result of a bit-wise 'xor' operation on the corresponding bits in
+
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ An xor operation sets the output to 1 if one and only one of the input
+ bits is 1.
+ Called to implement
+\family typewriter
+x1^x2
+\family default
+ for arrays.
+ Using the bitwise_xor operation and the optional output argument you can
+ swap the values of two integer arrays of equivalent types without using
+ temporary arrays.
+\end_layout
+
+\begin_layout MyCode
+>>> a=arange(10)
+\newline
+>>> b=arange(10,20)
+\newline
+>>> bitwise_xor(a,b,a); bitwise_xor(a,b,b);
+\newline
+>>
+> bitwise_xor(a,b,a)
+\newline
+array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
+\newline
+>>> print
+ a; print b
+\newline
+[10 11 12 13 14 15 16 17 18 19]
+\newline
+[0 1 2 3 4 5 6 7 8 9]
+\end_layout
+
+\begin_layout Description
+invert (
+\begin_inset Formula $x$
+\end_inset
+
+, [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "invert"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Each bit in
+\begin_inset Formula $y$
+\end_inset
+
+ is the opposite of the corresponding bit in
+\begin_inset Formula $x$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+~x
+\family default
+ for arrays.
+\end_layout
+
+\begin_layout Description
+left_shift (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "left\\_shift"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Shifts the bits of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ to the left by
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1<<x2
+\family default
+ for arrays.
+ Provided there is no overflow, the result is equal to
+\begin_inset Formula $y=x_{1}2^{x_{2}}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+right_shift (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "right\\_shift"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Shifts the bits of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ to the right by
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ Called to implement
+\family typewriter
+x1>>x2
+\family default
+ for arrays.
+ Absent overflow, the result is equal to
+\begin_inset Formula $y=x_{1}2^{-x_{2}}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Subsection
+Comparison functions
+\end_layout
+
+\begin_layout Standard
+All of these functions (except maximum, minimum, and sign) return Boolean
+ arrays.
+
+\end_layout
+
+\begin_layout Description
+greater (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "greater"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+greater_equal (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "greater\\_equal"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+less (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "less"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+less_equal (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "less\\_equal"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+not_equal (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "not\\_equal"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+equal (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "equal"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions are called to implement
+\family typewriter
+x1>x2
+\family default
+,
+\family typewriter
+x1>=x2
+\family default
+,
+\family typewriter
+x1<x2
+\family default
+,
+\family typewriter
+x1<=x2
+\family default
+,
+\family typewriter
+x1!=x2
+\family default
+ (or
+\family typewriter
+x1<>x2
+\family default
+), and
+\family typewriter
+x1==x2
+\family default
+, respectively, for arrays.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The fact that these functions return Boolean arrays make them very useful
+ in combination with advanced array indexing.
+ Thus, for example, arr[arr>10] = 10 clips large values to 10.
+ Used in conjunction with bitwise operators quite complicated expressions
+ are possible.
+ For example, arr[~((arr<10)&(arr>5))] = 0 clips all values outside of the
+ range
+\begin_inset Formula $\left(5,10\right)$
+\end_inset
+
+ to 0.
+
+\end_layout
+
+\begin_layout Warning
+Do not use the Python keywords
+\family typewriter
+and
+\family default
+ and
+\family typewriter
+or
+\family default
+ to combine logical array expressions.
+ These keywords will test the truth value of the entire array (not element-by-el
+ement as you might expect).
+ Use the bitwise operators: & and | instead.
+\end_layout
+
+\begin_layout Description
+logical_and (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "logical\\_and"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output is the truth value of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+
+\series bold
+and
+\series default
+
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ Numbers equal to 0 are considered False.
+ Nonzero numbers are True.
+\end_layout
+
+\begin_layout Description
+logical_or (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "logical\\_or"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output,
+\begin_inset Formula $y$
+\end_inset
+
+, is the truth value of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+
+\series bold
+or
+\begin_inset Formula $x_{2}$
+\end_inset
+
+
+\series default
+ .
+\end_layout
+
+\begin_layout Description
+logical_xor (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "logical\\_xor"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output,
+\begin_inset Formula $y$
+\end_inset
+
+, is the truth value of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+
+\series bold
+xor
+\begin_inset Formula $x_{2}$
+\end_inset
+
+
+\series default
+, which is the same as (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and not
+\begin_inset Formula $x_{2}$
+\end_inset
+
+) or (not
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Description
+logical_not (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "logical\\_not"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output,
+\begin_inset Formula $y$
+\end_inset
+
+ is the truth value of
+\series bold
+not
+\series default
+
+\begin_inset Formula $x$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Warning
+The Bitwise operators (& and |) are the proper way to combine element-by-element
+ array comparisons.
+ Be sure to understand the operator precedence: (a>2) & (a<5) is the proper
+ syntax because a>2 & a<5 will result in an error due to the fact that 2
+ & a is evaluated first.
+\end_layout
+
+\begin_layout Description
+maximum (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "maximum"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output,
+\begin_inset Formula $y$
+\end_inset
+
+, is the larger of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout MyCode
+>>> maximum([1,0,5,10],[3,2,4,5])
+\newline
+array([ 3, 2, 5, 10])
+\newline
+>>> max([1,0,5,10],[3,2,
+4,5])
+\newline
+[3, 2, 4, 5]
+\end_layout
+
+\begin_layout Tip
+The Python function max() will find the maximum over a one-dimensional array,
+ but it will do so using a slower sequence interface.
+ The reduce method of the maximum ufunc is much faster.
+ Also, the max() method will not give answers you might expect for arrays
+ with greater than one dimension.
+ The reduce method of minimum also allows you to compute a total minimum
+ over an array.
+\end_layout
+
+\begin_layout Description
+minimum (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "minimum"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The output,
+\begin_inset Formula $y$
+\end_inset
+
+, is the smaller of
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout MyCode
+>>> minimum([1,0,5,10],[3,2,4,5])
+\newline
+array([1, 0, 4, 5])
+\newline
+>>> min([1,0,5,10],[3,2,4,5]
+)
+\newline
+[1, 0, 5, 10]
+\end_layout
+
+\begin_layout Warning
+the behavior of maximum(a,b) is than that of max(a,b).
+ As a ufunc, maximum(a,b) performs an element-by-element comparison of a
+ and b and chooses each element of the result according to which element
+ in the two arrays is larger.
+ In contrast, max(a,b) treats the objects a and b as a whole, looks at the
+ (total) truth value of a>b and uses it to return either a or b (as a whole).
+ A similar difference exists between minimum(a,b) and min(a,b).
+
+\end_layout
+
+\begin_layout Subsection
+Floating functions
+\end_layout
+
+\begin_layout Standard
+Recall that all of these functions work element-by-element over an array,
+ returning an array output.
+ The description details only a single operation.
+\end_layout
+
+\begin_layout Description
+isreal (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "isreal"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x$
+\end_inset
+
+ has an imaginary part that is 0.
+\end_layout
+
+\begin_layout Description
+iscomplex (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "iscomplex"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x$
+\end_inset
+
+ has an imaginary part that is non-zero.
+
+\end_layout
+
+\begin_layout Description
+isfinite (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "isfinite"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x$
+\end_inset
+
+ is a finite floating point number (not a NaN or an Inf).
+
+\end_layout
+
+\begin_layout Description
+isinf (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "isinf"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x$
+\end_inset
+
+ is
+\begin_inset Formula $\pm\infty$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+isnan (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "isnan"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if
+\begin_inset Formula $x$
+\end_inset
+
+ is Not-a-Number.
+ This represents invalid results.
+ When a NaN is created, the invalid flag is set.
+ If you set the error mode of invalid to 'warn', 'raise', or 'call', then
+ the appropriate action will be performed on NaN creation.
+
+\end_layout
+
+\begin_layout Description
+signbit (
+\begin_inset Formula $x$
+\end_inset
+
+)
+\begin_inset LatexCommand index
+name "signbit"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True where the sign bit of the floating point number is set.
+ This should correspond to
+\begin_inset Formula $x>0$
+\end_inset
+
+ when
+\begin_inset Formula $x$
+\end_inset
+
+ is a finite number.
+ When,
+\begin_inset Formula $x$
+\end_inset
+
+ is NaN or infinite, then this tests the actual signbit.
+
+\end_layout
+
+\begin_layout Description
+modf (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y_{1}$
+\end_inset
+
+,
+\begin_inset Formula $y_{2}$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "modf"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Breaks up the floating point value
+\begin_inset Formula $x$
+\end_inset
+
+ into its fractional,
+\begin_inset Formula $y_{1}$
+\end_inset
+
+, and integral,
+\begin_inset Formula $y_{2}$
+\end_inset
+
+, parts.
+ Thus,
+\begin_inset Formula $x=y_{1}+y_{2}$
+\end_inset
+
+ with
+\family typewriter
+floor(y2)==y2
+\family default
+.
+
+\end_layout
+
+\begin_layout Description
+ldexp (
+\begin_inset Formula $x$
+\end_inset
+
+,
+\begin_inset Formula $n$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "ldexp"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Fast multiply of a floating point number by an integral power of 2:
+\begin_inset Formula $y=2^{n}x.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+frexp (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+,
+\begin_inset Formula $n$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "frexp"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Breaks up the floating point value
+\begin_inset Formula $x$
+\end_inset
+
+ into a normalized fraction,
+\begin_inset Formula $y$
+\end_inset
+
+ and an exponent,
+\begin_inset Formula $n$
+\end_inset
+
+ which corresponds to how the value is represented in the computer.
+ The results are such that
+\begin_inset Formula $x=y2^{n}.$
+\end_inset
+
+ Effectively, the inverse of ldexp.
+
+\end_layout
+
+\begin_layout Description
+fmod (
+\begin_inset Formula $x_{1}$
+\end_inset
+
+,
+\begin_inset Formula $x_{2}$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+])
+\begin_inset LatexCommand index
+name "fmod"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Computes the remainder of dividing
+\begin_inset Formula $x_{1}$
+\end_inset
+
+ by
+\begin_inset Formula $x_{2}$
+\end_inset
+
+.
+ The result,
+\begin_inset Formula $y$
+\end_inset
+
+, is
+\begin_inset Formula $x_{1}-nx_{2}$
+\end_inset
+
+ where
+\begin_inset Formula $n$
+\end_inset
+
+ is the quotient (rounded towards zero to an integer) of
+\begin_inset Formula $x_{1}/x_{2}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+floor (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+ ])
+\begin_inset LatexCommand index
+name "floor"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return
+\begin_inset Formula $y=\left\lfloor x\right\rfloor $
+\end_inset
+
+ where
+\begin_inset Formula $y$
+\end_inset
+
+ is the nearest integer smaller-than or equal to
+\begin_inset Formula $x.$
+\end_inset
+
+ Thus,
+\begin_inset Formula $ $
+\end_inset
+
+
+\begin_inset Formula $\left\lfloor x\right\rfloor \leq x<\left\lfloor x\right\rfloor +1$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+ceil (
+\begin_inset Formula $x$
+\end_inset
+
+ [,
+\begin_inset Formula $y$
+\end_inset
+
+ ])
+\begin_inset LatexCommand index
+name "ceil"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return
+\begin_inset Formula $y=\left\lceil x\right\rceil $
+\end_inset
+
+ where
+\begin_inset Formula $y$
+\end_inset
+
+ is the nearest integer greater-than or equal to
+\begin_inset Formula $x$
+\end_inset
+
+.
+ Thus,
+\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1.$
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "ufunc|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Basic Modules
+\end_layout
+
+\begin_layout Quotation
+It is the mark of an educated mind to rest satisfied with the degree of
+ precision which the nature of the subject admits and not to seek exactness
+ where only an approximation is possible.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Aristotle
+\end_layout
+
+\begin_layout Quotation
+"Oh no.
+ We're in the hands of engineers!"
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Malcolm, Ian in 'Jurassic Park'
+\end_layout
+
+\begin_layout Standard
+The NumPy distribution contains some basic functionality equivalent to what
+ was available in the Numeric packages previously.
+ This section documents the new interfaces.
+ These are sub-packages of the NumPy namespace.
+ The linalg and fft capabilities are useful but limited.
+ You should install the full SciPy package to access more functionality.
+ The numpy.dual module contains functions that are defined in both SciPy
+ and NumPy.
+ If SciPy defines func, then numpy.dual.func will point to the SciPy version,
+ otherwise it will point to the NumPy version.
+ It must be imported specifically to be used.
+ Table
+\begin_inset LatexCommand ref
+reference "cap:Functions-in-numpy.dual"
+
+\end_inset
+
+ shows the functions defined in numpy.dual that are in both NumPy and SciPy.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Standard
+\begin_inset Caption
+
+\begin_layout Standard
+\begin_inset LatexCommand label
+name "cap:Functions-in-numpy.dual"
+
+\end_inset
+
+Functions in numpy.dual (both in NumPy and SciPy)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features>
+<column alignment="center" valignment="top" leftline="true" width="0">
+<column alignment="center" valignment="middle" leftline="true" rightline="true" width="55text%">
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Family
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Functions
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Fourier Transforms
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+fft, ifft, fft2, ifft2, fftn, ifftn
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Linear Algebra
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+norm, det, inv, pinv, solve, eig, eigh, eigvals, eigvalsh, lstsq, cholesky,
+ svd
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row topline="true" bottomline="true">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+Special Functions
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Standard
+i0
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Linear Algebra (
+\family typewriter
+linalg
+\family default
+)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "linalg|("
+
+\end_inset
+
+These functions are in the numpy.linalg sub-package.
+\end_layout
+
+\begin_layout Description
+inv (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the (matrix) inverse of the 2-d array A.
+ The result, X, is such that dot(A,X) is equal to eye(*A.shape) (to within
+ machine precision).
+
+\end_layout
+
+\begin_layout Description
+solve (A,b)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Find the solution to the linear equation
+\begin_inset Formula $\mathbf{Ax}=\mathbf{b}$
+\end_inset
+
+, where
+\begin_inset Formula $A$
+\end_inset
+
+ is a 2-d array and
+\begin_inset Formula $b$
+\end_inset
+
+ is a 1-d or 2-d array.
+
+\end_layout
+
+\begin_layout Description
+tensorsolve (A, b, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Find the solution,
+\begin_inset Formula $x_{kl}$
+\end_inset
+
+, to the multi-index linear equation
+\begin_inset Formula \[
+\sum_{kl}A_{ijkl}x_{kl}=b_{ij}.\]
+
+\end_inset
+
+ The axes argument specifies which dimensions of
+\begin_inset Formula $A$
+\end_inset
+
+ are summed over.
+ If it is None, then the last A.ndim - b.ndim dimensions are summed over.
+ The result, therefore, has dimension x.ndim = A.ndim-b.ndim.
+
+\end_layout
+
+\begin_layout Description
+tensorinv (A, ind=2)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Find the tensor inverse of
+\begin_inset Formula $A$
+\end_inset
+
+, defined to be the tensor such that tensordot (Ainv, A) is an identity
+ operator.
+
+\end_layout
+
+\begin_layout Description
+cholesky (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return,
+\begin_inset Formula $\mathbf{L}$
+\end_inset
+
+, the Cholesky decomposition of
+\begin_inset Formula $\mathbf{A}$
+\end_inset
+
+.
+ Cholesky decomposition is applicable to a Hermitian, positive definite
+ matrices.
+ When
+\begin_inset Formula $\mathbf{A}=\mathbf{A}^{H}$
+\end_inset
+
+ and
+\begin_inset Formula $\mathbf{x}^{H}\mathbf{Ax}\geq0$
+\end_inset
+
+ for all
+\begin_inset Formula $\mathbf{x}$
+\end_inset
+
+, then decompositions of
+\begin_inset Formula $\mathbf{A}$
+\end_inset
+
+ can be found so that
+\begin_inset Formula $\mathbf{A}=\mathbf{LL}^{H}$
+\end_inset
+
+, where
+\begin_inset Formula $\mathbf{L}$
+\end_inset
+
+ is lower-triangular.
+
+\end_layout
+
+\begin_layout Description
+eigvals (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return all solutions (
+\begin_inset Formula $\lambda$
+\end_inset
+
+) to the equation
+\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+eig (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return all solutions
+\begin_inset Formula $\left(\lambda,\mathbf{x}\right)$
+\end_inset
+
+ to the equation
+\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
+\end_inset
+
+.
+ The first element of the return tuple contains all the eigenvalues.
+ The second element of the return tuple contains the eigenvectors in the
+ columns (x[:,i] is the ith eigenvector).
+\end_layout
+
+\begin_layout Description
+eigvalsh (U)
+\end_layout
+
+\begin_layout Description
+eigh (U)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ These functions are identical to eigvals and eig except they only work
+ with Hermitian matrices where
+\begin_inset Formula $\mathbf{U}^{H}=\mathbf{U}$
+\end_inset
+
+ (only the lower-triangular part of the array is used).
+\end_layout
+
+\begin_layout Description
+svd (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the singular value decomposition of the 2-d array
+\begin_inset Formula $\mathbf{A}$
+\end_inset
+
+.
+ Every
+\begin_inset Formula $m\times n$
+\end_inset
+
+ matrix can be decomposed into a pair of unitary matrices,
+\begin_inset Formula $\mathbf{U}=\mathbf{U}^{H}$
+\end_inset
+
+ (
+\begin_inset Formula $m\times m$
+\end_inset
+
+) and
+\begin_inset Formula $\mathbf{V}=\mathbf{V}^{H}$
+\end_inset
+
+ (
+\begin_inset Formula $n\times n$
+\end_inset
+
+) and an
+\begin_inset Formula $m\times n$
+\end_inset
+
+
+\begin_inset Quotes eld
+\end_inset
+
+diagonal
+\begin_inset Quotes erd
+\end_inset
+
+ matrix
+\begin_inset Formula $\boldsymbol{\Sigma}$
+\end_inset
+
+, such that
+\begin_inset Formula $\mathbf{A}=\mathbf{U\boldsymbol{\Sigma}}\mathbf{V}^{H}$
+\end_inset
+
+.
+ The only non-zero portion of
+\begin_inset Formula $\boldsymbol{\Sigma}$
+\end_inset
+
+ is the upper
+\begin_inset Formula $r\times r$
+\end_inset
+
+ block where
+\begin_inset Formula $r=\min\left(m,n\right)$
+\end_inset
+
+.
+ The svd function returns three arrays as a tuple: (
+\begin_inset Formula $\mathbf{U}$
+\end_inset
+
+,
+\begin_inset Formula $\boldsymbol{\sigma}$
+\end_inset
+
+,
+\begin_inset Formula $\mathbf{V}^{H}$
+\end_inset
+
+).
+ The singular values are returned in the 1-d array
+\begin_inset Formula $\boldsymbol{\sigma}$
+\end_inset
+
+.
+ If needed, the array
+\begin_inset Formula $\boldsymbol{\Sigma}$
+\end_inset
+
+ can be found (if really needed) using the command diag(
+\begin_inset Formula $\boldsymbol{\sigma}$
+\end_inset
+
+) which creates the
+\begin_inset Formula $r\times r$
+\end_inset
+
+ diagonal block and then inserting this into a zeros matrix:
+\end_layout
+
+\begin_layout MyCode
+>>> A = random.rand(3,5)
+\newline
+>>> from numpy.dual import svd; U,s,Vh = svd(A)
+\newline
+>>>
+ r=min(*A.shape); Sig = zeros_like(A);
+\newline
+>>> Sig[:r,:r] = diag(s); print Sig
+\newline
+[[
+ 2.1634 0.
+ 0.
+ 0.
+ 0.
+ ]
+\newline
+ [ 0.
+ 0.7076 0.
+ 0.
+ 0.
+ ]
+\newline
+ [ 0.
+ 0.
+ 0.2098 0.
+ 0.
+ ]]
+\end_layout
+
+\begin_layout Description
+pinv (A, rcond=
+\begin_inset Formula $10^{-10}$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the generalized, pseudo inverse, of
+\begin_inset Formula $A$
+\end_inset
+
+.
+ For invertible matrices, this is the same as the inverse.
+
+\end_layout
+
+\begin_layout Description
+det (A)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the determinant of the array.
+ The determinant of an array is the product of its singular values.
+
+\end_layout
+
+\begin_layout Description
+lstsq (A, b, rcond=
+\begin_inset Formula $10^{-10}$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return (x, resids, rank, s) where x minimizes resids=
+\begin_inset Formula $\left\Vert \mathbf{Ax}-\mathbf{b}\right\Vert _{2}$
+\end_inset
+
+.
+ The output rank is the rank of A and s is the singular values of a in descendin
+g order.
+ Singular values less than s[0]*rcond are treated as 0.
+ If the rank of A is less than the number of columns of A or greater than
+ the number of rows, resids will be returned as an empty array.
+\begin_inset LatexCommand index
+name "linalg|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Discrete Fourier Transforms (
+\family typewriter
+fft
+\family default
+)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "fft|("
+
+\end_inset
+
+All of the algorithms here are most efficient if the length of the data
+ is a power of 2 (or decomposable into low prime factors).
+
+\end_layout
+
+\begin_layout Description
+fft (x, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return, X, the N-point Discrete Fourier Transform (DFT) of x along the
+ given axis using a fast algorithm.
+ If N is larger than x.shape[axis], then x will be zero-padded.
+ If N is smaller than x.shape[axis], then the first N items will be used.
+ The result is computed for
+\begin_inset Formula $k=0\ldots n-1$
+\end_inset
+
+ from the formula:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+X\left[k\right]=\sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi km}{n}\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Tip
+The fft returns values for
+\begin_inset Formula $k=0\ldots N-1$
+\end_inset
+
+.
+ Because
+\begin_inset Formula $X\left[N-k\right]=X[-k]$
+\end_inset
+
+ in the FFT formula, larger values of k correspond also to negative frequencies.
+\end_layout
+
+\begin_layout Description
+ifft (X, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the inverse of the fft so that (ifft(fft(a)) == a within numerical
+ precision.
+ The order of frequencies must be the same as returned by fft.
+ The result is computed (using a fast algorithm) for
+\begin_inset Formula $m=0\ldots n-1$
+\end_inset
+
+ from the formula:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+x\left[m\right]=\frac{1}{n}\sum_{k=0}^{n-1}X\left[k\right]\exp\left(j\frac{2\pi km}{n}\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Sometimes having the
+\begin_inset Quotes eld
+\end_inset
+
+negative
+\begin_inset Quotes erd
+\end_inset
+
+ frequencies at the end of the output returned by fft can be a little confusing.
+ There are two ways to deal with this confusion.
+ In my opinion, the most useful way is to get a collection of DFT sample
+ frequencies and use them to keep track of where each frequency is.
+ The function
+\family typewriter
+fftfreq
+\family default
+ provides these sample frequencies.
+ Making an x-y plot, where the sample frequencies are along the
+\begin_inset Quotes eld
+\end_inset
+
+x
+\begin_inset Quotes erd
+\end_inset
+
+-axis and the result of the DFT is along the
+\begin_inset Quotes eld
+\end_inset
+
+y
+\begin_inset Quotes erd
+\end_inset
+
+-axis provides a useful visualization with the zero-frequency at the center
+ of the plot.
+ The advantage of this approach is that your data is still in proper order
+ for using the
+\family typewriter
+ifft
+\family default
+ function.
+ Some people, however, prefer to simply swap one-half of the output with
+ the other.
+ This is exactly what the function
+\family typewriter
+fftshift
+\family default
+ does.
+ Of course, now the data is not in the proper order for the ifft function,
+ but to each his own.
+
+\end_layout
+
+\begin_layout Standard
+The reason that the
+\begin_inset Quotes eld
+\end_inset
+
+negative
+\begin_inset Quotes erd
+\end_inset
+
+ frequencies are in the upper part of the return signal was given in the
+ description of the DFT.
+ The reason is that the output of the DFT is just one period of a periodic
+ function (with period
+\begin_inset Formula $n$
+\end_inset
+
+).
+ The traditional output of the FFT algorithm is to provide the portion of
+ the function from from
+\begin_inset Formula $k=0$
+\end_inset
+
+ to
+\begin_inset Formula $k=n-1$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Description
+fftshift (x, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Shift zero-frequency component to the center of the spectrum.
+ This function swaps half-spaces for all axes listed (defaults to all of
+ them).
+
+\end_layout
+
+\begin_layout Description
+ifftshift (x, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Reverse the effect of the fftshift operation.
+ Thus, it takes zero-centered data and shifts it into the correct order
+ for the ifft operation.
+\end_layout
+
+\begin_layout Description
+fftfreq (n, d=1.0)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Provide the DFT sample frequencies.
+ The returned float array contains the frequency bins in the order returned
+ from the fft function.
+ If given,
+\begin_inset Formula $d$
+\end_inset
+
+ represents the sample-spacing.
+ The units on the frequency bins are cycles / unit.
+ For example, the following example computes the output frequencies (in
+ Hz) of the fft of
+\begin_inset Formula $256$
+\end_inset
+
+ samples of a voice signal sampled at 20000Hz.
+\end_layout
+
+\begin_layout MyCode
+>>> from numpy.fft import fftfreq; f=fftfreq(256,d=1./20e3)
+\newline
+>>> print f[0],
+ f[1], f[2], f[128]
+\newline
+0.0 78.125 156.25 -10000.0
+\end_layout
+
+\begin_layout Description
+fft2 (x, s=None, axes=(-2,-1))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the two-dimensional fft of the array x for each 2-d array formed
+ by axes.
+ The 2-d fft is computed as
+\begin_inset Formula \[
+X\left[k_{0},k_{1}\right]=\sum_{m_{0}=0}^{s[0]-1}\sum_{m_{1}=0}^{s[1]-1}x\left[m_{0},m_{1}\right]\exp\left(-j\frac{2\pi k_{0}m_{0}}{s[0]}\right)\exp\left[-j\frac{2\pi k_{1}m_{1}}{s\left[1\right]}\right]\]
+
+\end_inset
+
+ and can be realized by repeated application of the 1-d fft (first over
+ the axes[0] and then over axes[1]).
+ In other-words fft2(x,s,axes) is equivalent to fft(fft(x, s[0], axes[0]),
+ s[1], axes[1]).
+ The 2-d fft is returned for
+\begin_inset Formula $k_{0}=0\ldots s[0]-1$
+\end_inset
+
+ and
+\begin_inset Formula $k_{1}=0\ldots s[1]-1.$
+\end_inset
+
+ Symmetry (
+\begin_inset Formula $X\left[s[0]-k_{0},s[1]-k_{1}\right]=X[-k_{0},-k_{1}]$
+\end_inset
+
+) ensures that higher values of
+\begin_inset Formula $k_{i}$
+\end_inset
+
+ correspond to negative frequencies.
+
+\end_layout
+
+\begin_layout Description
+ifft2 (X, s=None, axes=(-2,-1))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the inverse of the two-dimension fft.
+ Thus, ifft2(fft2(x)) == x to within numerical precision.
+ Note that the
+\begin_inset Quotes eld
+\end_inset
+
+negative frequencies
+\begin_inset Quotes erd
+\end_inset
+
+ must be
+\end_layout
+
+\begin_layout Description
+fftn (x, s=None, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional fft of x.
+ If s is not given, then if axes is given, then
+\begin_inset Formula $N$
+\end_inset
+
+=len(axes), otherwise
+\begin_inset Formula $N$
+\end_inset
+
+=x.ndim.
+ If s is given, then
+\begin_inset Formula $N$
+\end_inset
+
+=len(s).
+ Results are computed using a similar formula as for the 1- and 2-d FFT
+ with
+\begin_inset Formula $N$
+\end_inset
+
+ summations.
+
+\end_layout
+
+\begin_layout Description
+ifftn (X, s=None, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional inverse fft of
+\begin_inset Formula $X$
+\end_inset
+
+.
+ Note that ifftn(fftn(x)) == x to within machine precision.
+
+\end_layout
+
+\begin_layout Standard
+The Discrete Fourier transform returns complex-valued data (even for real-valued
+ input).
+ If the data was originally real-valued, then much of the output of the
+ full DFT is redundant.
+ Notice that if
+\begin_inset Formula $x\left[m\right]$
+\end_inset
+
+ is real, then
+\begin_inset Formula \begin{eqnarray*}
+X\left[n-k\right] & = & \sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi\left(n-k\right)m}{n}\right)\\
+ & = & \left[\sum_{m=0}^{n-1}x\left[m\right]\exp\left(-j\frac{2\pi km}{n}\right)\right]^{*}\\
+ & = & X^{*}\left[k\right],\end{eqnarray*}
+
+\end_inset
+
+where
+\begin_inset Formula $a^{*}$
+\end_inset
+
+ denotes the complex-conjugate of
+\begin_inset Formula $a$
+\end_inset
+
+.
+ So, the upper half of the fft output (the negative frequencies) is determined
+ exactly by the lower half of the output when the input is purely real.
+ This kind of symmetry is called Hermitian symmetry.
+ The real-valued Fourier transforms described next take advantage of Hermitian
+ symmetry to compute only the unique outputs more quickly.
+
+\end_layout
+
+\begin_layout Standard
+The symmetry in higher dimensions is always about the origin.
+ If
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of dimensions, then:
+\begin_inset Formula \[
+X[n_{1}-k_{1},n_{2}-k_{2},\ldots n_{N}-k_{N}]=X^{*}\left[k_{1},k_{2},\ldots,k_{N}\right].\]
+
+\end_inset
+
+Thus, the data-savings remains constant at about 1/2 for higher dimensions
+ as well.
+
+\end_layout
+
+\begin_layout Description
+rfft (x, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the first n//2+1 points of the
+\begin_inset Formula $n$
+\end_inset
+
+-point discrete Fourier transform of the real valued data along the given
+ axis.
+ The returned array will be just the first half of the
+\family typewriter
+fft
+\family default
+, corresponding to positive frequencies: rfft(x) == fft(x)[:n//2+1]
+\end_layout
+
+\begin_layout Description
+irfft (X, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the inverse
+\begin_inset Formula $n$
+\end_inset
+
+-point discrete Fourier transform along the given axis using the first n//2+1
+ points.
+ To within numerical precision, irfft(rfft(x))==x.
+
+\end_layout
+
+\begin_layout Description
+rfft2 (x, s=None, axes=(-2, -1))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute only the first half-plane of the two-dimensional discrete Fourier
+ transform corresponding to unique values.
+ s[0] and
+\begin_inset Formula $s[1]$
+\end_inset
+
+-point DFTs will be computed along axes[0] and axes[1] dimensions, respectively.
+ Requires a real array.
+ If
+\begin_inset Formula $s$
+\end_inset
+
+ is None it defaults to the shape of
+\begin_inset Formula $x.$
+\end_inset
+
+ The real fft will be computed along the last axis specified in axes while
+ a full fft will be computed in the other dimension.
+\end_layout
+
+\begin_layout Description
+irfft2 (X, s=None, axes=(-2, -1))
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the inverse of the 2-d DFT using only the first quadrant.
+ Returns a real array such that to within numerical precision irfft2(rfft2(x))==
+x.
+\end_layout
+
+\begin_layout Description
+rfftn (x, s=None, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute only the unique part of the
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional DFT from a real-valued array.
+ If
+\begin_inset Formula $s$
+\end_inset
+
+ is None it defaults to the shape of x.
+ If axes is not given it defaults to all the axes (-n,
+\begin_inset Formula $\ldots$
+\end_inset
+
+, -1).
+ The length of axes provides the dimensionality of the DFT.
+ The unique part of the real
+\begin_inset Formula $N$
+\end_inset
+
+-dimensional DFT is obtained by slicing the full fft along the last axis
+ specified and taking n//2+1 slices.
+ rfftn(x) == fft(x)[sliceobj] where sliceobj[axes[-1]] = slice(None,s[-1]//2+1,N
+one).
+\end_layout
+
+\begin_layout Description
+irfftn (X, s=None, axes=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Compute the inverse DFT from the unique portions of the N-dimensional DFT
+ provided by
+\family typewriter
+rfftn
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Occasionally, the situation may arise where you have complex-valued data
+ with Hermitian symmetry (or real-valued symmetric data).
+ This ensures that the Fourier transform will be real.
+ The two functions below can calculate it without wasting extra space for
+ the zero-valued imaginary entries of the Discrete Fourier transform, or
+ the entire signal.
+\end_layout
+
+\begin_layout Description
+hfft (x, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Calculate the
+\begin_inset Formula $n$
+\end_inset
+
+-point real-valued Fourier transform from (the first half of Hermitian-symmetric
+ data, x.
+
+\end_layout
+
+\begin_layout Description
+ihfft (X, n=None, axis=-1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return (the first half-of) Hermitian-symmetric data from the real-valued
+ Fourier transform, X.
+\begin_inset LatexCommand index
+name "fft|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Random Numbers (
+\family typewriter
+random
+\family default
+)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "random|("
+
+\end_inset
+
+The random number capabilities surpass those that were available in Numeric.
+ The random number facilities were generously contributed by Robert Kern,
+ who has been a dedicated and patient help to many mailing list questioners.
+ Robert built the random package using Pyrex to build on top of his own
+ code as well as that of randomkit by Jean-Sebastien Roy as well as code
+ by Ivan Frohne.
+ The fundamental random number generator is the Mersenne Twister based on
+ code written by Makoto Matsumoto and Takuji Nishimura (and modified for
+ Python by Raymond Hettinger).
+ Random numbers from discrete and continuous distributions are available,
+ as well as some useful random-number-related utilities.
+ Many of the random number generators are based on algorithms published
+ by Luc Devroye in
+\begin_inset Quotes eld
+\end_inset
+
+Non-Uniform Random Variate Generation
+\begin_inset Quotes erd
+\end_inset
+
+ available electronically at
+\begin_inset LatexCommand htmlurl
+target "http://cgm.cs.mcgill.ca/~luc/rnbookindex.html"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Each of the discrete and continuous random number generators take a size
+ keyword.
+ If this is None (default), then the size is determined from the additional
+ inputs (using ufunc-like broadcasting).
+ If no additional inputs are needed, or if these additional inputs are scalars,
+ then a single number is generated from the selected distribution.
+ If size is an integer, then a 1-d array of that size is generated filled
+ with random numbers from the selected distribution.
+ Finally, if size is a tuple, then an array of that shape is returned filled
+ with random numbers.
+
+\end_layout
+
+\begin_layout Standard
+Many distributions take additional inputs as parameters.
+ These additional inputs must be broadcastable to each other (and to the
+ size parameter if it is not None).
+ The broadcasting behavior of the additional inputs is ufunc-like.
+
+\end_layout
+
+\begin_layout Subsection
+Discrete Distributions
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "random!discrete|("
+
+\end_inset
+
+Discrete random numbers take on only a countable number of values (typically
+ integers).
+ Each distribution has associated with it a probability mass function (pmf),
+
+\begin_inset Formula $p_{m}\left(k;\cdot\right),$
+\end_inset
+
+ that is defined as the probability that the returned random number is
+\begin_inset Formula $k$
+\end_inset
+
+.
+ The arguments after
+\begin_inset Formula $k$
+\end_inset
+
+ represent possible parameters to the distribution.
+ Thus, let
+\begin_inset Formula $X\left(\cdot\right)$
+\end_inset
+
+ represent the random number generator for a particular distribution.
+ Then,
+\begin_inset Formula \[
+p_{m}\left(k;\cdot\right)=\textrm{Probability}\left\{ X\left(\cdot\right)=k\right\} .\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+It will be useful to define the discrete indicator function,
+\begin_inset Formula $I_{S}\left(k\right),$
+\end_inset
+
+ where
+\begin_inset Formula $S$
+\end_inset
+
+ is a set of integers (often represented by an interval).
+
+\begin_inset Formula $I_{S}\left(k\right)=1$
+\end_inset
+
+ if
+\begin_inset Formula $k\in S$
+\end_inset
+
+, otherwise
+\begin_inset Formula $I_{S}\left(k\right)=0.$
+\end_inset
+
+ This convenient notation isolates the relevance of a particular functional
+ form to a certain range.
+ Also, the formulas below make use of the following definition:
+\begin_inset Formula \[
+\left(\begin{array}{c}
+n\\
+k\end{array}\right)=\frac{n!}{k!\left(n-k\right)!}\]
+
+\end_inset
+
+ where
+\begin_inset Formula $k!=k\cdot\left(k-1\right)\cdot\cdots\cdot2\cdot1.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+binomial (n, p, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This random number models the number of successes in
+\begin_inset Formula $n$
+\end_inset
+
+ independent trials of a random experiment where the probability of success
+ in each experiment is
+\begin_inset Formula $p$
+\end_inset
+
+.
+
+\begin_inset Formula \[
+p_{m}\left(k\right)=\left(\begin{array}{c}
+n\\
+k\end{array}\right)p^{k}\left(1-p\right)^{n-k}I_{\left[0,n\right]}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+geometric (p, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This random number models the number of (independent) attempts required
+ to obtain a success where the probability of success on each attempt is
+
+\begin_inset Formula $p$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+p_{m}\left(k;p\right)=\left(1-p\right)^{k-1}p\, I_{\left[1,\infty\right)}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+hypergeometric (ngood, nbad, nsample, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Imagine a probability theorists favorite urn filled with
+\begin_inset Formula $n_{g}$
+\end_inset
+
+
+\begin_inset Quotes eld
+\end_inset
+
+good
+\begin_inset Quotes erd
+\end_inset
+
+ objects and
+\begin_inset Formula $n_{b}$
+\end_inset
+
+
+\begin_inset Quotes eld
+\end_inset
+
+bad
+\begin_inset Quotes erd
+\end_inset
+
+ objects.
+ In other words there are two types of objects in a jar.
+ The hypergeometric random number models how many
+\begin_inset Quotes eld
+\end_inset
+
+good
+\begin_inset Quotes erd
+\end_inset
+
+ objects will be present when
+\begin_inset Formula $N$
+\end_inset
+
+ items are taken out of the urn without replacement.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+p\left(k;n_{g},n_{b},N\right)=\frac{\left(\begin{array}{c}
+n_{g}\\
+k\end{array}\right)\left(\begin{array}{c}
+n_{b}\\
+N-k\end{array}\right)}{\left(\begin{array}{c}
+n_{g}+n_{b}\\
+N\end{array}\right)}I_{\left[N-n_{b},\textrm{min}\left(n,N\right)\right]}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+logseries (p, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A random number whose pmf with terms proportional to the Taylor series
+ expansion of
+\begin_inset Formula $\log\left(1-p\right)$
+\end_inset
+
+.
+ It has been used in biological studies to model the species abundance distribut
+ion.
+
+\begin_inset Formula \[
+p_{m}\left(k;p\right)=-\frac{p^{k}}{k\log\left(1-p\right)}\, I_{\left[1,\infty\right)}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+multinomial (n, pvals, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This generator produces random vectors of length
+\begin_inset Formula $N$
+\end_inset
+
+ where
+\begin_inset Formula $N=\textrm{len}\left(pvals\right)$
+\end_inset
+
+.
+ The shape of the returned array is always the shape indicated by size +
+ (
+\begin_inset Formula $N,$
+\end_inset
+
+).
+ The multinomial distribution is a generalization of the binomial distribution.
+ This time,
+\begin_inset Formula $n$
+\end_inset
+
+ trials of an experiment are independently repeated but each trial results
+ in
+\begin_inset Formula $N$
+\end_inset
+
+ possible integers
+\begin_inset Formula $k_{1},k_{2},\ldots,k_{N}$
+\end_inset
+
+ with
+\begin_inset Formula $\sum_{i=1}^{N}k_{i}=n.$
+\end_inset
+
+
+\begin_inset Formula \begin{eqnarray*}
+p_{m}\left(k_{1},k_{2},\ldots,k_{N};\cdot\right) & = & \textrm{Probability}\left\{ X\left(\cdot\right)=\left[k_{1},k_{2},\cdots,k_{N}\right]\right\} \\
+ & = & \frac{n!}{k_{1}!k_{2}!\cdots k_{N}!}p_{1}^{k_{1}}p_{2}^{k_{2}}\cdots p_{N}^{k_{N}}\end{eqnarray*}
+
+\end_inset
+
+where
+\begin_inset Formula $pvals=[p_{1},p_{2},\ldots,p_{N}].$
+\end_inset
+
+ It must be true that
+\begin_inset Formula $\sum_{i=1}^{N}p_{i}=1.$
+\end_inset
+
+ Therefore, as long as
+\begin_inset Formula $\sum_{i=1}^{N-1}p_{i}\leq1,$
+\end_inset
+
+ the last entry in
+\begin_inset Formula $pvals$
+\end_inset
+
+ is computed as
+\begin_inset Formula $1-\sum_{i=1}^{N-1}p_{i}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+negative_binomial (n, p, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Models the number of extra independent trials (beyond
+\begin_inset Formula $n$
+\end_inset
+
+) required to accumulate a total of
+\begin_inset Formula $n$
+\end_inset
+
+ successes where the probability of success on each trial is
+\begin_inset Formula $p.$
+\end_inset
+
+ Equivalently, this random number models the number of failures encountered
+ while accumulating
+\begin_inset Formula $n$
+\end_inset
+
+ successes during independent trials of the experiment that succeeds with
+ probability,
+\begin_inset Formula $p$
+\end_inset
+
+.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+p_{m}\left(k;n,p\right)=\left(\begin{array}{c}
+k+n-1\\
+n-1\end{array}\right)p^{n}\left(1-p\right)^{k}\, I_{\left[0,\infty\right)}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+poisson (lam=1.0, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This random number counts the number of successes in
+\begin_inset Formula $n$
+\end_inset
+
+ independent experiments (where the probability of success in each experiment
+ is
+\begin_inset Formula $p$
+\end_inset
+
+) in the limit as
+\begin_inset Formula $n\rightarrow\infty$
+\end_inset
+
+ and
+\begin_inset Formula $p\rightarrow0$
+\end_inset
+
+ gets very small such that
+\begin_inset Formula $\lambda=np\geq0$
+\end_inset
+
+ is a constant.
+ It can be used, for example, to model how many typographical errors are
+ on each page of a book.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+p\left(k;\lambda\right)=e^{-\lambda}\frac{\lambda^{k}}{k!}\, I_{\left[0,\infty\right)}\left(k\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+zipf (a, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The probability mass function of this random number (also called the zeta
+ distribution) is
+\begin_inset Formula \[
+p_{m}\left(k;a\right)=\frac{1}{\zeta\left(a\right)k^{a}}\, I_{\left[1,\infty\right)}\left(k\right),\]
+
+\end_inset
+
+where
+\begin_inset Formula \[
+\zeta\left(a\right)=\sum_{n=1}^{\infty}\frac{1}{n^{a}}\]
+
+\end_inset
+
+is the Riemann zeta function.
+ Zipf distributions have been shown to characterize use of words in a natural
+ language (like English), the popularity of library books, and even the
+ use of the web.
+ The Zipf distribution describes collections that have a few items whose
+ probability of selection is very high, a medium number of items whose probabili
+ty of selection is medium, and a huge number of items whose probability
+ of selection is very low.
+\begin_inset LatexCommand index
+name "random!discrete|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Continuous Distributions
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "random!continuous|("
+
+\end_inset
+
+Continuous random numbers can take on an uncountable number of values.
+ Therefore, the value returned by a continuous distribution is denoted
+\begin_inset Formula $x$
+\end_inset
+
+.
+ Because there is an uncountable number of possibilities for the random
+ number
+\begin_inset Foot
+status open
+
+\begin_layout Standard
+A computer actually always generates a random number from a discrete distributio
+n because there are only a finite set of numbers that can be represented
+ by a computer.
+ However, for continuous random number generators, the resulting random
+ numbers usually approximate the continuous distribution well enough to
+ ignore the subtlety.
+\end_layout
+
+\end_inset
+
+, a continuous distribution is modeled by a probability density function,
+
+\begin_inset Formula $f\left(x;\cdot\right).$
+\end_inset
+
+ To obtain the probability that the random number generated by
+\begin_inset Formula $X\left(\cdot\right)$
+\end_inset
+
+ is in a certain interval, we integrate this density function:
+\begin_inset Formula \[
+\int_{-\infty}^{b}f\left(x\right)dx=\textrm{Probability}\left\{ X\left(\cdot\right)\leq b\right\} .\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+To obtain a probability, we have to integrate
+\begin_inset Formula $f\left(x\right)$
+\end_inset
+
+ which is why it is called a density function.
+ Most continuous distributions are defined by their probability density
+ functions (pdf).
+ Some have basic origins, a few are derived from other distributions, and
+ some are used mainly for modelling unknown distributions.
+
+\end_layout
+
+\begin_layout Standard
+Some of the parameters of the distributions are labeled as location (
+\emph on
+loc
+\emph default
+) and
+\emph on
+scale
+\emph default
+ parameters.
+ These parameters are not shown in the equation for the pdf.
+ because they affect the distribution in a known way.
+ This is due to the fact that if
+\begin_inset Formula $X$
+\end_inset
+
+ is a number drawn from a distribution with pdf
+\begin_inset Formula $f_{X}\left(x\right),$
+\end_inset
+
+ then
+\begin_inset Formula $Y=Sx+L$
+\end_inset
+
+ is a number drawn from a distribution with pdf
+\begin_inset Formula \[
+f_{Y}\left(y\right)=\frac{1}{S}f_{X}\left(\frac{y-L}{S}\right).\]
+
+\end_inset
+
+ Thus, from the standard from provided, the pdf of the actual random numbers
+ generated by fixing the location and scale parameters can be quickly found.
+\end_layout
+
+\begin_layout Standard
+In this section, the indicator function
+\begin_inset Formula $I_{A}\left(x\right)$
+\end_inset
+
+ will be used where
+\begin_inset Formula $A$
+\end_inset
+
+ is a set defined over all the real numbers.
+ For clarity,
+\begin_inset Formula \[
+I_{A}\left(x\right)=\left\{ \begin{array}{cc}
+1 & x\in A,\\
+0 & x\not\in A.\end{array}\right.\]
+
+\end_inset
+
+ Also, the following functions are used in the definitions:
+\begin_inset Formula \begin{eqnarray*}
+\Gamma\left(x\right) & = & \int_{0}^{\infty}t^{x-1}e^{-t}dt=\left(x-1\right)\Gamma\left(x-1\right),\\
+B\left(a,b\right) & = & \frac{\Gamma\left(a\right)\Gamma\left(b\right)}{\Gamma\left(a+b\right)}.\end{eqnarray*}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+beta (
+\begin_inset Formula $a$
+\end_inset
+
+,
+\begin_inset Formula $b$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;a,b\right)=\frac{1}{B\left(a,b\right)}x^{a-1}\left(1-x\right)^{b-1}I_{\left(0,1\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+chisquare (
+\begin_inset Formula $\nu$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If
+\begin_inset Formula $Z_{1},\ldots,Z_{\nu}$
+\end_inset
+
+ are random numbers from standard normal distributions, then
+\begin_inset Formula $W=\sum_{k=1}^{\nu}Z_{k}^{2}$
+\end_inset
+
+ is a random number from the chi-square
+\begin_inset Formula $\left(\chi^{2}\right)$
+\end_inset
+
+ distribution with
+\begin_inset Formula $\nu$
+\end_inset
+
+ degrees of freedom.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;\nu\right)=\frac{1}{2\Gamma\left(\frac{\nu}{2}\right)}\left(\frac{x}{2}\right)^{\nu/2-1}e^{-x/2}I_{\left[0,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+dirichlet (
+\begin_inset Formula $\boldsymbol{\alpha},$
+\end_inset
+
+ size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A vector of random numbers which are drawn from a multivariate Dirichlet
+ distribution.
+ The length of the parameter vector,
+\begin_inset Formula $\boldsymbol{\alpha},$
+\end_inset
+
+ is the length,
+\begin_inset Formula $N$
+\end_inset
+
+, of the random vector.
+ The joint pdf is:
+\end_layout
+
+\begin_layout Description
+\begin_inset Formula \[
+f\left(\mathbf{x},\boldsymbol{\alpha}\right)=\frac{\prod_{i=1}^{N}\Gamma\left(\alpha_{i}\right)}{\Gamma\left(\sum_{i=1}^{N}\alpha_{i}\right)}\prod_{i=1}^{N}x_{i}^{\alpha_{i}-1}.\]
+
+\end_inset
+
+
+\series medium
+
+\end_layout
+
+\begin_layout Description
+exponential (scale=1.0, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+f (
+\begin_inset Formula $\nu_{1}$
+\end_inset
+
+,
+\begin_inset Formula $\nu_{2}$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The distribution of
+\begin_inset Formula $\frac{X_{1}/\nu_{1}}{X_{2}/\nu_{2}}$
+\end_inset
+
+ where
+\begin_inset Formula $X_{i}$
+\end_inset
+
+ is chi-squared with
+\begin_inset Formula $\nu_{i}$
+\end_inset
+
+ degrees of freedom.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;\nu_{1},\nu_{2}\right)=\frac{\nu_{2}^{\nu_{2}/2}\nu_{1}^{\nu_{1}/2}x^{\nu_{1}/2-1}}{\left(\nu_{2}+\nu_{1}x\right)^{\left(\nu_{1}+\nu_{2}\right)/2}B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)}I_{\left[0,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+gamma (
+\begin_inset Formula $a$
+\end_inset
+
+, scale=1.0, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;a\right)=\frac{1}{\Gamma\left(a\right)}x^{a-1}e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+gumbel (loc=0.0, scale=1.0, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A right-skewed extreme value distribution.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=\exp\left[-x-e^{-x}\right].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+laplace (loc=0.0, scale=1.0, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=\frac{1}{2}e^{-\left|x\right|}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+lognormal (
+\begin_inset Formula $\mu$
+\end_inset
+
+=0.0,
+\begin_inset Formula $\sigma$
+\end_inset
+
+=1.0, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;\mu,\sigma\right)=\frac{1}{\sigma x\sqrt{2\pi}}\exp\left[-\frac{1}{2}\left(\frac{\log x-\mu}{\sigma}\right)^{2}\right]I_{\left[0,\infty\right)}\left(x\right),\]
+
+\end_inset
+
+The parameters,
+\begin_inset Formula $\mu$
+\end_inset
+
+ and
+\begin_inset Formula $\sigma$
+\end_inset
+
+ are not the mean and variance of this distribution, but the parameters
+ of the underlying normal distribution.
+ Random numbers from this distribution are generated as
+\begin_inset Formula $e^{\sigma Z+\mu}$
+\end_inset
+
+ where
+\begin_inset Formula $Z$
+\end_inset
+
+ is a standard normal random number.
+
+\end_layout
+
+\begin_layout Description
+logistic (loc=0.0, scale=1.0, size=None)
+\begin_inset Formula \[
+f\left(x\right)=\frac{e^{-x}}{\left[1+e^{-x}\right]^{2}}I_{\left[0,\infty\right)}\left(x\right)\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+multivariate_normal (
+\begin_inset Formula $\mathbf{\boldsymbol{\mu}}$
+\end_inset
+
+,
+\begin_inset Formula $\mathbf{C}$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns a vector of random numbers which are jointly drawn from a multivariate
+ normal distribution.
+ The last-dimension of the output array contains the sample vector, which
+ is of length
+\begin_inset Formula $N=\textrm{len}\left(mean\right).$
+\end_inset
+
+ The covariance matrix must be
+\begin_inset Formula $N\times N$
+\end_inset
+
+.
+ If
+\begin_inset Formula $\boldsymbol{\mu}\equiv mean$
+\end_inset
+
+ and
+\begin_inset Formula $\mathbf{C}=cov$
+\end_inset
+
+, then the joint-pdf representing the returned random vector(s) is
+\begin_inset Formula \[
+f\left(\mathbf{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\left|\mathbf{C}\right|}}\exp\left[-\frac{1}{2}\left(\mathbf{x}-\boldsymbol{\mu}\right)^{T}\mathbf{C}^{-1}\left(\mathbf{x}-\boldsymbol{\mu}\right)\right].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+noncentral_chisquare (
+\begin_inset Formula $\nu$
+\end_inset
+
+,
+\begin_inset Formula $\lambda$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This is the distribution of
+\begin_inset Formula $\sum_{i=1}^{\nu}\left(Z_{i}+\delta_{i}\right)^{2}$
+\end_inset
+
+ where
+\begin_inset Formula $Z_{i}$
+\end_inset
+
+ are independent standard normal random numbers and
+\begin_inset Formula $\delta_{i}$
+\end_inset
+
+ are constants.
+ It is a a generalized Rayleigh-Rice distribution:
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;\nu,\lambda\right)=e^{-\left(\lambda+x\right)/2}\frac{1}{2}\left(\frac{x}{\lambda}\right)^{\left(\nu-2\right)/4}I_{\left(\nu-2\right)/2}\left(\sqrt{\lambda x}\right)I_{\left(0,\infty\right)}\left(x\right),\]
+
+\end_inset
+
+ where
+\begin_inset Formula $I_{\nu}\left(z\right)$
+\end_inset
+
+ (a real-number in the subscript, not an interval) is the modified Bessel
+ Function of the first kind.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+noncentral_f (
+\begin_inset Formula $\nu_{1}$
+\end_inset
+
+,
+\begin_inset Formula $\nu_{2}$
+\end_inset
+
+,
+\begin_inset Formula $\lambda$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The pdf of this distribution is
+\begin_inset Formula \begin{eqnarray*}
+f\left(x;\nu_{1},\nu_{2},\lambda\right) & = & \exp\left[\frac{\lambda}{2}+\frac{\lambda v_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right]\nu_{1}^{\nu_{1}/2}\nu_{2}^{\nu_{2}/2}x^{\nu_{1}/2-1}\\
+ & & \times\left(\nu_{2}+\nu_{1}x\right)^{-\left(\nu_{1}+\nu_{2}\right)/2}\\
+ & & \times\frac{\Gamma\left(\frac{\nu_{1}}{2}\right)\Gamma\left(1+\frac{\nu_{2}}{2}\right)L_{n_{2}/2}^{n_{1}/2-1}\left(-\frac{\lambda\nu_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right)}{B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)\Gamma\left(\frac{\nu_{1}+\nu_{2}}{2}\right)}.\end{eqnarray*}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+normal (loc=0.0, scale=1.0, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The normal, or Gaussian, distribution is the limiting distribution of independe
+nt samples from any sufficiently well-behaved distributions (this is the
+ content of the celebrated central limit theorem).
+ The normal distribution is also the distribution of maximum entropy when
+ the mean and variance alone are fixed.
+ These two facts account for its name as well as the wide variety of situations
+ that can be usefully modelled using the normal distribution.
+ Because it is so widely used, the full pdf with the location
+\begin_inset Formula $\left(\mu\right)$
+\end_inset
+
+ and scale
+\begin_inset Formula $\left(\sigma\right)$
+\end_inset
+
+ parameters is provided:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{\left(x-\mu\right)^{2}}{2\sigma^{2}}\right].\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+pareto (
+\begin_inset Formula $a$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;a\right)=\frac{a}{x^{a+1}}I_{\left[1,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+power (
+\begin_inset Formula $a$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A special case of the beta distribution with
+\begin_inset Formula $b=1.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;a\right)=ax^{a-1}I_{\left[0,1\right]}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+rand (
+\begin_inset Formula $d_{1}$
+\end_inset
+
+,
+\begin_inset Formula $d_{2}$
+\end_inset
+
+,
+\begin_inset Formula $\ldots$
+\end_inset
+
+,
+\begin_inset Formula $d_{n}$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A convenient interface to obtain an array of shape
+\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
+\end_inset
+
+ of uniform random numbers in the interval
+\begin_inset Formula $\left[0,1\right).$
+\end_inset
+
+ Notice the different convention for passing in the shape (as separate arguments
+ instead of a tuple).
+ The standard convention is used in the function numpy.random.random(shape)
+ for which this function is merely a convenient short-hand.
+ If you have a tuple named shape, then rand(*shape) will work correctly.
+\end_layout
+
+\begin_layout Description
+randint (low, high=None, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equally probably random integers in the range
+\begin_inset Formula $low\leq x<high$
+\end_inset
+
+.
+ If
+\begin_inset Formula $high$
+\end_inset
+
+ is None, then the range is
+\begin_inset Formula $0\leq x<low$
+\end_inset
+
+.
+ Similar to random_integers, but check the difference on the bounds.
+\end_layout
+
+\begin_layout Description
+randn (
+\begin_inset Formula $d_{1}$
+\end_inset
+
+,
+\begin_inset Formula $d_{2}$
+\end_inset
+
+,
+\begin_inset Formula $\ldots$
+\end_inset
+
+,
+\begin_inset Formula $d_{n}$
+\end_inset
+
+)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A convenient interface to obtain an array of shape
+\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
+\end_inset
+
+ of standard normal
+\begin_inset Formula $\left(\mu=0,\,\sigma=1\right)$
+\end_inset
+
+ random numbers.
+ Notice the different convention for passing in the shape (as separate arguments
+ intead of a tuple).
+ The standard convention is used in the function numpy.random.standard_normal(shap
+e) for which this function is merely a convenient short-hand.
+ If you have a tuple named shape, then randn(*shape) will work correctly.
+\end_layout
+
+\begin_layout Description
+random_integers (low, high=None, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Equally probably random integers in the range
+\begin_inset Formula $low\leq x\leq high$
+\end_inset
+
+.
+ If high is None, then the range is
+\begin_inset Formula $1\leq x\leq low$
+\end_inset
+
+.
+ Similar to randint, but check the difference on the bounds.
+\end_layout
+
+\begin_layout Description
+rayleigh (scale=1.0, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Rayleigh-distributed random numbers can be obtained as
+\begin_inset Formula $X=\sqrt{Z_{1}^{2}+Z_{2}^{2}}$
+\end_inset
+
+ where
+\begin_inset Formula $Z_{i}$
+\end_inset
+
+ are independent standard normal random numbers.
+ The scale parameter is also the mode of the distribution (the value of
+
+\begin_inset Formula $X$
+\end_inset
+
+ with highest probability).
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=xe^{-x^{2}/2}I_{[0,\infty)}\left(x\right)\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+standard_cauchy (size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A Cauchy distribution is a heavy-tailed distribution with no variance.
+ It's distribution is that of the ratio of two standard normal distributions
+
+\begin_inset Formula $Z_{1}/Z_{2}.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x\right)=\frac{1}{\pi\left(1+x^{2}\right)}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+standard_exponential (size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A standard exponetial random number with scale=1.0.
+ The pdf was given under the description of
+\family typewriter
+random.exponential
+\family default
+.
+\end_layout
+
+\begin_layout Description
+standard_gamma (
+\begin_inset Formula $a$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A standard gamma random number with scale=1.0.
+ The pdf was given under the description of
+\family typewriter
+random.gamma
+\family default
+.
+\end_layout
+
+\begin_layout Description
+standard_normal (size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A zero-mean, unit-variance, normally distributed random number often denoted
+
+\begin_inset Formula $Z.$
+\end_inset
+
+
+\begin_inset Formula \[
+f\left(x\right)=\frac{1}{\sqrt{2\pi}}e^{-x^{2}/2}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+standard_t (
+\begin_inset Formula $\nu$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Often called Student's t distribution, this random number distribution
+ arises in the problem of estimating the mean of normally distributed samples
+ when the sample-size is small.
+ The first parameter,
+\begin_inset Formula $\nu$
+\end_inset
+
+, is the number of degrees of freedom of the distribution.
+
+\begin_inset Formula \[
+f\left(x;\nu\right)\frac{\Gamma\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi\nu}\Gamma\left(\frac{\nu}{2}\right)\left[1+\frac{x^{2}}{\nu}\right]^{\frac{\nu+1}{2}}}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+triangular (left, mode, right, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns random numbers according to a triangularly-shaped density that
+ starts at left, peaks at mode, and ends at right.
+\end_layout
+
+\begin_layout Description
+uniform (low=0.0, high=1.0, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns random numbers that are equally probable over the range
+\begin_inset Formula $\left[low,\, high\right).$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+vonmises (
+\begin_inset Formula $\mu$
+\end_inset
+
+,
+\begin_inset Formula $\kappa$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A continuous distribution that is well suited for circular attributes such
+ as angles, time of day, day of the year, etc.
+ The mean direction is
+\begin_inset Formula $\mu$
+\end_inset
+
+ and concentration (or dispersion) parameter is
+\begin_inset Formula $\kappa.$
+\end_inset
+
+ For small
+\begin_inset Formula $\kappa$
+\end_inset
+
+ the distribution tends towards a uniform distribution over
+\begin_inset Formula $\left[-\pi,\pi\right].$
+\end_inset
+
+ For large
+\begin_inset Formula $\kappa$
+\end_inset
+
+, the distribution tends towards a normal distribution with mean
+\begin_inset Formula $\mu$
+\end_inset
+
+ and variance
+\begin_inset Formula $1/\kappa.$
+\end_inset
+
+
+\begin_inset Formula \[
+f\left(x\right)=\frac{e^{\kappa\cos\left(x-\mu\right)}}{2\pi I_{0}\left(\kappa\right)}I_{\left[-\pi,\pi\right]}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+wald (
+\begin_inset Formula $\mu$
+\end_inset
+
+,
+\begin_inset Formula $\lambda$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This distribution is also called the inverse Gaussian distribution (and
+ the Wald distribution considered as a special case when
+\begin_inset Formula $\mu=\lambda$
+\end_inset
+
+).
+ It can be generated by noticing that if
+\begin_inset Formula $X$
+\end_inset
+
+ is a wald random number then
+\begin_inset Formula $\frac{\lambda\left(X-\mu\right)^{2}}{\mu^{2}X}$
+\end_inset
+
+ is the square of a standard normal random number (i.e.
+ it is chi-square with one degree of freedom).
+ The pdf is
+\begin_inset Formula \[
+f\left(x\right)=\sqrt{\frac{\lambda}{2\pi x^{3}}}e^{-\frac{\lambda\left(x-\mu\right)^{2}}{2\mu^{2}x}}.\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+weibull (
+\begin_inset Formula $a$
+\end_inset
+
+, size=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ An extreme-value distribution:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+f\left(x;c\right)=ax^{a-1}\exp\left(-x^{a}\right)I_{\left(0,\infty\right)}\left(x\right).\]
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Miscellaneous utilities
+\end_layout
+
+\begin_layout Description
+bytes (length)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a string of random bytes of the provided length.
+\end_layout
+
+\begin_layout Description
+get_state ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an object that holds the state of the random number generator (allows
+ you to restart simulations where you left off).
+\end_layout
+
+\begin_layout Description
+set_state (state)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the state of the random number generator.
+ The argument should be the returned object of a previous get_state command.
+\end_layout
+
+\begin_layout Description
+shuffle (sequence)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Randomly permute the items of any sequence.
+ If sequence is an array, then it must be 1-d.
+\end_layout
+
+\begin_layout Description
+permutation (n)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a permutation of the integers from 0 to n-1.
+
+\begin_inset LatexCommand index
+name "random!continuous|)"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "random|)"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Matrix-specific functions (matlib)
+\end_layout
+
+\begin_layout Standard
+This module contains functions that are geared specifically toward matrix
+ objects.
+ In particular it includes the functions
+\series bold
+empty
+\series default
+,
+\series bold
+ones
+\series default
+,
+\series bold
+zeros
+\series default
+,
+\series bold
+identity
+\series default
+,
+\series bold
+eye
+\series default
+,
+\series bold
+rand
+\series default
+, and
+\series bold
+randn
+\series default
+ each of which returns a matrix object by default instead of an ndarray
+ object.
+\end_layout
+
+\begin_layout Section
+Ctypes utiltity functions (ctypeslib)
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "ctypeslib"
+
+\end_inset
+
+This module contains utility functions that make it easier to work with
+ the ctypes module.
+
+\end_layout
+
+\begin_layout Description
+load_library (name, path)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Load a shared library named
+\begin_inset Quotes eld
+\end_inset
+
+name
+\begin_inset Quotes erd
+\end_inset
+
+ (use the full name including any prefix but excluding the extension) located
+ in the directory indicated by path and return a ctypes library object whose
+ attributes are the functions in the library.
+ If ctypes is not available, this function will raise an ImportError.
+ If there is an error loading the library, ctypes raises an OSError.
+ The extension is appended to the library name (on a platform-dependent
+ basis) unless the name includes the
+\begin_inset Quotes eld
+\end_inset
+
+.
+\begin_inset Quotes erd
+\end_inset
+
+ character in which case name is assumed to be the
+\begin_inset Quotes eld
+\end_inset
+
+full-name
+\begin_inset Quotes erd
+\end_inset
+
+ of the library.
+
+\end_layout
+
+\begin_layout Description
+ndpointer (dtype=None, ndim=None, shape=None, flags=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create a class object that can be used in the argtypes list of a ctypes
+ function that will do basic type, number-of-dimensions, shape, and flags
+ checking on input array objects.
+ Setting an argtypes entry with the result of this function allows passing
+ arrays directly to ctypes-wrapped functions.
+ The returned class object will contain a from_param method as required
+ by ctypes.
+ This from_param method takes the array object, does data-type, number-of-dimens
+ions, shape, and flags checking on the object and if all tests pass returns
+ an object that ctypes can use as the data area of the array.
+ Checking is not performed for any entries which are None in this class
+ creation function.
+
+\end_layout
+
+\begin_layout Chapter
+Testing and Packaging
+\end_layout
+
+\begin_layout Quotation
+Research is what I'm doing when I don't know what I'm doing.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Werner von Braun
+\end_layout
+
+\begin_layout Quotation
+The most likely way for the world to be destroyed, most experts agree, is
+ by accident.
+ That's where we come in; we're computer professionals.
+ We cause accidents.
+\end_layout
+
+\begin_layout Right Address
+---
+\emph on
+Nathaniel Borenstein
+\end_layout
+
+\begin_layout Standard
+There are two additional sub-packages distributed with NumPy that simplify
+ the process of distributing and testing code based on NumPy.
+ The numpy.distutils sub-package extends the standard distutils package to
+ handle Fortran code along with providing support for the auto-generated
+ code in NumPy.
+ The numpy.testing sub-package defines a few functions and classes for standardiz
+ing unit-tests in NumPy.
+ These facilities can be used in your own packages that build on top of
+ NumPy.
+
+\end_layout
+
+\begin_layout Section
+Testing
+\end_layout
+
+\begin_layout Standard
+In this sub-package are two classes and some useful utilities for writing
+ unit-tests
+\end_layout
+
+\begin_layout Description
+NumpyTestCase a subclass of unittest.TestCase which adds a measure method
+ that can determine the elasped time to execute a code string and enhances
+ the __call__ method
+\end_layout
+
+\begin_layout Description
+NumpyTest the test manager for NumPy which was extracted originally from
+ the SciPy code base.
+ This test manager makes it easy to add unit-tests to a package simply by
+ creating a tests sub-directory with files named test_<module>.py.
+ These test files should then define sub-classes of NumpyTestCase (or unittest.Te
+stCase) named
+\begin_inset Quotes eld
+\end_inset
+
+test*
+\begin_inset Quotes erd
+\end_inset
+
+.
+ These classes should then define functions named
+\begin_inset Quotes eld
+\end_inset
+
+test*
+\begin_inset Quotes erd
+\end_inset
+
+ or
+\begin_inset Quotes eld
+\end_inset
+
+bench*
+\begin_inset Quotes erd
+\end_inset
+
+ or
+\begin_inset Quotes eld
+\end_inset
+
+check*
+\begin_inset Quotes erd
+\end_inset
+
+ that contain the actual unit-tests.
+ The first keyword argument should specify the level above which this test
+ should be run.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ To run the tests excecute NumpyTest(<package>).test(level=1, verbosity=1)
+ which will run all tests above the given level using the given verbosity.
+ Here <package> can be either a string or a previously imported module.
+ You can get the level and verbosity arguments from sys.argv using NumpyTest(<pac
+kage>).run() with -v or --verbosity and -l or --level as command-line arguments.
+\end_layout
+
+\begin_layout Description
+set_local_path (reldir='', level=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ prepend local directory (+ reldir) to sys.path.
+ The caller is responsible for removing this path using restore_path().
+\end_layout
+
+\begin_layout Description
+set_package_path (level=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ prepend package directory to sys.path.
+ This should be called from a test_file.py that satisfies the tree structure:
+ <somepath>/<somedir>/test_file.py.
+ The, the first existing path name from the list <somepath>/build/lib.<platform>-
+<version>, <somepath>/..
+ is pre-pended to sys.path.
+ The caller is responsible for removing this path using restore_path().
+\end_layout
+
+\begin_layout Description
+restore_path ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Remove the first entry from sys.path.
+\end_layout
+
+\begin_layout Description
+assert_equal (actual, desired, err_msg='', verbose=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an assertion error if the two items are not equal.
+ Automatically calls assert_array_equal if actual or desired is an ndarray.
+
+\end_layout
+
+\begin_layout Description
+assert_almost_equal (actual, desired, decimal=7, err_msg='', verbose=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an assertion error if the two items are not equal within decimal
+ places.
+ Automatically calls assert_array_almost_equal if actual or desired is an
+ ndarray.
+\end_layout
+
+\begin_layout Description
+assert_approx_equal (actual, desired, significant=7, err_msg='', verbose=1)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an assertion error if the two items are not equal to within the given
+ significant digits.
+ Does not work on arrays.
+
+\end_layout
+
+\begin_layout Description
+assert_array_equal (x, y, err_msg='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an error if the two arrays x and y are not equal at every element.
+
+\end_layout
+
+\begin_layout Description
+assert_array_less (x, y, err_msg='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an error if the two arrays x and y have different shapes or if x
+ is not less than y at every element.
+
+\end_layout
+
+\begin_layout Description
+assert_array_almost_equal (x, y, decimal=6, err_msg='')
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Raise an error if x and y are not equal to decimal places at every element.
+\end_layout
+
+\begin_layout Description
+jiffies ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a number of 1/100ths of a second that this process has been scheduled
+ in user mode.
+ Implemented using time.time() unless on Linux where the special /proc directory
+ filesystem is used.
+
+\end_layout
+
+\begin_layout Description
+memusage ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the virtual memory size in bytes of the running python.
+ If the operation is not supported on the platform, then return None.
+ This works only on linux for now.
+\end_layout
+
+\begin_layout Description
+rand (*args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return an array of random numbers with the given shape using only the standard
+ library random number generator.
+\end_layout
+
+\begin_layout Description
+runstring (astr, dict)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Run the given string in the dictionary provided.
+ Functional form for (exec astr in dict) that is useful for the failUnlessRaises
+ method of unittest.TestCase class.
+\end_layout
+
+\begin_layout Section
+NumPy Distutils
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "distutils"
+
+\end_inset
+
+NumPy provides enhanced distutils functionality to make it easier to build
+ and install sub-packages, auto-generate code, and extension modules that
+ use Fortran-compiled libraries.
+ To use features of numpy distutils use the setup command from numpy.distutils.cor
+e.
+ A useful Configuration class is also provided in numpy.distutils.misc_util
+ that can make it easier to construct keyword arguments to pass to the setup
+ function (by passing the dictionary obtained from the todict() method of
+ the class).
+ More information is available in the NumPy Distutils Users Guide in <site-packa
+ges>/numpy/doc/DISTUTILS.txt.
+\end_layout
+
+\begin_layout Subsection
+misc_util
+\end_layout
+
+\begin_layout Description
+Configuration (package_name=None, parent_name=None, top_path=None, package_path=
+None, **attrs)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+
+\begin_inset LatexCommand index
+name "Configuration"
+
+\end_inset
+
+Construct a configuration instance for the given package name.
+ If parent_name is not None, then construct the package as a sub-package
+ of the parent_name package.
+ If top_path and package_path are None then they are assumed equal to the
+ path of the file this instance was created in.
+ The setup.py files in the numpy distribution are good examples of how to
+ use the Configuration instance.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+self.todict ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a dictionary compatible with the keyword arguments of distutils
+ setup function.
+ Thus, this method may be used as setup(**config.todict()).
+\end_layout
+
+\begin_layout Description
+self.get_distribution ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the distutils distribution object for self.
+\end_layout
+
+\begin_layout Description
+self.get_subpackage (subpackage_name, subpackage_path=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a Configuration instance for the sub-package given.
+ If subpackage_path is None then the path is assumed to be the local path
+ plus the subpackage_name.
+ If a setup.py file is not found in the subpackage_path, then a default configura
+tion is used.
+\end_layout
+
+\begin_layout Description
+self.add_subpackage (subpackage_name, subpackage_path=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add a sub-package to the current Configuration instance.
+ This is useful in a setup.py script for adding sub-packages to a package.
+ The sub-package is contained in subpackage_path / subpackage_name and this
+ directory may contain a setup.py script or else a default setup (suitable
+ for Python-code-only subpackages) is assumed.
+ If the subpackage_path is None, then it is assumed to be located in the
+ local path / subpackage_name.
+
+\end_layout
+
+\begin_layout Description
+self.add_data_files (*files)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add files to the list of data_files to be included with the package.
+ The form of each element of the files sequence is very flexible allowing
+ many combinations of where to get the files from the package and where
+ they should ultimately be installed on the system.
+ The most basic usage is for an element of the files argument sequence to
+ be a simple filename.
+ This will cause that file from the local path to be installed to the installati
+on path of the self.name package (package path).
+ The file argument can also be a relative path in which case the entire
+ relative path will be installed into the package directory.
+ Finally, the file can be an absolute path name in which case the file will
+ be found at the absolute path name but installed to the package path.
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ This basic behavior can be augmented by passing a 2-tuple in as the file
+ argument.
+ The first element of the tuple should specify the relative path (under
+ the package install directory) where the remaining sequence of files should
+ be installed to (it has nothing to do with the file-names in the source
+ distribution).
+ The second element of the tuple is the sequence of files that should be
+ installed.
+ The files in this sequence can be filenames, relative paths, or absolute
+ paths.
+ For absolute paths the file will be installed in the top-level package
+ installation directory (regardless of the first argument).
+ Filenames and relative path names will be installed in the package install
+ directory under the path name given as the first element of the tuple.
+ An example may clarify:
+\end_layout
+
+\begin_deeper
+\begin_layout LyX-Code
+self.add_data_files('foo.dat',
+\newline
+('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']),
+
+\newline
+'bar/cat.dat',
+\newline
+'/full/path/to/can.dat')
+\end_layout
+
+\begin_layout Standard
+will install these data files to:
+\end_layout
+
+\begin_layout LyX-Code
+<package install directory>/
+\newline
+ foo.dat
+\newline
+ fun/
+\newline
+ gun.dat
+\newline
+ nun/
+\newline
+ pun.dat
+\newline
+ sun.dat
+\newline
+
+ bar/
+\newline
+ car.dat
+\newline
+ can.dat
+\end_layout
+
+\begin_layout Standard
+where <package install directory> is the package (or sub-package) directory
+ such as '/usr/lib/python2.4/site-packages/mypackage' ('C:
+\backslash
+
+\backslash
+Python2.4
+\backslash
+
+\backslash
+Lib
+\backslash
+
+\backslash
+site-packages
+\backslash
+
+\backslash
+mypackage') or '/usr/lib/python2.4/site-packages/mypackage/mysubpackage'
+ ('C:
+\backslash
+
+\backslash
+Python2.4
+\backslash
+
+\backslash
+Lib
+\backslash
+
+\backslash
+site-packages
+\backslash
+
+\backslash
+mypackage
+\backslash
+
+\backslash
+mysubpackage').
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+\InsetSpace ~
+ An additional feature is that the path to a data-file can actually be a
+ function that takes no arguments and returns the actual path(s) to the
+ data-files.
+ This is useful when the data files are generated while building the package.
+
+\end_layout
+
+\begin_layout Description
+self.add_data_dir (data_path)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Recursively add files under data_path to the list of data_files to be installed
+ (and distributed).
+ The data_path can be either a relative path-name, or an absolute path-name,
+ or a 2-tuple where the first argument shows where in the install directory
+ the data directory should be installed to.
+ For example suppose the source directory contains fun/foo.dat and fun/bar/car.dat
+\end_layout
+
+\begin_layout LyX-Code
+self.add_data_dir('fun')
+\newline
+self.add_data_dir(('sun', 'fun'))
+\newline
+self.add_data_dir(('gun',
+ '/full/path/to/fun'))
+\end_layout
+
+\begin_layout Standard
+\InsetSpace ~
+ Will install data-files to the locations
+\end_layout
+
+\begin_layout LyX-Code
+<package install directory>/
+\newline
+ fun/
+\newline
+ foo.dat
+\newline
+ bar/
+\newline
+ car.dat
+\newline
+ sun/
+\newline
+
+ foo.dat
+\newline
+ bar/
+\newline
+ car.dat
+\newline
+ gun/
+\newline
+ foo.dat
+\newline
+ car.dat
+\end_layout
+
+\begin_layout Description
+self.add_include_dirs (*paths)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add the given sequence of paths to the beginning of the include_dirs list.
+ This list will be visible to all extension modules of the current package.
+\end_layout
+
+\begin_layout Description
+self.add_headers (*files)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add the given sequence of files to the beginning of the headers list.
+ By default, headers will be installed under <python-include>/<self.name.replace('.
+','/')>/ directory.
+ If an item of files is a tuple, then its first argument specifies the actual
+ installation location relative to the <python-include> path.
+\end_layout
+
+\begin_layout Description
+self.add_extension (name, sources, **kw)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Create and add an Extension instance to the ext_modules list.
+ The first argument defines the name of the extension module that will be
+ installed under the self.name package.
+ The second argument is a list of sources.
+ This method also takes the following optional keyword arguments that are
+ passed on to the Extension constructor: include_dirs, define_macros, undef_macr
+os, library_dirs, libraries, runtime_library_dirs, extra_objects, swig_opts,
+ depends, language, f2py_options, module_dirs, and extra_info.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The self.paths(...) method is applied to all lists that may contain paths.
+ The extra_info is a dictionary or a list of dictionaries whose content
+ will be appended to the keyword arguments.
+ The depends list contains paths to files or directories that the sources
+ of the extension module depend on.
+ If any path in the depends list is newer than the extension module, then
+ the module will be rebuilt.
+
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ The list of sources may contain functions (called source generators) which
+ must take an extension instance and a build directory as inputs and return
+ a source file or list of source files or None.
+ If None is returned then no sources are generated.
+ If the Extension instance has no sources after processing all source generators
+, then no extension module is built.
+
+\end_layout
+
+\begin_layout Description
+self.add_library (name, sources, **build_info)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add a library to the list of libraries.
+ Allowed keyword arguments are depends, macros, include_dirs, extra_compiler_arg
+s, and f2py_options.
+ The name is the name of the library to be built and sources is a list of
+ sources (or source generating functions) to add to the library.
+\end_layout
+
+\begin_layout Description
+self.add_scripts (*files)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add the sequence of files to the beginning of the scripts list.
+ Scripts will be installed under the <prefix>/bin/ directory.
+
+\end_layout
+
+\begin_layout Description
+self.paths (*paths)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Applies glob.glob(...) to each path in the sequence (if needed) and pre-pends
+ the local_path if needed.
+ Because this is called on all source lists, this allows wildcard characters
+ to be specified in lists of sources for extension modules and libraries
+ and scripts and allows path-names be relative to the source directory.
+\end_layout
+
+\begin_layout Description
+self.get_config_cmd ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the numpy.distutils config command instance.
+\end_layout
+
+\begin_layout Description
+self.get_build_temp_dir ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a path to a temporary directory where temporary files should be
+ placed.
+\end_layout
+
+\begin_layout Description
+self.have_f77c ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if a Fortran 77 compiler is available (because a simple Fortran 77
+ code was able to be compiled successfully).
+\end_layout
+
+\begin_layout Description
+self.have_f90c ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ True if a Fortran 90 compiler is available (because a simple Fortran 90
+ code was able to be compiled successfully)
+\end_layout
+
+\begin_layout Description
+self.get_version ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a version string of the current package or None if the version informati
+on could not be detected.
+ This method scans files named __version__.py, <packagename>_version.py, version.py
+, and __svn_version__.py for string variables version, __version__, and <packagen
+ame>_version, until a version number is found.
+\end_layout
+
+\begin_layout Description
+self.make_svn_version_py ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Appends a data function to the data_files list that will generate __svn_version
+__.py file to the current package directory.
+ This file will be removed from the source directory when Python exits (so
+ that it can be re-generated next time the package is built).
+ This is intended for working with source directories that are in an SVN
+ repository.
+
+\end_layout
+
+\begin_layout Description
+self.make_config_py ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Generate a package __config__.py file containing system information used
+ during the building of the package.
+ This file is installed to the package installation directory.
+\end_layout
+
+\begin_layout Description
+self.get_info (*names)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return information (from system_info.get_info) for all of the names in the
+ argument list in a single dictionary.
+
+\end_layout
+
+\end_deeper
+\begin_layout Description
+get_numpy_include_dirs ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the include directory where the numpy/arrayobject.h and numpy/ufuncobject.
+h files are found.
+ This should be added to the include_dirs of any extension module built
+ using NumPy.
+ If numpy.distutils is used to build the extension, then this directory is
+ added automatically.
+
+\end_layout
+
+\begin_layout Description
+get_numarray_include_dirs ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the include directory where the numpy/libnumarray.h file is found.
+ This should be added to the include_dirs of any extension module that relies
+ on the Numarray-compatible C-API.
+
+\end_layout
+
+\begin_layout Description
+dict_append (d, **kwds)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Add the keyword arguments given as entries in the dictionary provided as
+ the first argument.
+ If the entry is already present, then assume it is a list and extend the
+ list with the keyword value.
+\end_layout
+
+\begin_layout Description
+appendpath (prefix, path)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Platform-independent intelligence for appending path to prefix.
+ It replaces '/' in the prefix and the path with the correct path-separator
+ on the platform ad returns a full path name that will be valid for the
+ platform.
+
+\end_layout
+
+\begin_layout Description
+allpath (name)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert a '/' separated pathname to one using the platform's path separator.
+\end_layout
+
+\begin_layout Description
+dot_join (*args)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Converts a sequence of string arguments to a string joined by '.' (removing
+ any empty strings).
+
+\end_layout
+
+\begin_layout Description
+generate_config_py (extension, build_dir)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ A suitable function that can be used in a source list.
+ This constructs a python file that contains system_info information used
+ during building the package.
+ Generally easier to use a Configuration instance and the config.make_config_py()
+ method.
+\end_layout
+
+\begin_layout Description
+get_cmd (cmdname, _cache={})
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns an instance of the distutils command object named cmdname if the
+ setup distribution instance has been initialized.
+ Caches the result in _cache[cmdname] and gets it from there if present.
+\end_layout
+
+\begin_layout Description
+terminal_has_colors ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Tries to determine if the stdout terminal can be written to using ANSI
+ colors.
+ Returns 1 if it can be determined that ANSI colors are acceptable or 0
+ if not.
+
+\end_layout
+
+\begin_layout Description
+red_text (s)
+\end_layout
+
+\begin_layout Description
+green_text (s)
+\end_layout
+
+\begin_layout Description
+yellow_text (s)
+\end_layout
+
+\begin_layout Description
+blue_text (s)
+\end_layout
+
+\begin_layout Description
+cyan_text (s)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ If terminal_has_colors() is true, then these commands return a string with
+ the necessary codes prepended to display the given string argument in the
+ specified color on an ANSI terminal.
+ If terminal_has_colors() is false, then these functions simply return the
+ input argument.
+
+\end_layout
+
+\begin_layout Description
+cyg2win32 (path)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Convert a cygwin path beginning with /cygdrive to a standard win32 path
+ name.
+
+\end_layout
+
+\begin_layout Description
+all_strings (lst)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if all items in the input list are string objects otherwise
+ return False.
+\end_layout
+
+\begin_layout Description
+has_f_sources (sources)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if any of the source files listed in the input argument are
+ Fortran files because its name matches against the compiled regular expression
+
+\series bold
+fortran_ext_match
+\series default
+.
+\end_layout
+
+\begin_layout Description
+has_cxx_sources (sources)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if any of the source files listed in the input argument are
+ C++ files because its name matches against the compiled regular expression
+
+\series bold
+cxx_ext_match
+\series default
+.
+\end_layout
+
+\begin_layout Description
+filter_sources (sources)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ From the provided list of sources, return four lists of filenames containing
+ C, C++, Fortran, and Fortran 90 module sources respectively.
+ The compiled regular expressions used in this search (which are also available
+ in the misc_util module) are cxx_ext_match, fortran_ext_match, f90_ext_match,
+ and f90_module_name_match.
+
+\end_layout
+
+\begin_layout Description
+get_dependencies (sources)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Scan the files in the sources list for include statements.
+\end_layout
+
+\begin_layout Description
+is_local_src_dir (directory)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return True if the provided directory is the local current working directory.
+
+\end_layout
+
+\begin_layout Description
+get_ext_source_files (ext)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Get sources and any include files in the same directory from an Extension
+ instance.
+\end_layout
+
+\begin_layout Description
+get_script_files (scripts)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Returns the list scripts with all non-string arguments removed.
+\end_layout
+
+\begin_layout Subsection
+Other modules
+\end_layout
+
+\begin_layout Description
+system_info.get_info (name)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ For the given string representing a particular resource, return a dictionary
+ that is compatible with the distutils.setup keyword arguments.
+ If this is an empty dictionary, then the requested resource is not available.
+ Some of the names that can be checked are 'lapack_opt', 'blas_opt', 'fft_opt',
+ 'fftw', 'fftw3', 'fftw2', 'djbfft', 'numpy', 'numarray', 'boost_python',
+ 'agg2', 'wx', 'gdk', 'xft', 'freetype2'.
+
+\end_layout
+
+\begin_layout Description
+system_info.get_standard_file (filename)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return a list of length 0 to 3 containing the full-path filenames for the
+ filename provided.
+ The filename is searched for in three places in the following order 1)
+ the system-wide location which is the directory that the system_info file
+ is located in; 2) the directory specified by the environment variable HOME;
+ and 3) the current local directory.
+
+\end_layout
+
+\begin_layout Description
+cpuinfo.cpu an instance of a cpuinfo class that defines methods for checking
+ various aspects of the cpu.
+ The info attribute is a list of length (# of CPUs).
+ Each entry is a dictionary providing technical information about that CPU.
+
+\end_layout
+
+\begin_layout Description
+log.set_verbosity (level)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Set the distutils logging threshold and return the previously stored value.
+ The level is an integer that corresponds to distutils.log thresholds: -1
+ <--> ERROR, 0 <--> WARN, 1 <--> INFO, and 2 <--> DEBUG.
+
+\end_layout
+
+\begin_layout Description
+exec_command
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+exec_command (command, execute_in='', use_shell=None, use_tee=None, _with_python
+=1, **env)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return (status, output) of the executed command.
+ The command input is a string of executable and arguments.
+ The output contains both stderr and stdout messages.
+ If execute_in is given, then change to the provided directory prior to
+ executing the command and afterwords restore to the current directory.
+ On NT, and DOS systems the returned status is correct for external commands.
+ However, wild cards will not work for non-posix systems.
+\end_layout
+
+\begin_layout Description
+splitcmdline (line)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Inverse of ' '.join(sys.argv)
+\end_layout
+
+\begin_layout Description
+find_executable (exe, path=None)
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return full path of an executable using information from the PATH environment
+ variable.
+ Equivalent to the POSIX 'which' command.
+\end_layout
+
+\begin_layout Description
+get_pythonexe ()
+\end_layout
+
+\begin_layout Description
+\InsetSpace ~
+ Return the full path to the python executable with some fixes for nt and
+ dos to replace pythonw with python if it is encountered.
+ A basic wrapper around sys.executable.
+\end_layout
+
+\end_deeper
+\begin_layout Section
+Conversion of .src files
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand index
+name "code generation"
+
+\end_inset
+
+NumPy distutils supports automatic conversion of source files named <somefile>.sr
+c.
+ This facility can be used to maintain very similar code blocks requiring
+ only simple changes between blocks.
+ During the build phase of setup, if a template file named <somefile>.src
+ is encountered, a new file named <somefile> is constructed from the template
+ and placed in the build directory to be used instead.
+ Two forms of template conversion are supported.
+ The first form occurs for files named named <file>.ext.src where ext is a
+ recognized Fortran extension (f, f90, f95, f77, for, ftn, pyf).
+ The second form is used for all other cases.
+
+\end_layout
+
+\begin_layout Subsection
+Fortran files
+\end_layout
+
+\begin_layout Standard
+This template converter will replicate all
+\series bold
+function
+\series default
+ and
+\series bold
+subroutine
+\series default
+ blocks in the file with names that contain '<...>' according to the rules
+ in '<...>'.
+ The number of comma-separated words in '<...>' determines the number of times
+ the block is repeated.
+ What these words are indicates what that repeat rule, '<...>', should be replaced
+ with in each block.
+ All of the repeat rules in a block must contain the same number of comma-separa
+ted words indicating the number of times that block should be repeated.
+ If the word in the repeat rule needs a comma, leftarrow, or rightarrow,
+ then prepend it with a backslash '
+\backslash
+'.
+ If a word in the repeat rule matches '
+\backslash
+
+\backslash
+<index>' then it will be replaced with the <index>-th word in the same repeat
+ specification.
+ There are two forms for the repeat rule: named and short.
+\end_layout
+
+\begin_layout Subsubsection
+Named repeat rule
+\end_layout
+
+\begin_layout Standard
+A named repeat rule is useful when the same set of repeats must be used
+ several times in a block.
+ It is specified using <rule1=item1, item2, item3,..., itemN>, where N is the
+ number of times the block should be repeated.
+ On each repeat of the block, the entire expression, '<...>' will be replaced
+ first with item1, and then with item2, and so forth until N repeats are
+ accomplished.
+ Once a named repeat specification has been introduced, the same repeat
+ rule may be used
+\series bold
+in the current block
+\series default
+ by referring only to the name (i.e.
+ <rule1>.
+
+\end_layout
+
+\begin_layout Subsubsection
+Short repeat rule
+\end_layout
+
+\begin_layout Standard
+A short repeat rule looks like <item1, item2, item3, ..., itemN>.
+ The rule specifies that the entire expression, '<...>' should be replaced
+ first with item1, and then with item2, and so forth until N repeats are
+ accomplished.
+
+\end_layout
+
+\begin_layout Subsubsection
+Pre-defined names
+\end_layout
+
+\begin_layout Standard
+The following predefined named repeat rules are available:
+\end_layout
+
+\begin_layout Itemize
+<prefix=s,d,c,z>
+\end_layout
+
+\begin_layout Itemize
+<_c=s,d,c,z>
+\end_layout
+
+\begin_layout Itemize
+<_t=real, double precision, complex, double complex>
+\end_layout
+
+\begin_layout Itemize
+<ftype=real, double precision, complex, double complex>
+\end_layout
+
+\begin_layout Itemize
+<ctype=float, double, complex_float, complex_double>
+\end_layout
+
+\begin_layout Itemize
+<ftypereal=float, double precision,
+\backslash
+
+\backslash
+0,
+\backslash
+
+\backslash
+1>
+\end_layout
+
+\begin_layout Itemize
+<ctypereal=float, double,
+\backslash
+
+\backslash
+0,
+\backslash
+
+\backslash
+1>
+\end_layout
+
+\begin_layout Subsection
+Other files
+\end_layout
+
+\begin_layout Standard
+Non-Fortran files use a separate syntax for defining template blocks that
+ should be repeated using a variable expansion similar to the named repeat
+ rules of the Fortran-specific repeats.
+ The template rules for these files are:
+\end_layout
+
+\begin_layout Enumerate
+\begin_inset Quotes eld
+\end_inset
+
+/**begin repeat
+\begin_inset Quotes erd
+\end_inset
+
+ on a line by itself marks the beginning of a segment that should be repeated.
+\end_layout
+
+\begin_layout Enumerate
+Named variable expansions are defined using #name=item1, item2, item3, ...,
+ itemN# and placed on successive lines.
+ These variables are replaced in each repeat block with corresponding word.
+ All named variables in the same repeat block must define the same number
+ of words.
+
+\end_layout
+
+\begin_layout Enumerate
+In specifying the repeat rule for a named variable, item*N is short-hand
+ for item, item, ..., item repeated N times.
+ In addition, parenthesis in combination with *N can be used for grouping
+ several items that should be repeated.
+ Thus, #name=(item1, item2)*4# is equivalent to #name=item1, item2, item1,
+ item2, item1, item2, item1, item2#
+\end_layout
+
+\begin_layout Enumerate
+\begin_inset Quotes eld
+\end_inset
+
+*/
+\begin_inset Quotes erd
+\end_inset
+
+ on a line by itself marks the end of the the variable expansion naming.
+ The next line is the first line that will be repeated using the named rules.
+\end_layout
+
+\begin_layout Enumerate
+Inside the block to be repeated, the variables that should be expanded are
+ specified as @name@.
+
+\end_layout
+
+\begin_layout Enumerate
+\begin_inset Quotes eld
+\end_inset
+
+/**end repeat**/
+\begin_inset Quotes erd
+\end_inset
+
+ on a line by itself marks the previous line as the last line of the block
+ to be repeated.
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Include \input{capi.lyx}
+preview false
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset LatexCommand printindex
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/numpy/doc/numpybook/runcode.py b/numpy/doc/numpybook/runcode.py
new file mode 100644
index 000000000..a0b82340b
--- /dev/null
+++ b/numpy/doc/numpybook/runcode.py
@@ -0,0 +1,148 @@
+# This script takes a lyx file and runs the python code in it.
+# Then rewrites the lyx file again.
+#
+# Each section of code portion is assumed to be in the same namespace
+# where a from numpy import * has been applied
+#
+# If a PYNEW inside a Note is encountered, the name space is restarted
+#
+# The output (if any) is replaced in the file
+# by the output produced during the code run.
+#
+# Options:
+# -n name of code section (default MyCode)
+#
+
+import sys
+import optparse
+import cStringIO
+import re
+import os
+
+newre = re.compile(r"\\begin_inset Note.*PYNEW\s+\\end_inset", re.DOTALL)
+
+def getoutput(tstr, dic):
+ print "\n\nRunning..."
+ print tstr,
+ tempstr = cStringIO.StringIO()
+ sys.stdout = tempstr
+ code = compile(tstr, '<input>', 'exec')
+ try:
+ res = eval(tstr, dic)
+ sys.stdout = sys.__stdout__
+ except SyntaxError:
+ try:
+ res = None
+ exec code in dic
+ finally:
+ sys.stdout = sys.__stdout__
+ if res is None:
+ res = tempstr.getvalue()
+ else:
+ res = tempstr.getvalue() + '\n' + repr(res)
+ if res != '':
+ print "\nOutput is"
+ print res,
+ return res
+
+# now find the code in the code segment
+def getnewcodestr(substr, dic):
+ end = substr.find('\\layout ')
+ lines = substr[:end].split('\\newline')
+ outlines = []
+ first = 1
+ cmd = ''
+ lines.append('dummy')
+ for line in lines:
+ line = line.strip()
+ if (line[:3]=='>>>') or (line == 'dummy'):
+ # we have a new output
+ pyoutstr = getoutput(cmd, dic).strip()
+ if pyoutstr != '':
+ pyout = pyoutstr.split('\n')
+ outlines.extend(pyout)
+ cmd = line[4:]
+ elif (line[:3]=='...'):
+ # continuation output
+ cmd += "\n%s" % line[4:]
+ else:
+ # first line or output
+ if first:
+ first = 0
+ cmd = line
+ else:
+ continue
+ if line != 'dummy':
+ outlines.append(line)
+ return "\n\\newline \n".join(outlines), end
+
+
+def runpycode(lyxstr, name='MyCode'):
+ schobj = re.compile(r"\\layout %s\s+>>> " % name)
+ outstr = cStringIO.StringIO()
+ num = 0
+ indx = []
+ for it in schobj.finditer(lyxstr):
+ indx.extend([it.start(), it.end()])
+ num += 1
+
+ if num == 0:
+ print "Nothing found for %s" % name
+ return lyxstr
+
+ start = 0
+ del indx[0]
+ indx.append(len(lyxstr))
+ edic = {}
+ exec 'from numpy import *' in edic
+ exec 'set_printoptions(linewidth=65)' in edic
+ # indx now contains [st0,en0, ..., stN,enN]
+ # where stX is the start of code segment X
+ # and enX is the start of \layout MyCode for
+ # the X+1 code section (or string length if X=N)
+ for k in range(num):
+ # first write everything up to the start of the code segment
+ substr = lyxstr[start:indx[2*k]]
+ outstr.write(substr)
+ if start > 0:
+ mat = newre.search(substr)
+ # if PYNEW found, then start a new namespace
+ if mat:
+ edic = {}
+ exec 'from numpy import *' in edic
+ exec 'set_printoptions(linewidth=65)' in edic
+ # now find the code in the code segment
+ # endoutput will contain the index just past any output
+ # already present in the lyx string.
+ substr = lyxstr[indx[2*k]:indx[2*k+1]]
+ lyxcodestr, endcode = getnewcodestr(substr, edic)
+ # write the lyx for the input + new output
+ outstr.write(lyxcodestr)
+ outstr.write('\n')
+ start = endcode + indx[2*k]
+
+ outstr.write(lyxstr[start:])
+ return outstr.getvalue()
+
+
+def main(args):
+ usage = "%prog {options} filename"
+ parser = optparse.OptionParser(usage)
+ parser.add_option('-n','--name', default='MyCode')
+
+ options, args = parser.parse_args(args)
+ if len(args) < 1:
+ parser.error("incorrect number of arguments")
+
+ os.system('cp -f %s %s.bak' % (args[0], args[0]))
+ fid = file(args[0])
+ str = fid.read()
+ fid.close()
+ print "Processing %s" % options.name
+ newstr = runpycode(str, options.name)
+ fid = file(args[0],'w')
+ fid.write(newstr)
+ fid.close()
+
+if __name__ == "__main__":
+ main(sys.argv[1:])