diff --git a/Pipfile b/Pipfile index 43ec597..9776b3f 100644 --- a/Pipfile +++ b/Pipfile @@ -32,6 +32,8 @@ pyyaml = ">=4.2b1" arxiv-vault = "~=0.1.1rc15" redis = "==2.10.6" mypy = "==0.720" +pypdf2 = "==1.26.0" + [dev-packages] "nose2" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 598e121..925c450 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -310,6 +310,13 @@ "index": "pypi", "version": "==1.6.4" }, + "pypdf2": { + "hashes": [ + "sha256:e28f902f2f0a1603ea95ebe21dff311ef09be3d0f0ef29a3e44a932729564385" + ], + "index": "pypi", + "version": "==1.26.0" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", diff --git a/agent/agent/consumer.py b/agent/agent/consumer.py index 0784ebb..d7e9103 100644 --- a/agent/agent/consumer.py +++ b/agent/agent/consumer.py @@ -29,7 +29,7 @@ 3. The agent evaluates the event against registered :class:`.Rule` instances, using :func:`.rules.evaluate`. A :class:`.Rule` maps a condition (the event type and event/submission properties) to a :class:`.Process`. -4. The agent dispatches any triggered :class:`.Proccess` instances to the +4. The agent dispatches any triggered :class:`.Process` instances to the :mod:`agent.worker` using the :class:`.AsyncProcessRunner`. diff --git a/core/arxiv/submission/process/checks/__init__.py b/core/arxiv/submission/process/checks/__init__.py new file mode 100644 index 0000000..615e54b --- /dev/null +++ b/core/arxiv/submission/process/checks/__init__.py @@ -0,0 +1,2 @@ +"""Core submission process checks.""" + diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0190238.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/0190238.ps new file mode 100644 index 0000000..3071f4c Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0190238.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0609584.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0609584.pdf new file mode 100644 index 0000000..c120da7 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0609584.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0611002.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0611002.pdf new file mode 100644 index 0000000..1d90fe9 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0611002.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3810.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3810.pdf new file mode 100644 index 0000000..f7621cf Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3810.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3906.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3906.pdf new file mode 100644 index 0000000..ce91078 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3906.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3927.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3927.pdf new file mode 100644 index 0000000..0c53232 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3927.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3971.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3971.pdf new file mode 100644 index 0000000..5dcfbfa Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.3971.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4328.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4328.pdf new file mode 100644 index 0000000..7a9aea8 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4328.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4412.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4412.pdf new file mode 100644 index 0000000..4b94186 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/0706.4412.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/2738685LaTeX.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/2738685LaTeX.pdf new file mode 100644 index 0000000..77c68dd Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/2738685LaTeX.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/2745765withCairoFonts.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/2745765withCairoFonts.pdf new file mode 100644 index 0000000..b80e4f1 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/2745765withCairoFonts.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/2748220withCairoCreator.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/2748220withCairoCreator.pdf new file mode 100644 index 0000000..1605565 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/2748220withCairoCreator.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/GalluzziBalkancom2018.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/GalluzziBalkancom2018.pdf new file mode 100644 index 0000000..044476a Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/GalluzziBalkancom2018.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/TeXProduced_README.md b/core/arxiv/submission/process/checks/test_files_tex_produced/TeXProduced_README.md new file mode 100644 index 0000000..a7f2e1c --- /dev/null +++ b/core/arxiv/submission/process/checks/test_files_tex_produced/TeXProduced_README.md @@ -0,0 +1,51 @@ +These test submission exercise the check for TeX Produced +Postscript and PDF files. + +Most test files either demonstrate TeX Produced PS/PDF or +normal non-TeX-Produced files. + +PDF test files: + +0611002.pdf +0706.3810.pdf - Not TeX produced +0706.3906.pdf +0706.3927.pdf +0706.3971.pdf - Not TeX produced +0706.4328.pdf +0706.4412.pdf +2738685LaTeX.pdf +2745765withCairoFonts.pdf - New: looks for Cairo fonts +2748220withCairoCreator.pdf - New: looks for Cairo software +GalluzziBalkancom2018.pdf +astro-ph-0610480.ethanneil.20289.pdf +astro-ph-0703077.jf_sauvage.10062.pdf +astro-ph.arimoto.4168.pdf +astro-ph.ewhelan.18488.pdf +math0607661.tudateru.25992.tsuda_takenawa.pdf +notex_compositionality.pdf - Not TeX produced +sparsemult6.pdf + +Postscript test files: + +0190238.ps +astro-ph.fdarcang.22633.ps +hep-th-0701130.pmho.24929.ps +math.kristaly.24457.ps +math.suri.13734.ps +notex_kkpants.eps - Not TeX produced +notex_orddps5.eps - Not TeX produced +physics-0611280.pdomokos.2059.eps +simple_tex_produced.ps + + + +The legacy tests contains a small number of test files that +produced false negative and false positive results. + +These files indicate the 'failure' of this check to clearly +distinguish a TeX-produced or non-TeX-produced file. + +0609584.pdf - TeX produced but not detected as such +paperfinal.PDF - Not TeX produced but detected as TeX produced +submit_0169105.ps - TeX produced but not detected as such + diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0610480.ethanneil.20289.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0610480.ethanneil.20289.pdf new file mode 100644 index 0000000..a5adfe6 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0610480.ethanneil.20289.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0703077.jf_sauvage.10062.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0703077.jf_sauvage.10062.pdf new file mode 100644 index 0000000..3b8e9ed Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph-0703077.jf_sauvage.10062.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.arimoto.4168.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.arimoto.4168.pdf new file mode 100644 index 0000000..b5bac26 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.arimoto.4168.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.ewhelan.18488.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.ewhelan.18488.pdf new file mode 100644 index 0000000..e356ba1 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.ewhelan.18488.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.fdarcang.22633.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.fdarcang.22633.ps new file mode 100644 index 0000000..e932804 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/astro-ph.fdarcang.22633.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/hep-th-0701130.pmho.24929.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/hep-th-0701130.pmho.24929.ps new file mode 100644 index 0000000..982e4f7 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/hep-th-0701130.pmho.24929.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/math.kristaly.24457.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/math.kristaly.24457.ps new file mode 100644 index 0000000..eb36959 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/math.kristaly.24457.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/math.suri.13734.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/math.suri.13734.ps new file mode 100644 index 0000000..c3ef076 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/math.suri.13734.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/math0607661.tudateru.25992.tsuda_takenawa.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/math0607661.tudateru.25992.tsuda_takenawa.pdf new file mode 100644 index 0000000..6d9536b Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/math0607661.tudateru.25992.tsuda_takenawa.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/notex_compositionality.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_compositionality.pdf new file mode 100644 index 0000000..048400d Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_compositionality.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/notex_kkpants.eps b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_kkpants.eps new file mode 100644 index 0000000..489d45e --- /dev/null +++ b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_kkpants.eps @@ -0,0 +1,482 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: KKpants.eps +%%Creator: fig2dev Version 3.2 Patchlevel 3d +%%CreationDate: Tue Dec 12 11:46:01 2006 +%%For: korneel@strings369.rutgers.edu (KORNEEL VAN DEN BROEK) +%%BoundingBox: 0 0 532 439 +%%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 439 moveto 0 0 lineto 532 0 lineto 532 439 lineto closepath clip newpath +11.8 522.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 + /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.06000 0.06000 sc +% +% Fig objects follow +% +7.500 slw +% Ellipse +n 4200 7725 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Polyline +2 slj +n 4200 7725 m 4197 7722 l 4191 7715 l 4181 7705 l 4167 7690 l 4152 7674 l + 4137 7657 l 4122 7641 l 4109 7626 l 4097 7612 l 4087 7599 l + 4078 7587 l 4070 7575 l 4063 7563 l 4056 7552 l 4050 7540 l + 4044 7528 l 4038 7515 l 4032 7501 l 4026 7486 l 4020 7471 l + 4014 7454 l 4009 7436 l 4003 7418 l 3998 7400 l 3993 7381 l + 3988 7361 l 3984 7341 l 3979 7321 l 3975 7300 l 3972 7284 l + 3969 7267 l 3966 7250 l 3962 7231 l 3959 7212 l 3956 7191 l + 3952 7169 l 3949 7147 l 3946 7123 l 3942 7098 l 3939 7072 l + 3936 7045 l 3933 7018 l 3930 6991 l 3927 6963 l 3925 6935 l + 3922 6906 l 3920 6878 l 3918 6850 l 3916 6821 l 3914 6792 l + 3913 6763 l 3911 6739 l 3910 6715 l 3909 6690 l 3908 6664 l + 3907 6637 l 3907 6608 l 3906 6578 l 3905 6546 l 3905 6511 l + 3904 6475 l 3904 6436 l 3903 6395 l 3903 6351 l 3902 6306 l + 3902 6260 l 3901 6214 l 3901 6167 l 3901 6123 l 3901 6081 l + 3900 6042 l 3900 6009 l 3900 5981 l 3900 5959 l 3900 5943 l + 3900 5933 l 3900 5928 l + 3900 5925 l gs col0 s gr +% Polyline +n 4200 7725 m 4203 7722 l 4209 7715 l 4219 7705 l 4233 7690 l 4248 7674 l + 4263 7657 l 4278 7641 l 4291 7626 l 4303 7612 l 4313 7599 l + 4322 7587 l 4330 7575 l 4338 7563 l 4344 7552 l 4350 7540 l + 4356 7528 l 4362 7515 l 4368 7501 l 4374 7486 l 4380 7471 l + 4386 7454 l 4391 7436 l 4397 7418 l 4402 7400 l 4407 7381 l + 4412 7361 l 4416 7341 l 4421 7321 l 4425 7300 l 4428 7284 l + 4431 7267 l 4434 7250 l 4438 7231 l 4441 7212 l 4444 7191 l + 4448 7169 l 4451 7147 l 4454 7123 l 4458 7098 l 4461 7072 l + 4464 7045 l 4467 7018 l 4470 6991 l 4473 6963 l 4475 6935 l + 4478 6906 l 4480 6878 l 4482 6850 l 4484 6821 l 4486 6792 l + 4488 6763 l 4489 6739 l 4490 6715 l 4491 6690 l 4492 6664 l + 4493 6637 l 4493 6608 l 4494 6578 l 4495 6546 l 4495 6511 l + 4496 6475 l 4496 6436 l 4497 6395 l 4497 6351 l 4498 6306 l + 4498 6260 l 4499 6214 l 4499 6167 l 4499 6123 l 4499 6081 l + 4500 6042 l 4500 6009 l 4500 5981 l 4500 5959 l 4500 5943 l + 4500 5933 l 4500 5928 l + 4500 5925 l gs col0 s gr +% Rotated Ellipse +gs +1923 3901 tr +-240.001 rot +n 0 0 75 75 0 360 DrawEllipse 240.001 rot +gs 0.00 setgray ef gr gs col0 s gr +gr + +% Polyline +n 1923 3901 m 1924 3901 l 1927 3900 l 1936 3898 l 1950 3894 l 1969 3890 l + 1991 3885 l 2013 3880 l 2034 3875 l 2054 3872 l 2072 3869 l + 2089 3866 l 2104 3865 l 2118 3864 l 2133 3863 l 2145 3863 l + 2158 3863 l 2172 3864 l 2186 3865 l 2201 3867 l 2217 3869 l + 2233 3872 l 2251 3875 l 2269 3879 l 2287 3884 l 2306 3888 l + 2325 3894 l 2344 3899 l 2363 3905 l 2383 3911 l 2404 3918 l + 2419 3923 l 2435 3929 l 2452 3935 l 2469 3941 l 2488 3948 l + 2507 3956 l 2528 3964 l 2550 3973 l 2572 3982 l 2595 3991 l + 2619 4001 l 2644 4012 l 2669 4023 l 2694 4034 l 2720 4046 l + 2745 4057 l 2771 4069 l 2797 4082 l 2823 4094 l 2849 4107 l + 2875 4120 l 2901 4133 l 2922 4144 l 2943 4155 l 2965 4166 l + 2988 4179 l 3012 4191 l 3038 4205 l 3064 4220 l 3093 4235 l + 3123 4252 l 3155 4270 l 3189 4289 l 3225 4309 l 3262 4330 l + 3301 4352 l 3341 4375 l 3382 4398 l 3422 4421 l 3461 4443 l + 3498 4464 l 3531 4483 l 3560 4499 l 3584 4513 l 3603 4524 l + 3617 4532 l 3626 4537 l 3631 4540 l + 3633 4541 l gs col0 s gr +% Polyline +n 1923 3901 m 1923 3902 l 1924 3905 l 1927 3914 l 1931 3928 l 1937 3947 l + 1943 3968 l 1950 3990 l 1957 4010 l 1963 4029 l 1970 4046 l + 1976 4062 l 1982 4076 l 1988 4089 l 1995 4101 l 2001 4112 l + 2008 4123 l 2016 4135 l 2024 4146 l 2033 4158 l 2043 4171 l + 2054 4184 l 2065 4197 l 2078 4211 l 2091 4225 l 2104 4238 l + 2118 4252 l 2133 4266 l 2148 4280 l 2163 4294 l 2179 4308 l + 2192 4319 l 2204 4330 l 2218 4341 l 2233 4353 l 2248 4366 l + 2264 4379 l 2281 4393 l 2300 4407 l 2319 4422 l 2339 4438 l + 2359 4453 l 2381 4469 l 2403 4486 l 2425 4502 l 2448 4518 l + 2471 4535 l 2494 4551 l 2518 4567 l 2541 4583 l 2565 4599 l + 2589 4615 l 2614 4631 l 2634 4644 l 2654 4657 l 2675 4671 l + 2697 4684 l 2720 4699 l 2745 4714 l 2771 4729 l 2798 4746 l + 2827 4764 l 2859 4783 l 2892 4803 l 2928 4824 l 2965 4846 l + 3003 4868 l 3043 4892 l 3083 4915 l 3123 4939 l 3161 4961 l + 3198 4983 l 3231 5002 l 3260 5019 l 3284 5033 l 3302 5044 l + 3316 5052 l 3325 5057 l 3330 5060 l + 3332 5061 l gs col0 s gr +% Rotated Ellipse +gs +6534 3940 tr +-120.000 rot +n 0 0 75 75 0 360 DrawEllipse 120.000 rot +gs 0.00 setgray ef gr gs col0 s gr +gr + +% Polyline +n 6534 3940 m 6534 3941 l 6533 3944 l 6530 3953 l 6526 3967 l 6520 3986 l + 6514 4007 l 6507 4029 l 6500 4049 l 6494 4068 l 6487 4085 l + 6481 4101 l 6475 4115 l 6469 4128 l 6462 4140 l 6456 4151 l + 6449 4162 l 6442 4174 l 6434 4185 l 6425 4197 l 6415 4210 l + 6404 4223 l 6393 4236 l 6380 4250 l 6367 4264 l 6354 4277 l + 6340 4291 l 6326 4305 l 6311 4319 l 6295 4333 l 6279 4347 l + 6267 4358 l 6254 4369 l 6241 4380 l 6226 4392 l 6211 4405 l + 6195 4418 l 6178 4432 l 6159 4446 l 6140 4461 l 6120 4477 l + 6100 4492 l 6078 4508 l 6056 4525 l 6034 4541 l 6011 4557 l + 5988 4574 l 5965 4590 l 5941 4606 l 5917 4622 l 5894 4638 l + 5869 4654 l 5845 4670 l 5825 4683 l 5804 4696 l 5783 4710 l + 5761 4723 l 5738 4738 l 5714 4753 l 5688 4768 l 5660 4785 l + 5631 4803 l 5599 4822 l 5566 4842 l 5530 4863 l 5493 4885 l + 5455 4907 l 5415 4931 l 5374 4954 l 5335 4978 l 5296 5000 l + 5260 5022 l 5227 5041 l 5198 5058 l 5174 5072 l 5155 5083 l + 5141 5091 l 5132 5096 l 5127 5099 l + 5125 5100 l gs col0 s gr +% Polyline +n 6534 3940 m 6533 3940 l 6530 3939 l 6521 3937 l 6507 3933 l 6488 3929 l + 6466 3924 l 6444 3919 l 6423 3915 l 6403 3911 l 6385 3908 l + 6368 3905 l 6353 3904 l 6339 3903 l 6325 3902 l 6312 3902 l + 6299 3903 l 6285 3903 l 6271 3905 l 6256 3906 l 6240 3909 l + 6224 3911 l 6206 3915 l 6188 3919 l 6170 3923 l 6151 3928 l + 6132 3933 l 6113 3939 l 6094 3945 l 6074 3951 l 6054 3958 l + 6038 3963 l 6022 3969 l 6005 3975 l 5988 3981 l 5969 3988 l + 5950 3996 l 5929 4004 l 5907 4012 l 5885 4022 l 5862 4031 l + 5838 4041 l 5813 4052 l 5788 4063 l 5763 4074 l 5737 4086 l + 5712 4097 l 5686 4109 l 5660 4122 l 5634 4134 l 5609 4147 l + 5583 4160 l 5556 4173 l 5535 4184 l 5514 4195 l 5492 4206 l + 5469 4218 l 5445 4231 l 5420 4245 l 5393 4259 l 5365 4275 l + 5335 4291 l 5303 4309 l 5269 4328 l 5233 4348 l 5195 4369 l + 5156 4392 l 5116 4414 l 5076 4437 l 5035 4460 l 4997 4482 l + 4960 4503 l 4927 4522 l 4898 4538 l 4874 4552 l 4855 4563 l + 4841 4571 l 4832 4576 l 4827 4579 l + 4825 4580 l gs col0 s gr +% Polyline +n 3496 4464 m 3495 4464 l 3489 4463 l 3477 4461 l 3463 4460 l 3450 4458 l + 3439 4458 l 3430 4457 l 3421 4458 l 3412 4459 l 3403 4460 l + 3393 4462 l 3383 4465 l 3373 4469 l 3362 4473 l 3352 4478 l + 3343 4483 l 3335 4488 l 3327 4493 l 3318 4499 l 3308 4506 l + 3299 4513 l 3289 4522 l 3279 4530 l 3270 4539 l 3262 4548 l + 3253 4558 l 3246 4566 l 3239 4576 l 3232 4585 l 3225 4596 l + 3218 4608 l 3210 4620 l 3203 4632 l 3197 4645 l 3191 4657 l + 3185 4669 l 3180 4681 l 3175 4693 l 3171 4705 l 3167 4718 l + 3163 4731 l 3160 4744 l 3157 4758 l 3154 4772 l 3152 4787 l + 3150 4800 l 3149 4814 l 3148 4826 l 3148 4838 l 3149 4849 l + 3150 4862 l 3151 4875 l 3154 4890 l 3158 4906 l 3164 4923 l + 3169 4942 l 3175 4959 l 3179 4971 l 3181 4976 l + 3181 4977 l gs col0 s gr +% Polyline + [60] 0 sd +n 3234 5004 m 3235 5004 l 3240 5004 l 3250 5004 l 3262 5004 l 3273 5004 l + 3283 5004 l 3291 5003 l 3299 5002 l 3307 5001 l 3316 4999 l + 3325 4996 l 3335 4993 l 3345 4989 l 3355 4985 l 3364 4980 l + 3373 4975 l 3381 4971 l 3388 4967 l 3396 4961 l 3405 4956 l + 3414 4949 l 3422 4943 l 3431 4936 l 3439 4929 l 3446 4922 l + 3454 4915 l 3461 4908 l 3468 4900 l 3476 4892 l 3484 4883 l + 3491 4874 l 3498 4864 l 3505 4855 l 3511 4847 l 3517 4839 l + 3522 4831 l 3527 4821 l 3532 4812 l 3537 4802 l 3541 4791 l + 3545 4780 l 3548 4770 l 3550 4759 l 3552 4749 l 3554 4741 l + 3555 4731 l 3556 4721 l 3557 4710 l 3557 4699 l 3558 4688 l + 3558 4677 l 3558 4666 l 3558 4656 l 3558 4646 l 3558 4633 l + 3557 4621 l 3556 4607 l 3555 4594 l 3554 4581 l 3552 4569 l + 3550 4558 l 3548 4548 l 3546 4538 l 3543 4529 l 3539 4518 l + 3534 4505 l 3529 4492 l 3525 4482 l 3522 4476 l + 3522 4475 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3427 4518 m 3420 4517 l 3412 4518 l 3405 4519 l 3397 4521 l 3389 4523 l + 3381 4527 l 3375 4530 l 3368 4534 l 3360 4538 l 3352 4544 l + 3344 4549 l 3336 4555 l 3329 4561 l 3323 4567 l 3316 4573 l + 3309 4579 l 3302 4586 l 3296 4593 l 3289 4601 l 3283 4609 l + 3277 4617 l 3272 4625 l 3267 4633 l 3261 4642 l 3256 4652 l + 3251 4663 l 3246 4674 l 3241 4685 l 3237 4695 l 3233 4704 l + 3230 4714 l 3227 4724 l 3224 4734 l 3221 4745 l 3218 4757 l + 3216 4767 l 3215 4778 l 3213 4788 l 3212 4799 l 3212 4810 l + 3211 4822 l 3211 4834 l 3212 4847 l 3213 4858 l 3214 4868 l + 3216 4878 l 3219 4889 l 3223 4900 l 3229 4910 l 3235 4919 l + 3242 4926 l 3249 4932 l 3257 4936 l 3266 4939 l 3276 4940 l + 3287 4941 l 3297 4940 l 3308 4938 l 3315 4935 l 3324 4932 l + 3333 4928 l 3343 4924 l 3352 4919 l 3361 4914 l 3370 4908 l + 3378 4903 l 3385 4898 l 3393 4892 l 3401 4886 l 3409 4879 l + 3417 4872 l 3425 4864 l 3432 4857 l 3438 4849 l 3445 4841 l + 3451 4832 l 3458 4822 l 3464 4812 l 3470 4801 l 3475 4790 l + 3480 4779 l 3484 4769 l 3488 4759 l 3491 4748 l 3494 4737 l + 3496 4724 l 3498 4712 l 3500 4700 l 3501 4688 l 3502 4677 l + 3502 4665 l 3502 4653 l 3502 4640 l 3502 4626 l 3501 4614 l + 3500 4602 l 3499 4592 l 3498 4583 l 3497 4573 l 3495 4565 l + 3492 4557 l 3490 4551 l 3488 4546 l 3486 4543 l 3484 4539 l + 3481 4535 l 3477 4531 l 3473 4528 l 3468 4526 l 3463 4524 l + 3457 4522 l 3449 4520 l 3441 4519 l 3434 4518 l + cp gs col0 s gr [] 0 sd +% Polyline +n 4880 4550 m 4881 4550 l 4886 4548 l 4895 4545 l 4906 4542 l 4917 4539 l + 4926 4537 l 4934 4535 l 4942 4534 l 4949 4533 l 4957 4533 l + 4966 4533 l 4976 4534 l 4985 4535 l 4995 4537 l 5004 4539 l + 5013 4542 l 5023 4545 l 5033 4549 l 5044 4554 l 5055 4559 l + 5067 4565 l 5078 4572 l 5088 4579 l 5098 4586 l 5106 4592 l + 5114 4598 l 5122 4605 l 5131 4613 l 5139 4622 l 5148 4630 l + 5156 4639 l 5163 4648 l 5170 4657 l 5177 4666 l 5183 4675 l + 5189 4685 l 5196 4695 l 5202 4707 l 5208 4719 l 5214 4731 l + 5220 4743 l 5225 4754 l 5229 4766 l 5233 4777 l 5236 4788 l + 5239 4799 l 5241 4811 l 5244 4824 l 5246 4837 l 5247 4850 l + 5249 4862 l 5249 4873 l 5250 4884 l 5250 4894 l 5250 4906 l + 5249 4919 l 5248 4931 l 5246 4944 l 5244 4956 l 5242 4967 l + 5239 4977 l 5237 4986 l 5234 4995 l 5230 5004 l 5225 5014 l + 5220 5026 l 5213 5038 l 5208 5049 l 5205 5054 l + 5205 5055 l gs col0 s gr +% Polyline + [60] 0 sd +n 4820 4585 m 4819 4587 l 4815 4594 l 4810 4606 l 4804 4618 l 4800 4628 l + 4798 4638 l 4796 4647 l 4794 4656 l 4792 4667 l 4791 4679 l + 4790 4691 l 4790 4704 l 4790 4716 l 4790 4728 l 4791 4737 l + 4792 4747 l 4793 4758 l 4795 4769 l 4797 4781 l 4799 4793 l + 4802 4805 l 4805 4816 l 4808 4827 l 4812 4838 l 4816 4849 l + 4820 4861 l 4825 4873 l 4831 4886 l 4837 4899 l 4843 4912 l + 4850 4924 l 4856 4935 l 4863 4945 l 4870 4954 l 4877 4963 l + 4885 4971 l 4893 4980 l 4902 4988 l 4911 4996 l 4921 5003 l + 4930 5010 l 4939 5016 l 4949 5021 l 4958 5027 l 4967 5032 l + 4976 5037 l 4986 5042 l 4997 5046 l 5007 5051 l 5018 5055 l + 5029 5059 l 5038 5062 l 5048 5065 l 5057 5068 l 5068 5070 l + 5079 5072 l 5090 5073 l 5101 5074 l 5111 5074 l 5121 5074 l + 5129 5073 l 5137 5073 l 5145 5071 l 5154 5069 l 5163 5066 l + 5173 5063 l 5179 5060 l + 5180 5060 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4864 4643 m 4861 4650 l 4858 4658 l 4856 4667 l 4854 4676 l 4852 4685 l + 4851 4695 l 4851 4704 l 4851 4713 l 4851 4723 l 4852 4733 l + 4854 4744 l 4856 4755 l 4859 4767 l 4862 4778 l 4865 4788 l + 4868 4798 l 4872 4807 l 4876 4817 l 4881 4827 l 4886 4837 l + 4891 4847 l 4897 4857 l 4903 4866 l 4908 4875 l 4914 4884 l + 4921 4893 l 4928 4902 l 4936 4912 l 4945 4921 l 4953 4930 l + 4962 4937 l 4971 4944 l 4980 4951 l 4990 4957 l 5001 4963 l + 5013 4968 l 5024 4973 l 5036 4978 l 5046 4981 l 5056 4984 l + 5065 4987 l 5075 4988 l 5084 4990 l 5094 4991 l 5103 4991 l + 5111 4990 l 5118 4989 l 5125 4988 l 5133 4984 l 5141 4979 l + 5149 4973 l 5155 4966 l 5161 4958 l 5165 4950 l 5168 4943 l + 5170 4936 l 5172 4928 l 5174 4919 l 5175 4909 l 5176 4899 l + 5176 4890 l 5176 4880 l 5175 4870 l 5174 4859 l 5173 4847 l + 5171 4835 l 5169 4822 l 5167 4811 l 5164 4799 l 5162 4789 l + 5159 4779 l 5155 4769 l 5151 4759 l 5147 4748 l 5142 4738 l + 5137 4729 l 5132 4720 l 5127 4712 l 5121 4704 l 5115 4695 l + 5109 4687 l 5102 4678 l 5094 4670 l 5087 4662 l 5080 4655 l + 5073 4649 l 5065 4643 l 5057 4637 l 5049 4632 l 5040 4626 l + 5031 4621 l 5022 4616 l 5014 4613 l 5006 4609 l 4998 4606 l + 4990 4603 l 4982 4601 l 4973 4598 l 4965 4596 l 4957 4595 l + 4950 4593 l 4944 4593 l 4936 4592 l 4928 4591 l 4921 4592 l + 4913 4593 l 4906 4595 l 4900 4598 l 4894 4603 l 4887 4609 l + 4881 4617 l 4874 4625 l 4869 4634 l + cp gs col0 s gr [] 0 sd +% Polyline +n 3905 6255 m 3905 6256 l 3906 6262 l 3908 6272 l 3910 6285 l 3912 6297 l + 3914 6307 l 3916 6316 l 3918 6323 l 3921 6331 l 3924 6338 l + 3927 6346 l 3931 6354 l 3934 6362 l 3938 6369 l 3942 6375 l + 3946 6381 l 3951 6388 l 3957 6395 l 3964 6402 l 3971 6408 l + 3979 6414 l 3987 6418 l 3993 6422 l 4001 6425 l 4010 6429 l + 4020 6432 l 4031 6436 l 4043 6439 l 4055 6442 l 4068 6444 l + 4078 6446 l 4090 6448 l 4103 6450 l 4117 6452 l 4132 6454 l + 4147 6455 l 4162 6457 l 4176 6458 l 4191 6458 l 4204 6458 l + 4218 6458 l 4232 6458 l 4246 6457 l 4261 6455 l 4276 6453 l + 4291 6451 l 4305 6448 l 4318 6446 l 4330 6442 l 4342 6439 l + 4353 6436 l 4363 6431 l 4374 6427 l 4385 6422 l 4395 6417 l + 4405 6411 l 4414 6405 l 4423 6400 l 4430 6394 l 4437 6389 l + 4444 6382 l 4452 6375 l 4459 6368 l 4465 6360 l 4471 6352 l + 4476 6345 l 4480 6338 l 4483 6331 l 4487 6322 l 4489 6312 l + 4492 6299 l 4494 6286 l 4495 6277 l + 4495 6275 l gs col0 s gr +% Polyline + [60] 0 sd +n 3905 6265 m 3906 6264 l 3908 6256 l 3912 6246 l 3917 6236 l 3921 6228 l + 3925 6222 l 3930 6216 l 3937 6209 l 3944 6203 l 3954 6197 l + 3964 6191 l 3974 6187 l 3983 6183 l 3993 6180 l 4004 6176 l + 4017 6173 l 4030 6170 l 4043 6167 l 4055 6165 l 4068 6163 l + 4077 6161 l 4088 6160 l 4099 6158 l 4111 6157 l 4124 6156 l + 4136 6155 l 4149 6154 l 4162 6154 l 4174 6153 l 4186 6153 l + 4198 6153 l 4211 6154 l 4225 6154 l 4240 6155 l 4255 6156 l + 4270 6157 l 4284 6158 l 4297 6160 l 4310 6162 l 4322 6163 l + 4333 6165 l 4344 6167 l 4356 6170 l 4367 6173 l 4378 6176 l + 4389 6179 l 4398 6182 l 4408 6185 l 4416 6188 l 4423 6192 l + 4432 6196 l 4441 6200 l 4450 6205 l 4458 6210 l 4465 6215 l + 4472 6220 l 4477 6225 l 4482 6229 l 4486 6235 l 4490 6242 l + 4494 6250 l 4498 6258 l 4500 6264 l + 4500 6265 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4005 6231 m 3998 6234 l 3992 6239 l 3986 6243 l 3981 6248 l 3978 6254 l + 3975 6259 l 3973 6265 l 3972 6273 l 3972 6281 l 3972 6289 l + 3974 6298 l 3977 6306 l 3979 6312 l 3983 6318 l 3987 6325 l + 3992 6332 l 3998 6339 l 4004 6345 l 4011 6351 l 4018 6356 l + 4026 6361 l 4035 6365 l 4046 6370 l 4057 6374 l 4069 6378 l + 4082 6381 l 4094 6384 l 4107 6386 l 4117 6387 l 4128 6389 l + 4140 6390 l 4152 6391 l 4166 6391 l 4179 6392 l 4192 6392 l + 4204 6391 l 4216 6391 l 4228 6390 l 4239 6389 l 4250 6388 l + 4262 6386 l 4274 6384 l 4286 6381 l 4298 6378 l 4310 6375 l + 4320 6371 l 4330 6368 l 4339 6364 l 4350 6359 l 4361 6353 l + 4372 6347 l 4382 6339 l 4392 6332 l 4399 6325 l 4406 6318 l + 4411 6311 l 4414 6306 l 4416 6300 l 4418 6295 l 4419 6289 l + 4419 6283 l 4418 6277 l 4416 6272 l 4414 6267 l 4411 6263 l + 4408 6258 l 4402 6253 l 4395 6248 l 4387 6243 l 4378 6238 l + 4367 6234 l 4357 6229 l 4346 6226 l 4335 6223 l 4326 6220 l + 4317 6218 l 4307 6215 l 4296 6213 l 4285 6211 l 4274 6209 l + 4264 6207 l 4254 6206 l 4245 6204 l 4236 6203 l 4225 6202 l + 4215 6202 l 4204 6201 l 4194 6201 l 4184 6200 l 4175 6200 l + 4167 6201 l 4159 6201 l 4150 6201 l 4140 6202 l 4131 6203 l + 4122 6203 l 4113 6204 l 4106 6205 l 4098 6206 l 4091 6207 l + 4082 6208 l 4074 6209 l 4065 6211 l 4058 6213 l 4049 6215 l + 4040 6217 l 4030 6220 l 4021 6224 l 4012 6227 l + cp gs col0 s gr [] 0 sd +% Polyline +n 3330 5060 m 3333 5063 l 3340 5068 l 3351 5077 l 3366 5090 l 3385 5106 l + 3405 5122 l 3425 5140 l 3445 5156 l 3463 5172 l 3479 5186 l + 3494 5200 l 3508 5212 l 3521 5224 l 3533 5235 l 3545 5247 l + 3557 5258 l 3569 5270 l 3580 5282 l 3593 5295 l 3605 5308 l + 3618 5322 l 3630 5336 l 3643 5350 l 3655 5365 l 3667 5379 l + 3678 5393 l 3689 5406 l 3700 5419 l 3709 5432 l 3719 5444 l + 3728 5456 l 3737 5469 l 3747 5483 l 3757 5497 l 3766 5512 l + 3776 5527 l 3785 5543 l 3794 5559 l 3803 5575 l 3811 5591 l + 3819 5607 l 3826 5623 l 3832 5639 l 3838 5654 l 3843 5670 l + 3848 5684 l 3852 5699 l 3856 5714 l 3860 5731 l 3865 5750 l + 3869 5771 l 3874 5794 l 3878 5818 l 3883 5844 l 3888 5870 l + 3892 5894 l 3895 5913 l 3898 5928 l 3899 5936 l 3900 5939 l + + 3900 5940 l gs col0 s gr +% Polyline +n 3630 4540 m 3631 4540 l 3635 4542 l 3644 4546 l 3660 4552 l 3680 4561 l + 3704 4571 l 3728 4581 l 3752 4590 l 3774 4599 l 3794 4606 l + 3812 4613 l 3830 4619 l 3846 4625 l 3863 4630 l 3878 4635 l + 3894 4639 l 3910 4644 l 3927 4648 l 3945 4652 l 3963 4657 l + 3982 4661 l 4002 4665 l 4021 4669 l 4041 4673 l 4060 4677 l + 4079 4680 l 4097 4683 l 4115 4686 l 4132 4688 l 4149 4690 l + 4166 4692 l 4184 4694 l 4201 4695 l 4220 4696 l 4239 4697 l + 4259 4698 l 4279 4698 l 4299 4698 l 4320 4697 l 4341 4697 l + 4361 4695 l 4382 4693 l 4402 4691 l 4421 4689 l 4441 4686 l + 4460 4683 l 4477 4679 l 4495 4675 l 4514 4671 l 4535 4666 l + 4556 4660 l 4580 4653 l 4606 4646 l 4635 4637 l 4665 4628 l + 4696 4618 l 4727 4608 l 4757 4599 l 4783 4590 l 4803 4584 l + 4818 4579 l 4826 4576 l 4829 4575 l + 4830 4575 l gs col0 s gr +% Polyline +n 4497 5937 m 4497 5936 l 4498 5933 l 4500 5925 l 4503 5910 l 4507 5891 l + 4512 5867 l 4518 5842 l 4524 5816 l 4530 5790 l 4536 5767 l + 4541 5746 l 4546 5727 l 4551 5709 l 4556 5693 l 4562 5677 l + 4567 5662 l 4573 5647 l 4579 5631 l 4585 5616 l 4592 5600 l + 4600 5584 l 4608 5567 l 4616 5551 l 4626 5534 l 4635 5518 l + 4645 5502 l 4654 5486 l 4664 5471 l 4675 5457 l 4685 5443 l + 4695 5430 l 4705 5417 l 4716 5404 l 4727 5392 l 4739 5379 l + 4751 5366 l 4764 5352 l 4778 5339 l 4792 5326 l 4807 5313 l + 4821 5300 l 4836 5287 l 4850 5275 l 4864 5264 l 4878 5253 l + 4891 5243 l 4904 5233 l 4917 5224 l 4931 5214 l 4946 5204 l + 4961 5195 l 4977 5184 l 4995 5173 l 5015 5161 l 5036 5149 l + 5059 5136 l 5080 5123 l 5099 5113 l 5114 5104 l 5123 5099 l + 5126 5097 l + 5127 5097 l gs col0 s gr +% Polyline +0 slj +n 3000 7200 m 1800 8400 l 5625 8400 l + 6600 7200 l gs col0 s gr +% Polyline +n 3000 7500 m 1800 8700 l 5625 8700 l + 6600 7500 l gs col0 s gr +% Polyline +n 2997 7351 m 1797 8551 l 5622 8551 l + 6597 7351 l gs col0 s gr +% Polyline +n 6775 4710 m 8350 6285 l 6475 3060 l + 5050 1635 l gs col0 s gr +% Polyline +n 8130 5535 m 8650 6060 l 6775 2835 l + 5350 1410 l gs col0 s gr +% Polyline +n 7995 5665 m 8500 6170 l 6625 2945 l + 5200 1520 l gs col0 s gr +% Polyline +n 1690 4725 m 115 6300 l 1990 3075 l + 3415 1650 l gs col0 s gr +% Polyline +n 335 5550 m -185 6075 l 1690 2850 l + 3115 1425 l gs col0 s gr +% Polyline +n 470 5680 m -35 6185 l 1840 2960 l + 3265 1535 l gs col0 s gr +$F2psEnd +rs diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/notex_orddps5.eps b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_orddps5.eps new file mode 100644 index 0000000..f887010 --- /dev/null +++ b/core/arxiv/submission/process/checks/test_files_tex_produced/notex_orddps5.eps @@ -0,0 +1,291 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Ipelib 60028 (Ipe 6.0 preview 28) +%%CreationDate: D:20070307130136 +%%LanguageLevel: 2 +%%BoundingBox: 32 255 160 384 +%%HiResBoundingBox: 32 255 159.024 383.245 +%%DocumentSuppliedResources: font GNSROM+CMR12 +%%EndComments +%%BeginProlog +%%BeginResource: procset ipe 6.0 60028 +/ipe 40 dict def ipe begin +/np { newpath } def +/m { moveto } def +/l { lineto } def +/c { curveto } def +/h { closepath } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/d { setdash } def +/w { setlinewidth } def +/J { setlinecap } def +/j { setlinejoin } def +/cm { [ 7 1 roll ] concat } def +/q { gsave } def +/Q { grestore } def +/g { setgray } def +/G { setgray } def +/rg { setrgbcolor } def +/RG { setrgbcolor } def +/S { stroke } def +/f* { eofill } def +/f { fill } def +/ipeMakeFont { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/ipeFontSize 0 def +/Tf { dup /ipeFontSize exch store selectfont } def +/Td { translate } def +/BT { gsave } def +/ET { grestore } def +/TJ { 0 0 moveto { dup type /stringtype eq + { show } { ipeFontSize mul -0.001 mul 0 rmoveto } ifelse +} forall } def +end +%%EndResource +%%EndProlog +%%BeginSetup +ipe begin +%%BeginResource: font GNSROM+CMR12 +%!PS-AdobeFont-1.1: CMR12 1.0 +%%CreationDate: 1991 Aug 20 16:38:05 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /GNSROM+CMR12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +readonly def +/FontBBox{-34 -251 988 750}readonly def +/UniqueID 5000794 def +currentdict end +currentfile eexec +d9d66f633b846a97b686a97e45a3d0aa052a014267b7904eb3c0d3bd0b83d891 +016ca6ca4b712adeb258faab9a130ee605e61f77fc1b738abc7c51cd46ef8171 +9098d5fee67660e69a7ab91b58f29a4d79e57022f783eb0fbbb6d4f4ec35014f +d2decba99459a4c59df0c6eba150284454e707dc2100c15b76b4c19b84363758 +469a6c558785b226332152109871a9883487dd7710949204ddcf837e6a8708b8 +2bdbf16fbc7512faa308a093fe5cf4e9d2405b169cd5365d6eced5d768d66d6c +68618b8c482b341f8ca38e9bb9bafcfaad9c2f3fd033b62690986ed43d9c9361 +3645b82392d5cae11a7cb49d7e2e82dcd485cba04c77322eb2e6a79d73dc194e +59c120a2dabb9bf72e2cf256dd6eb54eecba588101abd933b57ce8a3a0d16b28 +51d7494f73096df53bdc66bbf896b587df9643317d5f610cd9088f9849126f23 +dde030f7b277dd99055c8b119cae9c99158ac4e150cdfc2c66ed92ebb4cc092a +aa078ce16247a1335ad332daa950d20395a7384c33ff72eaa31a5b89766e635f +45c4c068ad7ee867398f0381b07cb94d29ff097d59ff9961d195a948e3d87c31 +821e9295a56d21875b41988f7a16a1587050c3c71b4e4355bb37f255d6b237ce +96f25467f70fa19e0f85785ff49068949ccc79f2f8ae57d5f79bb9c5cf5eed5d +9857b9967d9b96cdcf73d5d65ff75afabb66734018bae264597220c89fd17379 +26764a9302d078b4eb0e29178c878fd61007eea2ddb119ae88c57ecfef4b71e4 +140a34951ddc3568a84cc92371a789021a103a1a347050fda6ecf7903f67d213 +1d0c7c474a9053866e9c88e65e6932ba87a73686eab0019389f84d159809c498 +1e7a30ed942eb211b00dbff5bcc720f4e276c3339b31b6eabbb078430e6a09bb +377d3061a20b1eb98796b8607eecbc699445eaa866c38e02df59f5edd378303a +0733b90e7835c0aaf32ba04f1566d8161ea89cd4d14ddb953f8b910bfc8a7f03 +5020f55ef8fc2640adada156f6cf8f2eb6610f7ee8874a26cbe7cd154469b9f4 +ed76886b3fb679ffdeb59bb6c55af7087ba48b75ee2fb374b19bcc421a963e15 +fe05ecaaf9eecdf4b2715010a320102e6f8ccaa342fa11532671c9a1de45a7d9 +4e7398ee732df41fa081e9c381935ee598f99026b4f993326c31171c52b067ab +a36d6de0ae5054ee483d69ff1aa9ec4b2c295266189fd8a579bd1fb4638d08d5 +2255530dd5376e4f5fe107669aad58fc31be458c502c77407d9a16234dafeebe +526ab10356bc765523380468314dfa4c44f0e49d7dc27e837c1336fd333cf75a +62f4b2f2241cb3cff95301f221ddcd09406058eccd3040021a448884aec3af60 +6765565b6dd368f9f2fe06e87487b27afe1818388924819817c4ac74fd60f2ed +3d58187453c70941cf24df2319f739f720f28d615cba95b3470dd65bf7a5d2da +63d84b776be54c9c56e8ee19c8d2836fe542cbdfae2a341b680694c51204576d +f5a36341774ea7e99d97835e6e0a2b51f8387980011bb9ca0242e4a1724be7a5 +865a4854ab3e6cca669b42739283c80b98a821bcf7c3abbc21e7b8be511812ee +87ea033db9eccb72effacd0e79cae2eb531a42df024a6bcd51eb07d859e6a248 +7dad7bb67af311618b9f720045d45542e4033f34d9124c679527b26532e98c1a +e8ba0b35d56821c078a420483cfa956d9506170124de2d7018859f748d2e3d06 +90ce1b128ac7ed023de6937ffd2d282ba818ff376ca777dd2c368e63522b3f20 +eced5a98ac1ec996a270b9c5e350cf0e6f9463d7421a8bb5dbdda59fb8b2fd87 +5aba8d15d32b4e7e4ec8dba8ad2740a247b0bde3b8b66b8aa67ed2f0a882dc46 +e64743bfa8d02eb310d94e7902d228a1c341b4275f61149c57272e9afed6671b +6e4f6c664edbde799605f3a4801caaaf9d120c30012a418e6a4b46f0ec7a6d6f +a5ac94b9d6b9664791960bf2795af690e2b0b8ac3026c10bf8b34be898bf8ed0 +63398d3c2477dfcf18c7ee96fa77819c21d6941495012b168f44f7e3a3921a6a +ef395551580dcfcb265ca6197f99629d93a1ace84431401aa9c1c3612155ea6a +647143a27096f9888845c8a9f854d97a612b70b8e3747c6011d7a7921e277f92 +c9ef685993e9b997a14aed8bc8cb5248ca44cce12d78d723011c782c45f89e54 +8896fc57fbe51e4b2b5086dbbedba17f0bb7c0ad290f60828a20b230488274d5 +519f3697108bac67608121e7b1ad381309d3edd2d7a3e1559bb8e810504ac599 +ef2dd0c2df1c6a0e8cf2dad4771c37ed50575c6e70a1da4a5c6d23e481e1a746 +79c4ffb2a6f818fb11b460b133805a37f1be61fbe3356e22077178a9f93b9089 +0c056389187dd486e3434b54f0cb8d8421302b58b4662e4fe9731b5987cfc511 +735d0b333d029b5018dcc76e0b8e5b563cb1aa7509e6f7c5fada5d5b4e3c2a89 +2325464ee96b84bdb5292194ddf519ae80953d5f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndResource +/F15 /GNSROM+CMR12 +[ /.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/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef + /.notdef/one/two/three/four/five/.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/.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 + /.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/.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/.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/.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/.notdef/.notdef/.notdef/.notdef ] +ipeMakeFont +%%EndSetup +0 J 1 j +q 0.8 w +43.6208 329.897 m +63.7069 268.078 l +S +Q +q 0.8 w +96.2069 368.103 m +43.6208 329.897 l +S +Q +q 0.8 w +128.707 268.078 m +148.793 329.897 l +S +Q +q 0.8 w +63.7069 268.078 m +128.707 268.078 l +S +Q +q 0.8 w +148.793 329.897 m +96.2069 368.103 l +S +Q +q 0.8 w +43.6208 329.897 m +148.793 329.897 l +S +Q +q 0.8 w +96.2069 368.103 m +63.7069 268.078 l +S +Q +q 0.8 w +96.2069 368.103 m +128.707 268.078 l +S +Q +q 0.8 w +128.707 268.078 m +43.6208 329.897 l +S +Q +q 0.8 w +63.7069 268.078 m +148.793 329.897 l +S +Q +q 1 0 0 1 59 255 cm 1 0 0 1 0 0 cm 0 g +0 G + +1 0 0 1 0 -782.755 cm +BT +/F15 14.346 Tf 0 782.755 Td[(4)]TJ +ET +Q +q 1 0 0 1 32 326 cm 1 0 0 1 0 0 cm 0 g +0 G + +1 0 0 1 0 -782.755 cm +BT +/F15 14.346 Tf 0 782.755 Td[(5)]TJ +ET +Q +q 1 0 0 1 127 255 cm 1 0 0 1 0 0 cm 0 g +0 G + +1 0 0 1 0 -782.755 cm +BT +/F15 14.346 Tf 0 782.755 Td[(3)]TJ +ET +Q +q 1 0 0 1 152 325 cm 1 0 0 1 0 0 cm 0 g +0 G + +1 0 0 1 0 -782.755 cm +BT +/F15 14.346 Tf 0 782.755 Td[(2)]TJ +ET +Q +q 1 0 0 1 93 374 cm 1 0 0 1 0 0 cm 0 g +0 G + +1 0 0 1 0 -782.755 cm +BT +/F15 14.346 Tf 0 782.755 Td[(1)]TJ +ET +Q +showpage +%%BeginIpeXml: /FlateDecode +%GhTisc'$d7%*.g!KuUH#N,6OA*Q"eBcL`Ck0uUDLA:huWIJPG[_GZbMd+pGsE$RmKkoW>J9jNEX +%m'itMPft7Ba'd<8OP@K[?cZq@6J'7`MGHL_fk?g4bP!5/<[IY@8Kq>;BSAbr/;&(LV.I73.DoOW +%DkB\2khD+-CdQgdY_o[M;mf?WA''BA8i0ruHe=!/=[LTfi=LSDX +%"2p>`(Y,L`4-eFC>,U>$3-/iT"kj$:(EB"BYkk7-:HacB].XN1Pullq0:]HmgOj:j&2JEh=`>l>P0,i]`V'2Ti:[Z$jTej\?=XhM5%ca=.O7nKXtMB$oE><8Imqh? +%%EndIpeXml +%%Trailer +end +%%EOF diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/paperfinal.PDF b/core/arxiv/submission/process/checks/test_files_tex_produced/paperfinal.PDF new file mode 100644 index 0000000..b5241a6 Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/paperfinal.PDF differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/physics-0611280.pdomokos.2059.eps b/core/arxiv/submission/process/checks/test_files_tex_produced/physics-0611280.pdomokos.2059.eps new file mode 100644 index 0000000..485a29a --- /dev/null +++ b/core/arxiv/submission/process/checks/test_files_tex_produced/physics-0611280.pdomokos.2059.eps @@ -0,0 +1,1032 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software +%%Title: figtmp.dvi +%%BoundingBox: 100 449 470 660 +%%DocumentFonts: CMSY10 CMMI12 CMMI10 CMR12 CMR10 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -o cb_all.eps -E figtmp.dvi +%DVIPSParameters: dpi=600, compressed +%DVIPSSource: TeX output 2007.03.02:1553 +%%BeginProcSet: texc.pro +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 +1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx +0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx +sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ +rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp +gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B +/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ +/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ +A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy +get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} +ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp +fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 +{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add +chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ +1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} +forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: bbad153f.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9 +% +/TeXbbad153fEncoding [ +/minus /periodcentered /multiply /asteriskmath /divide /diamondmath +/plusminus /minusplus /circleplus /circleminus /circlemultiply +/circledivide /circledot /circlecopyrt /openbullet /bullet +/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal +/greaterequal /precedesequal /followsequal /similar /approxequal +/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows +/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast +/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup +/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional +/prime /infinity /element /owner /triangle /triangleinv /negationslash +/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur +/latticetop /perpendicular /aleph /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 /union /intersection +/unionmulti /logicaland /logicalor /turnstileleft /turnstileright +/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright +/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv +/backslash /wreathproduct /radical /coproduct /nabla /integral +/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section +/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft +/.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 +/minus /periodcentered /multiply /asteriskmath /divide /diamondmath +/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef +/circlemultiply /circledivide /circledot /circlecopyrt /openbullet +/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset +/lessequal /greaterequal /precedesequal /followsequal /similar +/approxequal /propersubset /propersuperset /lessmuch /greatermuch +/precedes /follows /arrowleft /spade /.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 /.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 +] def + +%%EndProcSet +%%BeginProcSet: aae443f0.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10 +% +/TeXaae443f0Encoding [ +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega +/alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa +/lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi +/omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf +/arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft +/arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle +/twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle +/sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash +/greater /star /partialdiff /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 /flat /natural /sharp /slurbelow +/slurabove /lscript /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 /dotlessi /dotlessj /weierstrass /vector +/tie /psi /.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 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi +/.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta +/theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon +/phi /chi /psi /tie /.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 /.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 +] def + +%%EndProcSet +%%BeginProcSet: f7b6d320.enc +% Thomas Esser, Dec 2002. public domain +% +% Encoding for: +% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10 +% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8 +% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 +% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10 +% +/TeXf7b6d320Encoding [ +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega +/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve +/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash +/suppress /exclam /quotedblright /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 /exclamdown /equal /questiondown /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 /quotedblleft /bracketright /circumflex /dotaccent +/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 /endash /emdash /hungarumlaut /tilde /dieresis /suppress +/.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 +/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef +/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute +/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE +/OE /Oslash /suppress /dieresis /.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 /.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 +] def + +%%EndProcSet +%%BeginProcSet: texps.pro +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginProcSet: special.pro +%! +TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N +/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N +/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N +/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ +/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho +X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B +/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ +/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known +{userdict/md get type/dicttype eq{userdict begin md length 10 add md +maxlength ge{/md md dup length 20 add dict copy def}if end md begin +/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S +atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ +itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll +transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll +curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf +pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} +if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 +-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip +yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub +neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ +noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop +90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get +neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr +1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr +2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 +-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S +TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ +Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale +}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState +save N userdict maxlength dict begin/magscale true def normalscale +currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts +/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x +psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx +psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub +TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def +@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll +newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto +closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N +/@beginspecial{SDict begin/SpecialSave save N gsave normalscale +currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} +N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs +neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate +rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse +scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg +lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx +ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N +/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ +pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave +restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B +/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 +setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY +moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix +matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc +savematrix setmatrix}N end + +%%EndProcSet +%%BeginProcSet: color.pro +%! +TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop +setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll +}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def +/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ +setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ +/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch +known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC +/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC +/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 +setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 +setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 +0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC +/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 +setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 +0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ +0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ +0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC +/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 +setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 +setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 +0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC +/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 +setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 +0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ +0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ +0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC +/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 +setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC +/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 +0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 +0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 +0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 +setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 +0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC +/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 +setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 +0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 +1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC +/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 +setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ +0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} +DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 +setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 +setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 +setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end + +%%EndProcSet +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390C98D93BE299A9CB +689CDA9BE6BEA47570D9D15DC614719507F27069622E7DB1A97F7B6FF5A5A0C5 +78162E7A9CF76FF72A34097236DF64DA4B61645C7326058030E2B5AABFCC44D0 +49E9CD83D81D8ECA953BDB8CA81CD3D122FAB35612C9C3F6C7F22B666462A78C +AC5473F8755B70B582C0D4C3C9D8C70EE755D41A42C8C17F066414DC21B33111 +A188A5FDDC2D6B02C0965CDC0D91DF1A487ABBBBE2E2896CE0B4BFBE38C79866 +BCD14C2C92449525BD879F6BC320C05FEF8BF68D616695ACD14B3594882B4914 +5B7569629AF50EBCF7152E3715510FBF60F1675D5259715B293A3D7E844764F8 +4B88D997BA5C7B7AB6B104E77F7769C22788334A91C91F02CE675DC14E1FDE5A +F8A03756C12F189494DBC735E3C86A6D4BC4D005E323AC4D7CEF6E1820F9F184 +4DD2EC4C5C58AEE4B5344077AFCCCD82CFC289D46552563B36DA5DAF3C179C90 +BBB4163F2E88909E040769367672B37254345F892D42DF5D5261EAB4CFD4745D +7D72D01D779DEA580D7AA0897250CB8CC10EF282B3A1899F63F375E39C44176C +B688860BFB595CCC7CBCCB691AC411B789BA30467225F97D7DBD8179CAB93A9E +05CA8F6CC9A9DEC6301E50A6D827B9345229AA0B732DF281018112334A4509BA +E36C499E691A196C0428EBE7C79865D65FC5F41579FA7304875A328BF8EE82AE +FFB1801FE2821C5D6A30B660CE45766045F6F10533CE6E639FDBB5FBCC38C734 +7A320B3DD912D91158DB85B00E4F8B9558C0D306EEFBF8D6007133C8771AD91F +D51A06D29848E601E8CACC16A19DB1E12FCC465021DB9FAF78B2F50DDC9ED078 +153735B8096E0CE52D1CD5B33E8CEEB6CC956AE0E00D38A7E5BC9D423055C3C4 +4741A551BB8DA07EABDE53E57F0AD958C042C1CD83542B6AB39FAFEB9B5735F6 +766B8286A76125407B7DD85FA76D6C09560FE7DD1F306542166DFDCE8D858807 +7482417CDB9880647E0782F3BC274BEAE4F156F6B68B80C5B7FAAE296CF16D3C +C0054A8DC8C21A9FD802E6B2E1141C6681F4417A20 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR12 +%!PS-AdobeFont-1.1: CMR12 1.0 +%%CreationDate: 1991 Aug 20 16:38:05 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-34 -251 988 750}readonly def +/UniqueID 5000794 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E +59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28 +51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23 +DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A +AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F +45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31 +821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE +96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D +9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379 +26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4 +140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213 +1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498 +1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB +377D3061A20B1EB98796B8607EECBC699445EAA866C38E02DF59F5EDD378303A +0733B90E7835C0AAF32BA04F1566D8161EA89CD4D14DDB953F8B910BFC8A7F03 +5020F55EF8FC2640ADADA156F6CF8F2EB6610F7EE8874A26CBE7CD154469B9F4 +ED76886B3FB679FFDEB59BB6C55AF7087BA48B75EE2FB374B19BCC421A963E15 +FE05ECAAF9EECDF4B2715010A320102E6F8CCAA342FA11532671CEBB9549F271 +E0F198850AC53073804172D93FF181F38F30F40B1626E44E7E1E5EEEB318C143 +99DC2865F073AA66710E37D6B831A8B58AAB1A498C32847B97375315CF8189C7 +9E597C506F9D93310DDC0466A35F37958DC687952BB9B3B214A8CB931ADBE073 +6426DB16F523069E738EE906CD9A89F952E6E3981D3D803941BDCBE3A7A3F97A +CDDFB1AE7D7EAE2BE886D9B8A3E7C7B25F717E4C0EDA82BFB0C1BEF4897E3DF5 +2FEB1B00975D7DCDEC19E3997666110FFB22412C122656C755C9DBA5403D89CF +BBC9A28FDDF52C9F9CC5A60994C69FAB8F929246D0F2FBA0535A7AA802BFF7E0 +CF4DB4E03946C9B789A9F405D96434658CF3F87DD3399DD9DF850995EB8F851F +5A71E58DFE22FADF50DFC8C27376F3C0699577C796296141F1330E9D248548E6 +4A90F7DD93EA7C07ADFBCF1B95C27B850BF029789CE73E75FA0AB16F15F3B02E +5673BC7F59F9B367E95435EBA56B80909290C397CC95F37967FA6668B5E24962 +A1E6B74B62FFA30865DEE0C8C486E13AB2EE20E6F90A03BAB7E633DA4A36BF9A +3A77D6A1BE8F796EA0CAB0E8D12300FC7C18940AC95F20AA4465DABA3B62D822 +8FB33D8534B4B1BFE4FCD8688ECA689B99EACD5B3C5F9F994C73138CBFB3725C +A764222F6E7934C14EF4FE2A3A2292FE363D680C1100E0DE329162B21A12FBF4 +E89DBE6FDF38F81741F00934B5F60692BD8CB2302FC4A3F4B377CA1EE48E44BD +BCFE7A6B1AF006A0D8367A9165809C3D8253FB29394C9303BE890921CE4D15DC +F2AAF026E016E85F71D65A014603D126E5A7D869BC6B3B4573A1A9E3BAEBA041 +E4F8FE852061C61CEB3CA08BA103F725F9BF330CC56577249FB258D3CC16D2AB +CD6F23C55038D5E69B719D9C28C6408C1400277FA98A4328811BD4C0FC2DD1EA +69D46DB67B06EF48190EE9B7B0E615B89F75D108ECF2BF8187601AD4FADA2070 +EF0F8C2529829DC25A1B7578231A80BB86772761AE986D087CDA5F4F79BC0533 +6FF1478E757433C3ED907E32643405531279396D9CA12BDE8CFEE2F4727BB6B9 +3D28D3399EE13FA702A87BCE8F50C8531F5E2CEFD3619987ABE94E8377F6EB45 +2217734FAFE70441D9C0C7DB855022A44EF068CC4685D8B73A91FC0AB6F2B66D +E9D961C26EEC69A26A450D37153AB0A490CA89D248E8EE1A712AD70F855FF8E0 +09BE0B57F0D82758B9204A230EF5C64B90AE007A9EFF71EC853B2827151AFD6B +8F9B046AC9DD8C5A68D9ACBCB07DB7CA8A603DE0A53CB13DE1616B55B17A1C80 +D0BAC1678EAAC4E293ED20FB6A1A75C52A18B68CFAAE52460B315330844DEB8A +D733AE92E1BDEE0B83A09ECA1A02A3A7C2FF83C843265E385480E01A34F4F748 +ABD07E2766BB84247441B6622C939E026F26B21BC65B5A0C3FBE29C892A95E4A +CABCA9EF90E1C9FD24CD77EEE7358C75B77638E9DD5BF619F330A749D8BEEFDB +059555BBE04448F1A95029C6C52B598C6D5462E535BD462AB568BDDB61155AB9 +DF279EC91D6FF7B46E3FD384C2B0F98105D431B44B4EA089853BEF46AEB3D28E +4938AD844C641A789DB97D127B9DA1DA14DA63CBA103EF4DACCF68255C1C88C5 +5FCB03EC57FACF7057E63A21E773DE5C81DE756766B6D494100854DA12B4EEEE +90C26DFE3103F3271AA8615328FAEB5E08681DCD3C11E7A44A227F4172E95A40 +50750618983BD4AB95B5182AF449F1D7A9F2E4FBE4C616DB83C6197D996A8580 +0999571349399CB95CB0B82F63B9C8B93AE4A035EB7BAD29F2BE445082F2FF1D +0C10A10979190D052A73D64134E845C6E75DC3A124365DF879E1E98152B1BC29 +60D8E7D6BE59FF78C8DDDE69B58AB8DB59CC39E399AC898D1595DCB19A3350B4 +23D9ABB26E8C1E5574C3FBFC6AD859A2A068F5726EF37128F2FB82DCF5134CDF +0B986C14482068CB2BDB429DF3B1CC64605F4DC2192BB4F83ADAFB7D4486CC9B +81CA1C63F1B1457471A6ECA2E733767FCC26BF19101AAD021B747F45DFDB4D86 +F543A8F04DB898DAFEE4AD8954258BAF6808EFE34FA33A278314706B53365BCD +4DC72AD8B666EF27E807704125C2D660C2A4D7627312F61DBF4A7A550700FEDC +89D037CCC842FB9CE869D23682A6F0902259B48E51495132B42806B105DE0046 +E2BA76E5DAAC115813BCBEE2608A943029355A95441F679AA08885AA8B6F19F4 +E65D283F8F0350E36966B5EDA72CA6B63E82C0F0AE0AA07F80191DC8AB659AD7 +FF38D999ED821E397905A83CFAD495A9DC3562AAF88BB8B0FAD31C60DA81E452 +B4BFE95B79FB10BC49E64C030D688ED412E21671CCAB46DC9EA41A83EF2A9E4A +69B213DEA28AE458A073179CA9A77B58D12D8ECEDDDD0AF8AC402A578FFBDBAA +F18DDDAF8285AB38676962E06301D1427D52880B4DC0203B6A863A6622ED9C9D +15780104DA7D92A17DC994AF46017F0F90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +/UniqueID 5087385 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +956017667094CD8DC214A666D7D12CB23EC030318B42FA95C1F83AA4EAB4D51E +C8C46C3D8947F1ECE1879B494F453090F61E99597FC854097F0E75DC2CA3E45F +04949A6EB295BDB3109A4AE340F5AF61B268C778B816A5012CE95CD7139456E2 +55878B3086F53C0876F0D8926C124034D2243A8ACEB1C795B8A3C51805C16DE5 +4A27D6E244A002B3F22C5DF748FE8BD4822CB439A773E9CD5B3BFE7D0F071424 +5E5925B2A78357F261EC50F4D31A9D5407263990021B2C1827CB75B12D161A88 +6B9BE75A1354ECABA79A5D05B49662C26A85E403530EC9E4816A9B80B9835B44 +538AEC6C5C285FC00BDB7CC980C51E880DF4FE221C25D4A186FDDE0A4E660526 +20133D6A76781CD5E394C8647807B7BAD74E3C2154824B83B04DA25080C25C15 +F4EB8C7630071B100E534C54FAFD3253825F08FABC2DD47D2770D966271046BC +2DCFFFDC7812BA23732F88D6C8BA0DE91F09301D0495425B5687B1C8C4F5912C +1A81723625B9349269E523E9B5346C13CB73288E693897CB7E26FD7FF1D73E72 +B87CDF2CA9F7A4A205EC580CD5ADF8A3DD38B5F158F2DB4718D9CA5A749CF615 +D6C79108CA0C6F93C51E845DD6E004CA77A4BE702A7294DBB1B1AEEBAD5D521F +6B06ABC66E6695A170DB00E9CD2D26300F41F3B3F1331A06AF14B0953D9614ED +42CE9A5F98CA54FD10C73042F2ABAC87DADF2A4EDDC580BFD5F704BB06BAFE55 +54F23E3D358D9ADC96F271BCBF4538ED43C7D49607A454681737C0C5642C5083 +1CE8BB0A9A68D7E46BFA5980C6BF343CA5EC2FE168D51F83399E83B53FE98C24 +5C900081116EFE264CF5A6170D9A0BC3069425C71B8704FD4E5FDD1C9E0BA029 +1EA664F7A1D476E317BE02E766113329A662958836A9C0BC70D227B543EC9566 +A2E47A9B6B303CE30AF2A7BE87CE96CF4AC1114306997737E054AD03C3DF6BEA +593CE328C18A7A8808C64463F24B64DD371B8C1662A3B91DD527D922591B0B0B +2D3C4268599CF17EFA3C92480FD44C50A6512A6F0B89C8D1B2793956B761BD97 +54DBE09B2784453BB80C59AD1D2D05344A31BF1C1006A7990A9800468110 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.1: CMMI12 1.100 +%%CreationDate: 1996 Jul 27 08:57:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-30 -250 1026 750}readonly def +/UniqueID 5087386 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 +3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 +EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F +4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 +2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A +323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C +2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 +D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA +5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F +0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D +A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 +2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 +00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 +CA01F44870FC8D92C1C5B6821794636CE3E2B32279985B327D0FE583EF053CD5 +39A863DFA76044B9B6CFABFB22C8BF9126E617BFC091A6AF2B830026E6C4D6C1 +ABDAA045D91790F99917A1B0919C42C81508EC61E3E436B06A04B309E8F84776 +DCA0195E9A8BF2BEBB49386EB93CB56A157959F4488C0E67945814F4704EBA90 +8884AB84284FA0E58F65127074458363E5A5504D88A31C2EE5CF4421803E8892 +3A55A389058F3E4A6F5A3313AC34A06DAE5E8BBB9F579FD003F271A9D51707AA +3C23E689C2886A82D9A10DD65ED1DA6CE467F68D0F4594FE758EB1F1A619B1E4 +F0797106153A67866DD5CD2A3CA46E00E48E0C5EAD1A9B081A737AF25D4C1A1F +B6934E7898832194CA67098B91FDDC961B672E3D28C90E7E62F067A8954F9FAF +E4930D0BD99143F8D12768627B1C5862F92336AB9B61B09F5C5A262564997D43 +2AF7CA21A623593199365E42D00BE8913CF61E3913DAC81C31A7C0AAE1F49609 +0AF2989787A849A1D2A9F8E9ABCF859C382A866FFD692E44BED2BD712EE96FB0 +1BBC810A6D38B86097D6D1691C0F17A22B928D967ABB7D2CA2AC0688095D6880 +BCCFD517153D9B44B675854FCBE661AE761B43E6B411AEB6B34CD47216E2F42F +A89D48B706FA0F4962B9C138640588A73A7B258098325D4E2B67C5740552F512 +938D6F8CBBD933AD0B2DCADF4266695DDDCF0E83B01383CC87EB445F0CF17BF7 +941D7C3401E000F7A0B9F734BF1E188646C0CB417C0CC1AC0843908446356E68 +28D87A468BF33ED20BF2AA55AD8C226686AFA9A7BB8964F90BF22714045BB9C2 +8201BB8D770F196AC8B6D23AC63BB66673FC01B120791967B71F208F1B4E8715 +587E105F375E8CDD4E0321E22343E7C59976C55760C3D36E5CC9829CC497F0E7 +C755BE8AC1F1DA660CEA25A88881E54A25A02F07CA71BEA63B7266ED19C2B378 +FC380A64D5DD0780139FA43AB2FF81CAC193B75F57B898C233B24B28A7E03092 +49C112C005D2E272F3C4DE81D79AE67D00F140D443A80028B769AF76D47B3E62 +6936B80EBD00D5AD61E52AE999E2110AA906E115DCE11CB427EA4930CA3B52AA +40770334FD4ECAB5E19C4E1425E88183F06A0F78C492CDDCCB2705F5D3271DC8 +7106314374028382C419AAADF7E8B62325628687EF059B0CA26B8D6ED26869A4 +56D3BB200AF339954620874CEF544D110BA77074F5BEF37DA01BA8510A9B7EEF +C2F806B48EE654CCB9E8C0F2E1D734F4C16DD66703930ADFCA1870831F598F3F +B0D18E9C350BDFF52AFDE0DE638212946A325B62E26278445D7C0DD39B3F2D72 +6951F021903F4AF4CAF1C971BDA24A6E1EB8540DC5388E8D1609B739AA78D05A +D27F2F714B8D6CB2249E234836C4F8C177A77EFEAB36D1611F62386C5868D6CB +1EFF26AC2BE3BFEC1DF8D3BF762EC3E114DEC06AE6320E0364FDED168C2CBE7E +F7AE5A168A6B6A209E9510066F7671F3D41F7F5C647EEA77BDDB50C6F398E26D +61233A646149DD76A31D868417B6DB05D7E55D2C66BABFC69C90B8E2B966D884 +A47FDCC5CB39794BE42CC5604C70B33F0CD8DE75D368F7531A591179C752A9C3 +CA64526D02261DA479E9D7EE40BE04882EE1F9D27C9C74E21E6FB11954FCD673 +5D9B3F2BDD186B4E8CEE29A2DED139D0381301BF9EE09A71ECFF76B827796395 +E656F53E7CAD76B50DC7DFD5BBFCBEE6842944A53051FB616679649CDAC959D2 +F05CC6BE68F1526BE380AFDD3F0001FA4BB3D934EE363EF8CB6FF50345AB99DB +45B172B4A0C20D11F1AED06A7231ECBE0DB5B496208456A76FA0F2657AF9607B +1C39C2BD470D62EF2C76AC36F172207FC9B026768EED9A9E1F1A781E7F4074DC +CFF1313CA0610F5FD0ED0BCBAD94262E9D0B465E70EF8AEA23F045BAABFC0528 +F45A3BABBE88973F7609F552B361CC165BE7E2636C4906318743A71FB42E6D89 +4ED35D0BAA5B6F3E0C52734B809A4A490EC37C831B490A420470D3D5B4E8726E +90705E4790445DCAF86172C06A6A09ED24188C87B811913BB2A0E85FE9573496 +A2785DD963B49E5DD579E136A875BE0ECB76C60BCEE3EC3F444897BD1CB8562B +2F20F5E3E975865312F3C8BD953E64B7E9973CE78C5DEB5519701FAA868C648C +B5325220EC244065D5C824A5434DE337252EFD3A0548B8301601384CAC4AFB9B +5FD4DA254EEE54965768C074E0E2C61D96D481EBE2E57AEEE870B0286B8050A4 +9F22285ED5BCF7E436A0983602F64A9499F49F44DD621EE43C1B74298E66719E +A5543ADD499104A47EF523C585308E8CE4D3D914F3C17E2571168AD24ED76BC5 +4DF6A01950A526D6AB69AEC538D7E2DD8DEDF03FFFA85D56D3BC5292B21C51D0 +419891F913A5702EB6039764978842456562BE5468DD916A9D55CE19ABED91E5 +547CAFD838AA04F33A93C5D0088E5703C3ECA56E75F4A4CE38A35590FFB46DAA +AA36EF44D01FC19B796DA3B6AD35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /.notdef put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A89589420B938391589B2F200D0033ADF14229B066942498E3F12576F380 +C1629EAFB6B78FDDF61D6E3B55C2F0B040658A81F38F6C1ABA23A795C6FA22C4 +94472745EA4E6DE40FB26F01E894DD35209013AA068CE73EC851CFF14927C401 +5089FFBFD49D923398F2C597ECD98A86668C8B6A8B0842BB2EEC87084C2D215A +AA53350DCCA049F2423DF1F416962FD55E0207F18F4BDBDF45F915289ADA86C9 +6E50F3E2BA9999760F07E939B54B9F1739410E9DB4D05B3614C0DB165D65B7F2 +431B0FC23720EE0E5E1DC1B60DE08F6B4085D227345ED427027CC167B562BA7D +D7D8A86C41B5B514EFA26431B80FECBED7F56A8978EA13525548C8E22176E0D7 +3D63A4E36D7F35F2811C1F945B702EE662EE5F27FDA448605B0FECE833A84A95 +361D5B3A7AF10DFAA056813D15F2877C9DB9654318D6E627AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258437 52099154 1000 600 600 (figtmp.dvi) +@start /Fa 204[42 51[{ TeXf7b6d320Encoding ReEncodeFont }1 +83.022 /CMR10 rf /Fb 199[59 1[59 59 59 1[59 59 59 1[33 +4[46 46 38[98 1[{ TeXf7b6d320Encoding ReEncodeFont }11 +119.552 /CMR12 rf /Fc 155[43 33[63 62 65[{ + TeXaae443f0Encoding ReEncodeFont }3 83.022 /CMMI10 rf +/Fd 143[59 4[61 20[68 1[69 22[59 39[68 7[61 13[{ + TeXaae443f0Encoding ReEncodeFont }7 119.552 /CMMI12 +rf /Fe 182[65 73[{ TeXbbad153fEncoding ReEncodeFont }1 +119.552 /CMSY10 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop Black Black 324 2247 a @beginspecial +@setspecial + /gnudict 256 dict def gnudict begin /Color true def /Solid false def +/gnulinewidth 5.000 def /userlinewidth gnulinewidth def /vshift -33 +def /dl {10.0 mul} def /hpt_ 31.5 def /vpt_ 31.5 def /hpt hpt_ def +/vpt vpt_ def /Rounded false def /M {moveto} bind def /L {lineto} bind +def /R {rmoveto} bind def /V {rlineto} bind def /N {newpath moveto} +bind def /C {setrgbcolor} bind def /f {rlineto fill} bind def /vpt2 +vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke M +0 vshift R show } def /Rshow { currentpoint stroke M dup stringwidth +pop neg vshift R show } def /Cshow { currentpoint stroke M dup stringwidth +pop -2 div vshift R show } def /UP { dup vpt_ mul /vpt exch def hpt_ +mul /hpt exch def /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def /DL +{ Color {setrgbcolor Solid {pop []} if 0 setdash } {pop pop pop 0 +setgray Solid {pop []} if 0 setdash} ifelse } def /BL { stroke userlinewidth +2 mul setlinewidth Rounded { 1 setlinejoin 1 setlinecap } if +} def /AL { stroke userlinewidth 2 div setlinewidth Rounded { +1 setlinejoin 1 setlinecap } if } def /UL { dup gnulinewidth mul /userlinewidth +exch def dup 1 lt {pop 1} if 10 mul /udl exch def } def /PL { +stroke userlinewidth setlinewidth Rounded { 1 setlinejoin 1 setlinecap +} if } def /LTw { PL [] 1 setgray } def /LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def /LT0 +{ PL [] 1 0 0 DL } def /LT1 { PL [4 dl 2 dl] 0 1 0 DL } def /LT2 { +PL [2 dl 3 dl] 0 0 1 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl +1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL +} def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 +{ PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore +} def /Dia { stroke [] 0 setdash 2 copy vpt add M hpt neg vpt neg +V hpt vpt neg V hpt vpt V hpt neg vpt V closepath stroke Pnt } +def /Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V currentpoint stroke +M hpt neg vpt neg R hpt2 0 V stroke } def /Box { stroke [] 0 setdash +2 copy exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke Pnt } def /Crs { stroke [] 0 setdash +exch hpt sub exch vpt add M hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def /TriU { stroke [] 0 setdash +2 copy vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke Pnt } def /Star { 2 copy +Pls Crs } def /BoxF { stroke [] 0 setdash exch hpt sub exch vpt add +M 0 vpt2 neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V closepath fill +} def /TriUF { stroke [] 0 setdash vpt 1.12 mul add M hpt neg vpt +-1.62 mul V hpt 2 mul 0 V hpt neg vpt 1.62 mul V closepath fill +} def /TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M hpt neg +vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V closepath +stroke Pnt } def /TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V hpt 2 mul 0 V hpt neg vpt -1.62 mul V +closepath fill} def /DiaF { stroke [] 0 setdash vpt add M hpt neg +vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V closepath fill } +def /Pent { stroke [] 0 setdash 2 copy gsave translate 0 hpt M 4 +{72 rotate 0 hpt L} repeat closepath stroke grestore Pnt } def /PentF +{ stroke [] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt +L} repeat closepath fill grestore } def /Circle { stroke [] 0 setdash +2 copy hpt 0 360 arc stroke Pnt } def /CircleF { stroke [] 0 setdash +hpt 0 360 arc fill } def /C0 { BL [] 0 setdash 2 copy moveto vpt 90 +450 arc } bind def /C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill vpt 0 360 arc +closepath } bind def /C2 { BL [] 0 setdash 2 copy moveto 2 copy + vpt 90 180 arc closepath fill vpt 0 360 arc closepath +} bind def /C3 { BL [] 0 setdash 2 copy moveto 2 copy vpt 0 +180 arc closepath fill vpt 0 360 arc closepath } bind +def /C4 { BL [] 0 setdash 2 copy moveto 2 copy vpt 180 270 +arc closepath fill vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto 2 copy vpt 0 90 arc + 2 copy moveto 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def /C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill vpt 0 360 +arc closepath } bind def /C7 { BL [] 0 setdash 2 copy moveto +2 copy vpt 0 270 arc closepath fill vpt 0 360 arc closepath +} bind def /C8 { BL [] 0 setdash 2 copy moveto 2 copy vpt 270 +360 arc closepath fill vpt 0 360 arc closepath } bind +def /C9 { BL [] 0 setdash 2 copy moveto 2 copy vpt 270 450 arc +closepath fill vpt 0 360 arc closepath } bind def /C10 +{ BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def /C11 { BL [] 0 setdash +2 copy moveto 2 copy vpt 0 180 arc closepath fill 2 +copy moveto 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def /C12 { BL [] 0 setdash 2 copy +moveto 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def /C13 { BL [] 0 setdash 2 copy +moveto 2 copy vpt 0 90 arc closepath fill 2 copy moveto + 2 copy vpt 180 360 arc closepath fill vpt 0 +360 arc closepath } bind def /C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill vpt 0 360 +arc } bind def /C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath +fill vpt 0 360 arc closepath } bind def /Rec { newpath +4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto +closepath } bind def /Square { dup Rec } bind def /Bsquare { vpt sub +exch vpt sub exch vpt2 Square } bind def /S0 { BL [] 0 setdash 2 copy +moveto 0 vpt rlineto BL Bsquare } bind def /S1 { BL [] 0 setdash 2 +copy vpt Square fill Bsquare } bind def /S2 { BL [] 0 setdash 2 copy +exch vpt sub exch vpt Square fill Bsquare } bind def /S3 { BL [] 0 +setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill +Bsquare } bind def /S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec +fill Bsquare } bind def /S7 { BL [] 0 setdash 2 copy exch vpt sub exch +vpt sub vpt vpt2 Rec fill 2 copy vpt Square fill Bsquare +} bind def /S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare +} bind def /S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare +} bind def /S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 +copy exch vpt sub exch vpt Square fill Bsquare } bind def /S11 +{ BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub +exch vpt2 vpt Rec fill Bsquare } bind def /S12 { BL [] 0 setdash +2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec +fill 2 copy vpt Square fill Bsquare } bind def /S14 { BL [] +0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def /S15 { +BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def /D0 { gsave +translate 45 rotate 0 0 S0 stroke grestore } bind def /D1 { gsave translate +45 rotate 0 0 S1 stroke grestore } bind def /D2 { gsave translate 45 +rotate 0 0 S2 stroke grestore } bind def /D3 { gsave translate 45 rotate +0 0 S3 stroke grestore } bind def /D4 { gsave translate 45 rotate 0 +0 S4 stroke grestore } bind def /D5 { gsave translate 45 rotate 0 0 +S5 stroke grestore } bind def /D6 { gsave translate 45 rotate 0 0 S6 +stroke grestore } bind def /D7 { gsave translate 45 rotate 0 0 S7 stroke +grestore } bind def /D8 { gsave translate 45 rotate 0 0 S8 stroke grestore +} bind def /D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } +bind def /D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } +bind def /D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } +bind def /D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } +bind def /D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } +bind def /D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } +bind def /D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } +bind def /DiaE { stroke [] 0 setdash vpt add M hpt neg vpt neg V +hpt vpt neg V hpt vpt V hpt neg vpt V closepath stroke } def /BoxE +{ stroke [] 0 setdash exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 +0 V 0 vpt2 V hpt2 neg 0 V closepath stroke } def /TriUE { stroke +[] 0 setdash vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul +0 V hpt neg vpt 1.62 mul V closepath stroke } def /TriDE { stroke +[] 0 setdash vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt 2 mul +0 V hpt neg vpt -1.62 mul V closepath stroke } def /PentE { stroke +[] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def /CircE { stroke [] 0 setdash hpt +0 360 arc stroke } def /Opaque { gsave closepath 1 setgray fill grestore +0 setgray closepath } def /DiaW { stroke [] 0 setdash vpt add M hpt +neg vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V Opaque stroke +} def /BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M 0 vpt2 +neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V Opaque stroke } def /TriUW { +stroke [] 0 setdash vpt 1.12 mul add M hpt neg vpt -1.62 mul V +hpt 2 mul 0 V hpt neg vpt 1.62 mul V Opaque stroke } def /TriDW { +stroke [] 0 setdash vpt 1.12 mul sub M hpt neg vpt 1.62 mul V hpt +2 mul 0 V hpt neg vpt -1.62 mul V Opaque stroke } def /PentW { stroke +[] 0 setdash gsave translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def /CircW { stroke [] 0 setdash hpt 0 +360 arc Opaque stroke } def /BoxFill { gsave Rec 1 setgray fill grestore +} def /BoxColFill { gsave Rec /Fillden exch def currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def /ColR ColR Fillden +mul Fillden sub 1 add def /ColG ColG Fillden mul Fillden sub 1 add +def /ColB ColB Fillden mul Fillden sub 1 add def ColR ColG ColB +setrgbcolor fill grestore } def /PatternFill { gsave /PFa [ 9 2 roll +] def PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add +translate PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get +Rec gsave 1 setgray fill grestore clip currentlinewidth 0.5 +mul setlinewidth /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt +def 0 0 M PFa 5 get rotate PFs -2 div dup translate 0 1 PFs PFa +4 get div 1 add floor cvi { PFa 4 get mul 0 M 0 PFs V } for 0 PFa +6 get ne { 0 1 PFs PFa 4 get div 1 add floor cvi { PFa 4 get mul 0 +2 1 roll M PFs 0 V } for } if stroke grestore } def /Symbol-Oblique +/Symbol findfont [1 0 .167 1 0 0] makefont dup length dict begin {1 +index /FID eq {pop pop} {def} ifelse} forall currentdict end definefont +pop end gnudict begin gsave 0 0 translate 0.100 0.100 scale 0 setgray +newpath 1.000 UL LTb 500 300 M 63 0 V 1.000 UL LTb 500 530 M 31 0 V +500 665 M 31 0 V -31 96 R 31 0 V -31 74 R 31 0 V -31 60 R 31 0 V -31 +51 R 31 0 V -31 45 R 31 0 V -31 39 R 31 0 V -31 35 R 63 0 V 1.000 UL +LTb 500 1295 M 31 0 V -31 135 R 31 0 V -31 95 R 31 0 V -31 74 R 31 +0 V -31 61 R 31 0 V -31 51 R 31 0 V -31 45 R 31 0 V -31 39 R 31 0 V +-31 35 R 63 0 V 1.000 UL LTb 500 2060 M 31 0 V 500 300 M 0 63 V 0 1697 +R 0 -63 V 1.000 UL LTb 1136 300 M 0 31 V 0 1729 R 0 -31 V 1508 300 +M 0 31 V 0 1729 R 0 -31 V 1773 300 M 0 31 V 0 1729 R 0 -31 V 1977 300 +M 0 31 V 0 1729 R 0 -31 V 2145 300 M 0 31 V 0 1729 R 0 -31 V 2286 300 +M 0 31 V 0 1729 R 0 -31 V 2409 300 M 0 31 V 0 1729 R 0 -31 V 2517 300 +M 0 31 V 0 1729 R 0 -31 V 1136 300 M 0 63 V 0 1697 R 0 -63 V 1.000 +UL LTb 1773 300 M 0 31 V 0 1729 R 0 -31 V 2145 300 M 0 31 V 0 1729 +R 0 -31 V 2409 300 M 0 31 V 0 1729 R 0 -31 V 2614 300 M 0 31 V 0 1729 +R 0 -31 V 2781 300 M 0 31 V 0 1729 R 0 -31 V 2923 300 M 0 31 V 0 1729 +R 0 -31 V 3045 300 M 0 31 V 0 1729 R 0 -31 V 3153 300 M 0 31 V 0 1729 +R 0 -31 V 1773 300 M 0 63 V 0 1697 R 0 -63 V 1.000 UL LTb 2409 300 +M 0 31 V 0 1729 R 0 -31 V 2781 300 M 0 31 V 0 1729 R 0 -31 V 3045 300 +M 0 31 V 0 1729 R 0 -31 V 3250 300 M 0 31 V 0 1729 R 0 -31 V 2409 300 +M 0 63 V 0 1697 R 0 -63 V 1.000 UL LTb 3045 300 M 0 31 V 0 1729 R 0 +-31 V 0 -1729 R 0 63 V 0 1697 R 0 -63 V 1.000 UL LTb 3250 495 M -63 +0 V 1.000 UL LTb 3250 1100 M -31 0 V 31 355 R -31 0 V 31 251 R -31 +0 V 31 195 R -31 0 V 31 159 R -31 0 V 31 -159 R -63 0 V 1.000 UL LTb +1.000 UL LTb 500 300 M 2750 0 V 0 1760 V -2750 0 V 500 300 L LTb LTb +LTb 1.000 UP 1.200 UP 1.000 UL LT0 3045 906 CircleF 2840 964 CircleF +2635 1076 CircleF 2431 1096 CircleF 2226 1218 CircleF 2021 1299 CircleF +1816 1386 CircleF 1611 1474 CircleF 1406 1559 CircleF 1202 1638 CircleF +997 1714 CircleF 792 1798 CircleF 587 1870 CircleF 1.200 UP 1.000 UL +LT1 3250 879 TriUF 3045 940 TriUF 2840 1007 TriUF 2635 1076 TriUF 2431 +1142 TriUF 2226 1215 TriUF 2021 1289 TriUF 1816 1375 TriUF 1611 1447 +TriUF 1406 1539 TriUF 1202 1612 TriUF 997 1695 TriUF 792 1766 TriUF +587 1845 TriUF 1.200 UP 1.000 UL LT2 3250 854 DiaF 3045 924 DiaF 2840 +986 DiaF 2635 1050 DiaF 2431 1119 DiaF 2226 1194 DiaF 2021 1269 DiaF +1816 1355 DiaF 1611 1439 DiaF 1406 1508 DiaF 1202 1588 DiaF 997 1663 +DiaF 792 1741 DiaF 587 1808 DiaF 1.200 UP 1.000 UL LT2 3250 641 Star +3045 627 Star 2840 637 Star 2635 621 Star 2431 616 Star 2226 623 Star +2021 630 Star 1816 658 Star 1611 682 Star 1406 680 Star 1202 695 Star +997 704 Star 792 714 Star 587 705 Star 2.000 UL LT2 500 1844 M 28 -10 +V 28 -10 V 27 -11 V 28 -10 V 28 -10 V 28 -10 V 27 -11 V 28 -10 V 28 +-10 V 28 -10 V 28 -11 V 27 -10 V 28 -10 V 28 -10 V 28 -11 V 27 -10 +V 28 -10 V 28 -10 V 28 -11 V 28 -10 V 27 -10 V 28 -10 V 28 -11 V 28 +-10 V 27 -10 V 28 -10 V 28 -11 V 28 -10 V 28 -10 V 27 -10 V 28 -11 +V 28 -10 V 28 -10 V 27 -10 V 28 -11 V 28 -10 V 28 -10 V 28 -10 V 27 +-11 V 28 -10 V 28 -10 V 28 -10 V 27 -11 V 28 -10 V 28 -10 V 28 -10 +V 28 -10 V 27 -11 V 28 -10 V 28 -10 V 28 -10 V 27 -11 V 28 -10 V 28 +-10 V 28 -10 V 28 -11 V 27 -10 V 28 -10 V 28 -10 V 28 -11 V 27 -10 +V 28 -10 V 28 -10 V 28 -11 V 28 -10 V 27 -10 V 28 -10 V 28 -11 V 28 +-10 V 27 -10 V 28 -10 V 28 -11 V 28 -10 V 28 -10 V 27 -10 V 28 -11 +V 28 -10 V 28 -10 V 27 -10 V 28 -11 V 28 -10 V 28 -10 V 28 -10 V 27 +-11 V 28 -10 V 28 -10 V 28 -10 V 27 -11 V 28 -10 V 28 -10 V 28 -10 +V 28 -11 V 27 -10 V 28 -10 V 28 -10 V 28 -10 V 27 -11 V 28 -10 V 28 +-10 V 3.000 UL LT2 500 660 M 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 +0 V 27 0 V 28 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V +27 0 V 28 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 +V 28 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 +0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V +28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 +V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 +0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V +28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 28 0 +V 27 0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 28 0 V 28 0 V 27 +0 V 28 0 V 28 0 V 28 0 V 27 0 V 28 0 V 28 0 V 1.000 UL LTb 500 300 +M 2750 0 V 0 1760 V -2750 0 V 500 300 L 1.000 UP stroke grestore end +showpage + +@endspecial 1849 2246 a Fe(I)3240 1264 y + gsave currentpoint currentpoint translate 270 rotate neg exch neg +exch translate + +3240 1264 a 3022 1234 a Fd(V)3090 1252 y Fc(dd)3181 1234 +y Fd(=k)3301 1252 y Fc(B)3372 1234 y Fd(T)3240 1264 y + currentpoint grestore moveto + +3240 1264 a 407 1264 a + gsave currentpoint currentpoint translate 270 rotate neg exch neg +exch translate + 407 1264 a 101 1234 a Fd(p)p Fb(\(0\))p +Fd(\025)379 1191 y Fa(3)423 1234 y Fd(\015)7 b(=)p Fb(\001)648 +1252 y Fc(A)407 1264 y + currentpoint grestore moveto + 407 1264 a 3113 702 a Fb(5)3113 +1873 y(1)2793 2119 y(160)-678 b(80)-648 b(40)f(20)h(10)640 +761 y(1)549 1398 y(0.1)491 2036 y(0.01)p Black Black +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/simple_tex_produced.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/simple_tex_produced.ps new file mode 100644 index 0000000..dc5e67f Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/simple_tex_produced.ps differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/sparsemult6.pdf b/core/arxiv/submission/process/checks/test_files_tex_produced/sparsemult6.pdf new file mode 100644 index 0000000..4d9798b Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/sparsemult6.pdf differ diff --git a/core/arxiv/submission/process/checks/test_files_tex_produced/submit_0169105.ps b/core/arxiv/submission/process/checks/test_files_tex_produced/submit_0169105.ps new file mode 100644 index 0000000..4fcfc3e Binary files /dev/null and b/core/arxiv/submission/process/checks/test_files_tex_produced/submit_0169105.ps differ diff --git a/core/arxiv/submission/process/checks/test_tex_produced.py b/core/arxiv/submission/process/checks/test_tex_produced.py new file mode 100644 index 0000000..482f56d --- /dev/null +++ b/core/arxiv/submission/process/checks/test_tex_produced.py @@ -0,0 +1,349 @@ +"""Test for single-file submission compiled from TeX source (TeX Produced)""" + +from unittest import TestCase +import io +import re +from datetime import datetime + +import os.path +import shutil +import tempfile +import filecmp + +from .tex_produced import get_filtered_pdf_info_from_stream, \ + get_pdf_fonts_from_file, get_pdf_fonts_from_stream, \ + check_tex_produced_pdf_from_stream, check_tex_produced_ps + +parent, _ = os.path.split(os.path.abspath(__file__)) +TEST_FILES_DIRECTORY = os.path.join(parent, 'test_files_tex_produced') + +pdf_tests = [] + +# From Legacy +pdf_tests.append(['astro-ph-0610480.ethanneil.20289.pdf', True, + b'Creator: dvips', 'PDF generated by dvips.']) +pdf_tests.append(['astro-ph-0703077.jf_sauvage.10062.pdf', True, + b'Creator: dvips', 'PDF generated by dvips.']) +pdf_tests.append(['astro-ph.arimoto.4168.pdf', True, + b'Creator: TeX', 'PDF produced by TeX.']) +pdf_tests.append(['astro-ph.ewhelan.18488.pdf', True, b'Creator: TeX', + 'PDF produced by pdfeTeX.']) +pdf_tests.append(['notex_compositionality.pdf', False, '', + 'PDF not produced by TeX.']) +pdf_tests.append(['0706.4412.pdf', True, b'GOFKVE+CMR', 'TeX produced']) +pdf_tests.append(['0706.4328.pdf', True, b'AELGFH+CMR', 'TeX produced']) +pdf_tests.append(['0706.3971.pdf', False, '', 'Not TeX produced.']) +pdf_tests.append(['0706.3927.pdf', True, b'BEUFAJ+CMR', 'TeX produced']) +pdf_tests.append(['0706.3906.pdf', True, b'AGKNIF+CMR', 'TeX produced']) +pdf_tests.append(['0706.3810.pdf', False, '', 'TeX produced']) +pdf_tests.append(['0611002.pdf', True, b'LCUMSC+CMR', '']) + +pdf_tests.append(['GalluzziBalkancom2018.pdf', True, b'Creator: TeX', + '']) + +pdf_tests.append(['2738685LaTeX.pdf', True, b'Creator: LaTeX', + 'PDF generated by LaTeX ']) +pdf_tests.append(['2745765withCairoFonts.pdf', True, b'CairoFont-1-0', + 'Cairo Fonts - TeX produced']) +pdf_tests.append(['2748220withCairoCreator.pdf', True, '', + 'Cairo Software - TeX produced']) + +# False negative and false positive +# Supposed to be True +## pdf_tests.append(['0609584.pdf', True, '', 'No visible TeXisms or fonts.']) +# Incorrectly detected as TeX produced +##pdf_tests.append(['paperfinal.PDF', False, '', 'Not Tex-produced']) + +pdf_tests.append(['sparsemult6.pdf', False, '', + 'TeXmacs is not TeX Produced.']) +pdf_tests.append(['math0607661.tudateru.25992.tsuda_takenawa.pdf', True, + b'Producer: dvipdfmx', 'dvipdfmx']) + +pdf_tests.append(['0706.3906.pdf', True, '', + 'TeX-produced. Detected TeX fonts.']) + +# pdf_tests.append(['', '', '', '']) + +ps_tests = [] + +ps_tests.append(['astro-ph.fdarcang.22633.ps', True, + b'%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software\n', + 'Expected "%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software"']) +ps_tests.append(['hep-th-0701130.pmho.24929.ps', True, + b'%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software\n', + 'Expected "%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software"']) +ps_tests.append(['math.kristaly.24457.ps', True, + b'%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software\n', + 'Expected "%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software"']) +ps_tests.append(['math.suri.13734.ps', True, + b'%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software\n', + 'Expected "%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software"']) +ps_tests.append(['physics-0611280.pdomokos.2059.eps', True, + b'%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software\n', + 'Expected "%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software"']) +ps_tests.append(['notex_kkpants.eps', False, '', 'Not TeX produced. Expected False.']) +ps_tests.append(['notex_orddps5.eps', False, '', 'Not TeX produced. Expected False.']) +ps_tests.append(['0190238.ps', True, b'%RBIBeginFontSubset: PSLGAP+CMR10\n', + 'Detected TeX font(s): "%RBIBeginFontSubset: PSLGAP+CMR10". ' + 'Exported from PDF to allude our check.']) +ps_tests.append(['simple_tex_produced.ps', True, + b'%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye ' + b'Software\n', + 'Expected "%%Creator: dvips(k) 5.96.1 Copyright 2007 Radical ' + 'Eye Software"']) + +pdfinfo_results = {} +pdfinfo_results["astro-ph-0610480.ethanneil.20289.pdf"] = \ + [b'Creator: dvips(k) 5.94b Copyright 2004 Radical Eye Software', + b'Producer: AFPL Ghostscript 8.0', b'Title: ms-012907.dvi'] +pdfinfo_results["astro-ph-0703077.jf_sauvage.10062.pdf"] = \ + [b'Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software', + b'Producer: GPL Ghostscript 8.01', b'Title: article2.dvi'] +pdfinfo_results["astro-ph.arimoto.4168.pdf"] = \ + [b'Creator: TeX output 2007.03.01:2335', b'Producer: dvipdfmx (20040411)'] +pdfinfo_results["astro-ph.ewhelan.18488.pdf"] = \ + [b'Creator: TeX', b'Producer: pdfeTeX-1.21a'] +pdfinfo_results["notex_compositionality.pdf"] = \ + [b'Creator: PDFCreator Version 0.7.1', + b'Producer: AFPL Ghostscript 8.0', + b'Title: compositionality'] +pdfinfo_results["0706.4412.pdf"] = [b'Producer: GNU Ghostscript 7.07'] +pdfinfo_results["0706.4328.pdf"] = \ + [b'Creator: Neevia PDF ToolBox v5.6s - http://neevia.com'] +pdfinfo_results["0706.3971.pdf"] = \ + [b'Producer: Acrobat Distiller 6.0 (Windows)', + b'Title: untitled'] +pdfinfo_results["0706.3927.pdf"] = [b'Producer: GNU Ghostscript 7.07'] +pdfinfo_results["0706.3906.pdf"] = [b'Producer: GNU Ghostscript 7.07'] +pdfinfo_results["0706.3810.pdf"] = \ + [b'Creator: PScript5.dll Version 5.2', + b'Producer: AFPL Ghostscript 8.14', + b'Title: Microsoft Word - Magnetospectroscopy of symmetric and anti.doc'] +pdfinfo_results["0611002.pdf"] = [b'Producer: ESP Ghostscript 815.02'] +pdfinfo_results["GalluzziBalkancom2018.pdf"] = \ + [b'Creator: TeX', b'Producer: pdfTeX-1.40.16'] +pdfinfo_results["2738685LaTeX.pdf"] = \ + [b'Creator: LaTeX with hyperref package', + b'Producer: University of Cambridge', b'Title: '] +pdfinfo_results["2745765withCairoFonts.pdf"] = \ + [b'Creator: Win2PDF', b'Producer: Win2PDF x64 10.0.06 - ' + b'2.6.7.1487.3 http://www.win2pdf.com', + b'Title: proceedings_aew11.pdf'] +pdfinfo_results["2748220withCairoCreator.pdf"] = \ + [b'Creator: cairo 1.15.10 (http://cairographics.org)', + b'Producer: GPL Ghostscript GIT PRERELEASE 9.22'] +pdfinfo_results["sparsemult6.pdf"] = \ + [b'Creator: TeXmacs-1.0.7.2', + b'Producer: GPL Ghostscript 8.61', + b'Title: /Users/vdhoeven/sparsemult6.ps'] +pdfinfo_results["math0607661.tudateru.25992.tsuda_takenawa.pdf"] = \ + [b'Producer: dvipdfmx (20061211)'] +pdfinfo_results["0706.3906.pdf"] = [b'Producer: GNU Ghostscript 7.07'] + + +fonts_result = {} +fonts_result["astro-ph.arimoto.4168.pdf"] = \ + [b'BQKDFC+CMMI10', b'FJDHHB+CMTI8', b'GFPVMA+CMCSC10', b'IUYVZE+CMMI8', + b'JBSLPS+CMSY10', b'KEOZZB+CMTI10', b'LLVPZL+CMBX8', b'MGFVNG+CMMI7', + b'MHETFU+CMEX10', b'OINLAO+CMBX12', b'PJBPQE+CMR6', b'QNJFYJ+CMR9', + b'RNEMGD+CMR8', b'RRHFTI+CMSY8', b'VQCMXZ+CMTI9', b'VVCYYH+CMBX10', + b'VZXGAG+CMSY7', b'WRDBFJ+CMR10', b'XIHSVW+CMMI6', b'YEPHKU+CMR7', + b'YYRHVC+CMBXTI10'] +fonts_result["astro-ph.ewhelan.18488.pdf"] = \ + [b'CBTHOB+CMTI7', b'EQTVAK+CMTI8', b'FQQPIG+CMSY10', b'IJBSRW+CMBX12', + b'NIFFGN+CMR10', b'SMAWOI+CMR7', b'TVIDAU+CMMI12', b'UNHPYC+CMMI8', + b'XMEFCN+CMSY8', b'YAUXGX+CMR12', b'YLCKCI+CMTI12', b'ZPCDVD+CMR8'] +fonts_result["notex_compositionality.pdf"] = \ + [b'CWAAAA+F1', b'EWAAAA+F2', b'GWAAAA+F3', b'MWAAAA+F4', b'OWAAAA+F5', + b'QWAAAA+F6', b'VWAAAA+F7', b'ZVAAAA+F0', b'ZWAAAA+F8'] +fonts_result["0706.4412.pdf"] = \ + [b'BHLPIP+CMBX10', b'BUQRYG+MSBM10', b'DXTPTB+CMBX9', b'EQRCEM+MSAM10', + b'FJANZJ+CMSY10', b'GAYPGU+CMEX10', b'GLAQTF+CMMI9', b'GOFKVE+CMR10', + b'HMISIE+CMSY8', b'IFEJKL+CMMI6', b'IGVNSF+CMR8', b'IMZDWU+EUFM10', + b'MNFOES+CMMI8', b'MUHWZY+CMSY6', b'NSFRYN+EUFM7', b'PQYBSV+CMTI9', + b'PZASQV+CMTT9', b'QDWHPH+CMMI10', b'RDCPQE+CMSY9', b'SBCPXR+CMR9', + b'TMWTQF+CMTI10', b'VABLXE+CMCSC10', b'VJDOJY+CMSY7', + b'WBGKJK+CMCSC10~1b', b'WTJXVK+CMR6'] +fonts_result["0706.4328.pdf"] = \ + [b'AELGFH+CMR10', b'CPQAJF+CMBX10', b'CRRKFF+CMR5', b'EKIZTK+CMMI7', + b'GCTWWA+CMTI10', b'GQIJHC+CMTI9', b'GXDHJM+CMBX7', b'HEXBNV+Helvetica', + b'IIEKLO+CMSY6', b'IIEKLO+CMSY8', b'IOZXTC+CMMI5', b'JTDYKM+CMR9', + b'KZXCGM+CMMIB10', b'LEXOAJ+Helvetica', b'LFAUZY+Helvetica', + b'LLQPNE+Helvetica', b'MNSIZB+Helvetica', b'PODGJB+CMSY10', + b'QEOWAT+CMMI8', b'QEWIFQ+MSBM10', b'REEIPG+CMEX10', b'RKSKKN+Helvetica', + b'ROGAMB+Helvetica-Bold', b'RSTMGR+CMSSBX10', b'SDQGZD+CMSY7', + b'SVZFMT+CMR7', b'THRLCS+CMSS8', b'TJHYLV+CMSS10', b'VJIEOD+CMMI10', + b'WTBOIB+CMR6', b'WTBOIB+CMR8', b'WXLRKO+CMSS12', b'XXALZA+Helvetica', + b'ZRLAKB+CMBX9'] +fonts_result["0706.3971.pdf"] = [ + b'HKECOK+TT1BE3o00', b'HKECOL+TT1BE4o00', b'HKECOM+TT1BE5o00', + b'HKEEGA+TT20D4o00', b'HKEEGB+TT20D5o00', b'HKEEGC+TT20D6o00', + b'HKEEGD+TT20D7o00', b'HKEEGE+TT20D8o00', b'HKEEGF+TT20DDo00', + b'HKEEGG+TT20DEo00', b'HKEEHB+TT20DFo00', b'HKEEHC+TT20E0o00', + b'HKEEHD+TT20E1o00', b'HKEEHE+TT20E2o00', b'HKEEHF+TT20E3o00', + b'HKEEIA+TT20E4o00', b'HKEEIB+TT20E5o00', b'HKEEIC+TT20E6o00', + b'HKEEID+TT20E7o00', b'HKEEIO+TT20E9o00', b'HKEEIP+TT20EAo00', + b'HKEEJA+TT20EBo00', b'HKEEJL+TT20ECo00', b'HKEELA+TT22E5o00', + b'HKEELB+TT22E6o00', b'HKEELM+TT22E7o00', b'HKEEMH+TT2376o00', + b'HKEEMI+TT2377o00', b'HKEEMJ+TT2378o00', b'HKEFII+TT2304o00', + b'HKEFJD+TT2305o00', b'HKEFJE+TT2306o00', b'HKEFJP+TT2330o00', + b'HKEFKA+TT2331o00', b'HKEFKL+TT2332o00', b'HKEFLG+TT235Bo00', + b'HKEFLH+TT235Co00', b'HKEFMC+TT235Do00', b'HKEFMN+TT26FFo00', + b'HKEFNI+TT2700o00', b'HKEFNJ+TT2701o00', b'HKEHBB+TTE06o00'] +fonts_result["0706.3927.pdf"] = \ + [b'AIXQTJ+CMMI7', b'ATZQGV+CMMI10', b'AWELIU+CMSY8', b'BEUFAJ+CMR6', + b'BUHTVT+CMSY7', b'CNDKXA+MSBM10', b'COUOFV+CMR10~30', b'CSEQFF+CMMI9', + b'CUYEJK+CMR8', b'GCHXMO+CMMI6', b'GVEPRH+CMR7', b'HAFSLD+CMBX10~4d', + b'JHATDL+CMTI10~44', b'JYXCFL+CMMI8', b'KLVICX+CMR10', b'LLBQDU+CMSY10', + b'MJBQKH+CMR12', b'NUVUDV+CMBX12~3b', b'PIAMKU+CMTI10', b'PRCPWN+CMEX10', + b'QBJYIA+CMSY6', b'QJFLWZ+CMBX10', b'RSCMAG+CMSY9', b'VBQSLW+CMBX12', + b'VOKQVE+CMR17', b'XETQGR+CMSY10~41', b'YXQDRB+CMMI10~3e', b'ZQZNMZ+CMR9'] +fonts_result["0706.3906.pdf"] = [ + b'AGKNIF+CMR10~21', b'BAXISG+CMBX10~2d', b'BGBZVV+CMR6', b'BZFEKM+MSBM10', + b'FHHJET+CMTI10', b'FOJRZZ+CMMI12', b'GMHMYO+LASY10', b'IKAXRW+CMBX12~4c', + b'ITCNQW+CMR8', b'JXXCPI+CMBX10', b'KXDKQF+CMSY10', b'LVDKXS+CMR17', + b'MGYOQG+CMMI8', b'ODFJJZ+TeX-cmex8', b'OUCGXF+CMMI10', b'PNLSVL+CMR9', + b'PVHFJL+CMSY8', b'UANKIQ+CMR10', b'UNSMYH+CMMI6', b'WQVKTC+CMEX10', + b'XJTXDN+CMSY6', b'YCCIZK+CMSY10~2a', b'ZECLTG+CMBX12', b'ZHHFVF+CMR12', + b'ZTZKGV+CMMI10~27'] +fonts_result["GalluzziBalkancom2018.pdf"] = \ + [b'AFKSFV+NimbusRomNo9L-Regu', b'ASNXLS+NimbusRomNo9L-ReguItal', + b'AXHPOX+CMMI7', b'GVCTNE+TimesNewRomanPSMT', b'JNWMEN+CMMI8', + b'MAXHKX+CMR7', b'PATEXI+CMEX10', b'PJZRLC+CMR6', + b'QVCFWU+NimbusRomNo9L-MediItal', b'RHUHOI+CMR5', + b'RSUQKG+NimbusRomNo9L-Medi', b'UKJLMI+CMR10', + b'WKVCBY+TimesNewRomanPSMT', b'WVOWAU+CMSY10', b'XQXIVV+CMMI5', + b'ZCBGZU+CMMI10'] +fonts_result["2738685LaTeX.pdf"] = \ + [b'AAAKFF+NotoSans', b'ACPOMI+RVTimes-Italic', b'APUZFZ+MSAM10', + b'CWZBOY+NimbusRomNo9-Med', b'DAGIBB+MTSYB', b'FUSKHB+NimbusRomNo9-Reg', + b'GHVLXH+RMTMIB', b'JTROHQ+NimbusRomNo9L-MediItal', b'KHNLFJ+MTGU', + b'LDQQHC+NimbusRomNo9L-Medi', b'LJYNLO+CMEX10', b'LOTEAO+rtxmi', + b'OLCVWE+NimbusRomNo9L-Regu', b'OSLSPI+RMTMUB', b'QWFIII+CMSY7', + b'RDSOKY+MTSYN', b'REZREU+NimbusRomNo9-RegIta', + b'YNKFWD+NimbusRomNo9L-ReguItal', b'ZDFZMX+RMTMI', b'ZDYKXU+CMSY10'] +fonts_result["2748220withCairoCreator.pdf"] = \ + [b'AAKAFZ+f-3-0', b'AENQWI+f-1-0', b'AMBDDL+f-4-0', b'ATUUJT+f-8-0', + b'BIKFGF+f-5-0', b'EYOJXM+f-4-1', b'FRZMCR+f-9-1', b'GUWDMP+f-6-0', + b'HNZXSC+f-10-0', b'JGKCTV+f-0-0', b'LQFXHH+f-7-0', b'OVCPDH+f-2-0', + b'YFZCCG+f-2-1'] +fonts_result["sparsemult6.pdf"] = \ + [b'AVCQFN+EuropeanComputerModern-ItalicRegular12pt', b'DFJZEJ+CMMI10', + b'EGPNFG+EuropeanComputerModern-ItalicRegular10pt', + b'GGRPCR+EuropeanComputerModern-BoldExtended12pt', b'GJORCW+CMMI6', + b'IUCCDG+EuropeanComputerModern-RegularExtended12pt', b'KDIXXB+CMR6', + b'MHVJHG+EuropeanComputerModern-RomanRegular10pt', b'MPCPMM+MSAM10', + b'MUJJIR+CMSY8', b'OSJZLY+EuropeanComputerModern-SmallcapsRegular10pt', + b'RIMIEQ+EuropeanComputerModern-RomanRegular7pt', + b'SIAPGV+EuropeanComputerModern-RegularExtended17pt', b'SJDPJA+CMSY6', + b'SKTPBK+bbm7', b'SLITRV+CMR10', + b'TSORXV+EuropeanComputerModernTypewriter-Regular10pt', b'USHLYJ+CMMI8', + b'UVXYPJ+CMR8', b'VFZTIC+CMSY10', + b'VWKCMP+EuropeanComputerModern-BoldExtended10pt', b'WINEXZ+bbm10', + b'WLVTKM+CMSS10', b'WTTUHT+CMEX10'] +fonts_result["math0607661.tudateru.25992.tsuda_takenawa.pdf"] = \ + [b'DZPXEZ+LCIRCLEW10', b'HMWAQK+NimbusRomNo9L-MediItal', b'HRBBOX+txex', + b'KYPUDU+rtxi', b'LHHMFB+NimbusRomNo9L-Regu', b'MHCSWN+rtxbmi', + b'NFKNTS+rtxmi', b'PJTNYU+NimbusRomNo9L-Medi', b'QCOLVQ+txsyb', + b'QZZDRD+txexa', b'SUGGDR+txtt', b'UATWDR+txsyc', b'UDGSOU+rtxr', + b'WSJSJP+txsya', b'WWSJDJ+rtxb', b'YNKSAD+txsy', + b'ZRSIEN+NimbusRomNo9L-ReguItal'] +fonts_result["0706.3906.pdf"] = \ + [b'AGKNIF+CMR10~21', b'BAXISG+CMBX10~2d', b'BGBZVV+CMR6', b'BZFEKM+MSBM10', + b'FHHJET+CMTI10', b'FOJRZZ+CMMI12', b'GMHMYO+LASY10', b'IKAXRW+CMBX12~4c', + b'ITCNQW+CMR8', b'JXXCPI+CMBX10', b'KXDKQF+CMSY10', b'LVDKXS+CMR17', + b'MGYOQG+CMMI8', b'ODFJJZ+TeX-cmex8', b'OUCGXF+CMMI10', b'PNLSVL+CMR9', + b'PVHFJL+CMSY8', b'UANKIQ+CMR10', b'UNSMYH+CMMI6', b'WQVKTC+CMEX10', + b'XJTXDN+CMSY6', b'YCCIZK+CMSY10~2a', b'ZECLTG+CMBX12', b'ZHHFVF+CMR12', + b'ZTZKGV+CMMI10~27'] + + +# False negative +# ps_tests.append(['submit_0169105.ps', True, '', +# 'Expected to detect this as tex-produced']) + +class TestTeXProduced(TestCase): + """Test for TeX Produced PDF/PS""" + + def test_get_pdfinfo(self) -> None: + """Test lower level pdfinfo functions.""" + + for test in pdf_tests: + filename, expected, match, description = test + + test_file_path = os.path.join(TEST_FILES_DIRECTORY, str(filename)) + + # Try as file first + print(f"\n***Testing pdfinfo on file '{filename}'") + + stream = io.open(test_file_path, "rb") + resultS = get_filtered_pdf_info_from_stream(stream) + resultS.sort() + + self.assertEqual(resultS, pdfinfo_results[str(filename)], + "PDFINFO return a different" + " result than expected.") + + def test_get_pdffonts(self) -> None: + """Test lower level pdfinfo functions.""" + + for test in pdf_tests: + filename, expected, match, description = test + + test_file_path = os.path.join(TEST_FILES_DIRECTORY, str(filename)) + + # Try as file first + print(f"\n***Testing pdffonts on file '{filename}'") + + stream = io.open(test_file_path, "rb") + fontsS = get_pdf_fonts_from_stream(stream) + + # We know there is a configuration issue with pdffonts and the list of fonts + # for these PDFs won't match. Skip for now. + if filename in ['astro-ph-0610480.ethanneil.20289.pdf', 'astro-ph-0703077.jf_sauvage.10062.pdf', + '0706.3810.pdf', '0611002.pdf', '2745765withCairoFonts.pdf']: + continue + + self.assertEqual(fontsS, fonts_result[str(filename)], "PDFFonts returned different fonts than expected.") + + def test_tex_produced_pdf(self) -> None: + """Test for TeX Produced PDF""" + + for test in pdf_tests: + filename, expected, match, description = test + + # Eventually comment this out for quieter tests + print(f"\n***Testing file '{filename}' for '{description}'") + + testfilename = os.path.join(TEST_FILES_DIRECTORY, str(filename)) + + file = io.open(testfilename, "rb") + + resultS = check_tex_produced_pdf_from_stream(file) + + if expected and match: + self.assertEqual(resultS, match, description) + elif expected: + self.assertTrue(resultS, description) + else: + self.assertFalse(resultS, description) + + def test_tex_produced_ps(self) -> None: + """Test for TeX Produced Postscript""" + + for test in ps_tests: + filename, expected, match, description = test + + # Eventually comment this out for quieter tests + print(f"\n***Testing file '{filename}' for '{description}'") + + testfilename = os.path.join(TEST_FILES_DIRECTORY, str(filename)) + + result = check_tex_produced_ps(testfilename) + + if expected and match: + self.assertEqual(result, match, description) + elif expected: + self.assertTrue(result, description) + else: + self.assertFalse(result, description) diff --git a/core/arxiv/submission/process/checks/tex_produced.py b/core/arxiv/submission/process/checks/tex_produced.py new file mode 100644 index 0000000..b1eb0a5 --- /dev/null +++ b/core/arxiv/submission/process/checks/tex_produced.py @@ -0,0 +1,295 @@ +"""arXiv TeX produced routines. + +This package checks a submission file object to determine whether it was generated +from TeX. arXiv requires the TeX source, when available, to make long-term maintenance +of papers easier. Single-file submission determined to be generated by TeX are rejected. + +The tex-produced check current works on both streams and files for PDFs and just files +for Postscript files. The original code only worked with files. In NG we pass around streams +of file content which would require writing out in order to user the file-based check. + +We now convert the non-seekable stream to an in-memory object and use the PyPDF2 package +to extract info and fonts information from a PDF. + +There are then a specific set of information we look for in the PDF info and certain +fonts that indicate the content was generated by some form of TeX engine. + +""" +import io +import re +import subprocess +import os +import tempfile + +from typing import IO, List, Set, Tuple, Any, Optional, Union +from arxiv.base import logging # type: ignore + +from PyPDF2 import PdfFileReader, utils + +logger = logging.getLogger(__name__) + +verbose = 0 + + +def get_filtered_pdf_info_from_stream(stream: IO[bytes]) -> List[bytes]: + """ + Returns select set of values from pdfinfo output for specified file. + + Parameters + ---------- + stream: IO[bytes + The stream to run pdfinfo on. + + Returns + ------- + List containing one entry for each selected line from pdfinfo output. + + """ + info_list = [] + + try: + pdf = PdfFileReader(stream) + information = pdf.getDocumentInfo() + + if information.creator is not None: + info_list.append(bytes('Creator: ' + information.creator, 'utf-8')) + + if information.title is not None: + info_list.append(bytes('Title: ' + information.title, 'utf-8')) + + if information.producer is not None: + info_list.append(bytes('Producer: ' + information.producer, 'utf-8')) + return info_list + except utils.PdfReadError as ex: + logger.error(f"get_filtered_pdf_info_from_stream: Can't read PDF: Error: {ex}") + raise ex + except Exception as ex: + logger.error(f"Error: Unknown {ex}") + raise ex + + return info_list + + +# This find-font code [walk() and parts of get_pdf_fonts_from_stream()] is +# taken from the web and originally written by Tim Arnold. +# I have modified it for our needs. DLF2 + +def walk(obj: Any, fnt: set, emb: set) \ + -> Tuple[Set[Any], Set[Any]]: + # -> Union[Tuple[Set[Any], Set[Any]], Tuple[None, None]]: + ''' + If there is a key called 'BaseFont', that is a font that is used in the document. + If there is a key called 'FontName' and another key in the same dictionary object + that is called 'FontFilex' (where x is null, 2, or 3), then that fontname is + embedded. + + We create and add to two sets, fnt = fonts used and emb = fonts embedded. + ''' + try: + if not hasattr(obj, 'keys'): + # return None, None + return set(), set() # This makes mypy happy + fontkeys = set(['/FontFile', '/FontFile2', '/FontFile3']) + if '/BaseFont' in obj: + fnt.add(bytes(obj['/BaseFont'], 'utf-8').strip(b"/")) + if '/FontName' in obj: + if [x for x in fontkeys if x in obj]: # test to see if there is FontFile + emb.add(obj['/FontName']) + + for k in obj.keys(): + walk(obj[k], fnt, emb) + + except Exception as ex: + logger.error(f"Error during walk: {ex}") + raise ex + + return fnt, emb # return the sets for each page + + +def get_pdf_fonts_from_stream(stream: IO[bytes]) -> List[bytes]: + """ + Return the list of fonts for specified file. + + Parameters + ---------- + stream : IO[bytes] + The stream of file bytes to run pdffonts on. + + Returns + ------- + List containing one entry for each line of output from pdffonts command. + + """ + fonts: Set[bytes] = set() + embedded: Set[bytes] = set() + + try: + pdf = PdfFileReader(stream) + + for page in pdf.pages: + obj = page.getObject() + f, e = walk(obj['/Resources'], fonts, embedded) + fonts = fonts.union(f) + embedded = embedded.union(e) + + # I don't believe we need the embedded fonts but I'm leaving + # it here for now. This might be useful when we check whether a file + # embeds standard system fonts. + #unembedded = fonts - embedded + + except utils.PdfReadError as ex: + logger.error(f"get_pdf_fonts_from_stream: Can't read PDF: Error: {ex}") + raise ex + except Exception as ex: + logger.error(f"Error: {ex}") + raise ex + + return sorted(list(fonts)) + +# Regexes to help us parse list of fonts from pdffonts. + +regex_header = re.compile(br"^\-\-\-\-", re.IGNORECASE) +regex_fnt = re.compile(br"^.*\+[^\ ]*|^.*\-[^\ ]*", re.IGNORECASE) + + +def get_pdf_fonts_from_file(filepath: str) -> List[bytes]: + """ + Return the list of fonts for specified file. + + Parameters + ---------- + filepath : str + The file to run pdffonts on. + + Returns + ------- + List containing one entry for each line of output from pdffonts command. + + """ + fonts_list: List[bytes] = [] + + info = subprocess.run(["pdffonts", f"{filepath}"], stderr=subprocess.PIPE, + stdout=subprocess.PIPE) + + lines = info.stdout.splitlines() + + # Clean up the output by extracting font names + for line in lines: + if regex_header.search(line): + continue + match = regex_fnt.search(line) + if match: + fonts_list.append(match[0]) + + return sorted(fonts_list) + + +# Regular expressions that indicate TeX Produced (for pdfinfo) + +regex1 = re.compile(br"^Creator.*dvips", re.IGNORECASE) +regex2 = re.compile(br"^Title.*\.dvi", re.IGNORECASE) +regex3 = re.compile(br"^(Creator|Producer).*TeX(?!(t|macs(-| )\d\.))", re.IGNORECASE) +regex4 = re.compile(br"^(Creator|Producer).*dvipdfmx?", re.IGNORECASE) +regex5 = re.compile(br"^(Creator|Producer).*cairo.*$", re.IGNORECASE) + +regexes = [regex1, regex2, regex3, regex4, regex5] + +# Ignore this case of TeX-independent wisywig software (with the +# ability to use TeX fonts) +regexTeXmacs = re.compile(br"^(Creator|Producer).*TeXmacs(-| )\d\.", re.IGNORECASE) + +# PDFs using Cairo or CMR/RTX fonts were generated by TeX +fontsrgex = re.compile(br"^CairoFont\-\d-\d|^\S+\+(?:cmr|rtx)", re.IGNORECASE) + + +# PDF +def check_tex_produced_pdf_from_stream(stream: IO[bytes]) -> bytes: + """ + Check whether specified PDF file was produced by TeX. + + Parameters + ---------- + stream : IO[bytes] + The stream of file bytes for PDF to be checked for TeX produced. + + Returns + ------- + String (regex match) if PDF is TeX-produced, otherwise return ''. + + """ + info: List[bytes] = [] + try: + info = get_filtered_pdf_info_from_stream(stream) + except Exception as ex: + logger.error(f'Error getting pdfinfo: {ex}') + + if verbose: + logger.debug(f"\nInfo: '{info}' from PDF") + + for regex in regexes: + ret = [m.group(0) for i in info for m in [regex.search(i)] if m] + if ret: + return ret[0] + + # Skip fonts check when TeXmacs (TeX-independent with ability + # to use TeX fonts) + ret = [m.group(0) for i in info for m in [regexTeXmacs.search(i)] if m] + if ret: + return b'' + + # Check for TeX fonts + fonts: List[bytes] = [] + try: + fonts = get_pdf_fonts_from_stream(stream) + except Exception as ex: + logger.error(f'Error getting pdffonts: {ex}') + + match = [m.group(0) for i in fonts for m in [fontsrgex.search(i)] if m] + + if match: + return match[0] + + return b'' + + +# Postscript check +# +def check_tex_produced_ps(file_path: str) -> bytes: + """ + Check whether specified Postscript file was produced by TeX. + + Parameters + ---------- + file_path : str + The file path for Postscript file to be checked for TeX produced. + + Returns + ------- + string + Returns string (regex match) if Postscript file was produced by TeX. + + """ + if not os.path.exists(file_path): + return b'' + + TEX_GREP = fr'TeXdict|dvit?ps|ArborText|OzTeX|PCTEX|^%.VTeX|' \ + fr'^%%Creator:.*Textures|^%%Title: .*\.dvi\b' + + # TODO: Rewrite this in Python. See PR #77 ARXIVNG-2885. + out = subprocess.run(f"head -500 {file_path} | egrep -i '{TEX_GREP}' | head -1", + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + shell=True) + + if out.stdout: + return bytes(out.stdout) + + out = subprocess.run(f'head -2000 {file_path}' + '| egrep -i "[A-Z]{5,6}\\+CMR10"| head -1', + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + shell=True) + + if out.stdout: + return bytes(out.stdout) + + return b'' diff --git a/core/arxiv/submission/process/process_source.py b/core/arxiv/submission/process/process_source.py index ea8af4a..2111534 100644 --- a/core/arxiv/submission/process/process_source.py +++ b/core/arxiv/submission/process/process_source.py @@ -37,6 +37,8 @@ from mypy_extensions import TypedDict from typing_extensions import Protocol +import time + # Mypy has a hard time with namespace packages. See # https://github.com/python/mypy/issues/5759 from arxiv.base import logging # type: ignore @@ -48,6 +50,8 @@ from ..domain.event import ConfirmSourceProcessed, UnConfirmSourceProcessed from ..services import PreviewService, Compiler, Filemanager +from .checks.tex_produced import check_tex_produced_pdf_from_stream + logger = logging.getLogger(__name__) Status = str @@ -56,6 +60,10 @@ IN_PROGRESS: Status = 'in_progress' NOT_STARTED: Status = 'not_started' +# Limits for reading stream of content +SIZE_LIMIT = 15000000 +TIME_LIMIT = 300 # 5 minutes should be more than enough time to read stream + Summary = Dict[str, Any] """Summary information suitable for generating a response to users/clients.""" @@ -281,6 +289,56 @@ def start(self) -> Tuple[Status, Dict[str, Any]]: f' but got {checksum}') return FAILED, {'reason': 'Source has changed.'} + # This is a PDF-Only submission so we run TeX-produced check as soon as we have + # the single-file PDF + try: + + # We need a file-like object that is seekable. The ReadWrapper only + # encapsulats a live stream from the File Manager service so + # we read it into an in-memory object. + filestream = io.BytesIO() + size = 0 + + try: + start = time.time() + line = stream.read() + while len(line) > 0: + # Check for excessive time + if time.time() - start > TIME_LIMIT: + raise ValueError(f'Reading preview content taking too' + f' long. (> {TIME_LIMIT})') + # Check for excessive size + size += len(line) + if size > SIZE_LIMIT: + raise ValueError(f'Preview content size too large. ' + f'(>{SIZE_LIMIT})') + + filestream.write(line) + line = stream.read() + + except StopIteration as ex: + # This is OK + pass + except ValueError as ex: + logger.error(f'There was a problem reading the content stream: {ex}\n') + return FAILED, {'reason': 'There was a problem reading the ' + f'content stream: {ex}.'} + except Exception as ex: + logger.error(f'There was a problem reading the content stream: {ex}\n') + return FAILED, {'reason': 'There was a problem reading the ' + f'content stream: {ex}.'} + filestream.seek(0,0) + + # Finally run the TeX Produced check + if check_tex_produced_pdf_from_stream(filestream): + logger.error('Detected a TeX-produced PDF') + return FAILED, {'reason': 'PDF appears to have been produced from TeX source.'} + else: + return SUCCEEDED, {} + except Exception as ex: + logger.error(f'TeX-produced check failed:{ex}') + return FAILED, {'reason': 'TeX-produced check failed.'} + self.finish(stream, content_checksum) return SUCCEEDED, {} @@ -379,8 +437,31 @@ def check(self) -> Tuple[Status, Dict[str, Any]]: prod = c.get_product(self.submission.source_content.identifier, self.submission.source_content.checksum, self.token) - self.finish(prod.stream, prod.checksum) - status = SUCCEEDED + + # For Postscript source format ONLY: AutoTeX will convert + # Postscript files to PDF (instead of compiling it). We run + # TeX-produced check on final generated PDF since it is easier + # than getting all of the content files (Postscript + images) + # and checking each one. TeX-produced charactersistics appears + # to carry through to generated PDF. + if self.submission.source_content.source_format == \ + SubmissionContent.Format.POSTSCRIPT: + try: + # Finally run the TeX-Produced check + if check_tex_produced_pdf_from_stream(prod.stream): + logger.error('Detected a TeX-produced Postscript submission.') + return FAILED, {'reason': + 'Postscript submission appears to' + ' have been produced from TeX source.'} + else: + return SUCCEEDED, {} + except Exception as ex: + logger.error(f'TeX-produced check failed:{ex}') + return FAILED, {'reason': 'TeX-produced check failed.'} + + else: + self.finish(prod.stream, prod.checksum) + status = SUCCEEDED elif comp is not None and comp.is_failed: status = FAILED extra.update({'reason': comp.reason.value,