From 647080cf0a3e6ebb91254c15128688c3676c630e Mon Sep 17 00:00:00 2001 From: BONNAREL FRANCOIS Date: Fri, 8 Dec 2023 16:22:43 +0100 Subject: [PATCH 01/10] first draft --- DataLinkImp.tex | 159 + Makefile | 34 + ivoatex/.gitignore | 2 + ivoatex/CHANGES | 51 + ivoatex/COPYING | 676 + ivoatex/IVOA.jpg | Bin 0 -> 24926 bytes ivoatex/Makefile | 287 + ivoatex/Makefile.template | 39 + ivoatex/README.rst | 181 + ivoatex/archdiag-full.xml | 106 + ivoatex/docrepo.bib | 1462 + ivoatex/document.template | 82 + ivoatex/draft-background.tex | 12 + ivoatex/fetch_from_ads.py | 60 + ivoatex/fromivoadoc.xslt | 209 + ivoatex/github_workflow_build.yml.template | 45 + ivoatex/github_workflow_preview.yml.template | 66 + ivoatex/ivoa.bst | 1375 + ivoatex/ivoa.cls | 378 + ivoatex/ivoabib.bib | 778 + ivoatex/make-archdiag.xslt | 276 + ivoatex/schemadoc.xslt | 698 + ivoatex/stdrec-template.xml | 96 + ivoatex/submission.py | 292 + ivoatex/svg-fallback.pdf | Bin 0 -> 12572 bytes ivoatex/svg-fallback.tex | 23 + ivoatex/svn-ignore.txt | 15 + ivoatex/tth-ivoa.xslt | 509 + ivoatex/tth_C/CHANGES | 1319 + ivoatex/tth_C/INSTALL | 7 + ivoatex/tth_C/UPDATING | 11 + ivoatex/tth_C/latex2gif | 19 + ivoatex/tth_C/license.txt | 17 + ivoatex/tth_C/ps2gif | 18 + ivoatex/tth_C/ps2png | 20 + ivoatex/tth_C/tth.1 | 362 + ivoatex/tth_C/tth.c | 28979 +++++++++++++++++ ivoatex/tth_C/tth.gif | Bin 0 -> 7341 bytes ivoatex/tth_C/tth_manual.html | 3123 ++ ivoatex/tth_C/tthsplit.c | 60 + ivoatex/tthdefs.tex | 200 + ivoatex/tthntbib.sty | 24 + ivoatex/update_generated.py | 211 + ivoatex/vo-dml2ivoatex.xslt | 349 + 44 files changed, 42630 insertions(+) create mode 100644 DataLinkImp.tex create mode 100644 Makefile create mode 100644 ivoatex/.gitignore create mode 100644 ivoatex/CHANGES create mode 100644 ivoatex/COPYING create mode 100644 ivoatex/IVOA.jpg create mode 100644 ivoatex/Makefile create mode 100644 ivoatex/Makefile.template create mode 100644 ivoatex/README.rst create mode 100644 ivoatex/archdiag-full.xml create mode 100644 ivoatex/docrepo.bib create mode 100644 ivoatex/document.template create mode 100644 ivoatex/draft-background.tex create mode 100644 ivoatex/fetch_from_ads.py create mode 100644 ivoatex/fromivoadoc.xslt create mode 100644 ivoatex/github_workflow_build.yml.template create mode 100644 ivoatex/github_workflow_preview.yml.template create mode 100644 ivoatex/ivoa.bst create mode 100644 ivoatex/ivoa.cls create mode 100644 ivoatex/ivoabib.bib create mode 100644 ivoatex/make-archdiag.xslt create mode 100644 ivoatex/schemadoc.xslt create mode 100644 ivoatex/stdrec-template.xml create mode 100644 ivoatex/submission.py create mode 100644 ivoatex/svg-fallback.pdf create mode 100644 ivoatex/svg-fallback.tex create mode 100644 ivoatex/svn-ignore.txt create mode 100644 ivoatex/tth-ivoa.xslt create mode 100644 ivoatex/tth_C/CHANGES create mode 100644 ivoatex/tth_C/INSTALL create mode 100644 ivoatex/tth_C/UPDATING create mode 100755 ivoatex/tth_C/latex2gif create mode 100644 ivoatex/tth_C/license.txt create mode 100755 ivoatex/tth_C/ps2gif create mode 100755 ivoatex/tth_C/ps2png create mode 100644 ivoatex/tth_C/tth.1 create mode 100644 ivoatex/tth_C/tth.c create mode 100644 ivoatex/tth_C/tth.gif create mode 100644 ivoatex/tth_C/tth_manual.html create mode 100644 ivoatex/tth_C/tthsplit.c create mode 100644 ivoatex/tthdefs.tex create mode 100644 ivoatex/tthntbib.sty create mode 100644 ivoatex/update_generated.py create mode 100644 ivoatex/vo-dml2ivoatex.xslt diff --git a/DataLinkImp.tex b/DataLinkImp.tex new file mode 100644 index 0000000..322130a --- /dev/null +++ b/DataLinkImp.tex @@ -0,0 +1,159 @@ +\documentclass[11pt,a4paper]{ivoa} +\input tthdefs + +\title{IVOA DataLink Implementation note} + +% see ivoatexDoc for what group names to use here +\ivoagroup{DAL} + +\author[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler] + {Patrick Dowler} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/FrancoisBonnarel] + {Fran\c{c}ois Bonnarel} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/LaurentMichel] + {Laurent Michel} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/MarkusDemleitner] + {Markus Demleitner} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/MarkTaylor] + {Mark Taylor} +\editor[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler] + {Patrick Dowler} + +% \previousversion[????URL????]{????Concise Document Label????} +\previousversion{This is the first public release} + +\newcommand{\blinks}{\{links\}} +\newcommand{\attval}[2]{#1={\allowbreak}{"}#2{"}} + + +\begin{document} + + +\begin{abstract} +This note gives some hints on how the DataLink specification should be used. +The DataLink specification document \citep{std:DataLink} describes the linking of data discovery metadata +to access to the data itself, further detailed metadata, related +resources, and to services that perform operations on the data. +\end{abstract} + + +\section*{Acknowledgments} + +The authors would like to thank all the participants in DAL-WG discussions +for their ideas, critical reviews, and contributions to this document. + + +\section*{Conformance-related definitions} + +The words ``MUST'', ``SHALL'', ``SHOULD'', ``MAY'', ``RECOMMENDED'', and +``OPTIONAL'' (in upper or lower case) used in this document are to be +interpreted as described in IETF standard RFC2119 \citep{std:RFC2119}. + +The \emph{Virtual Observatory (VO)} is a +general term for a collection of federated resources that can be used +to conduct astronomical research, education, and outreach. +The \href{http://www.ivoa.net}{International +Virtual Observatory Alliance (IVOA)} is a global +collaboration of separately funded projects to develop standards and +infrastructure that enable VO applications. + + +\section{Introduction} + +The DataLink specification \citep{std:DataLink} defines mechanisms for connecting data items discovered +via one service to related data products, and web services +that can act upon the data. + +The {\em links\/} web service capability is a web service capability +for drilling +down from a discovered data item such as a dataset identifier, a source in a cata- +log or any other data item. In the first case (typically an IVOA publisher +dataset identifier) iit allows to find details about the data files that can be +downloaded, alternate representations of the data that are available, and +services that can act upon the data (usually without having to download +the entire dataset). In the latter cases it allows to associate metadata, images, +cubes, spectra, timeseries or ancillary data to a source in the sky or other +kind of time. The expected usage is for DAL (Data Access Layer) +data discovery services (e.g.\ a TAP service \citep{2010ivoa.spec.0327D} +with the ObsCore \citep{2017ivoa.spec.0509L} data +model or one of the simple DAL services) to provide an identifier that +can be used to query the associated DataLink capability. The DataLink +capability will respond with a list of links that can be used to access +the data. + + +The current document is an implementation note for \blinks endpoint recognition in various contexts. +We reviewing three methods by which DataLink documents can be associated to resource entries in service responses and suggest possible choices according to the context. + +\section{DataLink and SIAP-2.0 or ObsTAP services} + +SIAP-2.0 \citep{2015ivoa.spec.1223D} services are queriable by setting contraints on the four "axes" of the data (2D-space, spectral, time and polarization) and their properties. Other archive metadata or data details are also queriable (target, collection, facilities, etc...). ObsTAP services are TAP services delivering the ivoa.Obscore table queriable via ADQL. The successfull response is a VOTable containing a mandatory result TABLE and optional service descriptor resource(s). + +\subsection{DataLink discovery via format and reference columns} +The result table describes the dataset characterization on the different axes and give additional operative features. The various columns are mapped from the ObsCore-1.1 data model (reference). The accessReference and AccessFormat fields give different solutions to reach the dataset for download or access. This can be done in two ways: +\begin{itemize} +\item The data discovery step has yielded a result with the AccessFormat value (media type) : application/x-votable+xml;content=datalink + To the client, this indicates that what is given in the access reference (e.g., the access\_url column in ObsTAP or SIAP-2.0) is a datalink document (see below for DataLink functionalities). +\item In case the media type is different, the access reference is a direct link to the dataset download. +\end{itemize} + +\subsection{SIAP-2.0, ObsTAP and service descriptors} +To enable additional Datalink functionalities, SIAP-2.0 or ObsTAP services can then add a service descriptor in the query response that indicates the availability of a Datalink service accompanying the DAL service. It references one (or more) field(s) from the DAL response. + +This is explained in detail in DataLink specification, section 4.2. The net result is that DataLink-enabled clients can find ancillary data and use associated services for data access or processing by virtue of being able to retrieve Datalink documents. + +The service descriptor embedded in an ObsTAP query response is allowed because ObsTAP is a peculiar TAP service and TAP allows the TAP response to contain additional resources in addition to the "results" one (See section 2.9 of TAP-1.0 specification). Hence the inclusion of a service descriptor service is valid. + + +\section{DataLink in the context of other dataset discovery methods} +Datasets can also be discovered in various other ways. Dataset "discovery" is defined as the discovery of the ivoa publisher\_did of a dataset in standard services or by the ad hoc discovery of "obsids" in combination with the a priori knowledge of a DataLink service "aware" of these obsids. + +Beside the most standard and modern discovery path via ObsTAP/SIAP-2.0, the following alternative scenarii are possible: +\begin{itemize} +\item The discovery can be done via an SIAP-1.0 or an SSA service. A DataLink service descriptor should have been added to the Service query response to allow further guiding to additional resources +\item The discovery can be done via a paper in a journal implementing publication of datasets associated with articles. The editor should describe or implement a DataLink service (eg via a service descriptor valid for the journal) for further usage and access to download, DataAcces, metadata resources. +\item Logs of observations are dataset descriptions belonging to the catalog category. They can be exposed in the VO using ConeSearch or TAP. They are in general not consistent with the ObsCore model. However they allow some kind of "dataset discovery". A Service descriptor can be added to the VOTable containing the log file. +\item HiPS is an IVOA standard for a global and hierarchical allsky access to pixel and catalogue data (reference HIPS). HiPS cells contain ids for original dataset which have been processed to build the Healpix maps. HiPS metadata file allows to generate a specific VOTable record for each cell of the HiPS collection including a "progenitor" url. This can be a new way to discover datasets and start a DataLink session to find out additional associated resources. +\end{itemize} + +\section{DataLink outside Data discovery context} + +DataLink 1.0 provides description of resources to be attached to a dataset. In the current specification it is actually indifferent to DataLink output what is the real content of the VOTable entry it is attached to. That's why it is tempting to use DataLink mechanisms in other VO contexts than Dataset discovery. + + For example it could be useful to attach to a source in a catalog table such resources as +\begin{itemize} +\item data records for the same object contained in another catalog/database +\item a service interface to an external database prepared to query around the object position. +\item Datasets associated to the source (such as images, spectra, etc..) +\end{itemize} + In addition we could attach links to each measurement in a measurement list for an individual source formatted in VOTable. Light curves or radial velocity TimeSeries are good examples of such measurement lists. These links can attach: +\begin{itemize} +\item original dataset from which the measurement is extracted +\item metadata describing the extraction method +\item calibration information +\end{itemize} +We could also attach links to entities in an IVOA provenance metadata service response. +\section{Various recognition solutions for use cases introduced in section 3 and 4} + In such contexts, the links ressource URL attached to a record may be given in various ways: +\begin{itemize} +\item It may be deduced from an "identifier" given by one of the main table FIELD. In that case it is easy to attach a service descriptor to the main VOTable containing the measurements. +\item It may be given directly in one of the FIELD of the table (let's say the name of this FIELD is "bla"). In that case we may still have two different situations. +\begin{itemize} +\item If the FIELD "bla" contains URL driving different contents from row to row, it is a good idea to use an "Obscore"-like solution, consisting in addding the utype "Access.reference" to FIELD bla, and to add a "foo" column with utype "Access.format" to tell the client what is the nature of the retrieved resource (\{links\} resource or whatever other media type). +\item If the FIELD "bla" contains always an URL to the \{links\} resource (or whatever media type) without any change from row to row, it is recommendedd to use a LINK element inside the FIELD "bla" to qualify the url as described in DataLink specification, section 5. +\end{itemize} +\end{itemize} + + + + + +\section{Changes} + +This is the initial version of this document. + + +\bibliography{ivoatex/ivoabib,ivoatex/docrepo,localrefs} + + +\end{document} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..739313a --- /dev/null +++ b/Makefile @@ -0,0 +1,34 @@ +# ivoatex Makefile. The ivoatex/README for the targets available. + +# short name of your document (edit $DOCNAME.tex; would be like RegTAP) +DOCNAME = DataLinkImp + +# count up; you probably do not want to bother with versions <1.0 +DOCVERSION = 1.0 + +# Publication date, ISO format; update manually for "releases" +DOCDATE = 2020-02-16 + +# What is it you're writing: NOTE, WD, PR, REC, PEN, or EN +DOCTYPE = NOTE + +# An e-mail address of the person doing the submission to the document +# repository (can be empty until a make upload is being made) +AUTHOR_EMAIL= + +# Source files for the TeX document (but the main file must always +# be called $(DOCNAME).tex +SOURCES = $(DOCNAME).tex + +# List of image files to be included in submitted package (anything that +# can be rendered directly by common web browsers) +FIGURES = + +# List of PDF figures (figures that must be converted to pixel images to +# work in web browsers). +VECTORFIGURES = + +# Additional files to distribute (e.g., CSS, schema files, examples...) +AUX_FILES = + +include ivoatex/Makefile diff --git a/ivoatex/.gitignore b/ivoatex/.gitignore new file mode 100644 index 0000000..dd89d91 --- /dev/null +++ b/ivoatex/.gitignore @@ -0,0 +1,2 @@ +tth_C/tth +.*.swp diff --git a/ivoatex/CHANGES b/ivoatex/CHANGES new file mode 100644 index 0000000..e737875 --- /dev/null +++ b/ivoatex/CHANGES @@ -0,0 +1,51 @@ +Version 1.2 (unreleased) + + * update_generated now works with python3 (you can fall back to python2 + by writing PYTHON=python into your Makefile). + + * New VO-DML translator for the generator. + + * Removed legacy entries for IVOA standards from ivoabib.bib. Use records + from docrepo.bib instead. + + * Minor fixes (e.g., escaping in schema snippets, &-less bibanchors, + titles in HTML output). + + +Version 1.1 (2018-08-14) + + * New bibliography docrepo.bib, which is the preferred way to reference + IVOA documents now. + + * ivoaTeX can now produce architecture diagrams. + + * make upload uploads a document package to the IVOA document repository + + * Adding an auxilaryurl macro for resources delivered with the document + but external to it. + + * Support for endorsed notes (and PENs) + + * There is now a template StandardsRegExt record. + + * Authors and Editors are now TeX-formatted even in HTML rendering + + +Version 1.0 (2016-04-23): + + * lstlistings options are now available as CSS classes, and + basicstyle=\footnotesize is interpreted for HTML. + + * Updated to tth 4.08 + + * Improved URL formatting (e.g., line breaks), including nolinkurl support + + * Most of README has migrated to the IVOA note ivoatexDoc + + * Multiple editors are now possible + + * Document-specific CSS is now supported. + + * Support for generated content (update_generated.py, make generate) + + * ivoa.bst is now used to format references diff --git a/ivoatex/COPYING b/ivoatex/COPYING new file mode 100644 index 0000000..440855e --- /dev/null +++ b/ivoatex/COPYING @@ -0,0 +1,676 @@ + + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ivoatex/IVOA.jpg b/ivoatex/IVOA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5762c0f626f9b6886a97e90532078acd72a5bbef GIT binary patch literal 24926 zcmcG#byQrz(>8dK1PN}z2Zul)xWhmQ9z00U5Fl6x?lMTwAi*Vp!Civ8ySo!SxD7hM zFf70K{r20l`_JyTXZOyjnKNgqy6frgTeteDp2vm9b$~!gPEig(K>+}irx);u1oUJy zWu-r;X^PV6>Cov|I5}I}f1~5$;^8)>qtmo-6Q$$feZwpAMueY^ONPhHKR-W+RYXFVSDcHFpZ7nF zpkQHP;k>{h$HgV*rKhIn{a?NwI{-pVl-H;rG!zB^l@JAu5aqE406mSsGnD_jfd6r! zprWBadyavLh5h15p_TwZML|PDMMrz~3?2PR+xO{r0G;p|5j~Ieb7Bos3+sCo3nfps1wvL0d;x@1wq% zxy2VtD{C8P7gslT4^OY4@4+FVVc`*R@d=4Z$tkI6**Up+`2~eV#Z}ccwRQCkjZIzM zJ-vPX1A{|T(=)Sk^9zeh8=G6(|8{ow_77m^7nfJpH}KoL|KLIa(Ec0N)BAq|`@i5K ze8Po_j*f%}M;% z_peB~O6Ifv(36*6m&j7KCd(Kf0qn6xxa0b8FM|oL^?{m)dJhCP#fH{8%4IvMyOEw4 zi<@QJbRFIO^N(>&Z2U>gPwPWaPwR_czA{QM=7#NlXV4;Rf2Qd<(gkJjQWwn{rlk_N zDF!CqpI@bJ{RW;kd*}vTTYz5C?vk!7uXMVjs@d^7zun?s`bwea6)4P)!bxJuuZ|*1 z^8d3?uCxp)U zrAsE~>+Q|)ELzu9E-lLmNApDcDjujcX5zVc@E#ha+l$*450(rSI4$(1lrcySNZ!oM z8`;@COK)0U>ZB%M>*^p7Co117ak1Rt4CAMQ>T_ zarLs%ayLOi!UH4mNjl4~MXBe{?1v~-))Q{PA{Jfy2C6OYWmZ>7dhM> z2_>*^sGj0~5W$yAun2v)?7r1u9&3jYYpu-tz47=Etuz1c5ttyspKGO@Uw_Ytp$?PF zdQ(^zOb-fOEx7?>w%}&(&%eAYUHV>E2TNs++qvxkAk7gHJ#T!@O8$!E$tQoDzoIJ3 zai##BAsPCbO+q2qnT<)D-r6;(c7ynq7Cbn5uK28IL49PU2=EzK`X+=xd9#0t@y|q# zZN1Hn8c;)7&}sTTT-E1aRwi73>i@*lXfd<4p*aCw9e3eIv# zMP6f}iMtnYaBLG`Jy@XY9so~(16F8X2T7jH~fQJfgymJ4H z%~M7v7cI!aExdo|Ea*}b940ct3Xff1aE#fNuO}~3Tb`HAvO6uNcdb1W8m`D&=yXyvsDzL~V(E&U|LTFI4 zUW-FovWaiM2huDWBCmMRD75y^H}f|BO-6mz{oqS#4Y4kiVy$ip+##M)Fvlx^kxF`2 zB*b^XI;ITwMO&|-ynwXMI7IzJ%v@b*i!Mw?x@*~{?yd(oOD1;%|FE;4nfsP7FQcu4 z|Hb!}tcPz*|Lx^1*;=ph%ckn&$U*zxAm5mn2h91*J;>9Ix=B-HS+<ETzevAeXwj(VDu<>qMT3&+%ve{GJ zsJbI`C10F$Fr5|J^o3!67?K`t(3P8CQt~!F09xJSGYC0N90OD9MvN9C4B=^ddIoCw z)=m!M?Ux?c_l>vEGen84^uzB@&%VHDt1d*u(x?PFSRbypk#GIkJ%X+y8h^J)Qch_y z?_dA89z>8(>kmO!Fia-%+?bd#iQ%3WJI~zhcy14`t za7V=c2-qCxXXHg!*0jAhx#=l5H_{}=ZVBrbqU1x*9| zl#%Fl%PWWOYQt3~NapkE0{HOe;LI;0kbM0m@5p)V?dP=bP-&6=#*>unHuqnf$uW7< z#@2O@z}3)59r!d~0Qx4z$5o67`6^Z-t2$i%y!cw{NUb*1c|Xw6SbpnAcnf4p!3WoZ zgDd`%&hE!_d`%I(fGcGC$;D261~=@3&XlrH#Fbf%1Ea-TwNKn)zje!ez!OYo{UI9P zh9!%<)@<67WEz*=@&!T`2SA!C@3XfWHR6)`P3=hp-Cza=a+T6V=+XS-n3gd~ z))K43$uSf2D$2wXvfJLaYy{1Gh){}JiC;iV3nLBx7 z3E$qWpRmsV$;2>^ZbX|eEFx{wiX@z8Obc*Cuv%XV&tHCR~<8-)1`>MWH;3X-c8vm7sgq!$WX^N3{}Mj z;?HH^Qe@&$b>8rK7#JsaG(|=+w{=VYaAalC14l4;S6PD8^6U@V(9X)6lV)6~D3~P7 z^#TTX*six=2z6$FtaQ( zfVRvzc{&lE#B_pXjJM_@ozog-65Py{ep@t2I*Zmu5~SjvIPSz#NGPt*{D!?;s1p3R34QJ&Ag7I%msufd@e=XZm zSFA&@SA}DC zmt`tnB;31o8Po`^?a)O4lcg^PZj!sjmJ<=p)Uk$P<)17(EPt>MNTWa4nr~>h^Vql` zqP0|OVKKqm7~QnYiP;zobL)tLWm^kKqHB|Tzl!al!NO)0*F)&UWm; zSs}xKhiPSxE?uhyjJMp{A<_tZ(%*mfj|?4oO$ZO#sNumI_N1gL96G@#nB$AvBTkRN z8fPE`XI?Gs)?MSwI0kajO;`yn^!9u1>voB#)a9=rM!Y*yM_oO#U9xcv`Py6@qqYSK zVEB_r(X$t9rEIqUbtmEi9~oRVsg*9OW99I{vcqT{kk^W|)pqhw9Fs>kLQ0DlaY4-SI zFva_G3?s~7^)eIx?7;72%50kJ(7!`p8T<`hl^li^ma}h~P$NEum)E`sL-1`7UhoYp zlg`h_;Xt*5OZ4r-+o%yDazDB$eU`3Eb8L;*KV>`ut)~9q6?E^3#BNi@GqoO*@RNFD z&Y55GQz<6~%$j)M!xV8}!`-FkQPvJW0Pg*@UKi_2JS*64=AY*6^#YVF-dG4I+As)=)s z^8}YUfUsQhL%Vrx&bbx^D3-RI9q((0`oPd#qt#gg|8tyb;-7r`hJ4BV9@ zl8(F=Ecnb$^04hKydq*!;Ha5RCRK6%2)JalD*=WHUEEyhl@ILdZR#s}3CL6U-3ME? z7&ep_83lzmxx;dZ-$840{>-c+ecgfJQ1DO!_c!WKmn#?-`RJ=c^6(g?1kpeg5g#*O zK==#kuxTrXjm8Ddki%-|-G`4>%Nfpxs~IHVmBYVQs8a4Ur3I3$``d{C7dG~nvmEO| z2`rkzrr*C&$^W&qT5aX;32I#g>;Z!>)#{O!Zt| zeMsIxPFB(%8#6lsFzc&gWQw36H%$zYrcKw@mY1_$nxZbepiekJ59cDW*W;8rRZ*Bg>9cOJ?7*7#mY;%V`Z z`M&Y$k)bk8FT#)?KlzPBE!?{ZY@IKy?llcg2t2fZrE4wQjATACgNNosAHwI2*jJX6 zoukWWO}xZ#j&(|P`A&BK(Kx^NmX}Vv4XsuChNCmK8)U>P5>sZ?^sQn1dijH;IF{DG zpOB7FlYWLO{>iO3C<9;4+Vbb?=uT|0LYyA~U>{!eyy^W#n#P@uRt^Q_+nTM)Iry6` zo$yU8vTi-;oP);Ye+jnJ ziSLS`X<8=>wEkD6FH{8Rq?ja4#}ts%4`N7xoM^9zRenfHpSCyIm7Re$jHYY6?0|Un zr&Da@GKt?X`K_!rz_!E# zBteM6ghVZTm*iHpYTRi{6wfsE+6JSDPA4>sKV;(SSpL0OSba)14|U=}!8t=SC{z-A zo~qZ4GCC`N#XxVFC)wxlPZDqp(0Xm1m&HW1;mw}b{+o3v!79&AA|>_|Pjnr)Z&f4T z-~V_~Zu@fJ_M0cm9C9B~A! zXNpW^J6qTuG{t1?_0bx{?EGaNQ7D$Idu(=`og7EtG8LiK7kfb2=$j7Y>v_RiXee`S zc#}%u;C98l9-HYiM65HUXU zW?j&!69?AXlQaBI4n5A}_^Kki<`D=o#;#<)u%0p*0!LrF#e>hNgC98FY?A%R)x&>b zP3e|u`K3OsM^4%vJBz391!2dX&bMZ7hFQ|tG%uA%FP%_33(5`7jc61&9z;XeBrKao znDr{pGV)zYWcs3g3X)_uHFdLP=?>@v9ulI~$ zvC^SUJXisbfPS<8aCFX$*Gw2{`Jf)k0$z4DF)8EcV6<9}LUi7TxqT_3>Z-a4)EMd2 zWRw64kaj-nDe%_MeuMQ^YX);fxe}g)virAMG4ww9y(E-VH>r$R^o44KW zVE0;a^Kz;R8{mtz^ZPO3|3u$eP7^g1lXvaY%s}4X<}UgBA^EG4k9oL(n8%~QCj{4w zi6-1Rr={oi?46wjMxj+o0r+O1ysP0&NYIhHB-fM|XMQ7J_HMQUY5!IE_5b9T(F}K^ z#9!HOj-o2Fn3Aqoj#f9K?SyDd23#KbmgM9z@}peLB^DVeqshC15R7H-Rg~!d6J+T@f;ITr)7K zQuNilh&LWg9X~aUvbsXiRCh2K`8(26$+Bk_?mnvtNnz zKbSm6AFgj0&#B${r<$vX-E`?;?NI`6!kVB^$$J%|zhSktxWmv>kj~AXDBe{#2~RhL z!VKNGwDJOqKhW`_18pjJ&$gIALu6Noeo>-a&1<}-mB z6l8G6`s1n{S3xe>tx`_)y&X{lIA#3M@Ije%4IE6?wkgrxu|{eyE?vI7cbA^n;-pGt zepU(mL0>N#H>ADFfuU{kuM)NYP^+v8@eU1B80SbYij$&}Hx6y}Fpeq|j4xX_z`7|b zP=o-U4}AKoqH|`m2<@T+RBgdcyVy35^ND8|us#Uo@FJHzqlwk6qQE!}JgCPp#r|aL z93N2`L8@`P4xRf`v&<=D&~{Ju!&ETKN%Fi)QsHS=;oKE*j5xuJD`)JU z?>>ccrgxuIRQOo|_E6hGu#h3%)oa^Yx1nVj7n;s|`BzMR?Q{}6^8zoOGg|jh-JEi> z%g6fX(xE&;5XzWeYpW@$@S8_~=xj|*UoR+-ngBTQQb&s&qKV*mxpYN+PGVXVN>FuAjHNua#&BV+X$dQoJ@MYo z5n+B81vsJ)uX^jZ@i+D_GchEwLuv5!zt~90$dAKZ?`9;} zP!@CeS0+>dXIflbP)`hvygy;a(9>oH3*%PT*AVm_KNSY*n|j0EZW;-_{{CL!LDoG1 z(2ynhFVUpb&nY>W6J<$uEVAJ%C9B(SlegcNP&^V#11{{tr*hzH-GnUS3w9^};%DeF zbHG}NlB6#yN4_c_qpyveHQQh;1ynK;aJ}PCes$Nw>BW#GrW3Hf;_CsbpC_bia$MXq z7l(sNUZjV*vdSzCoIdj}$Z1T`z-1N$(w*c2o)BltjAQ*)jW`Kf3UTpOqST%$8X?Ho zX!`v**f_Dovde*DW;%qnE-jDEbEH3vZgQAt` zI|e85R^d2RtCzVi$G)=lW>a0nQ>Lt7A+@*XL{9iq`m#b&v3D`!yM9~~OLoL7oL9J< zP9{X+hHW@!cB{F0D$9O5vud7HS%~Lq8&b3yu=b>Pb2IFkj^`k*X&+8bbNU4_2P0QPmi%XtaQ` zwXdqys$winvVA`sZL3A^tu_8vOMw`g;{R$pQ%c)8Xw{#RR}D>oPi}eanf%V5b!y*N z=R|tc8B&=TmILW;wTRB?2u8TWL8d-=)givK^2o=7W4;nI*U}>~j4P5CziF-%>n3UpI|@4j$K+O<_c%w#lV!RguTw z8h-f4kcRICRPspLqV_~?TTUh7?NK=2sBS!1WAn%M9W;u$LA%n)^$ht2c=0f)C(xuj z2Lw!WxX__4LWb7@RNUba*(foa;_=E<6he&DN!!GSQbbI#eI13XYMNeV`|tAV&)xBg zeTxAH-vjf9Z3~RoEfuYRs33I-D6t8uWE9m>&f78d6>B6EbQE24LGKZUM&%W-qK+P> z;rCWX$X;3_t~dIm6;}?-o`8g*1td{(gU0-6!5$4r`svlg=iJ9X#mtKG{TW5fk`4fg zS4Q<4{eJkhfW)!~{(^&i9(IRM*^Szs4Zm-}jC&C#p_3yOQfTiDt8xTG_zs#qEvTiQtL#gtaun1S>g zH`bo7L}`f2YCx@Ilmf=Ax0*02*@ESeegqN1c`)fgTea57!YP{RlM=QGI=U(a*ku6>9yYy@nq1 zy|f(G^iy+h@b$JHTpE&2q!&-Pi1;@Hs~sSM(@66~yYCkAsr zbrnafd(QrH>yVpi+K?Sn78kIy=fxp*WG1csmNs>m{#l{o{dO<$8A3|caWOcV$Rgg%h$dW!MJVEAW z=ASb&ed=oKOEyRU`uiXcs<4^nl#-fMu?R~ejn4Q7SaiP2zCvvv+4D{EWrrY|T+?nP zNR#BLp9i5x;a)u#$x5vkeNtU_|6T66Dszl%txohB#&bo?zDJ<&@D^YHsExp*=}>BJ z`wXvHaJ^JDosSmZH)!FC_Lk&Wu#bkf*Y4Agp%CV!5~L)ub{IablyuT7V8Ad~xIelp z&)|EUxxKYw=5Pnn?<-^38l9O-G*C{?x?Ff72twO9WBUB?YG!$}xAEEcU&1Yn+XL2P z%#5@h)3YgWp<9+=c+FezOOItiFL6i<#YWy&GNes=x-Wg2zNtUa;PuJDGO z+Ihtfq5~tjgB#7?JGR3iiQ_YI5KRbsAxASYtA&%R7?icKAf|;~U?bqB2y+)!UY(-X z`C6*r`SJ}!)LP5{El%6Was<^_K1La3lw!6x8b@V!&my}7FNp4~0Y3~zF3}2bu zp{djVr7~NXuS4*`oh6e?dMk|A77UBu4pO^Sd1mrC#&t)3kCw2Fh3R&Swd1d>jHP8H z*%_thL@Ni71UUZ`tk=2}V9);6D=cQX{!Ga;g71nHvq+xXm$EeA*?UAU;Ui#4ig~C- z`^n_9EDsLpJc18~?P1n8q3pErT7diY3HfhypB+KT#ewTF+n=P2J@I;q)c(BHfc%D* z@C64cg;O)s6z{Tj8-k5w`Z2I^Hr6Uk8EHc{b|4er5|kbP2uNTQK+3!pME+}&py@vQ zLY736{C{K^C|&US&Uq&r@L4R}IwwXClWcQICahwMhV+5j&3>%<(#UCAKSTjVF!{P% z=b&%*Um9A#tar>?VS#<7FO6$N@Ha{@p=AC;=DHkwg!chiS(QgjwL5J;gFoNqxmhCB z$d_HX&hN3xX7--UpvZcb#*%ipB7$9E?yG^`bi%rgz6+#PgnkY+c5d}y@ z!zb?_rWJmrhIA-|ci9Yj^uQg+qRt7Sk+;!H%!~So_dC!_9mje_%r60jK8Dqy zBQi2XGNFXM&rkY_wILtFT86`SW9ShGmcs?!Z`ryIhzA|2Mj^ivcCJT!{WS0k*mi2n zTdCY;dEssY#G?{lIQM7)8-o8q)QOUD=(XmRO0!d5QhE|s^24!7S9d(;ctaD!}!|JZhKb3K!2)6@8&=>s_eJS&o2qDz|u4G zX;cu()e3~l5kkv}DxNg&xGcePd7HTsJ{J;SFq$`DSqWGBHjf6aSv!C!v-rAmo878E zKY(wl=tzlkWZLKt)5>n6d5| z9Cg>VFy5$25BIlq9b+srMo$E-PaeZ4jP`=+6v6iytN)~IC$(Mk8Q^*+7@X(f*Yj~- zkYKSxWSMBo@rt!bayM;a-`L3oLT=>fy;U?RRu-L3ViHf&*I*CYH(9K<7WITZZ})Zg z}%xWCsnTZCAAMdMK?_ zeN^!*RuEn``#Q#lgmocncf53>vY0yKRqA!L(vN=ql5G5%wwGHKYMA)$b?i!iHyb%# zP6KW2#Gi-7F&Is(nI^ns(;yP}P4{(^m+;VV;rI@Z*4k$mgo@Km{VLtOA+EhiOJne_ zUk3J-uMyloLuG%Pa##cJOSZ8WVXoy}| z@gEA?eU9TEQ3n)HlMW!1mAU(rW!qTH!M~@zCD0sj=g{s(1bPQSuEQ1(d+#eB0d;o% z=H{vl%ww+ndRGl7=g_%l+3Tr^VdVp_g5XPzQQnXFtvn$X*bxQ7yR6_m(?est7T%RX zOCm+;xR)pf=x9eaPkg73j60-A&D34!SJ?O1I6#~LU$qsY^v_3r^H_6Nt1)EhPN7Uk z?t@;Nrj+n@v@Pbnn$=jiH~34W@?Wl#E~8`uMJg}RSnX$e%C|qh=vwp5R1P8zMtGz> zwx|VMD)77O$+;*mU*0&4aD}YdQbv`B+dO|S2yIKj z_oVt~QaEbKJ`tm(H~G7X+$(Q1DUl%U;DjxYKp*I2_SLGe-cK zrN2UB(n$=i5w&Y^yN<>D91|>!co=V0p);jN|D43Ux~?;kpLJj+8toTSw9J_=jAzSV zq{A+CM;T`wp@f=|XiEAm@TcUr%^E&#B-t7i!$-62Y$Q^rTgQZVfw;o~%VgRKiQ4v^ z^r^4@U zflCm?d-8?0M2vm0pcQ?1La@hElPTsoFdl=YyLddt`q!RN5)+_k$Id)JuTBp=1!`risM&> zlLV;L|56;DvHtEbb!b=OEbDiF(q^tFaNt&BnkkG8`};ogwS8N_fRv&*O+=+3j{d(pM z6laR;gRpa+O_=x6<|;ORbUSC+;9K?VC@B2JX+LFE>-jWa=Hb2-4HX=Q5HCvp5|VMn zGp{#0eE5fOzACrYN>JJ2A2-M@*0XUFEz35tzHu-zXji2FDGKe;ZkZt?(U1lHBP<-r z^O7JBZ=;5L^Q1ECLbtX`XY}ra;d$7oE5AC%uhETD8Y>&QCzjB5u4Ia;mu#N=NW7QI z;6SSM9!k+~%JUQtLgi=q<<}{=KJm&xt+g0$bxSsX7Fw`(5O~l{U_8rzD!-&*)hyrJ z{t(GOT7~m!s+5hX-y2ew4aW85~y{c6X@)Zwndc z8rShWtx)xv6iC)eCkrH;S!aCPX6SkBN6fF#R8_GF)Z2dl6m1$Ht7E`)vXQ*7EprBz zZ^nKL{H~~&^2e-h7v5^~`kc=AmHB1XHdH@6Z$&Vm*7ud-Ujm8wpeORDXpM?X1jJp? z^Uhq1R&m`cA{zX6Q*PjrwkB?OMr%D~u1812Z);+c z9sz9@-r<|9Af!IHo*KW*(RsgeKlWYHHkE|`+XqP#nbSif68Z|Babqv1Buy830 z%S&>S#wFYi&I)J(=y}ltY&A?-|RSyuLJ3DGb|L78!Tb zEi)`HD%{fML@YIh_E7#*aB0W1l_Q^Frz)IUlY9jDJ~aI_Qu?rS_rlKn5%?CNkV4q( zc<27W))d)WY{;Wk>vY&}HhnwW3hn|Cd^BW9%v-cKYHVtKQ{zjh^0lJdp3H=eGBn)f zP%VMu1qbeS0CKwivdDE^GfVJ`_09Rd(6CnyS1c(gBG&M4?+V#^>u8S#UhcpKB;AYO z1fyn9^;pYj?sV{e=-WF5$T}OwMOm5H1~iC2AK!lCUg#(FX@eG@<-u*~D!s`&t3M}8 z)x8Y!uTQ?5e|m!b$^eAb#%BkGb&IXVRUw-0-%?z^(#2u}+&w*Nef$vN^vEf`7P z(mCg&o&BiJS-+wCs+y{Tzx-1}o*>5SOS@(FPa# z=vC>dw12M&ccp7*U*Ubon3Rn4w9f=ZIo#!q)o+GyZgOhu1c6~2)+uHEm7T*#mb(0g z=nn?&z^6~z8s_<~MDH2Gu3{7Fz+AQ-6Opc7DMKxJ*%JlmJTgSx=+@M>9q-7|&PbP6 z_M>di?pF6--UQl<#N2cC!#^~Eg88Xh6qW{B>`&z0L9%w5Q)}*RqeNC!78Xo6tP=>~K^GVI=(G7uXbK(sf4@6i?Q`nfnN2XnvNt#j_=nq4?gp zgCX%7l@Cs9o6V=W(53D;nfku>H&nmYycYy9)y|FVyH`;|manbM{xtX4nSFy`E^Gjf zBA*Uy`TVqi$@o3zk7~2-5FX818-dEVNJv~)a+(1A|eHWZB zgDamJ>WCER4L3fw{6=wKM&#oWkPrXp(T)6Q_;z={1^>`Qu)`VMQsh=19PDck!+&pQ zwsF#I{-beqauK8C%?MbV^ql7VucPT%KmD;EGjqigHKH?<7gYE?9|T^r;s>oZ;b7pI zlOx%^2q_l()X?v=05l)^=X2Q z3n|E=NG=8rzJs;tzaiR49+lH^<4cs+IYjY?qmnDgTVHtYCw=l1R7gk?TOL=QnORUq z0_M92MJB?&$P-o6;yASl>_Zn&Xa>uyrOZRTKx_5c`O0VUR|it!(4oe5u7lO1L6jsB z(yH?BCHOtM23a1DK<}N!2>Z>=OTny=%SH_r-S!dB2W#bDnX^q90Wfe!{nFpIWWjKo zs$om2x3E)epEkiQ3CEz@`JcntHchgdEI9>6`WKPI6fbTs1&*M^K6XV`I(J_wsUzZz za+JPq?7wsuwdtkRcX zBB~Bz{#48QjOKdG_to+B;#P$HOULRPh9{ZExNWrS?|(%K!UJdP4n%Q-4~jayl|#ay zKEmL!YM1RMO7>V^HJ9v`zWJ??z|S8AXx`}l(d0F^b!0M|-_e95+Uxmfoyq0Y$ZT@( zzvg|`$^8iIefl6^H{3eb6;WVaVm-f3C3bJ%??wJa7b#c%^cNC}Y=2^sh8%u%R8sU$ zkuhGQEoUd;g_g%n62X05w{-(+BRc6%XCURaHXwmqswUk!*uI}-K*&H@Z7`M(OQ_(P z$x_CuT#o40BLFJji~u(9yM~{M)WbmG$K!Tszd#R|l;916m7LHYeMnYKQTv9cOgl~2 zT^4YV-?;uGxf|n}30{gIdjuA(G5lNJwmbLVrQ9t^L9X>rtDlruJ0$6ylVQkQ#ls)M z7|3B&Nnmc_AHuhkc18NB?7nE*lEaVERo~sbFGcLJ+w&E}JdO#eC9MYx61;*my2tFJw`ggAMSJ%t#?nvIv#|uslew_| z3x?X`%P7GS6uSa_ndl5d>;^=z<21tj%tmn7V7TOFk8Em8e()0AAFMyp0PmYpyY?08 z(l4!wuX$0g>ETRN|SF{iG0JzbSwKkD!GD7+f0efSmu74&sK#Uvi#g-kJ>j?4_GZ0V1Pz}Q7CNDn z#b>D~)HA=t?C!SG&@dyyNn?bCr&AMa$eV&AmNwTqlX8*IVD{Y;amy_gBba2RZElBG ze}TctS4i7!|2hW~b(#bEPYf;nVgiFyWkR94@B14+l=s^fAp&D1ycatrW7E!;te`xm z2u9zC01_8%0FVqUOHG@4_Cc7njKNS=c$p5R)%K~t**n-em58y5aOJU@rX1pkRRwZjk~_UlslqN#i2^*C@9nF=a`O zr}BC#o=bXPlT>hmK#qD=zY3RJ>92p(O|Xn>Lb7EZbLIJm;k8<27A~_3j8z&dG*&&w zm!SfRYO=NQ(BfF5`HnD3P_WzUweva8-@Zbz4;-W7p03xR=PUURH#n8}J=;kC`Fe!- zG?hHuJ4>(W*ri&|ac@KjG#ll(Y0?tA7-D>Asc=A}^yisECq_d>WQ%l;P>8s7sa2$4 zE?;G6bY;eer{Xh{?&8%3lvZ3gDfv!5a%%D$eV}Z8dsrM=zEdM(dRkz){vI%UxCO(D!5f%o&yOB~Pfs*JJL@Ar zDqkmklzI{8Gg)=##IEeIq;h~UB(Hx*=fT(kY>~zAqDmr(F(>M z0faW~B1VDK>rs0M$Fc=iZLfe?Ob zNOtHGypNmuCynk!fAw#xxbHbj-3CJrN-`k&1@_(!)%~e@QQZQkcI&68V&Cjuus%H1 zur~{7anI=JqF$gwp3eOvw6SY+rCf5yF_I1xc4H~bzVc9KW^tK*7FuF8E>@`UgkZo) zSE{W(n$4U-knBG_#5(-9txVwmJy2HH_@Bq|o5}1wS+-tVO8A`>_U78huph9nX4)sU zE+QD$t*NW6JpbGF*CT-G9su5ZazCd1KXX%W6#V49u3&t>#n-lvrhz>bjA@y2c=#Br zZGp7pXL`#~G$E4#p^h;KuXNTB1O;37URGOP`_p(e9ntn?;1@W)j*IQlsD`K=YKJ(d z-OQd<1d`I|zUyko5dwqZS3*ca5E^6x{}G^lavfS9^Xd9EteKa2>LVW5ZMWh*=-fty zL*3+sxccgH*>$kv#pu^bEXrxtQ#uLVSqS^J9)fSZL1RjS%BFpl3JOJdh5HDtFRuBd zN$&LVHQqtiwE2oCIQTzU4{`1PUhyM2ldCM~_O{JlFqC0kNqcr)Z}}VX9i;ymF4%?R z8>Bv016$BPaPpV*kJmboB&Vc~Gx1=&k^F)?7VFSI(9rL~1m%3VqcnQilcYaVVMC^D zq(mKF%B5>Q7~KLPxS=R_b~Kw5SfID8fsHlgsbV$|s`VqVtoM98u^#3lISVwFwv^Ro zibxy3mL7e0#XcnG*k4PlUvRf5CHZ486Q^cYk|EQszKsHEHO5q*#tUH)U^1qI|AxOH4-4PowFwU0OPHINWaPEH z2X_-#X2xw=g0my$S7M#G$HcBdTkm#xla4yLGjZ(e5OS$61hY0u9Plus=PVg7Otrr) z_qkoi8`~I*RZSmlXih29Ci%aaXr{H9tJq8j%P`ED2p+2c#%Ji7u}_m(*n;amHkFJp?PU3?ScX%@>eb#CHKV0t*f2I29mda%JG)8Mss}Bn` zV7IeLG|!0UMg8qDu`wYytWU~4c9hJ#mD%fb;5m)BrZ?TF4H}^I#;i_n7cv>k2~|34 zp+dBBSES?_TC|y-Ug*FQ1tz*QidT07A)oex>j!O^?N8qy(?6)Vv@h0C3Pv+T^v#K- zo{i}+4^^1{{?aP#1KvP)IL!SN6gv!oX)`T>gTLw3ESZT&4B8{v%X9)43HC-$#;GVU z0_7!2GQ$MMQs)1Gr*cf*Nc@GgUy<&C&SKzTWB>;8?n%G2x4^@O0zG#BY5qQS+Bfgt z6g_;F2)}EIVQGwwH`j=V+Efc%81y9NqH66pAI$EXEVL0{phFksJwz}#pR#lUr0u-&qyig&zhas6VS8}NhCHQo zn?zLC1 zKfe0%$>M5Mc6759S7dM`qj8eUDNenSK+L>5eA-0mtOn}+-V9#k!M2Ktw@#@`ejKS6TZeh$rnM9EN4H)2A;+MOp?bB~ zuXI*Toz4?}_a7IuPqWXW;|mPeR;+h~Ik$Kfdg`V49!^?A+t~iAx4aeD8qvo`pi2ve z-;E>-<)l(#ZtS->fWUfLk?0)zF6t4aQrOP{nvz~gOsgrIyT013<_2_#O=4!1YO@wt zP$Gm>`dZ*PyU~)%TF_N1=CvkvR@uH_+Q|?1JQJ3C+rmgEymi{G6<3f_yMmm}3rSx% z#MgZTL}Y>h&#e*3GD>`p>i9|PAd%wJy~fZglV^@FJj2Ogo64T8@z*k*_Vb|l-zvGz zsHV1U9YBa4kfPE{P(%;}1d$>o2tq^-0!ov56p<1E3nkQ0M5Kv`fPxT;^d>b(3%!Uy zLN}C9r9%RN1PI}6-@WI(ci*4)?vIQ$_E=+Qtg+UfYtH%2Z+%m(0i-qf2L9iX6Zk$#Q_V$$D)M3>nz9eSMb;Q{t($d; ztqfK>cRDk@^9``gP~J*xfaR54uq+pzkshKko;8@8Uc5t}uR>x~Rz*~+Vh7jshOXaQA60(B0t7`i4!arbsHZNJg&z9q z&cSe&!=5)+Y%26Ddduqp<%0bSfqU>m{XpIr%wQ|wZA)+b11nV z*Tn1@q)GZ5bOzTPcE%O0Rq{op2b{aD0bYe$&q9J96Pprc%ZfsQcDbGY{uj8*s;5wP z8(UpZ-?4Aq8gx^X;TgJ9ZkRM$eiG|9|BWJ%uviL)828stg=ZEu~V*0gmTXf;$_P)&%Aei7uHdQh;AEb$m) zogav}k^H*)2?-T)?#p+BX%}1>JM>K<1zbnJP^~UJAE?~Pqn4qmOEx$>)PpMc$C*)R z%S^d{lcoMSGD+Bs&0*=CWsbhS*B5g69#+MuRWhW15)QuyoMaY-{%YXdF=z(JVCM=A z;dB@W5Xp_-H99)8yK2g?fYy{x>Bn2AqE1p%_%7VrzP%?ZmCt`MZKV2AZgkdZb7_~Q zm}XfXz7PETxBEc@62g_X;J26sEfVihm^+kgZK0Nd?EaR69QzDCV8pTr$Gv4Qa1>sQ z2ycLS!6h%LW>&J5yj3~hs3$c*6X(T{FCp@P_7X5)bcUh3O^~&X0Csixf;*?z9dcrp z;#AnXyIzx3G)GqRTZR?hnZ|^&-#o{#SVNbItQNGE(a{?rC)GWAr=M@_Ytl{aZ~h6D z->^OHL5;XsLAn(AJcp3!{6t8Bi2J%|YxD&C4jzIn+bZ$MB~CXqukpBilVD=pV~>_P z+_c_CKGxz$qY+K;s-lG zFW}Q0iUxwv%*-*QfjzU&$te-xG#DH%qTGA^qnXWTw)ay#Or$dFB;6>b_-<2UgKI({ z@C*3&=@q&tynOXV7!ZJuyvjS&EGZw7XRj*r^`{~7=F)DH8-@b)fow-TL zO*o2APwVp(5hAiAXZ7tJw&HWEXg&GUpaIk^VXi<>2D_R1W3*ThYL>u7xaDWap3=gB zt+{p=__7KQ>94l99q0|e57Vw-Fh0%1;2J2qKq3d^>p>IuIR=p>5JkXY!+?1JCp~4j zb#y8n@RZFAKr~^Ii*$Z~9GHYq$jDd-p2vP?-{TmBgi*2JPk`?-@duJfrzj*5$hAyS z|GJNU9(&=*G`cmAyyEDJMS;$J;dQ~No1z&U3c#{*DVVT;`*8ifq^Vm`<$;z&#{j-)a;b$d-AOu3U9hYQbGR zq4RYiPHH;?rv2luOU=^lySz(1037oB`^s$fB;tre?;u`YC z^4GLjbse1r@Nnu;gkI6C>v+rmKDGykZO|J{!DkLRxe)^mN(RskJ5+poT; z3)7R36mxp84|KGM+SQ5o30qh04>$w>eV(WwCyIwIg;pfjjAXBtJL}prFDHE2HBBJRnXvl#~(Pu1j z!Fmw0_8oErvVhH(YC@?0J%u3t0%)6d&j8GpF<92-CihfT%^260uiwKj#&+sl<`X?M z_XzWHX^<=Gnmv8j{QdW*X*`=cln*c5#*ab1{(f;8C9eIWWVoCEo%fv!6^|pLoT-S% zLd8-3oX$+xos?ezPP0bT+w14k`%T~_mda@ly^a8m&T5Q`7)>fKRNdrdesnB{)gLMJ z&mfeL%#T1G&s{Jkv$P$+PE!#`YdXFnp+6YEs#LaMhlftTHW~IWSmk(bwQJo;7p@N_ zsXxf*z}%~eb6hMWH=%_RyC_{|&~Rmg;f?FD3a7O@?G>iICi7}FTF8GP#72WVM6grY&-<{e+3d;m zwKQTgO1|oO-*ZhB()CFN-Ptrot?RuDy??6m7<;;;5)QM!EulsE?PNwSl9I}l!xi_1 zJyZ1{6Uru^eIxQ~bXJkk*yn3jI9=g}%WU$+&pR_sIRBCq0%;WH#(lv%``O$Gd>?-< zAju&qK5qJn#(27+T?X60A5wiJi*^MS=9wWkv6y3!mt{Q{^&M1-Y%Fi*GqbfXC31PM zyy6&yPh75I=%W(a?<3$^)~UD8_^+kD*^s%X^Gc!n87t&w4^28!^K_gkvWl8#TsI~g z*`xpXvKv47_J@$TQn>$I9xb$rwW2`!39SfRIMs1%+V_0R9RDq^Fuj}p)D_|H~e-A8#rG_r@ znWjoyItu#>aG=Z}&+0`#0U30(x}y{4#2>D3sj_VSGnGNrtBH$vdsb#c10E%idb2`2qBk-$Bn?R4V5EU64p_L#qcDBD#Zu=G7D)>5R|P`qLZDGU5my zgZOs4$A?~(@5!O27Q6bO-%;Hs^v1*oAGf($nDfN^y0x~DIUh!YVduXUVyUQgEbN2` zJ4xNRJ<}mpv4UHR55%^Y!Cv2DCzWjddj9UnBLiE1qw}&e;Kk=Og|5}u0}<(>H9O%_ zSM<)56gRXAYC~_#d?;i1isPAyyY=xA z_RnCCI84@TXZg!yNi69B;1c~}e5Q!Nus92yo1f>t$cgW2Vvq(kA&4u8kQLk#>?m5q z_B*8eANph5X(jMF`-tM$Uj^PtB;-l;N|dhM7c5KM{kOZ#h@!b0R(7!*ZJbEgwfE?x zEb-}hd;!Ypk)<-jI%zV@OQbiHg2KH9)V+|nUxr1zd| zSR3O@**5tE8Ao~rM$D&x76TZFpVs9tfO6g|0^W+8_rvtv)@_cmY~^J&zpAKz7(*c@-gYEaf^8NAt-s%$+WSxLEdgQl!-UOJUXiM^DzQSQ6)?c`8QM&o`i< zZBh$mwHl^}F#@2)^({9q!CQ3|-=cm^b(#b0AXK~QZi_35rFwvEs;3|TI{GCVdd+gO zw#}b0$Q+Q$;^@qOK)Y9uE7SWlAA4s0&w3$WQm40a6T!&qQm}?XR9>zt-n;UttmnkI z?Cd5^^ZBmu&4ZDF9iR~t{x6=VOlB0h@Qi4G^a_CRadLJ!T7U}I+hfoI3K2(d0VK0z ziqf!{1zW&&*7|>YBc1tyeTiwYW6)Q(E_$@m&Pqug3J13+41rzO{1ZR5+9Kd{n%0* zwd8ejtKoVn>YQ`U#g(AAXHQzE^Mb3>mjw%Y@fNxwn zind=FZT5KWK6L9#@Jn1WsdPe{#F9Lxp(D<`=vgS5tohOwyBIL^b+T zU9Q|gMjF?ZL$qN_b}{VmAJrRD+jIUJ_OQhBqgC5hED4)`Mr`Ry9LlVX&(%TLfwH>6 zXwD(?FV7MeMDpE+^EQw@4w${RB;!^LO+CPHw&&>u)H>zPibip}Q*R=lLc&IT*gE_* z5J1o(Afp7B4dEfP z$DplM2vrsZ5FyK~vVzr<={#WI>@oSsnK~pOH%7G-fzauh$Dq&^09lUOEtF*HcCU_w zbtt`D2@=40@%rcEd72u~N_#|UHlE(?cE)F*G9#Q~H`$iG%^(sDbMg@SqpQ}837TW~ z<%#LNA6mu=`amz8ewhp|?FlI_)=8)CT7C!L!=V@2nGrMa`?l0zbb@{sRsB+S0V>I$ zys!EreW!Nz&3blizM|m;4vrO8=Sp5FD|qy$IEC)6m)%{HJL{5+fflA!xT>CA))n=7 zgvAyAgrBgYv(4PfAq}eD?&74ojhu#7B&CT7ktC&~TMkFrEe>lPj}dS~4e_y%va zp7lb$pz9{4KvH~-Zjy!d*QLWMhii-9PquJ(t>Kh$Bj5N%BGNfOZ)Q zR|sUzYG8kR>53S9ozKw;8RXXXF(}p-LlaFu3wURLBVg7P*?MXgdca$C3_9G^5{W-5 z%0ptc$LPl(IVui#;Mhn0<4>*wa4s|+altX*iBcl=3R=2~kkt#kZ&cx~qc1b22wv`|J&f$Fu{gO)Z zmPb36?lp!E%Jy9gL1nBOea&D^WM14TO>?GLpyjQtGkOiA!%e6uJM{xm7FHcAL+Tt^ zHm=D|aT@b#yabQDdQPdmWTJ-+5a0PFx1V;^hekei`}{C45&{T-HN)n$&Rv%SZt*@6 zj&>@?u)q$@vY4&LJ9&8nkbW4coGlBjAlQ{w&u?fO-rN7$ioN|Oe7%pbd{wi0HAOZg z2jLB5YSAaJY;+OZYb7Sriv#-&U5rnd?_sU1yFA?3p0)Ae<2y6WU>Qs~2LBKA>m#Mm zDmONF&D+hT(6YtHozSAd!ZhiWd0@6G$<(=v3Em^x3hT7gb@ay}R4qUKOjza%Xb$u- zXPXwIM$f!NcUW=krA0mSaI2diu82Vrv@EcYbriv z?zf+jerFLOS^$(aZ#D7OJF+)jBN<4uy%q=-rK`cSNxZEXF!e*_)CyP2v&qzGqbbcm z#0*_@3^hRX=tviMlH8Im{gQLRYDzeJWy)xd8T53Lssx{S;8qG`iM|=1*j~WImw~d^ zNijE1^O_YWC+6bE`_J^sW&LKgn4pQi#Z5}2v2a1BXmyE;UoW@RRSUw#q(9KjD!O^@M;*!z1mIKa(GSCm6||IPq4bpdnL&aZTLNQCq!T7FTqPPF>eI8d3~rS zp%eL6uaL)a7?wxR?+&S7&RrS9;Mv{fc4aAJ+n;i1r)H5L=@(HTNkAIr_fP6=LAFcE zB;)D3ovis?Q#-ukK@s^hsoir7eG*}hYK&8S-l*&5b>7fr`Lf8nEU1!)Y?VVEgLKdU z;&B~GjapvLV1G&H0zi-h;fDKwZwGLc_TPpHRFjX`r+L+L$bWE4lP-6le)L%L`O*GbcKrQ~?Z4SDtp(#W$pA6+c=U zMt@*$U#}NbSj$r9D#<8lpay3(tFEkhJ$>S^yfwr$h-rV+Ba*DD4$IchmCcsebWNmug;X zN8OP9#jhe{?p;E%Z?!UCH2Br@ft_biqm6!`Vn14*MZ&xdFrQGDn7w=pfgHwF661c8jf zA9d!SZ_-uv17tEzEA>!$(PHTQC-d}uFgGSE;AE(OWqJPJ#|IT?cCG@yN6%J+oyo zc0%BFbdA+U9ofS1i5MMRjk#|}(vJe|@6#^Ou-3OSe&iRgc}0Q#AA3k2<-__um1U zm&>J$95Lyf$w!aJz5@Q&4YgosA3cW(yR=dQxDm{WXaF0+f*jHdz+r@|3|b3Bgn zxon5~p}OO2q~_Ke&$eTbhqRWUr@19bHgq!fr6F{04>fNjB8uZMbh-=O+l2s(_*m}G z0XMVQ>-s+f#dRnt7j?#2tQ4IKVEp%xu^<6x(xkHXcXUq!78(y3eJO()yUIW->uk2Ts8a^I_%Adk^E(EKsO8>B* z_l{b>Hvk*ngnVr+MP4vuCCRl@mfVwPPHP+cU5n&{^niCVIPPXOOv%x&y2dc0!eyR* zI0l`Yk%exd>4`TG67%f9MFa`DSpHRK#NpXVU|Y`~V8NN3T0Jv<>4}MevIOg&;ElSD zm=j3WyY(2+mo`7_89a75Qte44M>wdjm`+?DuqLVLp&$n8h4vyF9p8X9dXVf%FwwAz zVSqrhCx(A~$UV|A&pt{Nf^?KWh$LNWx0-lL90>K0)d~FR$kt2U03qi`*8QA9XmZ&z z`MAr>&))6eoP5-?XumLW$0#I-;bmvC04JRQk&HCPh%{LM`uE#3S|0I+gat8#ZBqRJcqYi#dcWGo)EF$m+Xgw&Mp3_(2cgVO z(bn!xv}y`gf~=PX9$PNo8@!54e2UZJY=bk`wqNbyBi~}$Hy!_{SN+?&{(r~gpZ@_J CG>0+( literal 0 HcmV?d00001 diff --git a/ivoatex/Makefile b/ivoatex/Makefile new file mode 100644 index 0000000..ece8c8d --- /dev/null +++ b/ivoatex/Makefile @@ -0,0 +1,287 @@ +# ivoatex control makefile +# +# This is for inclusion into a main Makefile from one level up. +# This main Makefile must define DOCNAME, DOCVERSION, DOCDATE, DOCTYPE +# SOURCES; also, FIGURES as needed. +# +# See http://ivoa.net/documents/Notes/IVOATex/index.html +# for the targets in here useful to the user. +# +# You should *not* need to change anything here while authoring documents. +# All customisation should happen in the user Makefile + +IVOATEX_VERSION = 1.1 + +.DELETE_ON_ERROR: + +CSS_HREF = https://www.ivoa.net/misc/ivoa_doc.css +TTH = ivoatex/tth_C/tth +ARCHIVE_FILES = $(DOCNAME).tex $(DOCNAME).pdf $(DOCNAME).html $(FIGURES) +PYTHON?=python3 + +# Requirements: +# XSLT processor +# C compiler +# GNU make (or another sufficiently powerful make) +# texlive +# ghostscript (if you plan on postscript/pdf figures) +# zip +# inkscape if you need an architecture diagram +# pdftk if you want to build draft pdfs with a watermark +# optionally, latexmk. +# Since inkscape is a rather exotic dependency, please commit both +# role_diagram.svg and role_diagram.pdf into your VCS for now. + +XSLTPROC = xsltproc +XMLLINT = xmllint -noout +LATEXMK_BANNER := $(shell latexmk --version 2> /dev/null) +ifdef LATEXMK_BANNER + PDFLATEX = latexmk -pdf +else + PDFLATEX = pdflatex +endif +CONVERT = convert +ZIP = zip + +export TEXINPUTS=.:ivoatex: + + +# standard file name according to S&D standards +versionedName:=$(DOCTYPE)-$(DOCNAME)-$(DOCVERSION) +ifneq "$(DOCTYPE)" "REC" + versionedName:=$(versionedName)-$(subst -,,$(DOCDATE)) +endif + +GENERATED_PNGS = $(VECTORFIGURES:pdf=png) + +.SUFFIXES: .pdf .gif .tex .png +.PHONY: biblio docrepo.bib + +%.png: %.pdf + # simple ImageMagic -antialias didn't work too well + $(CONVERT) -density 300 -scale 25% $< $@ + + +$(DOCNAME).pdf: ivoatexmeta.tex $(SOURCES) $(FIGURES) $(VECTORFIGURES) + $(PDFLATEX) $(DOCNAME) + +forcetex: + make -W $(DOCNAME).tex $(DOCNAME).pdf + +$(DOCNAME)-draft.pdf: $(DOCNAME).pdf draft-background.pdf + pdftk $< background draft-background.pdf output $@ + +draft-background.pdf: ivoatex/draft-background.tex + pdflatex $< + +arxiv-upload: $(SOURCES) biblio $(FIGURES) $(VECTORFIGURES) ivoatexmeta.tex + mkdir -p stuff-for-arxiv/ivoatex + cp ivoatex/ivoa.cls ivoatex/tthdefs.tex stuff-for-arxiv + cp ivoatex/IVOA.jpg stuff-for-arxiv/ivoatex + # HACK: 2015-10-05 MD: arXiv produces an hyperref option clash without + # this + echo nohypertex >> stuff-for-arxiv/00README.XXX + cp $(SOURCES) $(DOCNAME).bbl $(FIGURES) $(VECTORFIGURES) \ + ivoatexmeta.tex stuff-for-arxiv + tar -cvzf arxiv-upload.tar.gz -C stuff-for-arxiv . + rm -r stuff-for-arxiv + +clean: + rm -f $(DOCNAME).pdf $(DOCNAME).aux $(DOCNAME).log $(DOCNAME).toc texput.log ivoatexmeta.tex + rm -f $(DOCNAME).html $(DOCNAME).xhtml + rm -f *.bbl *.blg *.out debug.html *.fls *.fdb_latexmk + rm -f arxiv-upload.tar.gz + rm -f $(GENERATED_PNGS) + +update: + @echo "*** updating ivoatex from github" + git submodule update --remote + +.FORCE: + +gitmeta.tex: .FORCE + /bin/echo -n '\vcsrevision{' > $@ + /bin/echo -n "$(shell git log -1 --date=short --pretty=%h 2> /dev/null)" >> $@ + if [ ! -z "$(shell git status --porcelain -uno 2> /dev/null)" ]; then /bin/echo -n -dirty >> $@; fi + /bin/echo } >> $@ + /bin/echo '\vcsdate{' $(shell git log -1 --date=short --pretty=%ai 2> /dev/null) '}' >>$@ + + +ivoatexmeta.tex: Makefile + rm -f $@ + touch $@ + echo '% GENERATED FILE -- edit this in the Makefile' >>$@ + /bin/echo '\newcommand{\ivoaDocversion}{$(DOCVERSION)}' >>$@ + /bin/echo '\newcommand{\ivoaDocdate}{$(DOCDATE)}' >>$@ + /bin/echo '\newcommand{\ivoaDocdatecode}{$(DOCDATE)}' | sed -e 's/-//g' >>$@ + /bin/echo '\newcommand{\ivoaDoctype}{$(DOCTYPE)}' >>$@ + /bin/echo '\newcommand{\ivoaDocname}{$(DOCNAME)}' >>$@ + +$(DOCNAME).html: $(DOCNAME).pdf ivoatex/tth-ivoa.xslt $(TTH) \ + $(GENERATED_PNGS) + $(TTH) -w2 -e2 -u2 -pivoatex -L$(DOCNAME) <$(DOCNAME).tex \ + | $(XSLTPROC) --html \ + --stringparam CSS_HREF $(CSS_HREF) \ + ivoatex/tth-ivoa.xslt - \ + >$(DOCNAME).html + +# | tee debug.html \ + +$(DOCNAME).bbl: $(DOCNAME).tex ivoatex/ivoabib.bib ivoatexmeta.tex +ifdef LATEXMK_BANNER + $(PDFLATEX) -bibtex $(DOCNAME).tex +else + -$(PDFLATEX) -interaction batchmode $(DOCNAME).tex + bibtex $(DOCNAME).aux + -$(PDFLATEX) -interaction batchmode $(DOCNAME).tex 2>&1 >/dev/null + $(PDFLATEX) -interaction scrollmode $(DOCNAME).tex +endif + +# We don't let the pdf depend on .bbl, as we don't want to run BibTeX +# every time the TeX input is changed. The idea is that when people do +# bibliography-relevant changes, they run make biblio manually. +biblio: $(DOCNAME).bbl + +# The architecture diagram is generated from a spec in the document +# directory and a stylesheet. +role_diagram.svg: role_diagram.xml + $(XSLTPROC) -o $@ ivoatex/make-archdiag.xslt role_diagram.xml + +# Regrettably, pdflatex can't use svg, so we need to convert it. +# We're using inkscape here rather than convert because convert +# rasterises the svg. +%.pdf: %.svg + inkscape --export-filename=$@ --export-type=pdf $< \ + || cp ivoatex/svg-fallback.pdf $@ + +# generate may modify DOCNAME.tex controlled by arbitrary external binaries. +# It is impossible to model these dependencies (here), and anyway +# I feel something like that shouldn't run automatically. +# Also, it needs python installed, which may not be available on all +# installations. +generate: + $(PYTHON) ivoatex/update_generated.py $(DOCNAME).tex + +package: $(DOCNAME).tex $(DOCNAME).html $(DOCNAME).pdf \ + $(GENERATED_PNGS) $(FIGURES) $(AUX_FILES) + rm -rf -- $(versionedName) + mkdir $(versionedName) + cp $(DOCNAME).tex $(versionedName)/$(versionedName).tex + cp $(DOCNAME).html $(versionedName)/$(versionedName).html + cp $(DOCNAME).pdf $(versionedName)/$(versionedName).pdf + +ifneq ($(strip $(FIGURES)),) + cp $(FIGURES) $(versionedName) +endif +ifneq ($(strip $(GENERATED_PNGS)),) + cp $(GENERATED_PNGS) $(versionedName) +endif +ifneq ($(strip $(AUX_FILES)),) + cp -r $(AUX_FILES) $(versionedName) +endif +# # make sure files will be readable by the web server later on + chmod -R go+w $(versionedName) + zip -r $(versionedName).zip $(versionedName) + rm -rf -- $(versionedName) + + +upload: package + $(PYTHON) ivoatex/submission.py $(versionedName).zip + + +# Build TtH from source. See http://hutchinson.belmont.ma.us/tth/. +# TtH source seems to be highly portable, so compilation should be easy +# as long as you have a C compiler. +$(TTH): ivoatex/tth_C/tth.c + $(CC) -o $(TTH) ivoatex/tth_C/tth.c + +############# architecture diagram stuff (to be executed in this directory) + +ARCHDIAG_XSLT = make-archdiag.xslt + +archdiag-l2.svg: archdiag-full.xml $(ARCHDIAG_XSLT) + $(XSLTPROC) -o $@ $(ARCHDIAG_XSLT) archdiag-full.xml + +archdiag-debug.svg: archdiag-full.xml $(ARCHDIAG_XSLT) + $(XSLTPROC) --stringparam WITHJS True -o $@ $(ARCHDIAG_XSLT) \ + archdiag-full.xml + +archdiag-l1.svg: $(ARCHDIAG_XSLT) + echo '' | \ + $(XSLTPROC) -o $@ $(ARCHDIAG_XSLT) - + +archdiag-l0.svg: $(ARCHDIAG_XSLT) + echo '' | \ + $(XSLTPROC) -o $@ $(ARCHDIAG_XSLT) - + + +############# below here: building an ivoatex distribution + +IVOATEX_FILES = fromivoadoc.xslt Makefile COPYING \ + ivoabib.bib Makefile.template tthdefs.tex document.template \ + ivoa.cls README tth-ivoa.xslt IVOA.jpg docrepo.bib\ + svn-ignore.txt tthntbib.sty update_generated.py schemadoc.xslt \ + ivoa.bst CHANGES archdiag-full.xml make-archdiag.xslt stdrec-template.xml \ + submission.py svg-fallback.pdf +TTH_FILES= tth_C/CHANGES tth_C/latex2gif tth_C/ps2gif tth_C/tth.c \ + tth_C/tth_manual.html tth_C/INSTALL tth_C/license.txt tth_C/ps2png \ + tth_C/tth.1 tth_C/tth.gif + +IVOATEX_ARCHIVE = ivoatex-$(IVOATEX_VERSION).tar.gz + +.PHONY: ivoatex-install + +$(IVOATEX_ARCHIVE): $(IVOATEX_FILES) + @echo "This target must be run inside *ivoatex*" + -mkdir ivoatex + cp $(IVOATEX_FILES) ivoatex + -mkdir ivoatex/tth_C + cp $(TTH_FILES) ivoatex/tth_C + tar -czf ivoatex-$(IVOATEX_VERSION).tar.gz ivoatex + rm -rf ivoatex + + +ivoatex-installdist: $(IVOATEX_ARCHIVE) + @echo "This target will only work for Markus" + scp $(IVOATEX_ARCHIVE) alnilam:/var/www/soft/ivoatex/ + ssh alnilam "cd /var/www/soft/ivoatex/; ln -sf $(IVOATEX_ARCHIVE) ivoatex-latest.tar.gz" + +# re-gets the ivoa records from ADS +docrepo.bib: + python3 fetch_from_ads.py + +############# GitHub workflows configuration + +.PHONY: github-preview + +GITHUB_WORKFLOWS = .github/workflows +GITHUB_BUILD = $(GITHUB_WORKFLOWS)/build.yml +GITHUB_PREVIEW = $(GITHUB_WORKFLOWS)/preview.yml +GITHUB_BUILD_TEMPLATE = ivoatex/github_workflow_build.yml.template +GITHUB_PREVIEW_TEMPLATE = ivoatex/github_workflow_preview.yml.template + +$(GITHUB_WORKFLOWS): + @mkdir -p $@ + +$(GITHUB_BUILD): $(GITHUB_WORKFLOWS) $(GITHUB_BUILD_TEMPLATE) + @sed "s!^\(\s*doc_name:\)!\1 $(DOCNAME)!g" $(GITHUB_BUILD_TEMPLATE) > $@ + @git add "$@" + @echo -e "* GitHub Workflow for PDF preview in PullRequest configured:\n $@" + @echo ' => Run "git commit && git push" to enable GitHub PDF preview.' + +$(GITHUB_PREVIEW): $(GITHUB_WORKFLOWS) $(GITHUB_PREVIEW_TEMPLATE) + @sed "s!^\(\s*doc_name:\)!\1 $(DOCNAME)!g" $(GITHUB_PREVIEW_TEMPLATE) > $@ + @git add "$@" + @echo -e "* GitHub Workflow for PDF preview at pushed commit configured:\n\ + $@\n\ + -----------------------------------------------------------------------\n\ + Clickable badge toward the generated PDF preview:\n\n\ + [![PDF-Preview](https://img.shields.io/badge/Preview-PDF-blue)]\ + (../../releases/download/auto-pdf-preview/$(DOCNAME)-draft.pdf)\n\n\ + You can add it into your README.md to give an easy way to access\n\ + the PDF preview to your users.\n\ + -----------------------------------------------------------------------" + @echo ' => Run "git commit && git push" to enable GitHub PDF preview.' + +github-preview: $(GITHUB_BUILD) $(GITHUB_PREVIEW) + diff --git a/ivoatex/Makefile.template b/ivoatex/Makefile.template new file mode 100644 index 0000000..6296aca --- /dev/null +++ b/ivoatex/Makefile.template @@ -0,0 +1,39 @@ +# ivoatex Makefile. The ivoatex/README for the targets available. + +# short name of your document (edit $DOCNAME.tex; would be like RegTAP) +DOCNAME = ???? + +# count up; you probably do not want to bother with versions <1.0 +DOCVERSION = 1.0 + +# Publication date, ISO format; update manually for "releases" +DOCDATE = ??? + +# What is it you're writing: NOTE, WD, PR, REC, PEN, or EN +DOCTYPE = ??? + +# An e-mail address of the person doing the submission to the document +# repository (can be empty until a make upload is being made) +AUTHOR_EMAIL=??? + +# Source files for the TeX document (but the main file must always +# be called $(DOCNAME).tex +SOURCES = $(DOCNAME).tex role_diagram.pdf + +# List of image files to be included in submitted package (anything that +# can be rendered directly by common web browsers) +FIGURES = role_diagram.svg + +# List of PDF figures (figures that must be converted to pixel images to +# work in web browsers). +VECTORFIGURES = + +# Additional files to distribute (e.g., CSS, schema files, examples...) +AUX_FILES = + +-include ivoatex/Makefile + +ivoatex/Makefile: + @echo "*** ivoatex submodule not found. Initialising submodules." + @echo + git submodule update --init diff --git a/ivoatex/README.rst b/ivoatex/README.rst new file mode 100644 index 0000000..0ae06b4 --- /dev/null +++ b/ivoatex/README.rst @@ -0,0 +1,181 @@ +The ivoaTeX document preparation system +======================================= + +IvoaTeX is a TeX-based software for authoring IVOA_ standards and +Notes. Authors are encouraged to use it in connection with a version +controlled repository. + +The design goals are: + +* version-controlled (or at least controllable) source file(s), +* reasonable-quality PDF and HTML output, +* low to moderate installation effort (on POSIX systems with LaTeX), +* support with routine drudgery. + +.. _IVOA: https://www.ivoa.net + + +Getting ivoaTeX +--------------- + +IvoaTeX is designed to be included with the document source, +preferably via mechanisms of the version control system chosen (e.g., +``svn:externals`` or ``git submodule``). + +IvoaTeX is currently maintained in two places: + +* https://volute.g-vo.org/svn/trunk/projects/ivoapub/ivoatex – this is the + original site on volute (an IVOA-affiliated subversion repository). +* https://github.com/ivoa-std/ivoatex.git – this is experimental and git-based; it + is likely that ivoaTeX's recommended process will move to using this at some + point. + +Because of this situation, some of the points below are mentioned twice, once +for github and once for volute. + +The two locations are being kept in sync manually. + + +Crib Sheet +---------- + +For your convenience (you should skim over the note anyway), here's a +few crib sheets on ivoaTeX operation. + + +Installing the dependencies +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Debian-derived systems:: + + apt-get install build-essential texlive-latex-extra zip xsltproc\ + texlive-bibtex-extra imagemagick ghostscript cm-super librsvg2-bin + +Fedora:: + + dnf install texlive-scheme-full libxslt make gcc zip\ + ImageMagick ghostscript + +Mac OS X with MacPorts:: + + port install ImageMagick libxslt ghostscript texlive +full + + +Checking Out and Building a Document from Volute +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Where documents are still developed on the Volute VCS, use something like the +following to build a document; in the example, the ivoatex documentation +is built:: + + svn co https://volute.g-vo.org/svn/trunk/projects/ivoapub/ivoatexDoc + cd ivoatexDoc + make biblio + make forcetex + +Then start your favourite PDF viewer on ivoatexDoc.pdf. + + +Checking Out a Standard from Github and Building it +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Documents developed on github can be built like this:: + + git clone --recurse-submodules https://github.com/ivoa-std/ADQL + cd ADQL + make biblio + make forcetex + +This produces the standards document ``ADQL.pdf``. + +Automatic PDF preview in GitHub +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To enable the automatic generation of a PDF preview in GitHub:: + + make github-preview + git commit -m 'Add/Update GH-Workflows for PDF Preview' + git push + +Once the generated files pushed on GitHub, this will produce a PDF preview +after each pushed commit. This PDF will be available in the GitHub's +Pre-Release ``Auto PDF Preview``. + +You may want to have a link toward this PDF preview. For this, you can add the +clickable badge returned by the ``make`` command into your ``README.md``. + +A PDF preview is also generated at each update of a PullRequest. To get it, +go on the page of your PullRequest, click on the tab ``Checks`` and then on +``Artifacts``. This artifact will be automatically deleted after some time. + +Documentation +------------- + +Documentation on ivoatex, including a chapter on a quick start, is +given in the IVOA note `The IVOATeX Document Preparation System`_. + +.. _The IVOATeX Document Preparation System: https://ivoa.net/documents/Notes/IVOATex/ + + +Extra Points for git operation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(This is a temporary accumulator for git-related stuff that should go +into ivoatexDoc once it's stabilised) + +(1) VCS info in the documents: ivoatex 1.2, sect 3.8 is svn-specific. To have +info on the git commit in the document heading, instead do: + +* Add gitmeta.tex to SOURCES in the Makefile +* Say ``\input gitmeta`` right below ``\input tthdefs`` in your document. + + +Trouble? +-------- + +In case of ivoatex-related issues, contact gavo@ari.uni-heidelberg.de, +or file an issue at github. + + +Acknowledgements +---------------- + +The immediate predecessor of this is the document generation system created +by Mark Taylor for SAMP and VOTable; essentially, this is a generalisation +of Mark's work. This, in turn, built on work done by Sebastien Derriere. + +Another inspiration was Paul Harrison's ivoadoc system; in particular, +parts of the XSL style sheet were taken from there, as well as the idea of +using svn:externals. + +The document generation from XML schema files was adapted from XSLT +stylesheets written by Ray Plante. + + +Fonts +----- + +The fonts embedded in the architecture diagram are derived from +Liberation Sans and Liberation Sans Mono in the following way:: + + pyftsubset /usr/share/fonts/truetype/ttf-liberation/LiberationSansNarrow-Regular.ttf --unicodes="20,41-5a,61-7a" --output-file="lsn-sub.ttf" + pyftsubset /usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf --unicodes="20,41-5a,61-7a" --output-file="ls-sub.ttf" + +What is inserted into the CSS within the XSLT is then the output of:: + + base64 -w0 ls-sub.ttf + + +License +------- + +Unless stated otherwise in the files, ivoatex is (c) 2014-2019, the +GAVO project and can be used and distributed under the GNU General +Public License (ask for additional licenses if you're unhappy with the +GPL). See COPYING for details. + +The files in ``tth_C`` have their own license. See there for details. + +The font excerpts in the architecture diagram are (C) 2007 Red Hat, Inc. +All rights reserved and are used in compliance with GPL exception (a) +in Red Hat's license agreement. diff --git a/ivoatex/archdiag-full.xml b/ivoatex/archdiag-full.xml new file mode 100644 index 0000000..a3501f7 --- /dev/null +++ b/ivoatex/archdiag-full.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ivoatex/docrepo.bib b/ivoatex/docrepo.bib new file mode 100644 index 0000000..c6dbf7d --- /dev/null +++ b/ivoatex/docrepo.bib @@ -0,0 +1,1462 @@ +@MISC{2021ivoa.spec.0724S, + author = {{Salgado}, Jes{\'u}s and {Ibarra}, Aitor and {Ehle}, Matthias and + {Gabriel}, Carlos and {Kretschmar}, Peter and {Kuulkers}, Erik and + {Mer{\'\i}n}, Bruno and {Ness}, Jan-Uwe and {Salazar}, Emilio and {Saxton}, Richard and + {Cecconi}, Baptiste and {Foster}, Karl and {Demleitner}, Markus and {Dempsey}, James and + {Molinaro}, Marco and {S{\'a}nchez}, Celia and {Taylor}, Mark and + {D{\'\i}az Trigo}, Mar{\'\i}a and {Fern{\'a}ndez}, M{\'o}nica and {Kennea}, Jaime and + {Kettenis}, Mark and {Matt}, Giorgio and {Osborne}, Julian and + {de O{\~n}a Wilhelmi}, Emma and {Salbol}, Edward J. and {Sivakoff}, Gregory and + {Tao}, Lian and {Tohuvavohu}, Aaron and {Tibbetts}, Michael and {Workman}, Bill}, + title = "{Observation Locator Table Access Protocol Version 1.0}", + howpublished = {IVOA Recommendation 24 July 2021}, + year = 2021, + month = jul, + pages = {724}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2021ivoa.spec.0724S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2021ivoa.spec.0616C, + author = {{Cecconi}, Baptiste and {Louys}, Mireille and {Preite Martinez}, Andrea and {Derri{\`e}re}, S{\'e}bastien and {Ochsenbein}, Fran{\c{c}}ois and {Erard}, St{\'e}phane and {Demleitner}, MArkus}, + title = "{UCD1+ controlled vocabulary - Updated List of Terms Version 1.4}", + howpublished = {IVOA Endorsed Note 16 June 2021}, + year = 2021, + month = jun, + pages = {616}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2021ivoa.spec.0616C}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2021ivoa.spec.0525D, + author = {{Demleitner}, Markus and {Gray}, Norman and {Taylor}, Mar}, + title = "{Vocabularies in the VO Version 2.0}", + howpublished = {IVOA Recommendation 25 May 2021}, + year = 2021, + month = may, + pages = {525}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2021ivoa.spec.0525D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2021ivoa.spec.0310C, + author = {{Campillo}, Jon Juaristi and {Demleitner}, Markus}, + title = "{Catalogue of ADQL User Defined Functions Version 1.0}", + howpublished = {IVOA Endorsed Note 10 March 2021}, + year = 2021, + month = mar, + pages = {310}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2021ivoa.spec.0310C}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2020ivoa.spec.0411S, + author = {{Servillat}, Mathieu and {Riebe}, Kristin and {Boisson}, Catherine and {Bonnarel}, Fran{\c{c}}ois and {Galkin}, Anastasia and {Louys}, Mireille and {Nullmeier}, Markus and {Renault-Tinacci}, Nicolas and {Sanguillon}, Mich{\`e}le and {Streicher}, Ole}, + title = "{IVOA Provenance Data Model Version 1.0}", + howpublished = {IVOA Recommendation 11 April 2020}, + year = 2020, + month = apr, + pages = {411}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2020ivoa.spec.0411S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.1021O, + author = {{Ochsenbein}, Francois and {Taylor}, Mark and {Donaldson}, Tom and {Williams}, Roy and {Davenhall}, Clive and {Demleitner}, Markus and {Durand}, Daniel and {Fernique}, Pierre and {Giaretta}, David and {Hanisch}, Robert and {McGlynn}, Tom and {Szalay}, Alex and {Wicenec}, Andreas}, + title = "{VOTable Format Definition Version 1.4}", + howpublished = {IVOA Recommendation 21 October 2019}, + year = 2019, + month = oct, + pages = {1021}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.1021O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.1011D, + author = {{Demleitner}, Markus and {Harrison}, Paul and {Molinaro}, Marco and {Greene}, Gretchen and {Dower}, Theresa and {Perdikeas}, Menelaos}, + title = "{IVOA Registry Relational Schema Version 1.1}", + howpublished = {IVOA Recommendation 11 October 2019}, + year = 2019, + month = oct, + pages = {1011}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.1011D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.1007G, + author = {{Genova}, Fran{\c{c}}oise and {Louys}, Mireille and {Preite Martinez}, Andrea and {Cecconi}, Baptiste and {Derri{\`e}re}, Sebastien and {Molinaro}, Marco and {Delmotte}, Nausicaa and {Gray}, Norman and {Mann}, Robert and {McDowell}, Jonathan and {McGlynn}, Thomas and {Ochsenbein}, Fran{\c{c}}ois and {Osuna}, Pedro and {Rixon}, Guy and {Williams}, Roy and {IVOA Semantics Working Group}}, + title = "{Maintenance of the list of UCD words Version 2.0 Version 2.0}", + howpublished = {IVOA Recommendation 07 October 2019}, + year = 2019, + month = oct, + pages = {1007}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.1007G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.1007F, + author = {{Fernique}, Pierre and {Boch}, Thomas and {Donaldson}, Tom and {Durand}, Daniel and {O'Mullane}, Wil and {Reinecke}, Martin and {Taylor}, Mark}, + title = "{MOC - HEALPix Multi-Order Coverage map Version 1.1}", + howpublished = {IVOA Recommendation 07 October 2019}, + year = 2019, + month = oct, + pages = {1007}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.1007F}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.0927D, + author = {{Dowler}, Patrick and {Rixon}, Guy and {Tody}, Doug and {Demleitner}, Markus}, + title = "{Table Access Protocol Version 1.1}", + howpublished = {IVOA Recommendation 27 September 2019}, + year = 2019, + month = sep, + pages = {927}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.0927D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2019ivoa.spec.0520D, + author = {{Demleitner}, Markus and {Taylor}, Mark}, + title = "{Discovering Data Collections Within Services Version 1.1}", + howpublished = {IVOA Endorsed Note 20 May 2019}, + year = 2019, + month = may, + pages = {520}, + doi = {10.5479/ADS/bib/2019ivoa.rept.0520D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019ivoa.spec.0520D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0910L, + author = {{Lemson}, Gerard and {Laurino}, Omar and {Bourges}, Laurent and {Cresitello-Dittmar}, Mark and {Demleitner}, Markus and {Donaldson}, Tom and {Dowler}, Patrick and {Graham}, Matthew and {Gray}, Norman and {Michel}, Laurent and {Salgado}, Jesus}, + title = "{VO-DML: a consistent modeling language for IVOA data models Version 1.0}", + howpublished = {IVOA Recommendation 10 September 2018}, + year = 2018, + month = sep, + pages = {910}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0910L}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0910L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0723D, + author = {{Dower}, Theresa and {Demleitner}, Markus and {Benson}, Kevin and {Plante}, Ray and {Auden}, Elizabeth and {Graham}, Matthew and {Greene}, Gretchen and {Hill}, Martin and {Linde}, Tony and {Morris}, Dave and {O`Mullane}, Wil and {Rixon}, Guy and {St{\'e}b{\'e}}, Aur{\'e}lien and {Andrews}, Kona}, + title = "{Registry Interfaces Version 1.1}", + howpublished = {IVOA Recommendation 23 July 2018}, + year = 2018, + month = jul, + pages = {723}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0723D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0723D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0625P, + author = {{Plante}, Raymond and {Demleitner}, Markus and {Benson}, Kevin and {Graham}, Matthew and {Greene}, Gretchen and {Harrison}, Paul and {Lemson}, Gerard and {Linde}, Tony and {Rixon}, Guy}, + title = "{VOResource: an XML Encoding Schema for Resource Metadata Version 1.1}", + howpublished = {IVOA Recommendation 25 June 2018}, + year = 2018, + month = jun, + pages = {625}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0625P}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0625P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0621G, + author = {{Graham}, Matthew and {Major}, Brian and {Morris}, Dave and {Rixon}, Guy and {Dowler}, Pat and {Schaaff}, Andr{\'e} and {Tody}, Doug}, + title = "{VOSpace Version 2.1}", + howpublished = {IVOA Recommendation 21 June 2018}, + year = 2018, + month = jun, + pages = {621}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0621G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0621G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0529H, + author = {{Harrison}, Paul and {Demleitner}, Markus and {Major}, Brian and {Dowler}, Pat}, + title = "{XML Schema Versioning Policies Version 1.0}", + howpublished = {IVOA Endorsed Note 29 May 2018}, + year = 2018, + month = may, + pages = {529}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0529H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0529H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2018ivoa.spec.0527P, + author = {{Preite Martinez}, Andrea and {Louys}, Mireille and {Cecconi}, Baptiste and {Derriere}, Sebastien and {Ochsenbein}, Fran{\c{c}}ois and {IVOA Semantic Working Group}}, + title = "{The UCD1+ controlled vocabulary Version 1.3 Version 1.3}", + howpublished = {IVOA Recommendation 27 May 2018}, + year = 2018, + month = may, + pages = {527}, + doi = {10.5479/ADS/bib/2018ivoa.spec.0527M}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2018ivoa.spec.0527P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0530P, + author = {{Plante}, Ray and {Demleitner}, Markus and {Plante}, Raymond and {Delago}, Jesus and {Harrison}, Paul and {Tody}, Doug}, + title = "{Describing Simple Data Access Services Version 1.1}", + howpublished = {IVOA Recommendation 30 May 2017}, + year = 2017, + month = may, + pages = {530}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0530P}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0530P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0524T, + author = {{Taffoni}, Giuliano and {Schaaf}, Andr{\'e} and {Rixon}, Guy and {Major}, Brian}, + title = "{SSO - Single-Sign-On Profile: Authentication Mechanisms Version 2.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 24 May 2017}, + year = 2017, + month = may, + pages = {524}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0524T}, +archivePrefix = {arXiv}, + eprint = {1709.00171}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0524T}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0524G, + author = {{Graham}, Matthew and {Rixon}, Guy and {Dowler}, Patrick and {Major}, Brian and {Grid} and {Web Services Working Group}}, + title = "{IVOA Support Interfaces Version 1.1}", + howpublished = {IVOA Recommendation 24 May 2017}, + year = 2017, + month = may, + pages = {524}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0524G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0524G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0519F, + author = {{Fernique}, Pierre and {Allen}, Mark and {Boch}, Thomas and {Donaldson}, Tom and {Durand}, Daniel and {Ebisawa}, Ken and {Michel}, Laurent and {Salgado}, Jesus and {Stoehr}, Felix}, + title = "{HiPS - Hierarchical Progressive Survey Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 19 May 2017}, + year = 2017, + month = may, + pages = {519}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0519F}, +archivePrefix = {arXiv}, + eprint = {1708.09704}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0519F}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0517G, + author = {{Genova}, F. and {Arviset}, C. and {Demleitner}, M. and {Glendenning}, B. and {Molinaro}, M. and {Hanisch}, R.~J. and {Rino}, B.}, + title = "{IVOA Document Standards Version 2.0}", + howpublished = {IVOA Recommendation 17 May 2017}, + year = 2017, + month = may, + pages = {517}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0517G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0517G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0517D, + author = {{Dowler}, Patrick and {Demleitner}, Markus and {Taylor}, Mark and {Tody}, Doug}, + title = "{Data Access Layer Interface Version 1.1}", + howpublished = {IVOA Recommendation 17 May 2017}, + year = 2017, + month = may, + pages = {517}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0517D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0517D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0517B, + author = {{Bonnarel}, Fran{\c{c}}ois and {Dowler}, Patrick and {Demleitner}, Markus and {Tody}, Douglas and {Dempsey}, James}, + title = "{IVOA Server-side Operations for Data Access Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 17 May 2017}, + year = 2017, + month = may, + pages = {517}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0517B}, +archivePrefix = {arXiv}, + eprint = {1710.08791}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0517B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0509L, + author = {{Louys}, Mireille and {Tody}, Doug and {Dowler}, Patrick and {Durand}, Daniel and {Michel}, Laurent and {Bonnarel}, Francos and {Micol}, Alberto and {IVOA DataModel Working Group}}, + title = "{Observation Data Model Core Components, its Implementation in the Table Access Protocol Version 1.1}", + howpublished = {IVOA Recommendation 09 May 2017}, + year = 2017, + month = may, + pages = {509}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0509L}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0509L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0320S, + author = {{Swinbank}, John D. and {Allan}, Alasdair and {Denny}, Robert B.}, + title = "{VOEvent Transport Protocol Version 2.0}", + howpublished = {IVOA Recommendation 20 March 2017}, + year = 2017, + month = mar, + pages = {320}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0320S}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0320S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2017ivoa.spec.0320L, + author = {{Languignon}, David and {Le Petit}, Franck and {Rodrigo}, Carlos and {Lemson}, Gerard and {Molinaro}, Marco and {Wozniak}, Herv{\'e}}, + title = "{Simulation Data Access Layer Version 1.0}", + howpublished = {IVOA Recommendation 20 March 2017}, + year = 2017, + month = mar, + pages = {320}, + doi = {10.5479/ADS/bib/2017ivoa.spec.0320L}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2017ivoa.spec.0320L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2016ivoa.spec.1024H, + author = {{Harrison}, P.~A. and {Rixon}, G.}, + title = "{Universal Worker Service Pattern Version 1.1}", + howpublished = {IVOA Recommendation 24 October 2016}, + year = 2016, + month = oct, + pages = {1024}, + doi = {10.5479/ADS/bib/2016ivoa.spec.1024H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2016ivoa.spec.1024H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2016ivoa.spec.0523D, + author = {{Demleitner}, Markus and {Plante}, Raymond and {Linde}, Tony and {Williams}, Roy and {Noddle}, Keith}, + title = "{IVOA Identifiers Version 2.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 23 May 2016}, + year = 2016, + month = may, + pages = {523}, + doi = {10.5479/ADS/bib/2016ivoa.spec.0523D}, +archivePrefix = {arXiv}, + eprint = {1605.07501}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2016ivoa.spec.0523D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2015ivoa.spec.1223D, + author = {{Dowler}, Patrick and {Bonnarel}, Fran{\c{c}}ois and {Tody}, Doug}, + title = "{IVOA Simple Image Access Version 2.0}", + howpublished = {IVOA Recommendation 23 December 2015}, + year = 2015, + month = dec, + pages = {1223}, + doi = {10.5479/ADS/bib/2015ivoa.spec.1223D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2015ivoa.spec.1223D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2015ivoa.spec.0617D, + author = {{Dowler}, Patrick and {Bonnarel}, Fran{\c{c}}ois and {Michel}, Laurent and {Demleitner}, Markus}, + title = "{IVOA DataLink Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 17 June 2015}, + year = 2015, + month = jun, + pages = {617}, + doi = {10.5479/ADS/bib/2015ivoa.spec.0617D}, +archivePrefix = {arXiv}, + eprint = {1509.06152}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2015ivoa.spec.0617D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2014ivoa.spec.1208D, + author = {{Demleitner}, Markus and {Harrison}, Paul and {Molinaro}, Marco and {Greene}, Gretchen and {Dower}, Theresa and {Perdikeas}, Menelaos}, + title = "{IVOA Registry Relational Schema Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 08 December 2014}, + year = 2014, + month = dec, + pages = {1208}, + doi = {10.5479/ADS/bib/2014ivoa.spec.1208D}, +archivePrefix = {arXiv}, + eprint = {1510.02275}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2014ivoa.spec.1208D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2014ivoa.spec.0602F, + author = {{Fernique}, Pierre and {Boch}, Thomas and {Donaldson}, Tom and {Durand}, Daniel and {O'Mullane}, Wil and {Reinecke}, Martin and {Taylor}, Mark}, + title = "{MOC - HEALPix Multi-Order Coverage map Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 02 June 2014}, + year = 2014, + month = jun, + pages = {602}, + doi = {10.5479/ADS/bib/2014ivoa.spec.0602F}, +archivePrefix = {arXiv}, + eprint = {1505.02937}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2014ivoa.spec.0602F}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2014ivoa.spec.0523Z, + author = {{Zwolf}, Carlo Maria and {Harrison}, Paul and {Garrido}, Julian and {Ruiz}, Jose Enrique and {Le Petit}, Franck}, + title = "{Parameter Description Language Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Computer Science - Software Engineering}, + howpublished = {IVOA Recommendation 23 May 2014}, + year = 2014, + month = may, + pages = {523}, + doi = {10.5479/ADS/bib/2014ivoa.spec.0523Z}, +archivePrefix = {arXiv}, + eprint = {1509.08303}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2014ivoa.spec.0523Z}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2014ivoa.spec.0523D, + author = {{Derriere}, Sebastien and {Gray}, Norman and {Demleitner}, Markus and {Louys}, Mireille and {Ochsenbein}, Francois}, + title = "{Units in the VO Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 23 May 2014}, + year = 2014, + month = may, + pages = {523}, + doi = {10.5479/ADS/bib/2014ivoa.spec.0523D}, +archivePrefix = {arXiv}, + eprint = {1509.07267}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2014ivoa.spec.0523D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.rept.1213D, + author = {{Demleitner}, Markus and {Harrison}, Paul and {Taylor}, Mark}, + title = "{TAP Implementation Notes Version 1.0}", + howpublished = {IVOA Note 13 December 2013}, + year = 2013, + month = dec, + pages = {1213}, + doi = {10.5479/ADS/bib/2013ivoa.rept.1213D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.rept.1213D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.spec.1129D, + author = {{Dowler}, Patrick and {Demleitner}, Markus and {Taylor}, Mark and {Tody}, Doug}, + title = "{Data Access Layer Interface Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Computer Science - Software Engineering}, + howpublished = {IVOA Recommendation 29 November 2013}, + year = 2013, + month = nov, + pages = {1129}, + doi = {10.5479/ADS/bib/2013ivoa.spec.1129D}, +archivePrefix = {arXiv}, + eprint = {1402.4750}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.spec.1129D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.spec.1125P, + author = {{Plante}, Raymond and {Delago}, Jesus and {Harrison}, Paul and {Tody}, Doug and {IVOA Registry Working Group}}, + title = "{Describing Simple Data Access Services Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 25 November 2013}, + year = 2013, + month = nov, + pages = {1125}, + doi = {10.5479/ADS/bib/2013ivoa.spec.1125P}, +archivePrefix = {arXiv}, + eprint = {1402.4747}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.spec.1125P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.spec.1005S, + author = {{Salgado}, Jesus and {Osuna}, Pedro and {Rodrigo}, Carlos and {Allen}, Mark and {Louys}, Mireille and {McDowell}, Jonathan and {Baines}, Deborah and {Maiz Apellaniz}, Jesus and {Hatziminaoglou}, Evanthia and {Derriere}, Sebastien and {Lemson}, Gerard}, + title = "{IVOA Photometry Data Model Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 05 October 2013}, + year = 2013, + month = oct, + pages = {1005}, + doi = {10.5479/ADS/bib/2013ivoa.spec.1005S}, +archivePrefix = {arXiv}, + eprint = {1402.4752}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.spec.1005S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.spec.0920O, + author = {{Ochsenbein}, Francois and {Taylor}, Mark and {Williams}, Roy and {Davenhall}, Clive and {Demleitner}, Markus and {Durand}, Daniel and {Fernique}, Pierre and {Giaretta}, David and {Hanisch}, Robert and {McGlynn}, Tom and {Szalay}, Alex and {Wicenec}, Andreas}, + title = "{VOTable Format Definition Version 1.3}", + howpublished = {IVOA Recommendation 20 September 2013}, + year = 2013, + month = sep, + pages = {920}, + doi = {10.5479/ADS/bib/2013ivoa.spec.0920O}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.spec.0920O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2013ivoa.spec.0329G, + author = {{Graham}, Matthew and {Morris}, Dave and {Rixon}, Guy and {Dowler}, Pat and {Schaaff}, Andre and {Tody}, Doug}, + title = "{VOSpace specification Version 2.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 29 March 2013}, + year = 2013, + month = mar, + pages = {329}, + doi = {10.5479/ADS/bib/2013ivoa.spec.0329G}, +archivePrefix = {arXiv}, + eprint = {1509.06049}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013ivoa.spec.0329G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.rept.1015R, + author = {{Rodrigo}, Carlos and {Solano}, Enrique and {Bayo}, Amelia}, + title = "{SVO Filter Profile Service Version 1.0}", + howpublished = {IVOA Working Draft 15 October 2012}, + year = 2012, + month = oct, + pages = {1015}, + doi = {10.5479/ADS/bib/2012ivoa.rept.1015R}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.rept.1015R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.0827D, + author = {{Demleitner}, Markus and {Dowler}, Patrick and {Plante}, Ray and {Rixon}, Guy and {Taylor}, Mark}, + title = "{TAPRegExt: a VOResource Schema Extension for Describing TAP Services Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Computer Science - Databases}, + howpublished = {IVOA Recommendation 27 August 2012}, + year = 2012, + month = aug, + pages = {827}, + doi = {10.5479/ADS/bib/2012ivoa.spec.0827D}, +archivePrefix = {arXiv}, + eprint = {1402.4742}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.0827D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.0508H, + author = {{Harrison}, Paul and {Burke}, Douglas and {Plante}, Ray and {Rixon}, Guy and {Morris}, Dave and {IVOA Registry Working Group}}, + title = "{StandardsRegExt: a VOResource Schema Extension for Describing IVOA Standards Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 08 May 2012}, + year = 2012, + month = may, + pages = {508}, + doi = {10.5479/ADS/bib/2012ivoa.spec.0508H}, +archivePrefix = {arXiv}, + eprint = {1402.4745}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.0508H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.0503L, + author = {{Lemson}, Gerard and {Wozniak}, Herve and {Bourges}, Laurent and {Cervino}, Miguel and {Gheller}, Claudio and {Gray}, Norman and {LePetit}, Franck and {Louys}, Mireille and {Ooghe}, Benjamin and {Wagner}, Rick}, + title = "{Simulation Data Model Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 03 May 2012}, + year = 2012, + month = may, + pages = {503}, + doi = {10.5479/ADS/bib/2012ivoa.spec.0503L}, +archivePrefix = {arXiv}, + eprint = {1402.4744}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.0503L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.1104T, + author = {{Taylor}, M. and {Boch}, T. and {Fitzpatrick}, M. and {Allan}, A. and {Fay}, J. and {Paioro}, L. and {Taylor}, J. and {Tody}, D.}, + title = "{Simple Application Messaging Protocol Version 1.3}", + howpublished = {IVOA Recommendation 11 April 2012}, + year = 2012, + month = apr, + pages = {1104}, + doi = {10.5479/ADS/bib/2012ivoa.spec.1104T}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.1104T}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.0411B, + author = {{Boch}, T. and {Fitzpatrick}, M. and {Taylor}, M. and {Allan}, A. and {Fay}, J. and {Paioro}, L. and {Taylor}, J. and {Tody}, D.}, + title = "{Simple Application Messaging Protocol Version 1.3}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 11 April 2012}, + year = 2012, + month = apr, + pages = {411}, + doi = {10.5479/ADS/bib/2012ivoa.spec.0411B}, +archivePrefix = {arXiv}, + eprint = {1110.0528}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.0411B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.spec.0210T, + author = {{Tody}, Doug and {Dolensky}, Markus and {McDowell}, Jonathan and {Bonnarel}, Francois and {Budavari}, Tamas and {Busko}, Ivo and {Micol}, Alberto and {Osuna}, Pedro and {Salgado}, Jesus and {Skoda}, Petr and {Thompson}, Randy and {Valdes}, Frank and {Data Access Layer Working Group}}, + title = "{Simple Spectral Access Protocol Version 1.1}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 10 February 2012}, + year = 2012, + month = feb, + pages = {210}, + doi = {10.5479/ADS/bib/2012ivoa.spec.0210T}, +archivePrefix = {arXiv}, + eprint = {1203.5725}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.spec.0210T}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2012ivoa.rept.0126A, + author = {{Arviset}, Christophe and {IVOA Technical Coordination Group}}, + title = "{The IVOA in 2011: Technical Assessment, Roadmap for 2012 Version 1.0}", + howpublished = {IVOA Note 26 January 2012}, + year = 2012, + month = jan, + pages = {126}, + doi = {10.5479/ADS/bib/2012ivoa.rept.0126A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2012ivoa.rept.0126A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2011ivoa.spec.1120M, + author = {{McDowell}, Jonathan and {Tody}, Doug and {Budavari}, Tamas and {Dolensky}, Markus and {Kamp}, Inga and {McCusker}, Kelly and {Protopapas}, Pavlos and {Rots}, Arnold and {Thompson}, Randy and {Valdes}, Frank and {Skoda}, Petr and {Rino}, Bruno and {Derriere}, Sebastien and {Salgado}, Jesus and {Laurino}, Omar and {IVOA Data Access Layer Group} and {Data Model Working Group}}, + title = "{IVOA Spectrum Data Model Version 1.1}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 20 November 2011}, + year = 2011, + month = nov, + pages = {1120}, + doi = {10.5479/ADS/bib/2011ivoa.spec.1120M}, +archivePrefix = {arXiv}, + eprint = {1204.3055}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2011ivoa.spec.1120M}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2011ivoa.spec.1028T, + author = {{Tody}, Doug and {Micol}, Alberto and {Durand}, Daniel and {Louys}, Mireille and {Bonnarel}, Francois and {Schade}, David and {Dowler}, Patrick and {Michel}, Laurent and {Salgado}, Jesus and {Chilingarian}, Igor and {Rino}, Bruno and {de Dios Santander}, Juan and {Skoda}, Petr}, + title = "{Observation Data Model Core Components, its Implementation in the Table Access Protocol Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 28 October 2011}, + year = 2011, + month = oct, + pages = {1028}, + doi = {10.5479/ADS/bib/2011ivoa.spec.1028T}, +archivePrefix = {arXiv}, + eprint = {1111.1758}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2011ivoa.spec.1028T}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2011ivoa.spec.0711S, + author = {{Seaman}, Rob and {Williams}, Roy and {Allan}, Alasdair and {Barthelmy}, Scott and {Bloom}, Joshua and {Brewer}, John and {Denny}, Robert and {Fitzpatrick}, Mike and {Graham}, Matthew and {Gray}, Norman and {Hessman}, Frederic and {Marka}, Szabolcs and {Rots}, Arnold and {Vestrand}, Tom and {Wozniak}, Przemyslaw}, + title = "{Sky Event Reporting Metadata Version 2.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 11 July 2011}, + year = 2011, + month = jul, + pages = {711}, + doi = {10.5479/ADS/bib/2011ivoa.spec.0711S}, +archivePrefix = {arXiv}, + eprint = {1110.0523}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2011ivoa.spec.0711S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2011ivoa.spec.0531G, + author = {{Graham}, Matthew and {Rixon}, Guy and {Grid andWeb Services Working Group}}, + title = "{IVOA Support Interfaces Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Computer Science - Digital Libraries}, + howpublished = {IVOA Recommendation 31 May 2011}, + year = 2011, + month = may, + pages = {531}, + doi = {10.5479/ADS/bib/2011ivoa.spec.0531G}, +archivePrefix = {arXiv}, + eprint = {1110.5825}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2011ivoa.spec.0531G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.specQ1209O, + author = {{Osuna}, Pedro and {Salgado}, Jesus and {Guainazzi}, Matteo and {Barbarisi}, Isa and {Dubernet}, Marie-Lise and {Tody}, Doug}, + title = "{Simple Line Access Protocol Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 9 December 2010}, + year = 2010, + month = dec, + pages = {1209}, + doi = {10.5479/ADS/bib/2010ivoa.specQ1209O}, +archivePrefix = {arXiv}, + eprint = {1110.0500}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.specQ1209O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.1216G, + author = {{Graham}, Matthew and {Schaaff}, Andre}, + title = "{Web Services Basic Profile Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 16 December 2010}, + year = 2010, + month = dec, + pages = {1216}, + doi = {10.5479/ADS/bib/2010ivoa.spec.1216G}, +archivePrefix = {arXiv}, + eprint = {1110.0511}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.1216G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.1216B, + author = {{Boch}, T. and {Fitzpatrick}, M. and {Taylor}, M. and {Allan}, A. and {Paioro}, L. and {Taylor}, J. and {Tody}, D.}, + title = "{Simple Application Messaging Protocol Version 1.2}", + howpublished = {IVOA Recommendation 16 December 2010}, + year = 2010, + month = dec, + pages = {1216}, + doi = {10.5479/ADS/bib/2010ivoa.spec.1216B}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.1216B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.1209O, + author = {{Osuna}, Pedro and {Salgado}, Jesus and {Guainazzi}, Matteo and {Dubernet}, Marie-Lise and {Roueff}, Evelyne}, + title = "{Simple Spectral Lines Data Model Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 09 December 2010}, + year = 2010, + month = dec, + pages = {1209}, + doi = {10.5479/ADS/bib/2010ivoa.spec.1209O}, +archivePrefix = {arXiv}, + eprint = {1110.0505}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.1209O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.1202P, + author = {{Plante}, Raymond and {St{\'e}b{\'e}}, Aur{\'e}lien and {Benson}, Kevin and {Dowler}, Patrick and {Graham}, Matthew and {Greene}, Gretchen and {Harrison}, Paul and {Lemson}, Gerard and {Linde}, Tony and {Rixon}, Guy}, + title = "{VODataService: a VOResource Schema Extension for Describing Collections, Services Version 1.1}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 02 December 2010}, + year = 2010, + month = dec, + pages = {1202}, + doi = {10.5479/ADS/bib/2010ivoa.spec.1202P}, +archivePrefix = {arXiv}, + eprint = {1110.0516}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.1202P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.1123A, + author = {{Arviset}, Christophe and {Gaudet}, Severin and {IVOA Technical Coordination Group}}, + title = "{IVOA Architecture Version 1.0}", + howpublished = {IVOA Note 23 November 2010}, + year = 2010, + month = nov, + pages = {1123}, + doi = {10.5479/ADS/bib/2010ivoa.rept.1123A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.1123A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.1010H, + author = {{Harrison}, Paul and {Rixon}, Guy}, + title = "{Universal Worker Service Pattern Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Computer Science - Distributed, Parallel, and Cluster Computing}, + howpublished = {IVOA Recommendation 10 October 2010}, + year = 2010, + month = oct, + pages = {1010}, + doi = {10.5479/ADS/bib/2010ivoa.spec.1010H}, +archivePrefix = {arXiv}, + eprint = {1110.0510}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.1010H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.1007A, + author = {{Arviset}, Christophe and {IVOA TCG}}, + title = "{The IVOA in 2010: Technical Assessment, Roadmap Version 1.0}", + howpublished = {IVOA Note 07 October 2010}, + year = 2010, + month = oct, + pages = {1007}, + doi = {10.5479/ADS/bib/2010ivoa.rept.1007A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.1007A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.0707H, + author = {{Hanisch}, R.~J. and {Quinn}, P.~J. and {De Young}, D. and {Padovani}, P. and {Pasian}, F.}, + title = "{Guidelines for Participation Version 1.1}", + howpublished = {IVOA Note 7 July 2010}, + year = 2010, + month = jul, + pages = {707}, + doi = {10.5479/ADS/bib/2010ivoa.rept.0707H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.0707H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.0618D, + author = {{Demleitner}, M. and {Ochsenbein}, F. and {McDowell}, J. and {Rots}, A.}, + title = "{Referencing STC in VOTable Version 2.0}", + howpublished = {IVOA Note 18 June 2010}, + year = 2010, + month = jun, + pages = {618}, + doi = {10.5479/ADS/bib/2010ivoa.rept.0618D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.0618D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.0413H, + author = {{Hanisch}, R.~J. and {Arviset}, C. and {Genova}, F. and {Rino}, B.}, + title = "{IVOA Document Standards Version 1.2}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 13 April 2010}, + year = 2010, + month = apr, + pages = {413}, + doi = {10.5479/ADS/bib/2010ivoa.spec.0413H}, +archivePrefix = {arXiv}, + eprint = {1110.0522}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.0413H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.0327D, + author = {{Dowler}, Patrick and {Rixon}, Guy and {Tody}, Doug}, + title = "{Table Access Protocol Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 27 March 2010}, + year = 2010, + month = mar, + pages = {327}, + doi = {10.5479/ADS/bib/2010ivoa.spec.0327D}, +archivePrefix = {arXiv}, + eprint = {1110.0497}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.0327D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.0303D, + author = {{Derriere}, S{\'e}bastien and {Preite-Martinez}, Andrea and {Richard}, Alexandre and {Cambr{\'e}sy}, Laurent and {Padovani}, Paolo}, + title = "{Ontology of Astronomical Object Types Version 1.3}", + howpublished = {IVOA Note 03 March 2010}, + year = 2010, + month = mar, + pages = {303}, + doi = {10.5479/ADS/bib/2010ivoa.rept.0303D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.0303D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.spec.0218P, + author = {{Plante}, Raymond and {Graham}, Matthew and {Rixon}, Guy and {Taffoni}, Giuliano}, + title = "{IVOA Credential Delegation Protocol Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 18 February 2010}, + year = 2010, + month = feb, + pages = {218}, + doi = {10.5479/ADS/bib/2010ivoa.spec.0218P}, +archivePrefix = {arXiv}, + eprint = {1110.0509}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.spec.0218P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2010ivoa.rept.0117D, + author = {{Derriere}, S. and {Preite Martinez}, A. and {Richard}, A. and {Cambr{\'e}sy}, L. and {Padovani}, P.}, + title = "{Ontology of Astronomical Object Types Use Cases Version 1.1}", + howpublished = {IVOA Note 17 January 2010}, + year = 2010, + month = jan, + pages = {117}, + doi = {10.5479/ADS/bib/2010ivoa.rept.0117R}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2010ivoa.rept.0117D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.spec.1130O, + author = {{Ochsenbein}, Francois and {Williams}, Roy}, + title = "{VOTable Format Definition Version 1.2}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 30 November 2009}, + year = 2009, + month = nov, + pages = {1130}, + doi = {10.5479/ADS/bib/2009ivoa.spec.1130O}, +archivePrefix = {arXiv}, + eprint = {1110.0524}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.spec.1130O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.spec.1111H, + author = {{Harrison}, Paul and {Tody}, Doug and {Plante}, Ray}, + title = "{Simple Image Access Specification Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 11 November 2009}, + year = 2009, + month = nov, + pages = {1111}, + doi = {10.5479/ADS/bib/2009ivoa.spec.1111H}, +archivePrefix = {arXiv}, + eprint = {1110.0499}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.spec.1111H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.spec.1104B, + author = {{Benson}, Kevin and {Plante}, Ray and {Auden}, Elizabeth and {Graham}, Matthew and {Greene}, Gretchen and {Hill}, Martin and {Linde}, Tony and {Morris}, Dave and {O`Mullane}, Wil and {Rixon}, Guy and {St{\'e}b{\'e}}, Aur{\'e}lien and {Andrews}, Kona}, + title = "{IVOA Registry Interfaces Version 1.0}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 04 November 2009}, + year = 2009, + month = nov, + pages = {1104}, + doi = {10.5479/ADS/bib/2009ivoa.spec.1104B}, +archivePrefix = {arXiv}, + eprint = {1110.0513}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.spec.1104B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.specQ1007G, + author = {{Graham}, Matthew and {Morris}, Dave and {Rixon}, Guy}, + title = "{VOSpace specification Version 1.15}", + howpublished = {IVOA Recommendation 07 October 2009}, + year = 2009, + month = oct, + pages = {1007}, + doi = {10.5479/ADS/bib/2009ivoa.specQ1007G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.specQ1007G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.spec.1007G, + author = {{Gray}, Alasdair J.~G. and {Gray}, Norman and {Hessman}, Frederic V. and {Preite Martinez}, Andrea and {Derriere}, S{\'e}bastien and {Linde}, Tony and {Seaman}, Rob and {Thomas}, Brian}, + title = "{Vocabularies in the Virtual Observatory Version 1.19}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 07 October 2009}, + year = 2009, + month = oct, + pages = {1007}, + doi = {10.5479/ADS/bib/2009ivoa.spec.1007G}, +archivePrefix = {arXiv}, + eprint = {1110.0520}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.spec.1007G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.rept.1030R, + author = {{Rots}, A.~H.}, + title = "{STC-S: Space-Time Coordinate (STC) Metadata Linear String Implementation Version 1.33}", + howpublished = {IVOA Working Draft 30 October 2009}, + year = 2009, + month = oct, + pages = {1030}, + doi = {10.5479/ADS/bib/2009ivoa.rept.1030R}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.rept.1030R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.rept.1001A, + author = {{Arviset}, Christophe and {IVOA Technical Coordination Group}}, + title = "{The IVOA in 2009: Technical Assessment, Roadmap Version 1.0}", + howpublished = {IVOA Note 01 October 2009}, + year = 2009, + month = oct, + pages = {1001}, + doi = {10.5479/ADS/bib/2009ivoa.rept.1001A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.rept.1001A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.rept.0110I, + author = {{IVOA Technical Coordination Group}}, + title = "{The IVOA in 2009: Technical Assessment and Roadmap Version 1.0}", + howpublished = {IVOA Note 01 October 2009}, + year = 2009, + month = oct, + pages = {110}, + doi = {10.5479/ADS/bib/2009ivoa.rept.0110I}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.rept.0110I}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2009ivoa.spec.0421B, + author = {{Boch}, Thomas and {Fitzpatrick}, Michael and {Taylor}, Mark and {Allan}, Alasdair and {Paioro}, Luigi and {Taylor}, John and {Tody}, Douglas}, + title = "{SAMP {\textemdash} Simple Application Messaging Protocol Version 1.11}", + howpublished = {IVOA Recommendation 21 April 2009}, + year = 2009, + month = apr, + pages = {421}, + doi = {10.5479/ADS/bib/2009ivoa.spec.0421B}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2009ivoa.spec.0421B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.1030O, + author = {{Osuna}, Pedro and {Ortiz}, I{\~n}aki and {Lusted}, Jeff and {Dowler}, Pat and {Szalay}, Alexander and {Shirasaki}, Yuji and {Nieto-Santisteban}, Maria A. and {Ohishi}, Masatoshi and {O'Mullane}, William and {VOQL-TEG Group} and {VOQL Working Group.}}, + title = "{IVOA Astronomical Data Query Language Version 2.00}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 30 October 2008}, + year = 2008, + month = oct, + pages = {1030}, + doi = {10.5479/ADS/bib/2008ivoa.spec.1030O}, +archivePrefix = {arXiv}, + eprint = {1110.0503}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.1030O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.rept.0807A, + author = {{Arviset}, Christophe and {IVOA TCG}}, + title = "{The IVOA in 2008: Technical Assessment, Roadmap Version 1.00}", + howpublished = {IVOA Note 07 August 2008}, + year = 2008, + month = aug, + pages = {807}, + doi = {10.5479/ADS/bib/2008ivoa.rept.0807A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.rept.0807A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.0325L, + author = {{Louys}, Mireille and {Richards}, Anita and {Bonnarel}, Fran{\c{c}}ois and {Micol}, Alberto and {Chilingarian}, Igor and {McDowell}, Jonathan and {IVOA Data Model Working Group}}, + title = "{Data Model for Astronomical DataSet Characterisation Version 1.13}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 25 March 2008}, + year = 2008, + month = mar, + pages = {325}, + doi = {10.5479/ADS/bib/2008ivoa.spec.0325L}, +archivePrefix = {arXiv}, + eprint = {1111.2281}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.0325L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.specQ0222P, + author = {{Plante}, Raymond and {Williams}, Roy and {Hanisch}, Robert and {Szalay}, Alex}, + title = "{Simple Cone Search Version 1.03}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 22 February 2008}, + year = 2008, + month = feb, + pages = {222}, + doi = {10.5479/ADS/bib/2008ivoa.specQ0222P}, +archivePrefix = {arXiv}, + eprint = {1110.0498}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.specQ0222P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.0222P, + author = {{Plante}, Raymond and {Benson}, Kevin and {Graham}, Matthew and {Greene}, Gretchen and {Harrison}, Paul and {Lemson}, Gerard and {Linde}, Tony and {Rixon}, Guy and {St{\'e}b{\'e}}, Aur{\'e}lien and {IVOA Registry Working Group}}, + title = "{VOResource: an XML Encoding Schema for Resource Metadata Version 1.03}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 22 February 2008}, + year = 2008, + month = feb, + pages = {222}, + doi = {10.5479/ADS/bib/2008ivoa.spec.0222P}, +archivePrefix = {arXiv}, + eprint = {1110.0515}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.0222P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.0201D, + author = {{Tody}, D. and {Dolensky}, M. and {McDowell}, J. and {Bonnarel}, F. and {Budavari}, T. and {Busko}, I. and {Micol}, A. and {Osuna}, P. and {Salgado}, J. and {Skoda}, P. and {Thompson}, R. and {Valdes}, F. and {Data Access Layer Working Group}}, + title = "{Simple Spectral Access Protocol Version 1.04}", + howpublished = {IVOA Recommendation 01 February 2008}, + year = 2008, + month = feb, + pages = {201}, + doi = {10.5479/ADS/bib/2008ivoa.spec.0201D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.0201D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.0124R, + author = {{Rixon}, Guy and {Graham}, Matthew and {Grid andWeb Services Working Group}}, + title = "{IVOA Single-Sign-On Profile: Authentication Mechanisms Version 1.01}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 24 January 2008}, + year = 2008, + month = jan, + pages = {124}, + doi = {10.5479/ADS/bib/2008ivoa.spec.0124R}, +archivePrefix = {arXiv}, + eprint = {1110.0506}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.0124R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2008ivoa.spec.0124G, + author = {{Graham}, Matthew and {Harrison}, Paul and {Morris}, Dave and {Rixon}, Guy}, + title = "{VOSpace service specification Version 1.02}", + howpublished = {IVOA Recommendation 24 January 2008}, + year = 2008, + month = jan, + pages = {124}, + doi = {10.5479/ADS/bib/2008ivoa.spec.0124G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2008ivoa.spec.0124G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.1220D, + author = {{Tody}, D. and {Dolensky}, M. and {McDowell}, J. and {Bonnarel}, F. and {Budavari}, T. and {Busko}, I. and {Micol}, A. and {Osuna}, P. and {Salgado}, J. and {Skoda}, P. and {Thompson}, R. and {Valdes}, F. and {Data Access Layer Working Group}}, + title = "{Simple Spectral Access Protocol Version 1.03}", + howpublished = {IVOA Recommendation 20 December 2007}, + year = 2007, + month = dec, + pages = {1220}, + doi = {10.5479/ADS/bib/2007ivoa.spec.1220D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.1220D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.1108L, + author = {{Louys}, Mireille and {Richards}, Anita and {Bonnarel}, Fran{\c{c}}ois and {Micol}, Alberto and {Chilingarian}, Igor and {McDowell}, Jonathan and {IVOA Data Model Working Group}}, + title = "{Data Model for Astronomical DataSet Characterisation Version 1.12}", + howpublished = {IVOA Recommendation 08 November 2007}, + year = 2007, + month = nov, + pages = {1108}, + doi = {10.5479/ADS/bib/2007ivoa.spec.1108L}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.1108L}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.1030R, + author = {{Rots}, A.~H.}, + title = "{Space-Time Coordinate Metadata for the Virtual Observatory Version 1.33}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 30 October 2007}, + year = 2007, + month = oct, + pages = {1030}, + doi = {10.5479/ADS/bib/2007ivoa.spec.1030R}, +archivePrefix = {arXiv}, + eprint = {1110.0504}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.1030R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.1029M, + author = {{McDowell}, Jonathan and {Tody}, Doug and {Budavari}, Tamas and {Dolensky}, Markus and {Kamp}, Inga and {McCusker}, Kelly and {Protopapas}, Pavlos and {Rots}, Arnold and {Thompson}, Randy and {Valdes}, Frank and {Skoda}, Petr and {IVOA Data Access Layer} and {Data Model Working Groups} and {Data Model Working Groups}}, + title = "{IVOA Spectral Data Model Version 1.03}", + howpublished = {IVOA Recommendation 29 October 2007}, + year = 2007, + month = oct, + pages = {1029}, + doi = {10.5479/ADS/bib/2007ivoa.spec.1029M}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.1029M}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.rept.0920G, + author = {{Gray}, Norman}, + title = "{An RDF version of the VO Registry Version 1.00}", + howpublished = {IVOA Note 20 September 2007}, + year = 2007, + month = sep, + pages = {920}, + doi = {10.5479/ADS/bib/2007ivoa.rept.0920G}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.rept.0920G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.rept.0628P, + author = {{Plante}, Raymond}, + title = "{The Registry of Registries Version 1.00}", + howpublished = {IVOA Note 28 June 2007}, + year = 2007, + month = jun, + pages = {628}, + doi = {10.5479/ADS/bib/2007ivoa.rept.0628P}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.rept.0628P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.rept.0625B, + author = {{Bonnarel}, Fran{\c{c}}ois and {Louys}, Mireille and {Chilingarian}, Igor and {Micol}, Alberto and {Richards}, Anita and {McDowell}, Jonathan}, + title = "{Utype list for the Characterisation Data Model Version 1.11}", + howpublished = {IVOA Note 25 June 2007}, + year = 2007, + month = jun, + pages = {625}, + doi = {10.5479/ADS/bib/2007ivoa.rept.0625B}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.rept.0625B}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.rept.0618W, + author = {{Williams}, Roy and {Allen}, Mark and {Arviset}, Christophe and {Derriere}, Sebastien and {deYoung}, Dave and {Dolensky}, Markus and {Genova}, Francoise and {Graham}, Matthew and {Hanisch}, Bob and {Lemson}, Gerard and {Louys}, Mireille and {Preite Martinez}, Andrea and {Noddle}, Keith and {Ochsenbein}, Francois and {Osuna}, Petdro and {Plante}, Ray and {Richards}, Anita and {Seaman}, Rob and {Shirasaki}, Yuji and {Stebe}, Aurelien and {Taylor}, Mark and {Wozniak}, Herve}, + title = "{The IVOA in 2007: Assessment, Future Roadmap Version 1.00}", + howpublished = {IVOA Note 18 June 2007}, + year = 2007, + month = jun, + pages = {618}, + doi = {10.5479/ADS/bib/2007ivoa.rept.0618W}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.rept.0618W}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.0402P, + author = {{Preite Martinez}, Andrea and {Derriere}, Sebastien and {Delmotte}, Nausicaa and {Gray}, Norman and {Mann}, Robert and {McDowell}, Jonathan and {Mc Glynn}, Thomas and {Ochsenbein}, Fran{\c{c}}ois and {Osuna}, Pedro and {Rixon}, Guy and {Williams}, Roy}, + title = "{The UCD1+ controlled vocabulary Version 1.23}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 02 April 2007}, + year = 2007, + month = apr, + pages = {402}, + doi = {10.5479/ADS/bib/2007ivoa.spec.0402M}, +archivePrefix = {arXiv}, + eprint = {1110.0518}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.0402P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.0314P, + author = {{Plante}, Raymond and {Linde}, Tony and {Williams}, Roy and {Noddle}, Keith}, + title = "{IVOA Identifiers Version 1.12}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 14 March 2007}, + year = 2007, + month = mar, + pages = {314}, + doi = {10.5479/ADS/bib/2007ivoa.spec.0314P}, +archivePrefix = {arXiv}, + eprint = {1110.0512}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.0314P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2007ivoa.spec.0302H, + author = {{Hanisch}, Robert and {IVOA Resource Registry Working Group} and {NVO Metadata Working Group}}, + title = "{Resource Metadata for the Virtual Observatory Version 1.12}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 02 March 2007}, + year = 2007, + month = mar, + pages = {302}, + doi = {10.5479/ADS/bib/2007ivoa.spec.0302H}, +archivePrefix = {arXiv}, + eprint = {1110.0514}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2007ivoa.spec.0302H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2006ivoa.spec.1101S, + author = {{Seaman}, Rob and {Williams}, Roy and {Allan}, Alasdair and {Barthelmy}, Scott and {Bloom}, Joshua and {Graham}, Matthew and {Hessman}, Frederic and {Marka}, Szabolcs and {Rots}, Arnold and {Stoughton}, Chris and {Vestrand}, Tom and {White}, Robert and {Wozniak}, Przemyslaw}, + title = "{Sky Event Reporting Metadata (VOEvent) Version 1.11}", + howpublished = {IVOA Recommendation 1 November 2006}, + year = 2006, + month = nov, + pages = {1101}, + doi = {10.5479/ADS/bib/2006ivoa.spec.1101S}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2006ivoa.spec.1101S}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2006ivoa.rept.0919C, + author = {{Christensen}, Lars Lindberg and {Hurt}, Robert and {Gauthier}, Adrienne and {IAU Virtual Repository Working Group}}, + title = "{Astronomical Outreach Imagery Metadata Tags for the Virtual Observatory Version 1.00}", + howpublished = {IVOA Note 19 September 2006}, + year = 2006, + month = sep, + pages = {919}, + doi = {10.5479/ADS/bib/2006ivoa.rept.0919C}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2006ivoa.rept.0919C}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2006ivoa.rept.0606A, + author = {{Allen}, Mark and {Genova}, Francoise and {Hanisch}, Bob and {Lemson}, Gerard and {Linde}, Tony and {McDowell}, Jonathan and {Moore}, Reagan and {Nieto-Santisteban}, Maria and {Ochsenbein}, Francois and {Ohishi}, Masatoshi and {Preite Martinez}, Andrea and {Rixon}, Guy and {Shirasaki}, Yuji and {Tody}, Doug and {Williams}, Roy}, + title = "{The IVOA in 2006: Assessment, Future Roadmap Version 1.00}", + howpublished = {IVOA Note 06 June 2006}, + year = 2006, + month = jun, + pages = {606}, + doi = {10.5479/ADS/bib/2006ivoa.rept.0606A}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2006ivoa.rept.0606A}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2006ivoa.spec.0528P, + author = {{Preite Martinez}, A. and {Derriere}, S. and {Delmotte}, Nausicaa and {Derriere}, Sebastien and {Gray}, Norman and {Mann}, Robert and {McDowell}, Jonathan and {Mc Glynn}, Thomas and {Ochsenbein}, Fran{\c{c}}ois and {Osuna}, Pedro and {Preite Martinez}, Andrea and {Rixon}, Guy and {Williams}, Roy}, + title = "{Maintenance of the list of UCD words Version 1.20}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 28 May 2006}, + year = 2006, + month = may, + pages = {528}, + doi = {10.5479/ADS/bib/2006ivoa.spec.0528M}, +archivePrefix = {arXiv}, + eprint = {1110.0519}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2006ivoa.spec.0528P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2005ivoa.spec.1231D, + author = {{Derriere}, S. and {Preite Martinez}, A. and {Preite Martinez}, Andrea and {Derriere}, S{\'e}bastien and {Gray}, Norman and {Mann}, Robert and {McDowell}, Jonathan and {Mc Glynn}, Thomas and {Ochsenbein}, Fran{\c{c}}ois and {Osuna}, Pedro and {Rixon}, Guy and {Williams}, Roy}, + title = "{The UCD1+ controlled vocabulary Version 1.11}", + howpublished = {IVOA Recommendation 31 December 2005}, + year = 2005, + month = dec, + pages = {1231}, + doi = {10.5479/ADS/bib/2005ivoa.spec.1231D}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2005ivoa.spec.1231D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2005ivoa.spec.0819D, + author = {{Derriere}, S{\'e}bastien and {Preite Martinez}, Andrea and {Williams}, Roy and {Gray}, Norman and {Mann}, Robert and {McDowell}, Jonathan and {Mc Glynn}, Thomas and {Ochsenbein}, Fran{\c{c}}ois and {Osuna}, Pedro and {Rixon}, Guy}, + title = "{An IVOA Standard for Unified Content Descriptors Version 1.10}", + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics}, + howpublished = {IVOA Recommendation 19 August 2005}, + year = 2005, + month = aug, + pages = {819}, + doi = {10.5479/ADS/bib/2005ivoa.spec.0819D}, +archivePrefix = {arXiv}, + eprint = {1110.0525}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2005ivoa.spec.0819D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2005ivoa.rept.0808W, + author = {{Williams}, Roy}, + title = "{The IVOA in 2005: Assessment, Future Roadmap Version 1.00}", + howpublished = {IVOA Note 08 August 2005}, + year = 2005, + month = aug, + pages = {808}, + doi = {10.5479/ADS/bib/2005ivoa.rept.0808W}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2005ivoa.rept.0808W}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2004ivoa.spec.0811O, + author = {{Ochsenbein}, Fran{\c{c}}ois and {Williams}, Roy and {Davenhall}, Clive and {Durand}, Daniel and {Fernique}, Pierre and {Giaretta}, David and {Hanisch}, Robert and {McGlynn}, Tom and {Szalay}, Alex and {Taylor}, Mark B. and {Wicenec}, Andreas}, + title = "{VOTable Format Definition Version 1.1}", + howpublished = {IVOA Recommendation 11 August 2004}, + year = 2004, + month = aug, + pages = {811}, + doi = {10.5479/ADS/bib/2004ivoa.spec.0811O}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2004ivoa.spec.0811O}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2004ivoa.spec.0426H, + author = {{Hanisch}, Robert and {IVOA Resource Registry Working Group} and {NVO Metadata Working Group}}, + title = "{Resource Metadata for the Virtual Observatory Version 1.01}", + howpublished = {IVOA Recommendation 26 April 2004}, + year = 2004, + month = apr, + pages = {426}, + doi = {10.5479/ADS/bib/2004ivoa.spec.0426H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2004ivoa.spec.0426H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2004ivoa.rept.0315H, + author = {{Hanisch}, Bob and {Quinn}, Peter and {Lawrence}, Andy}, + title = "{The Management, Storage, Utilization of Astronomical Data in the 21st Century Version 1.00}", + howpublished = {IVOA Note 15 March 2004}, + year = 2004, + month = mar, + pages = {315}, + doi = {10.5479/ADS/bib/2004ivoa.rept.0315H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2004ivoa.rept.0315H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{2003ivoa.spec.1024H, + author = {{Hanisch}, R.~J. and {Linde}, A.~E. and {Executive Committee}, IVOA}, + title = "{IVOA Document Standards Version 1.0}", + howpublished = {IVOA Recommendation 24 October 2003}, + year = 2003, + month = oct, + pages = {1024}, + doi = {10.5479/ADS/bib/2003ivoa.spec.1024H}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2003ivoa.spec.1024H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + diff --git a/ivoatex/document.template b/ivoatex/document.template new file mode 100644 index 0000000..cc0c2c7 --- /dev/null +++ b/ivoatex/document.template @@ -0,0 +1,82 @@ +\documentclass[11pt,a4paper]{ivoa} +\input tthdefs + +\title{???? Full title ????} + +% see ivoatexDoc for what group names to use here; use \ivoagroup[IG] for +% interest groups. +\ivoagroup{???? group ????} + +\author[????URL????]{????Alfred Usher Thor????} +\author{????Fred Offline????} + +\editor{????Alfred Usher Thor????} + +% \previousversion[????URL????]{????Concise Document Label????} +\previousversion{This is the first public release} + + +\begin{document} +\begin{abstract} +???? Abstract ???? +\end{abstract} + + +\section*{Acknowledgments} + +???? Or remove the section header ???? + +\section*{Conformance-related definitions} + +The words ``MUST'', ``SHALL'', ``SHOULD'', ``MAY'', ``RECOMMENDED'', and +``OPTIONAL'' (in upper or lower case) used in this document are to be +interpreted as described in IETF standard RFC2119 \citep{std:RFC2119}. + +The \emph{Virtual Observatory (VO)} is a +general term for a collection of federated resources that can be used +to conduct astronomical research, education, and outreach. +The \href{https://www.ivoa.net}{International +Virtual Observatory Alliance (IVOA)} is a global +collaboration of separately funded projects to develop standards and +infrastructure that enable VO applications. + + +\section{Introduction} + +???? Write something ???? + +\subsection{Role within the VO Architecture} + +\begin{figure} +\centering + +% As of ivoatex 1.2, the architecture diagram is generated by ivoatex in +% SVG; copy ivoatex/archdiag-full.xml to role_diagram.xml and throw out +% all lines not relevant to your standard. +% Notes don't generally need this. If you don't copy role_diagram.xml, +% you must remove role_diagram.pdf from SOURCES in the Makefile. + +\includegraphics[width=0.9\textwidth]{role_diagram.pdf} +\caption{Architecture diagram for this document} +\label{fig:archdiag} +\end{figure} + +Fig.~\ref{fig:archdiag} shows the role this document plays within the +IVOA architecture \citep{2010ivoa.rept.1123A}. + +???? and so on, LaTeX as you know and love it. ???? + +\appendix +\section{Changes from Previous Versions} + +No previous versions yet. +% these would be subsections "Changes from v. WD-..." +% Use itemize environments. + + +% NOTE: IVOA recommendations must be cited from docrepo rather than ivoabib +% (REC entries there are for legacy documents only) +\bibliography{ivoatex/ivoabib,ivoatex/docrepo} + + +\end{document} diff --git a/ivoatex/draft-background.tex b/ivoatex/draft-background.tex new file mode 100644 index 0000000..3b111a1 --- /dev/null +++ b/ivoatex/draft-background.tex @@ -0,0 +1,12 @@ +\documentclass{article} +\usepackage{tikz} +\usepackage[a4paper,left=0.5cm]{geometry} +\begin{document} +\pagestyle{empty} +\begin{tikzpicture} +\pgftransformscale{2} +\pgftransformrotate{90} +\color{gray} +\pgftext{\bfseries\sffamily DRAFT -- please do not distribute} +\end{tikzpicture} +\end{document} diff --git a/ivoatex/fetch_from_ads.py b/ivoatex/fetch_from_ads.py new file mode 100644 index 0000000..f067adb --- /dev/null +++ b/ivoatex/fetch_from_ads.py @@ -0,0 +1,60 @@ +""" +A script to fetch the IVOA records from ADS using the ADS API. + +You'll need to get an ADS API key (see +https://github.com/adsabs/adsabs-dev-api) to run this and put it into the +environment variable ADS_TOKEN. + +If successful, it will write BibTeX to docrepo.bib (as needed by ivoatex). + +Copyright 2020, the GAVO project + +This is part of ivoatex, covered by the GPL. See COPYING for details. +""" + +import json +import os +from urllib import parse, request + +API_URL = "https://api.adsabs.harvard.edu/v1/" + +try: + ADS_TOKEN = os.environ["ADS_TOKEN"] +except KeyError: + sys.exit("No ADS_TOKEN defined. Get an ADS API key and put it there.") + + +def do_api_request(_path, _payload=None, **arguments): + """returns the json-decoded result of an ADS request to path with + arguments. + + path is relative to API_URL. + """ + # Yeah, I know, I could save this with requests; but it'd be an + # extra dependency, and avoiding that is worth a few lines. + auth_header = {"Authorization": "Bearer:%s"%ADS_TOKEN} + req = request.Request( + API_URL+_path+"?"+parse.urlencode(arguments), + _payload, + auth_header) + f = request.urlopen(req) + return json.load(f) + + +def main(): + bibcode_recs = do_api_request("search/query/", + q="bibstem:(ivoa.spec or ivoa.rept)", + rows="500", + fl="bibcode") + + bibtex_args = { + "bibcode": [r["bibcode"] for r in bibcode_recs["response"]["docs"]],} + bibtex_recs = do_api_request("export/bibtex", + _payload=json.dumps(bibtex_args).encode("ascii")) + with open("docrepo.bib", "w") as f: + f.write(bibtex_recs["export"]) + + +if __name__=="__main__": + main() +# vi:sw=4:et:sta diff --git a/ivoatex/fromivoadoc.xslt b/ivoatex/fromivoadoc.xslt new file mode 100644 index 0000000..a8c4ca2 --- /dev/null +++ b/ivoatex/fromivoadoc.xslt @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ivoatex/github_workflow_build.yml.template b/ivoatex/github_workflow_build.yml.template new file mode 100644 index 0000000..dc45d0c --- /dev/null +++ b/ivoatex/github_workflow_build.yml.template @@ -0,0 +1,45 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Check the IVOA document + +env: + doc_name: + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + + - name: Build the document + run: make + + - name: Check the output + run: | + test -f ${{ env.doc_name }}.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Keep the PDF artefact + uses: actions/upload-artifact@v1 + with: + name: PDF Preview + path: ${{ env.doc_name }}.pdf diff --git a/ivoatex/github_workflow_preview.yml.template b/ivoatex/github_workflow_preview.yml.template new file mode 100644 index 0000000..576079a --- /dev/null +++ b/ivoatex/github_workflow_preview.yml.template @@ -0,0 +1,66 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Update PDF Preview + +env: + doc_name: + +on: + push: + branches: + - master + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + sudo snap install pdftk + + - name: Build the document + run: make ${{ env.doc_name }}-draft.pdf + + - name: Check the output + run: | + test -f ${{ env.doc_name }}-draft.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Move the auto-pdf-preview tag + uses: weareyipyip/walking-tag-action@v2 + with: + tag-name: auto-pdf-preview + tag-message: | + Last commit taken into account for the automatically updated PDF preview of this IVOA document. + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Update the PDF preview + uses: Xotl/cool-github-releases@v1 + with: + mode: update + isPrerelease: true + tag_name: auto-pdf-preview + release_name: "Auto PDF Preview" + body_mrkdwn: | + This release aims to provide a PDF preview of the last commit applied on this repository. + It will be updated automatically after each merge of a PullRequest. + **DO NOT PUBLISH THIS PRE-RELEASE!**" + _Corresponding commit: ${{ github.sha }}_ + assets: ${{ env.doc_name }}-draft.pdf + replace_assets: true + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/ivoatex/ivoa.bst b/ivoatex/ivoa.bst new file mode 100644 index 0000000..48a5b81 --- /dev/null +++ b/ivoatex/ivoa.bst @@ -0,0 +1,1375 @@ +% BibTeX custom bibliography style `ivoa' (one of the harvard family) + % version 1.0 for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 2015 the GAVO project and Peter Williams as the + % author of the original agsm.bst + % This file can be distributed under the terms of the GPL; see COPYING. + +% ACKNOWLEDGEMENT: +% This document is a modified version of agsm.bst, which in turn +% is a modified version of alpha.bst to which it owes much of +% its functionality. + +% AUTHOR +% Markus Demleitner, GAVO, msdemlei@ari.uni-heidelberg.de +% Original author of agsm.bst, on which this is based: +% Peter Williams, Key Centre for Design Quality, Sydney University +% e-mail: peterw@archsci.arch.su.oz.au + +ENTRY + { address + archivePrefix + author + booktitle + chapter + edition + editor + eprint + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + URL + adsurl + doi + volume + year + } + { field.used etal.allowed etal.required} %%%XXX change + { extra.label sort.label list.year } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t f } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {item.check} +{ 't := + empty$ + { "empty " t * " in " * cite$ * warning$ } + { skip$ } + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +FUNCTION {embolden} +{ duplicate$ empty$ + { pop$ "" } + { "{\bf " swap$ * "}" * } + if$ +} + +FUNCTION {quote} +{ duplicate$ empty$ + { pop$ "" } + { "`" swap$ * "'" * } + if$ +} + +FUNCTION {write.url} +{ URL empty$ { + doi empty$ { + adsurl empty$ + { skip$ } + { "\newline\url{" adsurl * "}" * write$ newline$ } + if$ + } + { "\newline\url{http://doi.org/" doi * "}" * write$ newline$} + if$ + } + { "\newline\url{" URL * "}" * write$ newline$ } + if$ +} + +FUNCTION {write.eprintid} +{ archivePrefix empty$ + { skip$ } + { " " archivePrefix * ":" * eprint * output } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + 'f := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr f format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { t "others" = + { " et~al." * } + { " \harvardand\ " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { "{vv~}{ll}{, jj}{, f.}" author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { "{vv~}{ll}{, jj}{, f.}" editor format.names + editor num.names$ #1 > + { ", eds" * } + { ", ed." * } + if$ + } + if$ +} + +FUNCTION {format.editors.reverse} +{ editor empty$ + { "" } + { "{f.~}{vv~}{ll}{, jj}" editor format.names + editor num.names$ #1 > + { ", eds" * } + { ", ed." * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "Vol." volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " {\em in} " * series quote * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edn" * } + { edition "t" change.case$ " edn" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pp.~" pages n.dashify * } + { "p.~" pages * } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume embolden field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ",~" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "{\em in} " booktitle quote * } + { "{\em in} " format.editors.reverse * ", " * booktitle quote * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "in {\em " journal * "\/} \cite{" * crossref * "}" *} + if$ + } + { "{\em in} \citeasnoun{" crossref * "}" * } + if$ + +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "in " + } + { "Vol." volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "{\em " * series * "\/} \cite{" * crossref * "}" *} + if$ + } + { " \citeasnoun{" * crossref * "}" * } + if$ + } + { " \citeasnoun{" * crossref * "}" * } + if$ +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "in {\em " booktitle * "\/}" * " \cite{" * crossref * "}" *} + if$ + } + { "{\em in} \citeasnoun{" crossref * "}" * } + if$ + } + { "{\em in} \citeasnoun{" crossref * "}" * } + if$ + +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { ind tsslen } + +STRINGS { tss ret rss istr } + +FUNCTION {replace.substring}{ + 'rss := + 'tss := + 'istr := + "" 'ret := + tss text.length$ 'tsslen := + #1 'ind := + { istr ind tsslen substring$ "" = not } + { istr ind tsslen substring$ tss = + { ret rss * 'ret := + ind tsslen + 'ind := + } + { ret istr ind #1 substring$ * 'ret := + ind #1 + 'ind := + } + if$ + } + while$ + ret +} + +FUNCTION {format.lab.names.abbr} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #2 > + { s #1 "{vv~}{ll}" format.name$ " \harvardand\ " * + s #2 "{vv~}{ll}" format.name$ * + " et~al." * + } + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { s #1 "{vv~}{ll}" format.name$ " et~al." * } + { s #1 "{vv~}{ll}" format.name$ " \harvardand\ " * + s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + { s #1 "{vv~}{ll}" format.name$ } + if$ +} + +FUNCTION {format.lab.names.full} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { t "others" = + { " et~al." * } + { " \harvardand\ " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +INTEGERS { author.field editor.field organization.field title.field key.field } + +FUNCTION {init.field.constants} +{ #0 'author.field := + #1 'editor.field := + #2 'organization.field := + #3 'title.field := + #4 'key.field := +} + +FUNCTION {make.list.label} +{ author.field field.used = + { format.authors } + { editor.field field.used = + { format.editors } + { organization.field field.used = + { "The " #4 organization chop.word #3 text.prefix$ } + { title.field field.used = + { format.btitle } + { key.field field.used = + { key #3 text.prefix$ } + { "Internal error :001 on " cite$ * " label" * warning$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {make.full.label} +{ author.field field.used = + { author format.lab.names.full } + { editor.field field.used = + { editor format.lab.names.full } + { organization.field field.used = + { "The " #4 organization chop.word #3 text.prefix$ } + { title.field field.used = + { format.btitle } + { key.field field.used = + { key #3 text.prefix$ } + { "Internal error :001 on " cite$ * " label" * warning$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {make.abbr.label} %%%XXX change +{ + etal.allowed + { author.field field.used = + { author format.lab.names.abbr } + { editor.field field.used = + { editor format.lab.names.abbr } + { organization.field field.used = + { "The " #4 organization chop.word #3 text.prefix$ } + { title.field field.used = + { format.btitle } + { key.field field.used = + { key #3 text.prefix$ } + {"Internal error :001 on " cite$ * " label" * warning$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { make.full.label } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + etal.allowed %%%XXX change + etal.required + and + { + "\harvarditem[" write$ + make.abbr.label write$ + "]{" write$ + } + { + "\harvarditem{" write$ + } + if$ + make.full.label write$ + "}{" write$ + list.year write$ + "}{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {list.label.output} +{ make.list.label " " * write$ +} + +FUNCTION {article} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author "author" item.check + title.field field.used = + { skip$ } + { format.title quote "title" output.check } + if$ + crossref missing$ + { journal emphasize "journal" duplicate$ item.check + " " * format.vol.num.pages * output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + write.eprintid + new.block + note output + fin.entry + write.url +} + +FUNCTION {book} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author empty$ + { editor "author and editor" item.check } + { crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + title.field field.used = + { skip$ } + { format.btitle "title" output.check } + if$ + crossref missing$ + { format.bvolume output + format.number.series output + format.edition output + publisher "publisher" output.check + address output + } + { format.book.crossref output.nonnull + format.edition output + } + if$ + new.block + note output + fin.entry + write.url +} + +FUNCTION {booklet} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.title quote "title" output.check } + if$ + howpublished output + address output + new.block + note output + fin.entry + write.url +} + +FUNCTION {inbook} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author empty$ + { editor "author and editor" item.check } + { crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + title.field field.used = + { skip$ } + { format.btitle "title" output.check } + if$ + crossref missing$ + { format.bvolume output + format.number.series output + format.edition output + publisher "publisher" output.check + address output + } + { format.book.crossref output.nonnull + format.edition output + } + if$ + format.chapter.pages "chapter and pages" output.check + new.block + note output + fin.entry + write.url +} + +FUNCTION {incollection} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.title "title" output.check } + if$ + author "author" item.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.bvolume output + format.number.series output + publisher "publisher" output.check + address output + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.chapter.pages output + new.block + note output + fin.entry + write.url +} + +FUNCTION {inproceedings} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.title "title" output.check } + if$ + author "author" item.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + address empty$ + { organization output + publisher output + } + { organization output + publisher output + address output.nonnull + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages output + new.block + note output + fin.entry + write.url +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.btitle "title" output.check } + if$ + format.edition output + author empty$ + { organization empty$ + { address output } + 'skip$ + if$ + } + { organization output + address output + } + if$ + new.block + note output + fin.entry + write.url +} + +FUNCTION {mastersthesis} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author "author" item.check + title.field field.used = + { skip$ } + { format.title "title" output.check } + if$ + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry + write.url +} + +FUNCTION {misc} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.title quote output } + if$ + howpublished output + write.eprintid + new.block + note output + fin.entry + write.url + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author "author" item.check + title.field field.used = + { skip$ } + { title "title" output.check } + if$ + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry + write.url +} + +FUNCTION {proceedings} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + title.field field.used = + { skip$ } + { format.btitle "title" output.check } + if$ + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { skip$ } + { organization output + } + if$ + publisher output + } + { editor empty$ + 'skip$ + { organization output } + if$ + publisher output + address output.nonnull + } + if$ + new.block + note output + fin.entry + write.url +} + +FUNCTION {techreport} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author "author" item.check + title.field field.used = + { skip$ } + { format.title "title" output.check } + if$ + format.tr.number output.nonnull + institution "institution" output.check + address output + new.block + note output + fin.entry + write.url +} + +FUNCTION {unpublished} +{ output.bibitem + list.label.output + " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull + author "author" item.check + title.field field.used = + { skip$ } + { format.title "title" output.check } + if$ + new.block + note "note" output.check + fin.entry + write.url +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +EXECUTE {init.field.constants} + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +FUNCTION {sortify.names} +{ " \harvardand\ " " " replace.substring + " et~al." " zzz" replace.substring + sortify +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { title.field 'field.used := } + { key.field 'field.used := } + if$ + } + { author.field 'field.used := } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { title.field 'field.used := } + { key.field 'field.used := } + if$ + } + { editor.field 'field.used := } + if$ + } + { author.field 'field.used := } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { title.field 'field.used := } + { organization.field 'field.used := } + if$ + } + { key.field 'field.used := } + if$ + } + { author.field 'field.used := } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { title.field 'field.used := } + { organization.field 'field.used := } + if$ + } + { key.field 'field.used := } + if$ + } + { editor.field 'field.used := } + if$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {calc.label} %%%XXX change +{ make.abbr.label + title.field field.used = + { sort.format.title } + { sortify.names } + if$ + year field.or.null purify$ #-1 #4 substring$ sortify + * + 'sort.label := +} + +FUNCTION {preliminaries} %%%XXX change +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + author.field field.used = %%%XXX change + { + author num.names$ #2 > + { #1 } + { #0 } + if$ + 'etal.required := + } + { + editor.field field.used = + { + editor num.names$ #2 > + { #1 } + { #0 } + if$ + } + { #0 } + if$ + 'etal.required := + } + if$ + #1 'etal.allowed := +} + +FUNCTION {first.presort} +{ calc.label + sort.label + title.field field.used = + { skip$ } + { " " + * + make.list.label sortify.names + * + " " + * + title field.or.null + sort.format.title + * + } + if$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {preliminaries} + +ITERATE {first.presort} + +SORT + +STRINGS { last.sort.label next.extra last.full.label} + +INTEGERS { last.extra.num last.etal.allowed} + +FUNCTION {initialize.confusion} +{ #0 int.to.chr$ 'last.sort.label := + #0 int.to.chr$ 'last.full.label := + #1 'last.etal.allowed := +} + +FUNCTION {confusion.pass} +{ last.sort.label sort.label = + { last.etal.allowed + { last.full.label make.full.label sortify.names = + { skip$ } + { #0 'etal.allowed := + #0 'last.etal.allowed := + } + if$ + } + { #0 'etal.allowed := } + if$ + } + { sort.label 'last.sort.label := + make.full.label sortify.names 'last.full.label := + #1 'last.etal.allowed := + } + if$ +} + +EXECUTE {initialize.confusion} + +ITERATE {confusion.pass} + +EXECUTE {initialize.confusion} + +REVERSE {confusion.pass} + +FUNCTION {initialize.last.extra.num} +{ #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + year empty$ + { "n.d." extra.label * 'list.year := } + { year extra.label * 'list.year := } + if$ + extra.label 'next.extra := +} + +ITERATE {first.presort} + +SORT + +EXECUTE {initialize.last.extra.num} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {second.presort} +{ make.list.label + title.field field.used = + { sort.format.title } + { sortify.names } + if$ + " " + * + list.year field.or.null sortify + * + " " + * + title.field field.used = + { skip$ } + { title field.or.null + sort.format.title + * + } + if$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {second.presort} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { "\harvardpreambledefs{%" write$ newline$ + preamble$ write$ "}" write$ newline$ + "\harvardpreambletext{%" write$ newline$ + preamble$ write$ "}" write$ newline$ } + if$ + "\begin{thebibliography}{xx}" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/ivoatex/ivoa.cls b/ivoatex/ivoa.cls new file mode 100644 index 0000000..7cfd255 --- /dev/null +++ b/ivoatex/ivoa.cls @@ -0,0 +1,378 @@ +\ProvidesClass{ivoa} +\LoadClassWithOptions{article} + +\NeedsTeXFormat{LaTeX2e} + +\RequirePackage{calc} +\RequirePackage{graphicx} +\RequirePackage{xcolor} +\RequirePackage{ifthen} +\RequirePackage{doc} +\RequirePackage{listings} +\RequirePackage{paralist} +\RequirePackage{url} +\RequirePackage[nottoc]{tocbibind} +\RequirePackage[labelfont=it]{caption} +\RequirePackage[T1]{fontenc} +\RequirePackage[utf8]{inputenc} + +\definecolor{ivoacolor}{rgb}{0.0,0.318,0.612} +\definecolor{linkcolor}{rgb}{0.318,0,0.318} + +\RequirePackage[colorlinks, + linkcolor=linkcolor, + anchorcolor=linkcolor, + citecolor=linkcolor, + urlcolor=linkcolor, + breaklinks=true]{hyperref} + +\RequirePackage{natbib} +\bibliographystyle{ivoatex/ivoa} + +\renewcommand{\topfraction}{0.9} +\renewcommand{\bottomfraction}{0.7} +\renewcommand{\textfraction}{0.1} +\renewcommand{\floatpagefraction}{0.8} + +\setlength{\parskip}{1pt plus 2pt} + +\makeatletter + +%%%%%%%%%%%%%%%%%%% Metadata definition macros + +\newcommand{\ivoagroup}[2][WG]{% + \def\ivo@group{#2}% + \ifthenelse{\equal{#1}{IG}} + {\gdef\gr@uptype{Interest Group}} + {\gdef\gr@uptype{Working Group}} +} + +% these are accumulators for sequences +\def\previ@usversions{} +\def\@uthors{} +\def\@ditors{} + +\renewcommand{\author}[2][0]{% + \ifthenelse{\equal{\@uthors}{}}{} + {\g@addto@macro\@uthors{, }} + \ifthenelse{\equal{#1}{0}} + {\g@addto@macro\@uthors{#2}} + {\g@addto@macro\@uthors{\href{#1}{#2}}}} +\newcommand{\editor}[2][0]{% + \ifthenelse{\equal{\@ditors}{}}{} + {\g@addto@macro\@ditors{, }} + \ifthenelse{\equal{#1}{0}} + {\g@addto@macro\@ditors{#2}} + {\g@addto@macro\@ditors{\href{#1}{#2}}}} +\newcommand{\previousversion}[2][0]{ + \ifthenelse{\equal{#1}{0}} + {\g@addto@macro\previ@usversions{\item #2}} + {\g@addto@macro\previ@usversions{\item \href{#1}{#2}}}} + +\def\vcsR@vision{unknown} +\def\vcsD@te{unknown} +\def\vcs@RL{unknown} +\newcommand{\vcsrevision}[1]{\gdef\vcsR@vision{#1}} +\newcommand{\vcsdate}[1]{\gdef\vcsD@te{#1}} +\newcommand{\vcsurl}[1]{\gdef\vcs@RL{#1}} + +\def\SVN$#1: #2 ${% + \ifthenelse{\equal{#1}{Date}} + {\vcsdate{#2}}{% + \ifthenelse{\equal{#1}{Rev}} + {\vcsrevision{#2}}{% + \ifthenelse{\equal{#1}{URL}} + {\vcsurl{#2}}{% + \message{Invalid SVN key /#1/}} +}}} + +%%%%%%%%%%%%%%%%%% Tools for formatting the titlepage + +\newcommand*\bigdescriptionlabel[1]{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\color{ivoacolor}#1}\\\mbox{}}} +\newenvironment{bigdescription}% + {\begin{list}{}{% + \setlength{\leftmargin}{4em} + \setlength{\labelwidth}{4em} + \setlength{\labelsep}{0pt} + \setlength{\listparindent}{0pt} + \setlength{\itemsep}{0pt} + \let\makelabel\bigdescriptionlabel} + \let\term\item + }{% + \end{list}} + +\newcommand*\longtermslabel[1]{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{#1}\\\mbox{}}} +\newenvironment{longtermsdescription}% + {\begin{list}{}{% + \setlength{\leftmargin}{4em} + \setlength{\labelwidth}{4em} + \setlength{\labelsep}{0pt} + \setlength{\listparindent}{0pt} + \setlength{\itemsep}{3pt} + \let\makelabel\longtermslabel} + \let\term\item + }{% + \end{list}} + +\newcommand\titlehe@d[1]{\bigbreak{\noindent + \Large\color{ivoacolor}\sffamily\bfseries #1}\nobreak\par\nobreak} + +\renewcommand\maketitle{ + \let\footnotesize\small + \let\footnoterule\relax + \let \footnote \thanks + \mbox{} + \vskip -2cm + \noindent\mbox{% + \includegraphics[width=6cm]{ivoatex/IVOA.jpg}% + \raisebox{1.5cm}{\parbox{5cm}{ + \Large\color{ivoacolor}\textsl{\textsf{\textbf{I}nternational}} \\ + \Large\color{ivoacolor}\quad\textsl{\textsf{\textbf{V}irtual}} \\ + \Large\color{ivoacolor}\quad\textsl{\textsf{\textbf{O}bservatory}} \\ + \Large\color{ivoacolor}\textsl{\textsf{\textbf{A}lliance}}}}\hfil} + + \vskip 1.4cm + \begin{sloppypar}\raggedright + \LARGE\color{ivoacolor}\sffamily\bfseries \@title\par + \end{sloppypar} + + \bigskip + \noindent{\LARGE\color{ivoacolor}\sffamily\bfseries + Version \ivoaDocversion} + \medskip + \titlehe@d{\expandedDoctype{\ivoaDoctype} \ivoaDocdate}% + + + \begin{bigdescription} + \item[\gr@uptype] + \ivo@group + + \item[This version] + \currentDocURL + + \item[Latest version] + \latestDocURL + + \item[Previous versions] + \begin{compactitem}[] + \previ@usversions + \end{compactitem} + + \item[Author(s)] + \begin{compactitem}[] + \@uthors + \end{compactitem} + + \item[Editor(s)] + \begin{compactitem}[] + \@ditors + \end{compactitem} + + \ifthenelse{\equal{\vcsR@vision}{unknown}}{\relax}{ + \item[Version Control] + Revision \vcsR@vision + \ifthenelse{\equal{\vcsD@te}{unknown}}{\relax}{, + \vcsD@te} + \ifthenelse{\equal{\vcs@RL}{unknown}}{\relax} + {\\\strut\tiny\url{\vcs@RL}}} + + \end{bigdescription} + \@thanks + \vfill\null + \setcounter{footnote}{0}% +} + + + +\renewenvironment{abstract}{% + \thispagestyle{empty} + \maketitle + \@beginparpenalty\@lowpenalty + \titlehe@d{\abstractname} + \medskip + \@endparpenalty\@M} + {\par + \bigskip + \titlehe@d{Status of this document} + + \medskip + \docstatusDeclaration{\ivoaDoctype} + \tableofcontents} + +\newenvironment{generated}{% + \list{}{\rightmargin 0mm\leftmargin 5mm}\item[]} + {\endlist} + +\newcommand\expandedDoctype[1] % "Proposed Recommendation" for PR and such + {\ifthenelse{\equal{#1}{NOTE}} + {IVOA Note} + {\ifthenelse{\equal{#1}{WD}} + {IVOA Working Draft} + {\ifthenelse{\equal{#1}{PR}} + {IVOA Proposed Recommendation} + {\ifthenelse{\equal{#1}{REC}} + {IVOA Recommendation} + {\ifthenelse{\equal{#1}{PEN}} + {Proposed Endorsed Note} + {\ifthenelse{\equal{#1}{EN}} + {Endorsed Note} + {UNKNOWN DOCUMENT (fix DOCTYPE)}}}}}}} + +\newcommand\docstatusDeclaration[1] + {\ifthenelse{\equal{#1}{NOTE}} + {This is an IVOA Note expressing suggestions from and + opinions of the authors. It is intended to share best + practices, possible approaches, or other perspectives on + interoperability with the Virtual Observatory. It should + not be referenced or otherwise interpreted as a standard + specification.} + {\ifthenelse{\equal{#1}{WD}} + {This is an IVOA Working Draft for review by IVOA members + and other interested parties. It is a draft document and + may be updated, replaced, or obsoleted by other documents + at any time. It is inappropriate to use IVOA Working Drafts + as reference materials or to cite them as other than ``work + in progress''.} + {\ifthenelse{\equal{#1}{PR}} + {This is an IVOA Proposed Recommendation made available for + public review. It is appropriate to reference this document + only as a recommended standard that is under review and + which may be changed before it is accepted as a full + Recommendation.} + {\ifthenelse{\equal{#1}{PEN}} + {This is an IVOA Proposed Endorsed Note for review by IVOA + members and other interested parties. It is appropriate to + reference this document only as a Proposed Endorsed Note that + is under review and may change before it is endorsed or may + not be endorsed. + } + {\ifthenelse{\equal{#1}{EN}} + {This document is an IVOA Endorsed Note. It has been reviewed and endorsed + by the IVOA Technical Coordination Group as a stable, citable document + which constitutes valuable information for the IVOA community and + beyond. + } + {\ifthenelse{\equal{#1}{REC}} + {This document has been reviewed by IVOA Members and other + interested parties, and has been endorsed by the IVOA + Executive Committee as an IVOA Recommendation. It is a + stable document and may be used as reference material or + cited as a normative reference from another document. + IVOA's role in making the Recommendation is to draw + attention to the specification and to promote its + widespread deployment. This enhances the functionality and + interoperability inside the Astronomical Community.} + {UNKNOWN DOCUMENT (fix DOCTYPE)}}}}}}\par + A list of current IVOA Recommendations and other technical documents + can be found at \href{https://www.ivoa.net/documents/ + }{https://www.ivoa.net/documents/}.} + + +\newcommand\currentBaseURL % + {https://www.ivoa.net/documents/\ivoaDocname/\ivoaDocdatecode} +\newcommand\currentDocURL % URL of this document's landing page + {\href{\currentBaseURL}{\currentBaseURL}} +\newcommand\latestDocURL + % URL of a potential successor to the document's landing page + {\href{https://www.ivoa.net/documents/\ivoaDocname} + {https://www.ivoa.net/documents/\ivoaDocname}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Styling various item + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large + \color{ivoacolor}\bfseries\sffamily}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large + \color{ivoacolor}\bfseries\sffamily}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize + \color{ivoacolor}\bfseries\sffamily}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize + \color{ivoacolor}\bfseries\sffamily}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Various utilities for writing IVOA docs + +\newenvironment{admonition}[1]{ % a simple admonition box + \begin{table} %% TBD: use a different sort of insertion env? + \hskip -0.75cm + \begin{minipage}[r]{0.75\columnwidth}% + {\color{lightgray}\hrule} + \medskip + \hfil + \begin{minipage}[c]{0.9\columnwidth} + \small + \makebox[\columnwidth][l]{\sffamily\bfseries\color{ivoacolor}#1}% + \par\smallskip + \noindent\raggedright\ignorespaces + }% + {% + \end{minipage} + \hfil + \medskip + {\color{lightgray}\hrule} + \end{minipage}% + \end{table} + }% + + +\newenvironment{inlinetable}{\vskip 1.5ex plus 0.5ex minus 0.5ex + \vfil\penalty8000\vfilneg% + \hbox to\hsize\bgroup\hss} + {\hss\egroup\vspace{8pt}} + +% customcss only relevant for tth output, not LaTeX +\newcommand{\customcss}[1]{\relax} + +\newcommand{\xmlel}[1]{{\ttfamily\itshape #1}} +\newcommand{\vorent}[1]{\textsc{#1}} +\def\ucd{\st@rtucd\re@lucd} +\def\re@lucd#1{\sl#1\@nducd} +\begingroup +% let LaTeX break UCD componds and at dots and semicolons in UCDs +\gdef\bre@kabledot{.\hskip0pt} +\gdef\bre@kablesemicolon{;\hskip0pt} +\catcode`\.=\active\catcode`\;=\active +\gdef\st@rtucd{\begingroup + \catcode`\.=\active\let.=\bre@kabledot + \catcode`\;=\active\let;=\bre@kablesemicolon} +\gdef\@nducd{\endgroup} +\endgroup + +\newcommand{\sptablerule}{\noalign{\vspace{2pt}}\hline\noalign{\vspace{2pt}}} + +\newcommand{\ivoatex}{\mbox{\textsc{Ivoa}\TeX}} + +\newcommand{\auxiliaryurl}[1]{\href{\currentBaseURL/#1}{\currentBaseURL/#1}} + +\chardef\dquote'042 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Changing LaTeX/package defaults + +\renewcommand*\descriptionlabel[1] + {\hspace{\labelsep}\itshape #1} + +\lst@CCPutMacro + \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{-}} + \@empty\z@\@empty + +\makeatother + +\input ivoatexmeta.tex diff --git a/ivoatex/ivoabib.bib b/ivoatex/ivoabib.bib new file mode 100644 index 0000000..bb2309b --- /dev/null +++ b/ivoatex/ivoabib.bib @@ -0,0 +1,778 @@ +PLEASE NOTE: this file used to contain records for IVOA standards, +mostly with an std: prefix (e.g., "std:TAP"). These records were stale, +did not contain DOIs or bibcodes, and were otherwise so undesirable that +we purged them 2020-11. + +If you have documents using these references, please update them, using the +version-sharp, ADS-connected records from docrepo.bib. See also +ivoatexDoc 1.2, sect. 3.3.2. + + +@Misc{std:FITS, + author = {{Hanisch}, R.~J. and {Farris}, A. and {Greisen}, E.~W. and {Pence}, +W.~D. and + {Schlesinger}, B.~M. and {Teuben}, P.~J. and {Thompson}, R.~W. and + {Warnock}, III, A.}, + title = "{Definition of the Flexible Image Transport System (FITS)}", + journal = {\aap}, + keywords = {INSTRUMENTATION: MISCELLANEOUS, METHODS: MISCELLANEOUS, TECHNIQUES: +MISCELLANEOUS, ASTRONOMICAL DATABASES: MISCELLANEOUS}, + year = 2001, + month = sep, + volume = 376, + pages = {359-380}, + doi = {10.1051/0004-6361:20010923}, + adsurl = {http://adsabs.harvard.edu/abs/2001A\%26A...376..359H}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@Misc{std:TSV, + author = {{University of Minnesota Gopher Team}}, + title = {Tab Separated Values}, + howpublished = {{IANA, MIME Media Types}}, + year = 1993, + month = jun, + url = {https://www.iana.org/assignments/media-types/text/tab-separated-values} +} + +@Misc{std:CSV, + author = {Yakov Shafranovich}, + title = {{Common Format and MIME Type for Comma-Separated Values (CSV) Files}}, + howpublished = {{IETF RFC 4180}}, + year = 2005, + url = {https://tools.ietf.org/html/rfc4180} +} + +@misc{note:UWSRegExt, + author={Brian Major and Markus Demleitner and Patrick Dowler}, + editor = {Brian Major}, + title = {{UWS} Registry Extension Schema}, + version = {1.0}, + howpublished = {{IVOA} Note}, + month=aug, + year=2018, + url={{http://ivoa.net/documents/Notes/UWSRegExt}} +} + + +% [3] R. Fielding, http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm +@PhdThesis{fielding00, + author = {Roy Thomas Fielding}, + title = {Architectural Styles and the Design of Network-based + Software Architectures}, + school = {University of California, Irvine}, + year = 2000, + url = {http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm} +} + + +%[7] WSDL, http://www.w3.org/TR/2007/REC-wsdl20-primer-20070626/ +@Misc{booth07, + author = {David Booth and Canyang Kevin Liu}, + title = {Web Services Description Language ({WSDL}) Version 2.0 + Part 0: Primer}, + howpublished = {{W3C Recommendation}}, + year = 2007, + url = {http://www.w3.org/TR/wsdl20-primer} +} + +@Misc{std:XPATH, + author = {James Clark and Steve DeRose}, + title = {{XML} Path Language ({XPath}), Version 1.0}, + howpublished = {{W3C Recommendation}}, + year = 1999, + url = {http://www.w3.org/TR/1999/REC-xpath-19991116}, +} + + +%[8] WADL, https://wadl.dev.java.net/ +@webpage{wadl, + url = {https://wadl.dev.java.net/}, + key = {WADL}, + title = {WADL} +} +%[9] RESTful Web Services, L. Richardson and S. Ruby, O’Reilly +@Book{richardson07, + author = {Leonard Richardson and Sam Ruby}, + title = {{RESTful} Web Services}, + publisher = {O'Reilly}, + year = 2007, + isbn = {978-0596529260} +} + +@misc{std:RFC2119, + Author = {Scott Bradner}, + Howpublished = {RFC 2119}, + Month = mar, + Organization = {IETF}, + Title = {Key words for use in {RFCs} to Indicate Requirement Levels}, + Url = {http://www.ietf.org/rfc/rfc2119.txt}, + Year = {1997}} + +@misc{harrison05, + Author = {Paul Harrison}, + Month = may, + Organization = {IVOA}, + Title = {A Proposal for a Common Execution Architecture}, + Version = {1.20}, + howpublished = {{IVOA Note}}, + Url = {http://www.ivoa.net/documents/latest/CEA.html}, + Year = {2005} +} + + +@webpage{IVOAWIKI, + url = {http://wiki.ivoa.net/twiki/bin/view/IVOA/WebHome}, + key = {http://wiki.ivoa.net}, + title = {{IVOA} Wiki} + +} + +@misc{std:DUBLINCORE, + Author = {{DCMI Usage Board}}, + Date-Added = {2008-01-09 13:41:18 +0000}, + Date-Modified = {2008-01-09 13:43:07 +0000}, + Howpublished = {{DCMI Recommendation}}, + Title = {{DCMI} Metadata Terms}, + Url = {http://dublincore.org/documents/dcmi-terms/}, + Year = {2006}} +@misc{std:UCDMAINT, + Author = {Nausicaa Delmotte and S{\'e}bastien Derriere and Norman Gray and Robert Mann and Jonathan McDowell and Thomas McGlynn and Fran{\,c}ois Ochsenbein and Pedro Osuna and Andrea Preite Martinez and Guy Rixon and Roy Williams}, + editor = {Preite Martinez, Andrea and S{\'e}bastien Derriere}, + Howpublished = {{IVOA Recommendation}}, + Month = may, + Title = {Maintenance of the list of {UCD} words}, + Url = {http://www.ivoa.net/documents/latest/UCDlistMaintenance.html}, + Year = {2006}} + + +@Misc{std:RFC3986, + author = {T. Berners-Lee and R. Fielding and L. Masinter}, + title = {{Uniform Resource Identifier (URI)}: Generic Syntax}, + howpublished = {RFC 3986}, + organization = {{IETF}}, + url = {http://www.ietf.org/rfc/rfc3986.txt}, + month = jan, + year = 2005 +} + + +@Misc{std:RFC2234, + author = {D. Crocker and P. Overell}, + title = {Augmented {BNF} for Syntax Specifications: {ABNF}}, + howpublished = {RFC 2234}, + organization = {{IETF}}, + url = {http://www.ietf.org/rfc/rfc2234.txt}, + month = nov, + year = 1997 +} + +@Misc{std:RFC2141, + author = {R. Moats}, + title = {{URN} Syntax}, + howpublished = {RFC 2141}, + organization = {{IETF}}, + url = {http://www.ietf.org/rfc/rfc2141.txt}, + month = may, + year = 1997 +} + + +@Misc{std:STCS, + editor = {Arnold Rots}, + author = {Arnold Rots and Markus Demleitner and Patrick Dowler}, + title = {Space-Time Coordinate Metadata Linear String Implementation}, + howpublished = {{IVOA Working draft}}, + year = {2013}, + url = {http://ivoa.net/documents/STC-S/} +} + +@Misc{note:STCX, + editor = {Arnold Rots}, + author = {Arnold Rots}, + title = {{STC-X}: Space-Time Coordinate ({STC}) Metadata {XML} Implementation +Version 1.00}, + howpublished = {{IVOA Note}}, + year = {2005}, + url = {http://ivoa.net/documents/latest/STC-X.html} +} + +@misc{std:OAIPMH, + key = {Open Archives Initiative}, + author = {Carl Lagoze and Herbert Van de Sompel and Michael Nelson + and Simeon Warner}, + title = {The Open Archives Initiative Protocol for Metadata + Harvesting, Version 2.0}, + year = {2002}, + url = {http://www.openarchives.org/OAI/openarchivesprotocol.html}} + +@webpage{sextractor, + url = {http://astromatic.iap.fr/software/sextractor/}, + key = {http://astromatic.iap.fr/software/sextractor/}, + title = {SExtractor} + } + +@Misc{std:SOAP, + author= {Don Box and +David Ehnebuske and +Gopal Kakivaya and +Andrew Layman and +Noah Mendelsohn and +Henrik Frystyk Nielsen and +Satish Thatte and +Dave Winer + }, + title={Simple Object Access Protocol (SOAP) 1.1}, + year = 2000, + url = {http://www.w3.org/TR/2000/NOTE-SOAP-20000508/} + } + +@Misc{std:VOCEA, + author={Paul Harrison}, + title={VOCEA - An XML schema for Registering CEA}, + } + +@Misc{std:iso8601, + author={{International Organization for Standardization}}, + title={Data elements and interchange formats -- Information interchange -- Representation of dates and times}, + year=2004, + url= {http://www.iso.org/iso/catalogue_detail?csnumber=40874} +} +@Misc{std:XFORM, + editor={John M. Boyer}, + author={John M. Boyer}, + title={XForms 1.1}, + Organization = {W3C}, + howpublished = {{W3C Recommendation}}, + year=2007, + url= {http://www.w3.org/TR/xforms11/} +} +@TechReport{ preitemartinez07, + author = {Preite Martinez, Andrea and Soizick Lesteven}, + date-added = {2007-11-19 18:04:22 +0000}, + date-modified = {2007-12-12 19:28:37 +0000}, + institution = {{IVOA}}, + keywords = {vocabularies; ivoa}, + title = {Astronomical Keywords in the era of the Virtual + Observatory}, + type = {{IVOA Note}}, + url = {http://www.ivoa.net/documents/latest/AstroKeysTN.html}, + year = {2007} +} + +@Misc{std:XML, + author = {Tim Bray and Jean Paoli and C M Sperberg-McQueen and Eve Maler and Fran{\c c}ois Yergeau}, + title = {Extensible Markup Language ({XML}) 1.0 (Fifth Edition)}, + howpublished = {W3C Recommendation}, + month = nov, + year = 2008, + url = {http://www.w3.org/TR/REC-xml/} +} + +@Misc{std:XSD, + author = {Henry S. Thompson and David Beech and Murray Maloney and Noah Mendelsohn}, + title = {{XML} Schema Part 1: Structures Second Edition}, + howpublished = {W3C Recommendation}, + month = oct, + year = 2004, + url = {http://www.w3.org/TR/xmlschema-1/} +} + +@Misc{std:XSD2, + author = {P. Biron and A. Malhotra}, + title = {{XML} SChema Part 2: Datatypes Second Edition}, + howpublished = {W3C Recommendation}, + month = oct, + year = 2004, + url = {http://www.w3.org/TR/xmlschema-2/} +} + +@Misc{std:XMLNS, + author = {Tim Bray and Dave Hollander and Andrew Layman and Richard Tobin and Henry S. Thompson}, + title = {Namespaces in {XML} 1.0 (Third Edition)}, + howpublished = {W3C Recommendation}, + month = dec, + year = 2009, + url = {http://www.w3.org/TR/2009/REC-xml-names-20091208/} +} + +@Misc{std:XSL2, + editor = {Michael Kay}, + key = {Kay}, + title = {{XSL} Transformations ({XSLT}) Version 2.0}, + howpublished = {W3C Recommendation}, + month = jan, + year = 2007, + url = {http://www.w3.org/TR/xslt20/} +} + +@Misc{std:HTML4, + editor = {Dave Raggett and Arnaud Le Hors and Ian Jacobs}, + key = {Raggett}, + title = {{HTML} 4.01 Specification}, + howpublished = {{W3C Recommendation}}, + month = dec, + year = 1999, + url = {http://www.w3.org/TR/1999/REC-html401-19991224/} +} + +DO NOT USE std:HTTP in new documents any more. It has been obsoleted +by various other RFCs, including std:RFC7230, std:RFC7231, and std:RFC7235, +which are available below. + +@Misc{std:HTTP, + obsolete = True, + author = {R. Fielding and J. Gettys and J. Mogul and H. Frystyk and L. Masinter and P. Leach and T. Berners-Lee}, + title = {Hypertext Transfer Protocol -- {HTTP}/1.1}, + howpublished = {{rfc2616}}, + month = jun, + year = 1999, + url = {http://www.w3.org/Protocols/rfc2616/rfc2616.html} +} + +@misc{std:RFC7230, + author = {R. Fielding and J. Reschke}, + title = {Hypertext Transfer Protocol ({HTTP}/1.1): Message Syntax and Routing}, + howpublished = {{RFC 7230}}, + month = jun, + year = 2014, + url = {https://tools.ietf.org/html/rfc7230} +} + +@misc{std:RFC7231, + author = {R. Fielding and J. Reschke}, + title = {Hypertext Transfer Protocol ({HTTP}/1.1): Semantics and Content}, + howpublished = {{RFC 7231}}, + month = jun, + year = 2014, + url = {https://tools.ietf.org/html/rfc7231} +} + +@misc{std:RFC7235, + author = {R. Fielding and J. Reschke}, + title = {Hypertext Transfer Protocol ({HTTP}/1.1): Authentication}, + howpublished = {{RFC 7235}}, + month = jun, + year = 2014, + url = {https://tools.ietf.org/html/rfc7235} +} + + +@Misc{std:DNS, + author = {P. Mockapetris}, + title = {Domain names - concepts and facilities}, + howpublished = {IETF RFC}, + organization = {{IETF}}, + url = {http://www.ietf.org/rfc/rfc1034.txt}, + month = nov, + year = 1987 +} + +@Misc{std:MIME, + author = {N. Freed and N. Borenstein}, + title = {Mulitpurpose Internet Mail Extensions}, + howpublished = {IETF RFC}, + organization = {{IETF}}, + url = {http://www.ietf.org/rfc/rfc2046.txt}, + month = nov, + year = 1996 +} + +@misc{std:SQL1992, + AUTHOR="{{International Organization for Standardization}}", + TITLE="The Database Language {SQL}", + HOWPUBLISHED="Technical Report, Document ISO/IEC9075:1992 ", + YEAR="1992"} + +@misc{std:UNICODE, + author= {{The Unicode Consortium}}, + year= {2012}, + title= {The {Unicode} Standard, Version 6.1 Core Specification}, + url= {http://www.unicode.org/versions/Unicode6.1.0} +} + +@misc{std:RDFaLite11, + author = {M. Sporny}, + title = {{RDFA} Lite 1.1}, + howpublished = {W3C Recommendation}, + month = jun, + year = 2012 +} + +@webpage{saxon, + url = {http://saxon.sourceforge.net/}, + key = {http://saxon.sourceforge.net/}, + title = {Saxon} + } + +@webpage{ant, + url = {http://ant.apache.org/}, + key = {http://ant.apache.org/}, + title = {Apache {Ant}} + } + +@webpage{FOP, + url = {http://xmlgraphics.apache.org/fop/}, + key = {http://xmlgraphics.apache.org/fop/}, + title = {Apache {FOP}} + } + +@webpage{SAX, + url = {http://www.saxproject.org/}, + key = {http://www.saxproject.org/}, + title = {{SAX}} + } + +@webpage{doc:Postgres92, + url = {http://www.postgresql.org/docs/9.2/static/index.html}, + author = {{Postgres Global Development Group}}, + year = 2013, + title = {Postgre{SQL} 9.2.1 Documentation} + } + +@webpage{svc:RDFaVal, + url = {http://www.w3.org/2012/pyRdfa/Validator.html}, + key = {http://www.w3.org/2012/pyRdfa/Validator.html}, + title = {{W3C RDFa} validator} + } + +@inproceedings{soft:pgsphere, + author = {{Chilingarian}, I. and {Bartunov}, O. and {Richter}, J. and + {Sigaev}, T.}, + title = "{PostgreSQL: the Suitable DBMS Solution for Astronomy and Astrophysics}", +booktitle = {Astronomical Data Analysis Software and Systems (ADASS) XIII}, + year = 2004, + series = {Astronomical Society of the Pacific Conference Series}, + volume = 314, + editor = {{Ochsenbein}, F. and {Allen}, M.~G. and {Egret}, D.}, + month = jul, + pages = {225}, + adsurl = {http://adsabs.harvard.edu/abs/2004ASPC..314..225C}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} +} + + +@inproceedings{soft:q3c, + author = {{Koposov}, S. and {Bartunov}, O.}, + title = "{Q3C, Quad Tree Cube -- The new Sky-indexing Concept for Huge Astronomical Catalogues and its Realization for Main Astronomical Queries (Cone Search and Xmatch) in Open Source Database PostgreSQL}", +booktitle = {Astronomical Data Analysis Software and Systems XV}, + year = 2006, + series = {Astronomical Society of the Pacific Conference Series}, + volume = 351, + editor = {{Gabriel}, C. and {Arviset}, C. and {Ponz}, D. and {Enrique}, S. + }, + month = jul, + pages = {735}, + adsurl = {http://ads.ari.uni-heidelberg.de/abs/2006ASPC..351..735K}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{soft:Aladin, + author = {{Bonnarel}, F. and {Fernique}, P. and {Bienaym{\'e}}, O. and + {Egret}, D. and {Genova}, F. and {Louys}, M. and {Ochsenbein}, F. and + {Wenger}, M. and {Bartlett}, J.~G.}, + title = "{The ALADIN interactive sky atlas. A reference tool for identification of astronomical sources}", + journal = {Astronomy and Astrophysics Supplement}, + year = 2000, + month = apr, + volume = 143, + pages = {33-40}, + doi = {10.1051/aas:2000331}, + adsurl = {http://ads.ari.uni-heidelberg.de/abs/2000A\%26AS..143...33B}, +} + +@misc{std:DOIsystem, + Author = {{ISO Technical Committee 46}}, + Year = 2012, + Title = {{ISO} 26324:2012 Information and documentation - + Digital object identifier system}, + Url = {http://www.doi.org/idf-members/ISO\_Standard/ISO\_263234\_English\_Final.pdf}} + +@Misc{note:utypeusage, + author = {Matthew Graham and Markus Demleitner and Patrick Dowler and Pierre Fernique and Omar Laurino and Gerard Lemson and Mireille Louys and Jesus Salgado}, + title = {{UTypes}: current usages and practices in the {IVOA}}, + howpublished = {{IVOA Note}}, + year = {2013}, + month = feb, + url = {http://www.ivoa.net/documents/Notes/UTypesUsage}, +} + +@Misc{note:uriforms, + author = {Norman Gray}, + title = {{URI} fragments in {IVOA} specifications}, + howpublished = {{IVOA Note}}, + year = {2012}, + month = may, + url = {http://www.ivoa.net/documents/Notes/URIFragments}, +} + +@Misc{note:ADQL2Err1, + author = {Dave Morris}, + title = {ADQL 2.0 Erratum 1: White Space Clarification}, + howpublished = {{IVOA Erratum, 2018-02-22}}, + year = {2018}, + month = {feb}, + url = {https://wiki.ivoa.net/twiki/bin/view/IVOA/ADQL-2_0-Err-1} +} + + +@INPROCEEDINGS{2004ASPC..314..585P, + author = {{Plante}, R. and {Greene}, G. and {Hanisch}, R. and {McGlynn}, T. and + {O'Mullane}, W. and {Williamson}, R.}, + title = "{Resource Registries for the Virtual Observatory}", +booktitle = {Astronomical Data Analysis Software and Systems (ADASS) XIII}, + year = 2004, + series = {Astronomical Society of the Pacific Conference Series}, + volume = 314, + editor = {{Ochsenbein}, F. and {Allen}, M.~G. and {Egret}, D.}, + month = jul, + pages = {585}, + adsurl = {http://ads.ari.uni-heidelberg.de/abs/2004ASPC..314..585P}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{paper:regclient, + author = {{Demleitner}, M. and {Harrison}, P. and {Taylor}, M. and {Normand}, J.}, + title = "{Client interfaces to the Virtual Observatory Registry}", + journal = {Astronomy and Computing}, + keywords = {Virtual Observatory, Registry, Standards, Astrophysics - Instrumentation and Methods for Astrophysics}, + year = 2015, + month = apr, + volume = {10}, + pages = {88-98}, + doi = {10.1016/j.ascom.2015.01.008}, +archivePrefix = {arXiv}, + eprint = {1502.01186}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2015A&C....10...88D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{soft:Splat, + author = {{Draper}, P.~W.}, + title = "{SPLAT: Spectral Analysis Tool}", +howpublished = {Astrophysics Source Code Library}, + year = 2014, + month = feb, +archivePrefix = "ascl", + eprint = {1402.007}, + adsurl = {http://adsabs.harvard.edu/abs/2014ascl.soft02007D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@MISC{std:DataCite31, + author={Starr, Joan and others}, + title={{DataCite} Metadata Schema for the Publication and Citation of + Research Data}, + howpublished = {{DataCite} publication}, + year=2015, + month=aug, + url={https://schema.datacite.org/meta/kernel-3.1/doc/DataCite-MetadataKernel_v3.1.pdf}, + doi={http://doi.org/10.5438/0010} +} + +@MISC{std:DataCite40, + author={{DataCite Metadata Working Group}}, + title={{DataCite} Metadata Schema -- Documentation for the Publication + and Citation of Research Data Version 4.0}, + howpublished = {{DataCite} publication}, + year=2016, + url={https://schema.datacite.org/meta/kernel-4.0/doc/DataCite-MetadataKernel_v4.0.pdf}, + doi={http://doi.org/10.5438/0012} +} + +@Misc{note:regstc, + year=2018, + month=Jan, + url={http://ivoa.net/documents/Notes/Regstc/20180208/NOTE-regstcnote-1.0-20180115.html}, + title={A Roadmap for Space-Time Discovery in the {VO} Registry}, + author={Markus Demleitner}, + howpublished={{IVOA Note}} +} + +@Misc{note:caproles, + year=2019, + month=Mar, + url={http://ivoa.net/documents/caproles/}, + title={On the Use of Capabilities in the {VO}}, + author={Markus Demleitner}, + howpublished={{IVOA Note}} +} + +@Misc{std:BCP47, + author = {Phillips, A. and Davis, M.}, + title = {Tags for Identifying Languages}, + howpublished = {{IETF BCP 47}}, + year = 2009, + url = {https://tools.ietf.org/html/bcp47} +} + +@Misc{note:tsdisco, + author = {François Bonnarel and Marco Molinaro}, + title = {TimeSeries Discovery and Access {DAL} procedure}, + howpublished = {{IVOA Note}}, + year = {2018}, + month = {July}, + url = {http://ivoa.net/documents/Notes/TimeSeriesDiscoveryAndAccess/index.html}, +} + +@ARTICLE{1999A+A...348..642I, + author = {{Irwin}, A.~W. and {Fukushima}, T.}, + title = "{A numerical time ephemeris of the Earth}", + journal = {Astronomy and Astrophysics}, + keywords = {EPHEMERIDES, TIME, SOLAR SYSTEM: GENERAL}, + year = 1999, + month = aug, + volume = 348, + pages = {642-652}, + adsurl = {http://ads.ari.uni-heidelberg.de/abs/1999A%26A...348..642I}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{2014A+C.....7...27D, + author = {{Demleitner}, M. and {Neves}, M.~C. and {Rothmaier}, F. and + {Wambsganss}, J.}, + title = "{Virtual observatory publishing with DaCHS}", + journal = {Astronomy and Computing}, +archivePrefix = "arXiv", + eprint = {1408.5733}, + primaryClass = "astro-ph.IM", + keywords = {Virtual observatory, Publication tools}, + year = 2014, + month = nov, + volume = 7, + pages = {27-36}, + doi = {10.1016/j.ascom.2014.08.003}, + adsurl = {http://adsabs.harvard.edu/abs/2014A%26C.....7...27D}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{2015A+A...574A..36R, + author = {{Rots}, A.~H. and {Bunclark}, P.~S. and {Calabretta}, M.~R. and + {Allen}, S.~L. and {Manchester}, R.~N. and {Thompson}, W.~T. + }, + title = "{Representations of time coordinates in FITS. Time and relative dimension in space}", + journal = {Astronomy and Astrophysics}, +archivePrefix = "arXiv", + eprint = {1409.7583}, + primaryClass = "astro-ph.IM", + keywords = {time, standards, methods: data analysis, techniques: miscellaneous, astronomical databases: miscellaneous, reference systems}, + year = 2015, + month = feb, + volume = 574, + eid = {A36}, + pages = {A36}, + doi = {10.1051/0004-6361/201424653}, + adsurl = {http://ads.ari.uni-heidelberg.de/abs/2015A%26A...574A..36R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@Misc{note:cooluris, + year=2008, + month=Mar, + url={https://www.w3.org/TR/cooluris/}, + title={Cool {URI}s for the semantic web}, + author={Leo Sauermann and Richard Cyganiak}, + howpublished={{W3C Interest Group Note}} +} + +@Misc{note:rdfprimer, + year=2014, + month=Jun, + url={https://www.w3.org/TR/rdf11-primer/}, + title={{RDF} 1.1 Primer}, + author={Guus Schreiber and Yves Raimond}, + howpublished={{W3C Interest Group Note}} +} + +@INPROCEEDINGS{2005ASPC..347...29T, + author = {{Taylor}, M.~B.}, + title = "{TOPCAT {\&} STIL: Starlink Table/VOTable Processing Software}", +booktitle = {Astronomical Data Analysis Software and Systems XIV}, + year = 2005, + series = {Astronomical Society of the Pacific Conference Series}, + volume = 347, + editor = {{Shopbell}, P. and {Britton}, M. and {Ebert}, R.}, + month = dec, + pages = {29}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2005ASPC..347...29T}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@Misc{std:JSON, + author = {Bray, T.}, + title = {{The {JavaScript} Object Notation ({JSON}) Data Interchange Format}}, + howpublished = {{IETF RFC 7159}}, + year = 2017, + url = {https://tools.ietf.org/html/rfc8259} +} + +@Article{Wilkinson2016, +author={Wilkinson, Mark D. +and Dumontier, Michel +and Aalbersberg, IJsbrand Jan +and Appleton, Gabrielle +and Axton, Myles +and Baak, Arie +and Blomberg, Niklas +and Boiten, Jan-Willem +and da Silva Santos, Luiz Bonino +and Bourne, Philip E. +and Bouwman, Jildau +and Brookes, Anthony J. +and Clark, Tim +and Crosas, Merce +and Dillo, Ingrid +and Dumon, Olivier +and Edmunds, Scott +and Evelo, Chris T. +and Finkers, Richard +and Gonzalez-Beltran, Alejandra +and Gray, Alasdair J.G. +and Groth, Paul +and Goble, Carole +and Grethe, Jeffrey S. +and Heringa, Jaap +and 't Hoen, Peter A.C +and Hooft, Rob +and Kuhn, Tobias +and Kok, Ruben +and Kok, Joost +and Lusher, Scott J. +and Martone, Maryann E. +and Mons, Albert +and Packer, Abel L. +and Persson, Bengt +and Rocca-Serra, Philippe +and Roos, Marco +and van Schaik, Rene +and Sansone, Susanna-Assunta +and Schultes, Erik +and Sengstag, Thierry +and Slater, Ted +and Strawn, George +and Swertz, Morris A. +and Thompson, Mark +and van der Lei, Johan +and van Mulligen, Erik +and Velterop, Jan +and Waagmeester, Andra +and Wittenburg, Peter +and Wolstencroft, Katherine +and Zhao, Jun +and Mons, Barend}, +title={The FAIR Guiding Principles for scientific data management and stewardship}, +journal={Scientific Data}, +year={2016}, +month={Mar}, +day={15}, +volume={3}, +number={1}, +pages={160018}, +abstract={There is an urgent need to improve the infrastructure supporting the reuse of scholarly data. A diverse set of stakeholders---representing academia, industry, funding agencies, and scholarly publishers---have come together to design and jointly endorse a concise and measureable set of principles that we refer to as the FAIR Data Principles. The intent is that these may act as a guideline for those wishing to enhance the reusability of their data holdings. Distinct from peer initiatives that focus on the human scholar, the FAIR Principles put specific emphasis on enhancing the ability of machines to automatically find and use the data, in addition to supporting its reuse by individuals. This Comment is the first formal publication of the FAIR Principles, and includes the rationale behind them, and some exemplar implementations in the community.}, +issn={2052-4463}, +doi={10.1038/sdata.2016.18}, +url={https://doi.org/10.1038/sdata.2016.18} +} + diff --git a/ivoatex/make-archdiag.xslt b/ivoatex/make-archdiag.xslt new file mode 100644 index 0000000..5d7ea86 --- /dev/null +++ b/ivoatex/make-archdiag.xslt @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + 90 + + + + + + + + + + + + + + + + + + + thisrec + + + + + + 90 + + + + + + + + + + + + + + + + + + + + + rec + + + + + + + + + + prerec + + + + + + + + + + + + + + + + IVOA Architecture Diagram + This image shows the architecture of the Virtual Observatory + (cf. http://ivoa.net), together with the relevant standards. + + + + + + + + + + + + + + + + + + + + Users + Computers + Providers + + Registry + Data Access Protocols + + + + + + User Layer + Using + Resource Layer + Sharing + + VO + Core + + + Finding + Getting + + + + + + Desktop Apps + + In-Browser + Apps + + + User + Programs + + + Data and Metadata Collection + Storage + Computation + + Semantics + + Data + Models + + + + VO Query + Languages + + Formats + + + + + + + + + + + + + + True + + + + + + + + + + diff --git a/ivoatex/schemadoc.xslt b/ivoatex/schemadoc.xslt new file mode 100644 index 0000000..b40ec02 --- /dev/null +++ b/ivoatex/schemadoc.xslt @@ -0,0 +1,698 @@ + + + + + + + + + + xs + + + + + + escape-for-TeX{{{ + + }}} + + + + + + + + + + + + + + + + + + + + Attributes + + + + + + + + + + + \item[Element \xmlel{ + + }] + + + + + This element is imported from another schema. See + there for details. + + + \item[Element \xmlel{ + + }] \begin{description} + + \end{description} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \item[Type] + + + + + + + + + + + + + + + + + + \item[Meaning] + + + + + + + + + \item[Default] + + + a space character + + + + + + + + + + + + + + + + \item[Occurrence] + + + optional + + + ; multiple occurrences allowed. + + + ; up to + + occurrences allowed. + + + + + required + + + ; multiple occurrences allowed. + + + ; up to + + occurrences allowed. + + + + + + + exactly + + occurrences required. + + + at least + + occurrences required; + + + more are allowed + + + no more than + + allowed. + + + + + + + + + + + + + + + \item[Occurrence] + + required + optional + + + + + + + + + + + + + + \item[Terms]\hfil \begin{longtermsdescription} + + \end{longtermsdescription} + + + + + \item[Allowed Values]\hfil \begin{longtermsdescription} + + \end{longtermsdescription} + + + + + + + + + \item[Comment] + + + + + + + + + + + + boolean (true/false): + + + + + + + string with ID attribute: + + vr:ResourceName + + + + + an IVOA Identifier URI: + + vr:IdentifierURI + + + + + composite: \xmlel{ + } + + + + + string: \xmlel{ + } + + integer + + + non-negative integer + + + a prefixless XML name + + + floating-point number: \xmlel{ + } + + a URI: \xmlel{ + } + + \xmlel{ + } + + + + + + + + + + + + + + a string + + + a URI + + + an XML name without a namespace prefix + + + an integer + + + a non-negative integer (0, 1, ...) + + + a floating point number (\xmlel{ + + }) + + + a boolean value (true, false, 0, or 1) + + + \xmlel{ + } + + with optional attributes + + + + composite: \xmlel{ + } + + + + + + + string with controlled vocabulary + + + string of the form: \emph{ + + + + + + } + + string + + + + + \xmlel{ + + } + + + + \item[ + + + + ] + + + + + + + + \item[ + + ] \begin{description} + + \end{description} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + < + + + + + + + > + + + + + + </ + + > + + + /> + + + > + + </ + + > + + + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + =" + + " + + + + + + + + + + + + + + \xmlel{ + + } + Attributes + + + + \xmlel{ + + } + + + Extension Metadata Elements + + + Metadata Elements + + + + + + \begin{lstlisting}[language=XML,basicstyle=\footnotesize] + + \end{lstlisting} + + + + \noindent{\small + + \par} + + + + + \begingroup + \renewcommand*\descriptionlabel[1]{% + \hbox to 5.5em{\emph{#1}\hfil}} + + + \vspace{2ex}\noindent\textbf{\xmlel{ + + } + Type Schema Documentation} + + + + + + \vspace{2ex}\noindent\textbf{\xmlel{ + + } + Type Allowed Values} \begin{longtermsdescription} + + \end{longtermsdescription} + + + \vspace{1ex}\noindent\textbf{\xmlel{ + + } + Type Schema Definition} + + + + \vspace{0.5ex}\noindent\textbf{ + + } \begingroup\small\begin{bigdescription} + + \end{bigdescription}\endgroup + + + + \vspace{0.5ex}\noindent\textbf{ + + } \begingroup\small\begin{bigdescription} + + \end{bigdescription}\endgroup + + \endgroup + + + + + + + diff --git a/ivoatex/stdrec-template.xml b/ivoatex/stdrec-template.xml new file mode 100644 index 0000000..3897124 --- /dev/null +++ b/ivoatex/stdrec-template.xml @@ -0,0 +1,96 @@ + + + + + + #### + #### + + ivo://ivoa.net/std/#### + + + #### + + + #### + + + + #### + #### + + #### + #### + + + + virtual-observatories + + #### + + + #### (your abstract; no markup here, please) + + #### (the generic landing page URL, e.g. + https://ivoa.net/documents/SAMP/) + Other + Research + + + + #### + + + #### + + + + #### + #### + + + + diff --git a/ivoatex/submission.py b/ivoatex/submission.py new file mode 100644 index 0000000..b697eec --- /dev/null +++ b/ivoatex/submission.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python + +""" +A little script to operate the IVOA submission form with data scrubbed +from ivoatex sources. + +The keys used here are taken from screen-scraping +https://www.ivoa.net/cgi-bin/up.cgi (which is also the target to POST +to). + +Fields needed: + +* doctitle +* conciseName +* email +* filename +* author +* editor +* abstract +* comment + +* group (one of app, dal, dm, gws, reg, dcp, std, semantics, the, voe, vot, + voq) +* docver1, docver2 +* year, month, day +* doctype (one of note, wd, pr, rec, other) +""" + +import pprint +import os +import re +import subprocess +import sys +import tempfile +from xml.etree import ElementTree as etree + +try: + import requests +except ImportError: + sys.exit("*** Automatic document submission needs python-requests.\n" + "*** Install a package named like this or get it from\n" + "*** https://pypi.python.org/pypi/requests") + + +DOCREPO_URL = 'https://www.ivoa.net/cgi-bin/up.cgi' + + +class ReportableError(Exception): + """raise this with a human-readable error message to cause a non-traceback + program exit. + """ + +def H(el_name): + """returns an XHTML 1.0 Qname for el_name. + """ + return etree.QName("http://www.w3.org/1999/xhtml", el_name) + + +def to_text(el): + """returns a concatenation of the text contents of el and its sub-elements. + """ + return "".join(el.itertext()).strip() + + +class DocumentMeta(object): + """a blackboard to collect the various pieces of information on the + document. + + For now, we just use attributes named like the fields in the + IVOA docrepo API. + """ + _attrs = ["doctitle", "conciseName", "email", + "author", "editor", "abstract", + "comment", "group", "docver1", "docver2", + "year", "month", "day", "doctype"] + + def __init__(self, **kwargs): + for k, v in kwargs.items(): + setattr(self, k, v) + self._authors = [] + self._editors = [] + self.group = None + self.comment = "" + + def get_post_payload(self): + """returns a dictionary ready to post with requests. + """ + payload = {} + for name in self._attrs: + if not hasattr(self, name): + raise ReportableError("Metadata item %s missing.\n This usually" + " is because the generated HTML is bad."%name) + payload[name] = getattr(self, name) + return payload + + def get_date(self): + """returns the document date in ISO format. + """ + return "%s-%s-%s"%(self.year, self.month, self.day) + + def add_info_from_document(self): + """tries to obtain missing metadata from the formatted (XHTML) source. + """ + with open(self.conciseName+".html", "rb") as f: + tree = etree.parse(f) + + # The following would be a bit smoother if we had xpath; there's + # no xpath engine in the stdlib, though (and no BeautifulSoup), + # so let's do a bit of manual work rather than pull in a fat + # dependency. + + # first h1 is the document title + for el in tree.iter(H("h1")): + self.doctitle = to_text(el) + break + + # pull things with ids or unique classes + for el in tree.iter(): + if el.get("id")=="abstract": + # first element currently is an h2 with text "Abstract". + # actual content is in the element tail. Ugh. This needs + # cleanup. + el[0].text = "" + self.abstract = to_text(el) + elif el.get("id")=="ivoagroup": + self.group = self._get_wg_code(to_text(el)) + elif el.get("class")=="author": + self._authors.append(to_text(el)) + elif el.get("class")=="editor": + self._editors.append(to_text(el)) + + @property + def author(self): + return ", ".join(self._authors) + + @property + def editor(self): + return ", ".join(self._editors) + + @classmethod + def from_makefile(cls): + """creates a basic document meta with attributes obtainable + from the makefile filled in. + """ + meta_keys = {} + with open("Makefile", encoding="utf-8") as f: + for ln in f: + mat = re.match("(\w+)\s*=\s*(.*)", ln) + if mat: + meta_keys[mat.group(1)] = mat.group(2) + + kwargs = {} + for input_key, parser_function in [ + ("DOCNAME", lambda v: [("conciseName", v.strip())]), + ("DOCVERSION", cls._parse_DOCVERSION), + ("DOCDATE", cls._parse_DOCDATE), + ("AUTHOR_EMAIL", cls._parse_AUTHOR_EMAIL), + ("DOCTYPE", lambda v: [("doctype", v.strip().lower())])]: + if input_key not in meta_keys: + raise ReportableError("%s not defined/garbled in Makefile" + " but required for upload."%input_key) + kwargs.update( + dict(parser_function(meta_keys[input_key]))) + + res = cls(**kwargs) + + if "IVOA_GROUP" in meta_keys: + res.group = res._get_wg_code(meta_keys["IVOA_GROUP"]) + + return res + + _wg_mapping = { + "Applications": "app", + "DAL": "dal", + "Data Access Layer": "dal", + "Data Models": "dm", + "Grid and Web Services": "gws", + "Registry": "reg", + "Data Curation and Preservation": "dcp", + "Documents and Standards": "std", + "Standards and Processes": "std", + "Semantics": "semantics", + "Theory": "the", + "VO Event": "voe", + "Time Domain": "voe", + "Education": "edu", + "Operations": "ops", + "Radio": "rad", + "No Group": "none", + } + + def _get_wg_code(self, wg_string): + """returns one of the docrepo codes for the ivoa WGs. + + This will look at wg_string only if self.group isn't already + set (in which case self.group is simply returned); this allows + overriding the WG name in the Makefile if necessary. + """ + if self.group: + return self.group + if wg_string not in self._wg_mapping.keys(): + raise ReportableError("ivoagroup must be one of %s. If this is" + " really inappropriate, set IVOA_GROUP = No Group in the Makefile"% + ", ".join(self._wg_mapping.keys())) + return self._wg_mapping[wg_string] + + @staticmethod + def _parse_DOCVERSION(version_string): + """helps from_makefile by returning form keys from the document version. + """ + mat = re.match("(\d).(\d+)", version_string) + if not mat: + raise ReportableError("DOCVERSION in Makefile (%s) garbled."% + version_string) + yield "docver1", mat.group(1) + yield "docver2", mat.group(2) + + @staticmethod + def _parse_DOCDATE(date_string): + """helps from_makefile by returning form keys from the document date. + """ + mat = re.match("(\d\d\d\d)-(\d\d)-(\d\d)", date_string) + if not mat: + raise ReportableError("DOCDATE in Makefile (%s) garbled."% + date_string) + + yield "year", mat.group(1) + yield "month", mat.group(2) + yield "day", mat.group(3) + + @staticmethod + def _parse_AUTHOR_EMAIL(email_string): + """helps from_makefile by returning a form key for the email. + """ + yield "email", email_string + + +def review_and_comment(document_meta): + """prints document_meta and lets the user add a remark if they want. + """ + editor = os.environ.get("VISUAL", + os.environ.get("EDITOR", "nano")) + + fd, path_name = comment_src = tempfile.mkstemp() + try: + os.write(fd, b'# optionally enter comment(s) below.\n') + os.close(fd) + subprocess.check_call([editor, path_name]) + with open(path_name, encoding="utf-8") as f: + document_meta.comment = re.sub("(?m)^#.*$", "", f.read()) + finally: + os.unlink(path_name) + + pprint.pprint(document_meta.get_post_payload()) + print("-----------------------\n") + print("Going to upload %s\n"%document_meta.doctitle) + print("*** Version: %s.%s, %s of %s ***\n"%( + document_meta.docver1, + document_meta.docver2, + document_meta.doctype, + document_meta.get_date())) + print("Hit ^C if this (or anthing in the dict above) is wrong," + " enter to upload.") + input() + + +def main(archive_file_name): + document_meta = DocumentMeta.from_makefile() + document_meta.add_info_from_document() + review_and_comment(document_meta) + sys.stdout.write("Uploading... ") + sys.stdout.flush() + + with open(sys.argv[1], "rb") as upload: + resp = requests.post(DOCREPO_URL, + data=document_meta.get_post_payload(), + files=[('filename', (sys.argv[1], upload))]) + + sys.stdout.write("done (result in docrepo-response.html)\n") + with open("docrepo-response.html", "w", encoding="utf-8") as f: + f.write(resp.text) + + +if __name__=="__main__": + try: + if len(sys.argv)!=2: + raise ReportableError( + "Usage: %s "%sys.argv[0]) + main(sys.argv[1]) + except ReportableError as msg: + sys.stderr.write("*** Failure while preparing submission:\n") + sys.exit(msg) diff --git a/ivoatex/svg-fallback.pdf b/ivoatex/svg-fallback.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3624223bef24b98024d992a1a4042d2ea878f7b3 GIT binary patch literal 12572 zcma)@WlSbP+OBbTXK;6TaUa~>b#Qlghr!+5-Qk77-Q8UWcOBf$?0&mBU$Q6J)9D}e zRNr0or0%MuDt$GDqNq3nGb1}3#q8qHDjX{@fY{#13XYEtj!D+k&fLX7gJGFV|x=*xbNTLoL!tu4Q=5()^n666<&jax zUBbhH0P4~LY#}|Jd&pogeSVN4NBrIu;_AK!-*L~7)}V|B7eJ3x^#tq_NvY#5R6PAt zs-fV|Ya!*{Y`$$dn-OPjtx~m=l9!`#H?Xt>>w%-nmtlJERnQA+sV>Zw<8D$;v-%4#be&pIA z3MlV;6nP=)F1qmh4H;gae-n8xMSQZHDZ{l9#YnVkS@ISx{3E+DA$$)S+W)w*>&Fn& zD!;RYveOhn;K@ToWiL*hrM5PD1;)uLKJNH4w$_@?S#70}#$m*_M#UHML{qa0oT;73zbyD$ z`iFg7|6wCDF*6r8%fC%!A?D^_<@|T_*YtlEiJ1YM+-(1}`@g##(*miwc#d@wZb4RZ@nuXbmXv z$E*6Z?S*|lb^z(z?EDIS8+p?phWW!}9^cG9xdsXG5GZ&F@(YCuASfb~vaz+1gANk3 z{>}oy-De2nA5R6d2hk{u^RC7NlTTa&2|~j2UMA4mj5jz$FpU_-^>LPPtbsGgJRxFh zVmLi*P|l10rs3;^!dcJ0x9RKg>Dd~qn2x>pBwzv`xW4*nH84EzQvw;z@d1Qx?87)1 z#qcY2EpQ7oNRU_&ViXyq1FUy@`H`;&?c}vJ;7j@L6OGL4=E*g%4a5f3HsFKgm%$+P zFDCp0Sg6(x&wvl#FV%NW!}~ih8{*|F5W0E-h{z9K9$|!EA6cj~JBWLT08rB5IBbyj zhu5bpT%&#)14XL5og;sKBf=k+ALf6O-)dD{2 zDnOsFr_{hV1o^VRG^!4egz1CX7N<{lfZH4DD8Xax3DA10-J4PVCX3Zbm;TQ9c|nY=pynb_zMW%FMr}f@D2eK)ag%T(QMoU zWYMOB8)(uqw|8*VA?}aB@bMgfG9wkw{J%QdRig0n@k4i&a6ZQHoWPGcD5gS|76B9` z+;?PAkJhihV!ls7QPbR>1muK`W2W~yP~fA3v&bgU{|8w3=^OHwYejJ1wt@9U22Fai zN4bct#hY3TTQl~`F!k%aw1jGql74YM??elqzPDO*wE2E5ODabS#y~~p!r^cI()aQ; zB{=5WoI50?mNXdm3 z6}|h@#uM#pP83;r`$po=t*@>>T}>`)&4sE$GBrjtmbC~*CI83pfe6pik)|vyDswtm z)(Se^l{eUK7{_AcXU6jLIz}O?V_>eO_A*jVAq$;R&&g`UgkQH98>I1puu=ZyySfn< z?OQ0Z2qeA=RD~)YRjU?tUcl^PCtW&R>9vS<@(G6N#J-ILi!a z;b4`SDq%Ay7*kusUyGW*#1NqliiAymg7U_|W*|e@Hxu?cek(}`EQ5LrZ2*byEnyfg z`i#0k^DAJ>TwiI88$Benb&tfqNS&TA`rzB2TFHf#-_yZOba&8f#9hs9SW z%`(%jj_-v!fo*yyr@jDa(s*7py0lz(rtbhW4(;Lshg8^z;i;~$tDx^M*VXP3a03pX z@*jJTl~&aem`Zage(qaLR~_%30r(B zl*ck6gjk`sb-iwEkK7adoj+gjJU@j_oz22origDns8zA{mg&b|LYDoI*PXW$Nk z>f7tog9uHZ(vkQ6HFmvGeXMpGCaQ+acB7OgLSH@ss6p-}V0^3?VJmH{1P?~~#wy^w z#vyU(3)l?eZru2BkKL+$K=Pc$j>d4U9Ohn%|D7g8s?71-0e3FXOrY}3;6;y0c3xrH zYbV^seFohggWD@6s%XI4)y!?9=*loJ2DaEs(e8U35H^3(N(x& ze=MQsd|1vo7x%QxF&FbFB0xCZLXQjdxIt}1zGoBjwa^4pB77A$v$aj2U_0OQ44UZ9 zN7Wimc({wJ)T?Vd*V}MO&@#TLv<~R9=LyH&Qwl@gG_t~*x|OyYsa?&bxETMc=(?!) zG5Z5=OYF)I)s5BIj^g)TBc1(3R&+z>#y!R%^kqfP-u@ zkpV)++qFIHYb205q+_KADJO0{S*bp_xU&|Raows;ZW7vhZ;zKepz8q>MfF21GLo_5 zA|1;IA^V^bb*_Z9n4Oe(cx2uxR5>wm1d#_VM%aUg$o&%I2m7ME}JQ)PGpt%F$rxpya)D12i)Z7|;3PULzG?%iAS2tw_ zn5D(4*DJ}p%-!p<(sk_o`S*LLm_hi*F7awJQ>OIp)SD=#*~5z~&9Gk@SZ-0;dUG#!by z&vq9BrHrNaZ7aZta>&|%@EQ7Wo(LaO*Aj2sLkPT{Ej@E zefEn#>dr7YNw6efnk%uKFt!LGFXj>B*w>Li* ze0pJ`o`h;Fgh4H#zw@-in2VOHDr02U(ak;kO$BE$2Br`9Q8**e6PkV*)pw&+FGzfPcDaBMK+$D4yEFS+m7aPni{nNUlzA^!TDx~>UW z_PXZu38LPI#%X4bVQKezoLJZbvx>)$C^^yqstbN=4c*`NYl-xWEznSD?3x4z=sdQt zi$J%z1sPd*^`!R~iONW5Drs*Q0djTEpOc#FlX)s$i?5_=t!jA1e(cAG@n-(-8S!DZ zYar0;=FdY`+G=+$A`@k4H_#Hz8I27-S~KCJR3Av`b3$Bd3Vcjx?fcLJ;~?3=*6M5R z#nJ`9<89aDg0exz@A?>6HdjBL2lg&PFT(PSfs_7Qs=jYsfaKedlhP+p-m-W&!@Q^; zL5ms>s146Hd!>BBxHpCU8a7yY#qh`j5PckS*2`fSyh9MP2Bf&(m3?!#8)^w^b}i#irDR{mJL{5ACBC6-fjCW)hOjy0Le0 z%cWelxjoLVnvAq)qEY=}ye2#jQ6CKi#u>HO@eBcq7muB@#JFtCHqNf?LZgYVfJz}< zO)bz4LB2olXpCGsvVNTQho@EyEL}obHMMHhI6b!dgo~e*j5yhcIB2P3Z7R%`)5pd8 z_n6ru{EJz4hGl5qm|vv*9c?Dg zzT+Ay3ka-|3Q;}iaHrDX1IRLOlHw#8tdJ$%KZur9EB&R>cxZ0iU0~WIF4NPkbxLn$ zbwDAK)PL&DvbCq}E;_p*ASK~-e^x)V3tDn)uuK#rWLHbFwp?+~S$ggYBeGaJCtN%( zMQvP)$c@fJZs9NZ)P^8QjPrP`V6NuVLCJ%|8DLc2)-S83e?H&f&OCNIj}3eb;hXQ* z(3cZ;Famxumd!>O+{mm)Lu{P1|FSwrX9lFn$Mo>uS%1NeRPh)7d(;l+j92lrw zmm{Qj!0LEIyoh({lg`}j+skp>Yr%a`A$C>6A7wd1v5=S}T8}Ll^5xgcF z8Ij2(TqCextroBS8ak*0F-CTSE1@FQKrk=1(zKG7i#8z@A1_L5*~bUd<)x&Vyr%?iy>``OigQJ_kY^qWg9V6xWP zx>JQwZ1XDeqNS3fl!5KNqKb*HiaYfPfxLCNNw}0=2<}Oij;{-uN~NUSD6bfKK)K^w z_9rm@Nlu~3cHlZYuZJI4?b22oa7Kys!<9u2AV|b!bJ`-ETINRXmqZpT!8;iT`sQ{I z#fP@Ns>j^BkXGC!t8fvS@s95_6W7*==00z65EKOu!Ha5NwK4ztE>35}Ll^KfQK4r78#V!0~LYzE1gAMX(GoeNR)Yke~0Ury# z%W6m`d4ENrOPsMVFa_{zql2}l7i?e%wWEIzix*N&N5F)q$-3sKKswvTk)~$y;78_e ze%j>~Rf1@mqDCH-Y^ejgjVcY&Bb9MYIrxo_G%ql#x4I?=n=cD1H3&;`S0t?`SX{^LHwgWQSCVT6YD~CnFM^4D#BU|ZD3rU01n4z+ba8wh7an}@>z5)U zfnLwuPR&IyuHgO;>jjpR{6=E_53L){A>Tsx2m?NvE=IoFr+wbO^|vueFJw#g8Wp0R z)7e!eo@XCJ>oE@Y*;?dpW&Ow&E52@&up2?6F^ee7Y8}b^+*qwd4fCW<4ZsSF%I=QX zJV3{G^EvKb1+lmDOw8?+VQp^6vSDJdd~}sHtqKlTNBDK1K%?E-m)F>cRj0fmI#QAd zM+3{_Qxf8s4hh3rhr7IuiGF&OS}S1fP3LwJ9}SVyZLg4c8Cj;9gM^^*vv_G~#33h* z(Jbmo&7otqXJTV_LXwXsD%pqYC1f9N^?Pyg?K`VePlpoHQVaQzl&T$&kKc&4J*Du7 zu!JKHBPHK`FG?_ML2L}^H%FJ{mb}@>%Fef-U>V7o=p1?=3~_L~(}_^-LmM zJlkT#F`4mExlAd<%Lp^5dxpyOr4sEy^rYPyuAc&gXa$RLyz#|RN>g#psXT08)Wuy( z?OjRu(g-tf+Ztt_q{kcJwkT;7U@VjhaX6C8RFWDgcTJR<&zkyTeiy#QF#DPY*MB^N z+}^tB2?|rj6y`?wocgAj#BV?iu771;qgT2^tLD8xX(`LzA4e)wGu*uso}^o zt!15KCfY^FY+_{jbWjO#Tmqa8u(WDDd7QPT?su8-O2)U%Ui0CNIW3QA@V~k4l^n=U z9tPR^Kb7nhJMs02-*(Q2dU~0LoNoUs?V`h4+J_J8^2VS2J5=1AYQgWKCWOPw5 zCJ&ZM@n179DJS9?f&TD~O;PA*uCvh(0H*M>@z~rv#&|u+D{Ay?@cOw|#!Hyh?fEo9G&@sy~gC9iMh+B%zvfs$RKG(tyE=Ave!-JZcXw%}n)q4+>V%Lc2(3O~l-X1C7 z6Lo3gs=fs{C2O(rw8Ln!P|9sPLoODOsGzs=S2F_u=4fNO#$W7Q%#>HKFsG@HRKl>ig96DA> zM0#(3^aSg8JvwX~YqaHQ?tQBGkBAi_WW>7DrjSjsr_?wExN%3dX*|!{EY92L;P|6> zhP(??4_d$g65fQjQg8T*%>tw4hXseZ*j;ajsOOA4S)C{xsr2vXsoz8C<%t%?`=BdbK0u&V+snCxsE{3 zX_hI|ur>~+Ht*(LxS7gru3W2%vvqLo_b3~HP9fj+Y0z$dI9%+XGdcO{Zgl321?Dup zdAssp>m=a}30P8LYN@3Rsny4fvOG89cEh5|sR!E(^O%O-%B=|0oeR~`&WV|6`C?>| zX8EifT%0+aBgYWG$rh)ZvSe?TrxdJBT^PcmL`4p^IjCLUVyY&T^bUDJCidBQ+MN32 z7L`ZuZdqM)(FKw2K`nf?#>^f;C^ltpQ=*>TuE9^cMFMpWYD?$yTv*=O9U@V|JP#%& zbJMV?!3d{z6=*}Gqi#*%xmzkLM(W#Djrh$MJ^i$Tc82mt3@HMy^W@__D@=VN1Po6 zp9^}LjsH=5VFv%a*A5r`shK2>tJo!E3Fdw}93mt>tR=Nq{j!SVdMNVoVDY0RSGf0& zCyA?nXLZr#1gSc_JR3-~0H|jhKyyJK8+~mE0Y1!c5#)y*Xjg1+yEoKJ6f>nrYRd=OkXz@*;iOlC$4<%x9F>gL4p3Y=XmjQ;FRGAj=UH~P{M z|FU8F+kI(DhM+2E*P5?y=4_i>O)@K!i{o-``&OohQJezzxd%U4|Aa>AzCsQa<;^X+ z2an4ij@~r(qd;zBxmK`&c*aGx5Pd7%IzngR%}JPb2Rp^GRPY4TKYB}C&ob-2L>kq9 z%A_xE>3Nq`J>9{aVQ!*C+LcX`Gw%Um127qNk{Gp1{FOlIyr19JXOTHc4fWyR( znngt@DCG7a2o;#y8cTL&i~sT3BClP)&?a?-cBtefHM5W0VrX_$_foFw=?du?{+8w%{ICN&p8wCi1uvYQ%{H50)2cKrY$UyjLsZqUiNowV??OCS zm>HA>>~glxMMQ)RH^Jb!m70sC7@e-p$Q~cs@Rlb7RCgpzM|xju*qLh&u&pgk)%3N; zN77=c$!ycJ8)y&0BGfY<-;oay(%QdQ3{FM2K{ie5Z`q616JmBfoW2$ME8&FW7Gd!} z-p--2b8tI*JH_a>Y*RW7p8``ov8X2grV_Moul2#SgUJM?O9Sb2lh*?O$8V4t-o4m9 z1NM;BeZw62`Scg?sNMDrXajmoY(iB}Y5Z2ZWn$F^;FDmM=t;3wlSI8oIX4V04jkQCzG}7S9YRQDMjOxpdn;WX1Tt(HU zo0~bG?#CC!b4!RBdMo~M5`n2^8K*d>LBx^LWKk|#{6HqrV$Ql&m8IVhccTH%!5rQX zGjgD^W8*LCJ0$JTa98}azZ3_TGYB^vXvT*ohi4De21oc_?Bw}{^gBCb0qX^c*h)w6 z+Sw5`G~Q_KAu*;u+@E?HUKG>pPLLO~%W@?{=Kw1K7y%*0MmeW5%p?S94W5BV5# z{B4acl!>ttoi>zM?9Ks0hha&CjqN=i6qR>)Jb`S*r8(Z3KBbDbX?dmVahUqXnfSxE zT58Qq&@~bMeJe;qq+PQQV@RzWJCzIl5$?kZikNU{FGWl9QJpUw}= zkY1WucEyn@p_>A12CU7??CTNh)oZ>)n1xxcj!9$ddFFhY$JYS!VDX8{Ou~sIr5s9y z-^Myd%K1Y@JDTRIOAMx%jRw#}C?cBfGM={3!qEI=5MyLx2|j3u)i5w-)RvEWttgY+ zF0qG7u6JwO1h2c1e>G!!!!qXMpzzJO`@9A4D1(2}ZcIH-pN{oSol5{7_}u}fMUeJO zE%rDFSX}6nv~)~6UPLZX0(Uj3HRgSGP(<+fir^pZzCn1c%r26rOtw!Mwu|Wd?sH8Lbcuf06ALqftq^4idoqApMLHE_1k-{Al}C4{C7dL zAj$X}?uJK+*k~Sh)srF>{a&h51i?V1(Aa* zx2lyQlWV|jtn;F>l)`PwB567ha>wAi^*So)pQU?F)Z%4iy4{37GK-=FupVNd(SNTHGPg+dJZfgx2J4Ss}F(bc9Rdky1GueZZ{ zgHXdruBglui~oED%UTRUqNXageKhlpg~aQIzAc6`$pj7@Y31cmEqGe}6q2oi!)vw?v z3|jgpu}OzArg*!-CqE)bW2Vz92E3wD5~W$jn(&Yxy7Mfz$rduVN*2&MI)W`B6Ue%~$K%Tr)gBv(*T6aj zK>HPRsaW&&Nr~8wzDAs0&H*OF29fvl*^K0s(Qksr{*Cesvz@~Oy=O{cYkh{M6JwoK z=K|5zc*GtN<+4t&Q?OY*be;6)-5bPKA&dRXxe!wz}+H5oIF zOwHQ-eaqc<#kY)2?s}&vTJ>^>%%h5%b($tJu-_N9==BN%36AxjTN7n&q`NI0Cj1If#TR@ zqU%$krbmcbdu%SUz|I+8C~Z+g!g}VuY#_tE;t_}RO=~xOtW#E20p>H>fZpeR;gzb% zGW?>u@R(0|`r*FuasA*kIdXv)-o9<-^~Lp5^Bz#^V5`ZwG&6HN0JQg-54m; zkIc!Nks_`eU1W1w)oSesc!DnW!6jU8`3N@5JJjvIpSKf~uiWUTlY0vk3_Y#uj#TyQ zrPJ%1@(VUihid`LZQ{*)H>urldNWnoQ@qC(bU?~|Scl+D_HOeOuS{&2x2QZHnht)# z!?eBTeyM^iKPXoksjC!$@T@#cPdZ!tC}@89KaJ#YZSbVViU`6*OVwpk2RaZC;EnpQ zS6v26asDAMiR|Ej`1vB`FD$g#Wq}v22;=>?E#9O)>4)*7pCt^7^54ehLRL6Y%~Dqi z-4ILWo7dC+h>v3xLyfS>R!3$ra`x}!MeK$dr`XmHu`6;Mo}k2@VEB6@K}XIr%z$P}|a(RN8rdcPUWU`wEPdst!>!XjtWIm+bv58_P)Ybldhn83_1Z)0E;kvGrRid1oF92K@R+MW0sUy~9lsyj*j6N<^!Q z4QBN{176h!4w-mZZb4Ygc89stx@v$Cfk7UOZqucYd!MyE;3oJK=*f+4Ux`qxLcnpx zE3divFs*jpF+hlL3iRCDdfXA)L1l-zt^sdVurZCnK#Tf8xLWNdMA4s#OnP@=>nUEy$C7Ou>@cR}JJABOTsS}B zXhkvdU7UuuH@7VraF(xK51sJv6??!IbMzStONKkO_FyMn&*3m5>oGihJy#uCWF|b< zXa%*L;u(K6mDQ6k8F7zlkOwSi$)O%Td$v#qnQ49k9=TE`#HFLJjB~RcumpY$(yW>8 zEwOy@VmKyjGG+(qQI3j`%pOzbmc#LYdaieSwp1hbb=Lm!GY*?uhzq)_3*@9R{A0Fb z@4C#K9z9)|=o|E)0xq1QEmxoCTGds^?9egcjkoAZcFyb7DkSL=lahKiDfO_Oo>?l%-l>Srfy84rbd>Ab~MD+4u&ok z&ZdUMZvSe6gYj=8|B%r91D^gDvdjLzMnu)q!IYRu!N^L*#TJf9p7<}RD{krJ>_W`; ze?eV#0O$WVmK~!a7quaX(DkNqqG#mYZB9&2t~H-}m1>IqtAqr41s7k01Bnp&*H`y^ zbcfWc3^M9BscZhR1g_-XUR*%0DlAfRGjSgd>^J&hT&SNDr3=-XU)-M5xs}7_LxsFZ zpIi_qk~i6yGv8f~yB|T)$B&HV!Yh^#X?uWo8AjyodD;N;%!nzt-XulnXXP=FZO*3D&*bY>)`!ec7K^ zumK!&ez7?3JW|$cMiE_l^D@UUd|!lnNkQ~y+*7UH + + + + https://www.ivoa.net/documents/ + + + + + + + + + + + + + + + + + + + <xsl:value-of select="//h1[1]"/> + + stylesheet + text/css + + + + + + + + + + + + + + + + + + + + + +
IVOA +
+

 International

+

   Virtual

+

   Observatory

+

Alliance +

+
+
+
+
+ +

+
+ Version +
+
+ + + +
+
+ + + +
This Version
+
+ +
+ +
Latest Version
+
+ +
+ +
Previous Versions
+
+
    + +
+
+ +
Author(s)
+
+
    + +
+
+ +
Editor(s)
+
+
    + +
+
+ + +
Version Control
+
Revision , last change + + +
+ + + + Source file in VCS +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IVOA Working Draft + + + IVOA Proposed Recommendation + + + IVOA Recommendation + + + IVOA Note + + + Proposed Endorsed Note + + + Endorsed Note + + + doctype must be one of + WD, PR, REC, NOTE, EN, PEN not + '' + + + + + + +

+ + + This is an IVOA Note expressing suggestions from and + opinions of the authors. It is intended to share best + practices, possible approaches, or other perspectives on + interoperability with the Virtual Observatory. It should + not be referenced or otherwise interpreted as a standard + specification. + + + This is an IVOA Working Draft for review by IVOA members + and other interested parties. It is a draft document and + may be updated, replaced, or obsoleted by other documents + at any time. It is inappropriate to use IVOA Working Drafts + as reference materials or to cite them as other than "work + in progress". + + + This is an IVOA Proposed Recommendation made available for + public review. It is appropriate to reference this document + only as a recommended standard that is under review and + which may be changed before it is accepted as a full + Recommendation. + + + This document has been reviewed by IVOA Members and other + interested parties, and has been endorsed by the IVOA + Executive Committee as an IVOA Recommendation. It is a + stable document and may be used as reference material or + cited as a normative reference from another document. + IVOA's role in making the Recommendation is to draw + attention to the specification and to promote its + widespread deployment. This enhances the functionality and + interoperability inside the Astronomical Community. + + + This is an IVOA Proposed Endorsed Note for review by IVOA + members and other interested parties. It is appropriate to + reference this document only as a Proposed Endorsed Note that + is under review and may change before it is endorsed or may + not be endorsed. + + + This document is an IVOA Endorsed Note. It has been reviewed + and endorsed by the IVOA Technical Coordination Group as a + stable, citable document which constitutes valuable information + for the IVOA community and beyond. + + + Invalid document + status (this cannot happen). + + +

+ +

A list of current IVOA Recommendations and other technical documents + can be found in the IVOA + document repository.

+
+ + + + +
Interest Group
+
+ +
Working Group
+
+
+ +
+ + + + + + + https://www.ivoa.net/misc/ivoa_wd.css + https://www.ivoa.net/misc/ivoa_pr.css + https://www.ivoa.net/misc/ivoa_rec.css + https://www.ivoa.net/misc/ivoa_note.css + https://www.ivoa.net/misc/ivoa_pen.css + https://www.ivoa.net/misc/ivoa_en.css + + + + + + + + +
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
+      
+      
+        
+      
+    
+
+ + + + + + + + / + + + + currentlink + + + + + + + + + + + + + + + latestlink + + + + + + + + + + + archdiag + + + + + + +

+
+ + + + + + + +
diff --git a/ivoatex/tth_C/CHANGES b/ivoatex/tth_C/CHANGES new file mode 100644 index 0000000..bbe0cf5 --- /dev/null +++ b/ivoatex/tth_C/CHANGES @@ -0,0 +1,1319 @@ +Version 4.12 +____________ +Give Mathml eqalign equations the attribute. + +Version 4.11 +____________ +Make ttm (MathML) apparent multi-character indentifiers default italic. + +Version 4.10 +____________ +Remove extra TTH_TEXTBOX1 that was causing xml errors with \mbox{$ $}. + +Version 4.09 +____________ +Improve natbib code to handle RevTex bibstyles. + +Version 4.08 +____________ +Fix the tthverbatim command so it can be used as planned to end environments. + +Version 4.07 +____________ +Add Polish characters (from package fontenc} to those recognized by default. + +Version 4.06 +____________ +Implement \tthverbatim{} command. + +Version 4.05 +____________ +Reimplement mathml bold as mathvariant. Implement \bm as bold-italic. +Make environment abstract redefinable. +Add class to citation, citeref. + +Version 4.04 +____________ +Fix bug in \not= when inside \edef. +Fix bug in refs.xml reference while splitting. + +Version 4.03 +____________ +Make former -w4 html style of font size changes the default. +Now -w4 turns it off. +Replace with (mostly) and appropriate styles. +Fix bug with big /. +Fix bug with \index entries in footnotes. +Change to to satisfy xhtml 1.1. + +Version 4.02 +____________ +Fix order of

in chapter/section headers to work around kindlegen bug. +Fix index links not to include a new line, which breaks spacing. +Fix xhtml DTD reference. +Various fixes to improve XHTML conformity. +Remove unallowed characters from automatically generated name attributes. +Prevent \item[] from causing a standard violation in xhtml. +Fix ampersands in URLs. Need to appear as $amp; even in the href. +Make
into
... +Make one giant
(because strict does not allow text outside + of containers). +Prevent multiple citations from generating multiple anchors with same name. +Differentiate anchors from multiple identical index entries. +Remove compact attributes from
no longer honored or valid. +Remove width attributes from index

instead. + +Version 4.01 Release of Full Public Version of Lex Source +_________________________________________________________ +Release under the GPL2. Adjust some readme and other files accordingly. + +Version 4.00 Release of Full Public Version of Lex Source +_________________________________________________________ + 5 Dec 2010 + +Changes between versions 3.88 and 3.89 +______________________________________ +Fix bug in unoptimized version handling newcommand definitions. + +Changes between versions 3.87 and 3.88 +______________________________________ +Fix bug in $$A_\textrm{blah}$$ parsing. + +Changes between versions 3.86 and 3.87 +______________________________________ +Change unicode coding of varphi and varepsilon to accommodate the +inconsistent unicode glyphs. +Make -u2 the default tth coding. +Make -y3 the default compression. I.e. use inline over accents. + +Changes between versions 3.85 and 3.86 +______________________________________ +Fix ifcase to support \else and nesting. +Implement \value. 12 Sep 09 + +Changes between versions 3.84 and 3.85 +______________________________________ +Make unicode hbar the default. +Add align="left" to tabular td even when it is formally unnecessary + to work around IE6.0 bug. + +Changes between versions 3.83 and 3.84 +______________________________________ +Add support for newcommand*, renewcommand* providecommand* + +Changes between versions 3.82 and 3.83 +______________________________________ +Fix segfault risks in macarg and related states. +Fix \url to allow % characters in url. 6 Sep 08. + +Changes between versions 3.81 and 3.82 +______________________________________ +Fix utf-8 bugs in bracket encoding. +Fix ifx bug. + +Changes between versions 3.80 and 3.81 +______________________________________ +Adjust flex source to accommodate bugs in new versions of flex (>2.5.4a) +Should be no changes to behaviour. 3 Jun 08. + +Changes between versions 3.79 and 3.80 +______________________________________ +Define an null AtEndDocument in latex to silence hyperref error messages. + +Changes between versions 3.78 and 3.79 +______________________________________ +Fix escaping of # before a digit when in parameter substitution. + +Changes between versions 3.77 and 3.78 +______________________________________ +Fix \hyperref incorrectly escaping #. + +Changes between versions 3.76 and 3.77 +______________________________________ +TtH license changed to allow free use, even commercial. + +Changes between versions 3.75 and 3.76 +______________________________________ +Fix ignoring of %%tth: before LaTeX \item. 31 Aug 06 + +Changes between versions 3.74 and 3.75 +______________________________________ +Make fatal error exits more systematic. +Implement orderly termination at return value in tthfunc. + +Changes between versions 3.73 and 3.74 +______________________________________ +Fix unembraced $^\the\counter$ bug. 1 Apr 06. + +Changes between versions 3.72 and 3.73 +______________________________________ +Fix omitted embracing of complex expressions in in-line fractions when using +unicode, arising from TTH_COMPLEX inadequate definition. 23 Mar 06. + +Changes between versions 3.71 and 3.72 +______________________________________ +Implement -i switch for ttm to force even multicharacter sequences to be +italic in mathml. 27 Dec 05. + +Changes between versions 3.70 and 3.71 +______________________________________ +19 Nov 05 Accept (ghastly style) space between accent and character. + +Changes between versions 3.69 and 3.70 +______________________________________ +Revert to HTML4.0 DOCTYPE by default because gecko is reported then to +give proper symbols on windows platforms. +Fix charset meta declaration between XML and HTML again: fell out. + +Changes between versions 3.68 and 3.69 +______________________________________ +23 Aug 2005 Fix noalign when it occurs in array in equation. +Fix problem with charset meta declaration between XML and HTML. + +Changes between versions 3.67 and 3.68 +______________________________________ +30 May 2005. Add a meta declaration of charset for -u0 (HTML) versions. +This is necessitated by increasing assumption that documents are utf-8 +(by default) by modern browsers and file systems. + +Changes between versions 3.66 and 3.67 +______________________________________ +Make /,|, vertical arrows, langl and rangl non-stretchy by default. (MathML) + +Changes between versions 3.65 and 3.66 +______________________________________ +Make .xml the default file extension for MathML (ttm). +Improve accuracy of ttm_manual. + +Changes between versions 3.64 and 3.65 +______________________________________ +Make verb[atim] translate spaces as  . + +Changes between versions 3.63 and 3.64 +______________________________________ +Fix bug with @ used as an identifier in equations with subscripts. +Fix infinite loop with null or improper alignment arguments. + +Changes between versions 3.62 and 3.63 +______________________________________ +Fix bug in \prod. (MathML) +Fix \nolimits bugs in MathML. +Fix \iff bug in MathML. + +Changes between versions 3.61 and 3.62 +______________________________________ +Fix bug in MathML with nested sub&supscripts. + +Changes between versions 3.60 and 3.61 +______________________________________ +Fix bug in e.g. \}^n_{i=1} handling of subdefer in \} \{ etc. Mathml only. +Fix bug in \left(^U_D by adding subdefer. Mathml. + +Changes between versions 3.59 and 3.60 +______________________________________ +Fix problem with dimensions mm and ex. + +Changes between versions 3.58 and 3.59 +______________________________________ +The changes in 3.58 probably caused more problems than they fixed, +especially with \multicolumn cases. Take out most of the changes till +they can be considered more carefully. + +Changes between versions 3.57 and 3.58 +______________________________________ +Implement implied grouping for each cell of a matrix or tabular. +This should fix an number of problems with e.g. \vbox in \halign +and setting of fonts within cells giving xml parse errors. + +Changes between versions 3.56 and 3.57 +______________________________________ +Discard \noindent silently in equations (can occur in \noaligns). +Recognize \crcr and \multispan in \matrix. +Allow silencing unknown command warnings via -v32768 + +Changes between versions 3.55 and 3.56 +______________________________________ +Fix \noalign. Avoids some situations with negative closure count. +Fix internal command recognition tth_ errors in \edefs and \setboxes. + +Changes between versions 3.54 and 3.55 +______________________________________ +Fix obscure bug involving \vbox{} in \halign. (remove \\cr). + +Changes between versions 3.53 and 3.54 +______________________________________ +Fix further scanner push-back problems, hopefully for good. +Prevent the appearance of extra space in e.g. $^1$ in HTML (not MathML). + +Changes between versions 3.52 and 3.53 +______________________________________ +Improve comment handling between \items to prevent extra space. +spacing independent of -w switch. +Fix syntax of \buildrel. + +Changes between versions 3.51 and 3.52 +______________________________________ +Fix scanner push-back error arising from "Special Inline" equation code. + +Changes between versions 3.50 and 3.51 +______________________________________ +Fix broken footnotes inside equations in MathML. +Fix optional arguments in itemize/enumerate that do [{[blah]}]. +Define tabularnewline=\\ +Fix improper grouping arising in paragraph and subparagraph. +Fix noalign in tth to avoid improper grouping. +Improve title checking state to avoid many improper tags in the head. +Most of these are for using strict XHTML. + +Changes between versions 3.49 and 3.50 +______________________________________ +Fix \delta non-recognition due to typing. +Improve boldmath handling in mathml. + +Changes between versions 3.48 and 3.49 +______________________________________ +Fix \textsf and similar constructs in mathml. + +Changes between versions 3.47 and 3.48 +______________________________________ +Fix some title generation problems for xml compatibility. + +Changes between versions 3.45 and 3.47 +______________________________________ +Version 3.45 had serious bugs in matrix and eqalign code. Don't use it. +Fix those bugs (I hope!) +Infrastructure changes affecting the code for \choose, \sqrt, \textboxes, +matrices, and other active concepts. + + +Changes between versions 3.44 and 3.45 +______________________________________ +Fix Mathml syntax problem with textboxes. +Fix plain tex footnote in equations to obey xml syntax. +Fix double subscripting of operators MathML syntax problem. + +Changes between versions 3.43 and 3.44 +______________________________________ +Try again on the matrix/eqalign code to fix both simultaneously. + +Changes between versions 3.42 and 3.43 +______________________________________ +Fix line-end error when \overline starts a line. + +Changes between versions 3.41 and 3.42 +______________________________________ +Recognize \displaylines and \leqalignno as synonyms for \eqalign(no). +Make | in text mode give - +Implement \acute \i. +Fix a corruption of \matrix code that arose before version 3.37. + +Changes between versions 3.40 and 3.41 +______________________________________ +Restore some cellpadding to space out major equation terms better. +Remove additional space at start of numerators arising from alignment fix. + +Changes between versions 3.39 and 3.40 +______________________________________ +Change file extension for makeindex style to .tms to avoid overwriting. +Ensure paragraph style sheet is included in split files. + +Changes between versions 3.38 and 3.39 +______________________________________ +Fix XHTML incompatibility/standard violation in equalign and eqnarray. + +Changes between versions 3.37 and 3.38 +______________________________________ +Fix \index{...} to grab its whole argument even if it contains (e.g.) %. + +Changes between versions 3.36 and 3.37 +______________________________________ +Fix a bug in \hsize during edefs, setboxes etc. + +Changes between versions 3.35 and 3.36 +______________________________________ +Recognize a number of additional operators and symbols in MathML. + +Changes between versions 3.34 and 3.35 +______________________________________ +Fix ttm not to use mrow when using horizontally stretchy constructs. +Fix some other mrow enclosure logic. +Change DOCTYPE of mathml output to refer to mathml, hence enabling entites. + +Changes between versions 3.33 and 3.34 +______________________________________ +Use some alternate MathML entities for ones that Mozilla fails to recognize +Change DOCTYPE to refer to 4.01 by default to switch off quirks mode in Mozilla +Introduce writing style -w4 to use CSS to change sizes. + This improves the formal standard-compliance, but not rendering much. +Use for sub/supscripts on large symbols for compatibility. +Add cellpadding and cellspacing=0 in several places: improves layout. +Adjust height of stretched delimiters. +Fix \lefteq bug in html and mathml. + +Changes between versions 3.32 and 3.33 +______________________________________ +Support \valign with a single row. +Fix bug in hsize of a vbox. + +Changes between versions 3.31 and 3.32 +______________________________________ +Fix input filenames or comments at end of file with no new line. +Report unknown commands or dimensions only the first time. +Define floatingfigure environment. +Reduced verbosity of figure conversion/inclusion messages. + +Changes between versions 3.30 and 3.31 +______________________________________ +Accommodate graphics when a pdf file or even no source ps/pdf exists. + +Changes between versions 3.22 and 3.30 +______________________________________ +Make the removal of

permanent. +Implement \newdimen +Implement advancing of dimensions. +Cope with expansion of macros when searching for counters/numbers/dimensions. +Update the built-in help texts. +Output http type message rationally with -c switch. +Explicitly discard footlines. +Add hrules to index for visual improvement. +Improve layout of \eqnarray etc. +Make citet etc work in footnotes. + +Changes between versions 3.21 and 3.22 +______________________________________ +Fix tag nesting error in index from \indexspace +Change -w2 handling of paragraphs to improve font handling. +Remove commenting of -w2 stylesheet to prevent XML browsers ignoring it. + +Changes between versions 3.20 and 3.21 +______________________________________ +Fix bug in verbatiminput. +Fix bug in \itemsep. + +Changes between versions 3.13 and 3.20 +______________________________________ +Include tth-gui with TtHgold Windows version. +Change Windows version compilation to mingw cross-compiler. +Move split page links NEXT and PREVIOUS to right hand side of page. + + +Changes between versions 3.12 and 3.13 +______________________________________ +Add displaystyle to MathML for rendering improvements. +TtM fixes of unmatched underover tags. + +Changes between versions 3.11 and 3.12 +______________________________________ +Add mathml mstyle displaystyle="true" to equations. +Fix mathml munderover termination bug. + +Changes between versions 3.11 and 3.12 +______________________________________ +Fix problem with multiple-level mbox inside textstyle equation. +Fix erroneous columnalign=0 in ttm. + +Changes between versions 3.10 and 3.11 +______________________________________ +Fix obscure bug with conditionals in math arrays. +Fix hbox bug introduced at 3.09. + +Changes between versions 3.09 and 3.10 +______________________________________ +Fix mathml bug in limited operators introduced by null fix in 3.07 + +Changes between versions 3.08 and 3.09 +______________________________________ +Improve standard validity of lists. +Improve the box behaviour of \includegraphics. +Fix bugs in extension handling of figure names. +Improve handling of \hsize changes in \hbox and \vbox. + +Changes between versions 3.07 and 3.08 +______________________________________ +Implement improved HTML title interpretation and -n switch. + +Changes between versions 3.06 and 3.07 +______________________________________ +Reimplement file \input name acquisition to allow macro expansion in the name. +Explicitly recognize \jobname. +Correct colspan reference in TtM. +Enable \cite{} to contain spaces (LaTeX permits it, but it's daft). +Fix null mrow for constructs like {}_i in MathML. + +Changes between versions 3.05 and 3.06 +______________________________________ +Remove the from -u1 and -u2 char encoding cases. +Implement -pNULL as a switch preventing \input or \include. + +Changes between versions 3.04 and 3.05 +______________________________________ +Inprove compatibility of \href and \url with URLs containing %. +Change tthnatbib.sty name to tthntbib.sty to avoid 8.3 length truncation. +Prevent buffer overflow in -p switch argument handling. +Fix \& bug in equations. +Improve title behaviour when LaTeX has e.g. \date before \title. + +Changes between versions 3.03 and 3.04 +______________________________________ +Improve makeindex operation, avoiding file overlap with latex. +Define \glossary to be equivalent to \index. + +Changes between versions 3.02 and 3.03 +______________________________________ +Implement renewenvironment as newenvironment with a warning. + +Changes between versions 3.01 and 3.02 +______________________________________ +Fix \\end {...} bad style. +Fix MathML problem with embraced single characters and sub/super scripts. +Implement automatic .aux and .bbl file creation with -a switch. +Implement work around for DOS file handles limitations. +Fix bug in ifnum. + +Changes between versions 3.00 and 3.01 +______________________________________ +Fix mangled HTML for \root 3 \of ... +Fix TtM \sqrt. +Improve vertical layout of \underbrace etc. +Improve TtM equation numbering layout. +Correct \bar to be a non-stretch overline. + +Changes between versions 2.92 and 3.0 +______________________________________ +Implement unicode support in the -u switch +Implement Two-column index. +Improve line counting for diagnostics. +Make height compression (-y1) the default. + +Correct colspan=0. +Fix missing s +Work around Konqueror alignment bug. + + +Changes between versions 2.91 and 2.92 +______________________________________ +Oops. Footnotes were broken in 2.91. Don't use it. Use 2.92. + +Changes between versions 2.90 and 2.91 +______________________________________ +Fix optional argument detection that broke \root \of and \sqrt[] + +Changes between versions 2.89 and 2.90 +______________________________________ +Fix that directory is fopened successfully even though it can't be read. +Implement \day \month \year, so dates can be redefined. +Remove extra

before equations in HTML mode (arose from XHTML compat). +Improve error handling of tthsplit. + +Changes between versions 2.88 and 2.89 +______________________________________ +Really fix the space after \item. +Fix \verb< < use of & < > as delimiters with verb. +Fix incorrect file references to floats in split files. +Fix latex_builtins3. + +Changes between versions 2.87 and 2.88 +______________________________________ +Allow space between \item and its optional argument in description env. +Force a new paragraph at the \end{abstract}. +Improve natbib compatibility in TtH and in tthnatbib.sty +Change \verbatiminput to allow "\end{verbatim}" in the input file. + +Changes between versions 2.86 and 2.87 +______________________________________ + +Fix newline not escaped in latex_builtins3. +Allow Part to be added to toc. +Fix handling of toc contentsline with more arguments (e.g. with hyperref). + +Changes between versions 2.85 and 2.86 +______________________________________ +Fix excessive space compression in delimited arguments. +Remove compress variable (housekeeping). +Enable index entry in table of contents in TtH. + +Changes between versions 2.84 and 2.85 +______________________________________ +Work around apparent HTML validator bug in parsing. +Count multiple bibliographies and make separate split files (refs not correct). +Implement tthrfcat for concatenating multiple refs files when splitting (gold). + +Changes between versions 2.83 and 2.84 +______________________________________ +Fix diacriticals broken at 2.83. +Implement \H as if it were a plain umlaut. +Implement \b underbar. + +Changes between versions 2.82 and 2.83 +______________________________________ +Fix edef expansion of builtins etc to include spaces if necessary. +Improve whitespace ignoring in \cite(s) +Remove spurious whitespace from builtins to clean up top of html files. +Fix \expandafter in some bare token situations (e.g. \ifx). +Detect accents etc as the first thing in the title. (Can't handle them). +Prevent incorrect expansion of \H, \c etc inside \xdefs such as footnotes. +Document some Mozilla symbol font problems. + +Changes between versions 2.81 and 2.82 +______________________________________ +Fix unquoted alignments in \author and \date. +Disable -i switch in TtM. + +Changes between versions 2.80 and 2.81 +______________________________________ +Fix generator meta syntax in XHTML version. +Make -w2 the default for TtM, so that Amaya 4.0 can parse. +Add xmlns to TtM math element. Again, Amaya 4.0 changed to be really picky. + +Changes between versions 2.79 and 2.80 +______________________________________ +Improve \vspace handling to prevent it improperly absorbing following numbers. +Include xmlns declaration in -w2 style. +Implement redefinable macros for split files' top and tail navigators (gold). +Add reference to index in navigators. +Allow non-letter characters in equations to have their fonts changed. +Implement \tthtensor. + +Changes between versions 2.78 and 2.79 +______________________________________ +Improve epsfbox layout to be more TeX-like. +Fix space ignoring after e.g. \ss and \i. +Correct upper case /TD /TR to lower case (for XHTML). + +Changes between versions 2.77 and 2.78 +______________________________________ +Fix placement of title when triggered by raw output. +Fix recognition of file names in capitals from Wind@ws drop on executable. +Put back the

before

  • when the writing style is 0. Gives better layout. + +Changes between versions 2.76 and 2.77 +______________________________________ +Implement command-line specification of input and implied output files. +Reorganize output file descriptors for the above. +Adjust startup messages to reflect knowledge of input file. +Prevent null index generation when base latex filename is unknown. +Adjust the usage and help output to report new behavior. + +Changes between versions 2.75 and 2.76 +______________________________________ +Move static function definitions to global to satisfy Compaq CC. +Implement \setbox recognition and edefinition as if box is a macro. +Implement \savebox, \sbox, \usebox. +Fix incorrect absorption of space after \cite{thecite}. + +Changes between versions 2.73 and 2.75 +______________________________________ +Consolidate document headers into macros in mathstrings. +Implement -w switch 0: no title insertion, 1 head and body tags. +Rework paragraphing to enable XML-style completion (when -w2 is used). +Rework \item and some other list elements for XML-style. +Change colorbox interpretation to for better standardization. +Add \marginpar to builtins. +Add XHTML style terminators to zero-content tags

    . +Fix obscure bug in \hang inside \vbox. +Fix detection of horizontal mode in delimited parameter searching. + +Changes between versions 2.72 and 2.73 +______________________________________ +Make all tags lower case, all attributes quoted and explicit. +Add some tags even though not compulsory. +All this to move (slowly) towards XHTML compatibility, although what to do +about

    and nesting is not at all obvious at this stage. +Make implementation of \uppercase and \scshape more robust. + +Changes between versions 2.71 and 2.72 +______________________________________ +Fix bug with counters in LaTeX files translated without the -L switch + (introduced at version 2.67). + +Changes between versions 2.70 and 2.71 +______________________________________ +Remove the default
    after the image in includegraphics to make the image + alignment more flexible. +Complete the namespace separation of tthfunc and ttmfunc. +Change tthhalcode to be a macro, and make various strings macros. +Fix TtM to use the full tabular argument for alignment etc. +Add handling of optional argument to \cite. +Fix bug with conditional clauses during macro argument searching. +Generalize cite and bibitem to handle the natbib extensions. +Create tthnatbib.sty file for TtHgold implementing variable citep, citet, + and other useful aspects of natbib. +Handle automatic conversion of \section argument into title if it comes first. + +Changes between versions 2.69 and 2.70 +______________________________________ +Fix bug introduced in revised initial scan of tabular argument (at 2.68). +Improve alignment of eqnarray equations to make more centered. + +Changes between versions 2.68 and 2.69 +______________________________________ +Fix broken .ind file removal broken at version 2.68. +Improve handling of vboxes to behave more like TeX. +Make \tthfootnotes the name of the footnotes section, default Footnotes. + +Changes between versions 2.67 and 2.68 +______________________________________ +Improve handling of minipage to behave more like LaTeX. +Modify some rescanning, esp in wrap-up, to fix memory leaks. +Fix error in initial scan of tabular argument. +Prevent spurious paragraphs caused by \else or \fi alone on a line. +Fix bugs with \% percent in conditional text. +Implement a facility for scanning TeX strings at closures. [Infrastructure]. +Define \columnwidth to be a synonym for \hsize. +Improve the table of contents handling of paragraph and subparagraph. + +Changes between versions 2.66 and 2.67 +______________________________________ +Implement \% as equivalent to % within rawhtml for macro purposes. +Make all
    into
    to satisfy validators. + +Changes between versions 2.65 and 2.66 +______________________________________ +Further improve handling of \eqno with \eqalign not to hide wide equations. +Fix bug with single line eqnarray. +Make \caption a command string so it can be redefined. +Implement column counting in tabular. +Fix obscure bug in conditionals with argument finding \else. +Fix bug in delimited parameter matching of blank line as \par. +Ensure \cr in LaTeX is equivalent to \nonumber\\. +Fix incorrect group nesting when using a newenvironment. +Add some tags in tables, even though optional. +Change counter order to prevent spurious title "Footnotes" in plain TeX. +Change tth.gif logo: more realistic document flight. +Implement longtables. + +Changes between versions 2.64 and 2.65 +______________________________________ +Correct misinterpretations of glue removal from (e.g.) \offinterlineskip. +Ensure \hfil is recognized in \halign template. +Improve scanning of template to remove rule dimensions of \vrules. +Fix HTML width error when \eqno is used with \eqalign. + +Changes between versions 2.63 and 2.64 +______________________________________ +Prevent spurious

    at start of environments such as lists, figures etc. +Discard spurious whitespace inside tabular alignment argument. + +Changes between versions 2.62 and 2.63 +______________________________________ +Fix improper termination of \item by display equations. +Improve alignment of equation numbers inside list, items, indented sections. + +Changes between versions 2.61 and 2.62 +______________________________________ +Fix TTHINPUTS and -p to accept consecutive path separators. + +Changes between versions 2.60 and 2.61 +______________________________________ +Fix the accident that -c implies -d. +Implement \colorbox, \fcolorbox, and \pagecolor (deprecated). [Not in eqs]. +Replace printf with a macro for easier editing and subroutines. +Remove unnecessary static declaration from some global variables. +Define \setlength to prevent it putting spurious lengths into text. +Implement corrected array/tabular inside in-line (textstyle) equations. + [But only if the array is the only thing in the equation]. +Prevent erroneous freeing of internal definitions of cross-references. +Fix bug in \hsize setting when accidentally invoked in an error situation. +Improve consistency of setting of TeX and TtH in manual. + +Changes between versions 2.58 and 2.60 +______________________________________ +Improve the layout of equation numbering. Now it is properly right aligned. +Fix bug in VMS compile introduced at 2.56. +Improve alignment of big symbols with limits using -y switch. +Force display equations to clear inline equations using -t switch. + +Changes between versions 2.57 and 2.58 +______________________________________ +Enable \part redefinition to remove possible Plain incompatibility. +Enable garbaging of locally defined macros if they aren't trapped by global. +Fix obscure bug in \indexspace. +Fix spurious \par sometimes arising from \advance and other counter ops. + +Changes between versions 2.56 and 2.57 +______________________________________ +Add diagnostic message when *.bbl bibliography file not found. +Fix obscure problems with null inline equation inside a tabular. +Make e.g. \textrm in equations recognize that this is a text box. +Add switch -k to prescribe filename without forcing LaTeX state. +Fix space problem in attribution string. +Add install file and l2h.exe to tthgold DOS/Windows distribution. + +Changes between versions 2.55 and 2.56 +______________________________________ +Implement pre-expansion of bare command sequence arguments of \sqrt. + (That's pretty bizarre. \sqrt is not really a macro with arguments in TeX!) +Implement multiple directories in -p switch. +Implement recognition of TTHINPUTS as a path for input files. + +Changes between versions 2.54 and 2.55 +______________________________________ +Fix omission of 8 standard colors in lower case in LaTeX. + +Changes between versions 2.53 and 2.54 +______________________________________ +Implement comprehensive color support, \color \textcolor and \definecolor. + +Changes between versions 2.52 and 2.53 +______________________________________ +Reimplement a few constructs: stackrel, pmatrix, cases ... as TeX functions. +Remove the cnvting states which are now obsolete. (Housekeeping). +Make NEXT and PREVIOUS into macros in TtHgold so they can easily be changed. +Obey \textstyle in display equations provided explicitly embraced. + +Changes between versions 2.51 and 2.52 +______________________________________ +Adjust version reporting in startup code. +Improve hbox handling in vertical mode. +Fix centerheader invisible formal HTML bug. +Change \centerline to enclose output in an HTML table for better compatibility. +Improve alignment of first \item. +Recognize \land \gets \mid \lbrack \rbrack \not\in \not\subset +Make - symbol font in equations because some non-adobe times fonts have + a very short hyphen sign. This might cause other problems. We'll see... +Trap \centerline in titlecheck state. +Rework buildrel as a delimited parameter. +Fix small alignment bugs in atop. +Remove spurious space after the 2 in e.g. \hat{v}^2. + +Changes between versions 2.50 and 2.51 +______________________________________ +Work around DOS executable system call non-detection of failure of ps2png etc. +Improve hbox and vbox code to accommodate NS table peculiarities. +Trap explicit \par in titlecheck state. + + +Changes between versions 2.34 and 2.50 +______________________________________ +Implement dimension interpretation. + \hskip \hspace implemented as scaled number of nonbreak spaces. + \vskip \vspace implemented as scaled number of
    s. + p{dimension} in tabular argument as scaled width="pixels" + Float times a dimension implemented. E.g X.YZ\hsize. + \hsize = ... supported inside a brace group (e.g. a \vbox) +Some box handling. But browsers currently won't put text before and after +the table into which these are translated. + \hbox to ... implemented as table of scaled % width. [Not in equations] + \hfil and \hss implemented inside \hbox to.. But spacing is imperfect. + \makebox, \framebox with specified size and alignment. + No \newdimen's. + Prevent \hbox constructs from containing the accidentally. + +Implement *{num} interpretation in tabular alignment argument. +Fix minor inconsistency in definition of \proclaim. +Improve recognition of known but inappropriate parameters e.g. \tolerance. +Improve consistency of parameter discarding of unknown commands. +Improve consistency of paragraph detection near }. +Rewrite the graphics file conversion code to call ps2png, then ps2gif. +Compile DOS executable unoptimized because we are out of memory (again). + +Changes between versions 2.33 and 2.34 +______________________________________ +Implement \subitem for itemize and enumerate environments. +Implement \proclaim. +Correct grouping in definition of \frac. +Correct the missing semicolon from 233. +Fix bug with refs and bibitems whose key has spaces. + +Changes between versions 2.32 and 2.33 +______________________________________ +Accommodate \item[...] in enumerate with a kludged item label. +Implement \url, \hypertarget, \hyperlink, for better compatibility. +Fix tthsplit for tthgold. + +Changes between versions 2.31 and 2.32 +______________________________________ +Fix handling of \rm outside groups in TtHgold (not TtH). +Fix expansion of \if clauses in situations that need it, e.g. limitops. + +Changes between versions 2.30 and 2.31 +______________________________________ +Fix handling of \{ and \} in situations like footnotes. + +Changes between versions 2.27 and 2.3 +______________________________________ +Put the name= reference into quotes for cite and a few other places. +Fix bug with unembraced arguments like \phantom\{ . +Improve vertical placement of overaccents in denominators too. +Improve vertical placement of lone sqrts in fractions. +Fix bug with \right. in in-line equations. +Remove spurious extra space after \over in in-line equations. + +Changes between versions 2.26 and 2.27 +______________________________________ +Improve vertical placement of simple expressions with over accents in + fraction numerators. + +Changes between versions 2.25 and 2.26 +______________________________________ +Reinstitute -O optimization of DOS executable with more compile memory +Fix warnings about ambiguous else on egcs compiler. +Improve compatibility of grabbing unused embraced arguments to + begin{thebibliography},\\begin\{tabular(\*|x)\},\\begin\{minipage\} + +Changes between versions 2.24 and 2.25 +______________________________________ +Fix the title generation code for Mac line-end compatibility. + +Changes between versions 2.23 and 2.24 +______________________________________ +Rework all line-end code to implement work-around for Mac files. + +Changes between versions 2.22 and 2.23 +______________________________________ +Implement work-around for flex line-end bug on Macintosh files. +Fix bug in \color inside equations. + +Changes between versions 2.21 and 2.22 +______________________________________ +Reimplement the redundant brace group delimiter fix to avoid bugs in 2.21. +Fix problem with \iftth following &. + +Changes between versions 2.20 and 2.21 +______________________________________ +Make \.*size check first if it is a user-defined macro before discarding. +Enable proper sub/superscript positioning on large delimiters even when in + (redundant) brace groups. [Fix associated # problems] +Fix problem with \else in nested false conditionals. + +Changes between versions 2.10 and 2.20 +______________________________________ +Implement epsf file handling to accept a filename without extension and search + for .ps or .eps files. +Make equation, figure, and table numbered within chapter by default. +Fix \thanks in title in preamble. +Implement correct (I hope) tabular handling _inside equations_. +Use tabular code for \begin{array} so cell alignment is now honored. +Improve height tracking of matrices. +Remove optimization from DOS executable because of compile memory limitations. + +Changes between versions 2.01 and 2.10 +______________________________________ +Remove some spurious additional cells from equations for better layout. +Reimplement sqrt to work more compatibly. +Implement some extensibility in large sqrt signs. +Reimplement \root \of as a delimited-parameter command. +Implement interpretation of TeX code in index of sqrt[] and \root..\of. +Changed name of top file in tthgold split output to "index.html". +Implement an optional style-sheet approach for equation height compression in + tthgold. +Fix order of closing of improperly nested font changes etc. +Prevent various known unsupported commands from inserting unwanted <p>. +Fix bug with \cite inside footnotes. +Improve \newtheorem to recognize optional arguments (but still not quite + numbering in "within" correctly). +Add handling of \charNNN and \symbol{}. + +Changes between versions 2.00 and 2.01 +______________________________________ +Improve layout of \root \of. +Fix inline sqrt without embedded groups. +Added unsupported alpha diacritical accent commands as null macros to prevent + discarding their arguments. +Implement recognition of "`, "', "<, and "> from the german style. +Fix uninitialized labelchar that occasionally gave \label problems. + +Changes between versions 1.98 and 2.00 +______________________________________ +Recognize \begin with spurious following space. Warn and fix with unput. +Improve recognition of multicolumn hidden in macros, in arrays in equations. +Make first cell of first line of eqalign/eqnarray right aligned. + +Changes between versions 1.96 and 1.98 +______________________________________ +Finally fixed the \halign and \tabular code (I hope). + +Found a serious problem with version 1.97 when tabular environment is +renamed. Withdrew 1.97 from release. + +Changes between versions 1.96 and 1.97 +______________________________________ +Rewrite \halign code to use the template line for alignment and insert strings. +Change tabular alignment coding. Fix @-strings at premature row ends. +Fix insertion of & during verbatim output. + +Changes between versions 1.95 and 1.96 +______________________________________ +Fix \halign, broken by the improvements to \tabular. +Fix \uppercase bug in equations. + +Changes between versions 1.94 and 1.95 +______________________________________ +Implement tabular alignment argument interpretation. (Not *{num} style). +Prevent spurious \par caused by newlines in equations. +Fix bug with LaTeX \input{filename} that regarded the input as within a group + and thus discarded the newcommands that were defined within it, since the + implementation of commands being local in TtH if defined locally (v 1.90). +Correct the anchor at the subsubsection in book class when secnumdepth is >2. +Make \textsc and \uppercase work in equations provided no math or other + complicated constructs are used inside their arguments. + +Changes between versions 1.93 and 1.94 +______________________________________ +Fix bug with auxiliary files and \include{}. + +Changes between versions 1.92 and 1.93 +______________________________________ +Fix obscure bug with \\ at end of argument of macros. +Recognize \+ does not mean a settabs tabbing start in LaTeX (just omit). +If \amslatex is a defined command, recognize | as a synonym for \verb|. +Fix \choose when its second argument has subscripts. +Rework equation start and end always to start and end an implied group. + This is rationalizes treatment of such things as $$n \choose k$$. +Improve brace matching in ignored groups that contain \{ or \}. +Improve dimension and parameter command removal with macros. +Improve counter setting with macros. +Improve eqalign (eqnarray) alignment of first cell (align right). +Make book class equation numbering consistent with LaTeX default. +Split a long string constant to work around brain-dead VisualC++ limitations. +Improve string overflow detection and message. +Reorganize verbose messages. + +Changes between versions 1.90 and 1.92 +______________________________________ +Fix bug with zero length \phantom. + +Changes between versions 1.90 and 1.91 +______________________________________ +Improve \phantom to cope with braces within its argument. + +Changes between versions 1.68 and 1.90 +______________________________________ +Implement command definitions as local within groups for TeX compatibility. + Counters are (incompatibly) still all global. +Implement plain TeX conditionals. + All are working with some limitations except + \loop, \ifdimen, \ifvoid, \ifinner, \ifcat. +Add timestamp to the translation credits. +Rework delimited parameter macros to be compatible with TeX space compression. +Add implied \par to several commands, e.g. \hrule, \bigskip, ... +Implement \[h]phantom as a horizontal space of the approximate length. +Rework bibitem to allow it to function correctly when renamed. +Fix \bye. +Improve error message for string overflow. + +Changes between versions 1.67 and 1.68 +______________________________________ +Fix fatal bug caused by ungrouped \over construct in inline equation. +Use the compiler -O optimization on executables to decrease their size. + +Changes between versions 1.66 and 1.67 +______________________________________ +Permit \headline= syntax. +Permit omission of braces from plain footnote first argument. +Obey optional argument to footnote in LaTeX. +Fix bug in improper \\ handling at lowest closure depth. + +Changes between versions 1.65 and 1.66 +______________________________________ +Correct the behaviour of a command alone on a line. Treat as a non-null line. +Handle improper use of \\ or \cr outside of array environment in an equation. + LaTeX simply ignores it, though it should not be used. + +Changes between versions 1.60 and 1.65 +______________________________________ +Implement HTML title construction or warning for files without title. +Implement \paragraph and \subparagraph. +Implement \secnumdepth handling. +Accept optional arguments on \author etc. +Kludge \dag and \ddag, since they are not available as single glyphs. +Rework \item in description environment to handle optional arguments better. +Improve \noalign rendering. +Improve font handling for inline equations in boxes in displaystyle equations. +Group multiple-letter entities in equations inside font codes (for mathitalic). +Prevent ^\prime from being a superscript in-line. HTML is unlike TeX. +Standardize warning and error syntax. +Correct handling of braces inside of optional arguments. +Fix (rare) bug in glue removal state that defeats paragraphing. +Fix bugs for absent optional argument with no other arguments. +Fix (invisible) bug in \item followed immediately by \end. +Fix incorrect pushdepth induced by display table state. + +Changes between versions 1.59 and 1.60 +______________________________________ +Implement verbatiminput +Fix various entities not to introduce spurious par if on line by themselves. + +Changes between versions 1.58 and 1.59 +______________________________________ +Implement optional parameter handling internal macro call. +Fix recognition of unknown* environments. +Work around strange amslatex use of \newlabel in aux file. +Fix \varphi. + +Changes between versions 1.57 and 1.58 +______________________________________ +Recognize file extensions .ps* .eps* (e.g. .epsi) as valid postscript. +Recode \headline and \title to avoid putting markup in <title>. +Rework epsfbox etc to improve compatibility with non-standard usage. +Add alt="..." to the img tags to conform to HTML4.0. + +Changes between versions 1.56 and 1.57 +______________________________________ +Reduce additional horizontal space with large delimiters in some cases. +Change tabular handling to allow \multicolumn to be inside a macro. +Fix bug with single non-alpha commands as subscripts, (e.g. x_\|). +Fix disabling of \par by \href and \special{html:...}. +Make color codes quoted for syntax validation. + +Changes between versions 1.55 and 1.56 +______________________________________ +Implement \{, \} in macro arguments so that e.g. \subsection{\{} works. +Fix (invisible) incorrect state at close of LaTeX files. +Fix \choose to remove fraction bar. + +Changes between versions 1.54 and 1.55 +______________________________________ +Fix bug in appendix chapter or section title: grouping not honored. + +Changes between versions 1.53 and 1.54 +______________________________________ +Fix large square-root display for Macs. + +Changes between versions 1.52 and 1.53 +______________________________________ +Use <br clear=all> at start of table layout of inline equations with -t switch +Ensure \begin{html} and related code does not cause spurious \par. +Ensure \tthdump is not expanded in (e.g.) edefs or footnotes. + +Changes between versions 1.50 and 1.52 +______________________________________ +Rework \begin{array} for improved compatibility. +Implement \Roman, \roman. +Make \# output # in raw HTML output. +Implement \char`\. as a literal character quoting mechanism. +Make \\cal into italic helvetica. +Various TtHgold improvements to label, etc. + +Changes between versions 1.46 and 1.50 +______________________________________ +Rework \textit ... \mathrm ... to use rescanning of a braced switch. This + resolves ambiguities in equations (the swaparg state), and allows + macros to rename these even using bad (non-argument) style. +Rework \underline and colordvi commands similarly. +Improve picture conversion code by including graphics packages in the + latex file that is output, and fix comment bug. +Rework mbox and raisebox code for greater compatibility. +Remove the eqtokarg state, mostly used in subpscripts. +Implement the exptokarg state, for expanding command sequences immediately + following ^ _ and overaccent-style builtin TeX commands in equations. + This new approach correctly mimics TeX's handling of unembraced command- + sequence arguments in math mode, and removes ambiguities. +Correct internal bug associated with dupstore in tthref. +Rework macro calling to allow internal use of code. +Implement \expandafter. +Improve pattern matching in delimited argument interpretation. +Fix bug in \let interpretation (rare). +Fix footnote wrapup bug that broke \end[{document}}] +Rework \href using special, so it works in equations. +Edit manual to reflect changes. + +Summary: +1) Substantially improved [La]TeX compatibility in + Expansion of macros and boxes in equations; \expandafter support. +2) Improved picture handling code. +3) Various small bug fixes. + +Changes between versions 1.45 and 1.46 +______________________________________ +Simplified some dimension and glue removal code. +Internal output statement rationalization. +Fixed bugs in some accents. e.g. \~ \`O and \'{\i }. + +Changes between versions 1.41 and 1.45 +______________________________________ +Implement optional argument support for newcommand and newenvironment. +Implement "within" capability of newcounter. +Implement \@addtoreset command. +Rework equation labeling to use \theequation command. +Rework sectioning commands to use more latex-like approach involving + \thesection.\arabic{subsection} etc, for greater compatibility with + different sectioning and numbering styles. +Fix bug in \Alph and \alph +Fix bug in \chapter* +Fix bibitem interpretation with parens in optional argument. +Ensure a newtheorem starts a new paragraph. +Rework figure and table numbering in caption to use \thefigure etc, + and observe numbering with chapters of book style, for compatibility. +Make sectioning commands able to be redefined, in case a TeX file does so. +Rework \newlabel code to allow more general label formats (e.g. from a + redefined \theequation or \thefigure command in aux file). + + +Changes between versions 1.40 and 1.41 +______________________________________ +Fix bug in eqnarrays with \\ after e.g. \frac{}{}, \right) etc. + +Changes between versions 1.32 and 1.40 +______________________________________ +Reimplement \bibcite as \def, for greater compatibility with different + bibliography styles such as natbib. +Reworked some equation recognition code to remove tth_eqn. +Rationalized the equation state earlier in the flex code. +Defined many strings as macros for easier editting. +Defined macros TTH_MATHC and TTH_SCAN_STRING. +Reworked some number removal for brevity. +Reworked halign/tabular end of line multicolumn code for clarity and brevity. +Resultant C code is nearly 100k shorter. +Separate -? and -h help text. + +Changes between versions 1.31 and 1.32 +______________________________________ +Implement workaround for browser table font bug in upright math mode. +Fix spurious <p> arising in toc if whole section title is a macro. + +Changes between versions 1.30 and 1.31 +______________________________________ +Implement \multicolumn in array environment. +Improve \eqalign recognition. +Make \bordermatrix a synonym for \matrix to prevent parse errors. +Prevent additional spurious </td> in equations. +Increase buffer size to TTH_DLEN 6000. +Change literal and non-literal treatment in tags for formal HTML conformance. +Add doctype 4.0 statement in standard header. +Fix omission of </a> from indexing tags. +Fix subsubsection labeling in appendix. +Fix \ref and \pageref in footnotes. + +Changes between versions 1.24 and 1.3 +_____________________________________ +Improve placement of subscripts etc on over-accented characters. +Fix bug arising from commands terminated by % in macro arguments. +Change default fraction level to 5. +Improve rendering of single-character fractions in inline equations + and exponents using slash. +Remove unnecessary braces in \frac definition. +Trap most common token ambiguities: \frac \mathrm and \mbox. +Fix scanner error at ambiguous token error. +Fix erroneous \big\ bug. +Adjust bracket height for very large items, e.g. matrices. + +Changes between versions 1.23 and 1.24 +_____________________________________ +Fix bug with \emph inside textbox inside equation. +Fix bug in \cite recognition with []. +Fix footnote bug introduced in equation-compatibility code. +Improve recognition of \begin{list}{}{}. +Fix bug in \(over|under)brace causing buffer overrun and possible crash. + +Changes between versions 1.22 and 1.23 +_____________________________________ +Fix \root n \of bug. + +Changes between versions 1.21 and 1.22 +_____________________________________ +Implement \sqrt[n]{ } and \root n \of. +Fix appendix index reference. + +Changes between versions 1.2 and 1.21 +_____________________________________ +Fix bug misinterpreting \} \{ in macro arguments. + +Changes between versions 1.15 and 1.2 +_____________________________________ +Document the -t switch for built-up textstyle equations. +Document the -a switch for automatic picture conversion. +Include latex2gif in distribution. + +Changes between versions 1.14 and 1.15 +______________________________________ +Omit \null from equations too. +Fix \ at end of line to be nbsp. +Make widehat a synonym for hat, like widetilde. +Add a newline end after </html>. +Add \alph,\Alph,(\roman,\Roman = \arabic). +Fix footnotes to work inside equations. +Add parentheses around \hbar. + +Changes between versions 1.13 and 1.14 +______________________________________ +Add recognition of \bigg/ and \bigg\ etc. +Fix bug in unrecognized \bigg etc. + +Changes between versions 1.12 and 1.13 +______________________________________ +Fix \\ bug arising from optional arg to \\ causing arrays to break. +Fix accent bug in \uppercase. +Add "s German ss usage. +Implement experimental -t switch. + +Changes between versions 1.11 and 1.12 +______________________________________ +Fix appendix subsection alphanumeric label bug. +Fix subsubsection bug that put in spurious name tags. + +Changes between versions 1.1 and 1.11 +_____________________________________ + +Fix the footnote "head.html" bug. +Correct to \dots in paragraph mode. +Add FAQ to manual. + +Changes between versions 1.03 and 1.1 +_____________________________________ + +Implement Indexing. +Improve space removal after numerator of fractions for alignment. +Tidy up some pattern recognition to remove trailing contexts. +Improve documentclass tracking. +Change ps2gif to use -ppmraw to save time and space. +Fix \verb+<font>+ to translate <> correctly to &ls; etc. +Make figure and table section-numbering 2-digit. +Fix space after Chapter names etc. +Fix spurious \\par insertion in \label (etc) on a line by itself. +Fix equations with _{\rm p} climbing up a hill. +Fix eqnarray* bug. +Fix lefteq bug. +Fix bug in interaction between TeX and Latex equation numbering. +Check for existence of .ps file before attempting conversion. +Add l2h script to packages. + +Changes between versions 1.02 and 1.03 +______________________________________ + +Fix space omitted after e.g. Figure. +Recognize .jpg or as a valid graphic file extension; if file.jpg exists, +don't do conversion from file.ps. +Add double hline recognition internal to tables. +Fix obscure bug in sub/superscripts as initial part of a definition. +Rework subscript code for more compact internals. +Remove space before \over, \atop (etc.) commands to improve alignment. + +Changes between versions 1.00 and 1.02 +______________________________________ + +Change glue removal code to save substantial size and improve compatibility. +Change paragraph recognition algorithm to do a better job when the +two line ends are in e.g. different macros. +Improve length overflow checking consistency. +Improve h|vrule handling. +Recognize "fil" as a dimension unit for removal. +Correct \bigg and \left\right delimiter algorithm to correspond to TeX. +Add meta tag to header. + +Changes between version 0.99 and 1.00 +_____________________________________ + +Redefined default states for the -g switch: +Defaults to guessing meaning of font commands; -g means discard construct. + +Changed default eqnarray numbering to be more LaTeX like. Each line is +numbered by default. Switch -n reverts to older style: one number per +environment. Implemented \nonumber. + +Documented -p switch to provide an additional directory for input files. + +Implemented \thanks as a synonym for \footnote in author or title. + +Updates to documentation. + +Added web link to home site in credit line. + +Various small bug fixes: + Allow spaces after \\ + Removed [] from possible macro names to avoid misinterpretation. + Changed handling of \textstyle to avoid consequent errors. + Fixed bug in fractional superscripts to large delimiters. + Improved removal of \penalty and similar commands. + Allow decimal point sizes in font commands. + Trap negative closure counts to prevent crash. diff --git a/ivoatex/tth_C/INSTALL b/ivoatex/tth_C/INSTALL new file mode 100644 index 0000000..fa3fea7 --- /dev/null +++ b/ivoatex/tth_C/INSTALL @@ -0,0 +1,7 @@ +Compile the C code by doing, for example: + +gcc -o tth tth.c + +Copy the executable, tth, to somewhere on your path, e.g. /usr/local/bin/ + +If you find symbols are missing in your browser, run Xfonts.fix as root. diff --git a/ivoatex/tth_C/UPDATING b/ivoatex/tth_C/UPDATING new file mode 100644 index 0000000..d0667bc --- /dev/null +++ b/ivoatex/tth_C/UPDATING @@ -0,0 +1,11 @@ +tth is maintained by Ian Hutchinson, who occasionally releases new versions, +which usually fix some bugs or contain some improvements. To update +this, pull "C code for any platform" from + +http://hutchinson.belmont.ma.us/tth/tth-noncom/download.html + +then go into this directory and say + +tar --strip-components=1 -xvzf <path-to-your-download>/tth_C.tgz + +This assumes GNU tar. diff --git a/ivoatex/tth_C/latex2gif b/ivoatex/tth_C/latex2gif new file mode 100755 index 0000000..66f448a --- /dev/null +++ b/ivoatex/tth_C/latex2gif @@ -0,0 +1,19 @@ +#!/bin/sh +#latex2gif script by Ian Hutchinson 1998; use at your own risk. +#You need latex, dvips and ps2gif. +if [ $# != 1 ] ; then + echo " Usage: latex2gif <file> (no extension)" 1>&2 + exit 1 +else + echo "Calling latex, dvips, and ps2gif, please wait ..." >&2 + latex $1 >&2 + dvips -o $1.ps $1 >&2 + ps2gif $1.ps $1.gif + rm $1.tex + rm $1.aux + rm $1.dvi + rm $1.log + rm $1.ps +fi + + diff --git a/ivoatex/tth_C/license.txt b/ivoatex/tth_C/license.txt new file mode 100644 index 0000000..d6fb360 --- /dev/null +++ b/ivoatex/tth_C/license.txt @@ -0,0 +1,17 @@ +License for TtH, a TeX to HTML translator +_________________________________________ + +tth is copyright Ian Hutchinson, 1997-2007 (hutch@psfc.mit.edu). + +You may freely use this software. + +If you distribute any copies, you must include this file and these +conditions must apply to the recipient. + +No warranty of fitness for any purpose whatever is given, intended, or +implied. + +You use this software entirely at your own risk. If you choose to use +tth, by your actions you acknowledge that any consequential damage +whatever is your responsibility, not mine. + diff --git a/ivoatex/tth_C/ps2gif b/ivoatex/tth_C/ps2gif new file mode 100755 index 0000000..8ef783c --- /dev/null +++ b/ivoatex/tth_C/ps2gif @@ -0,0 +1,18 @@ +#!/bin/sh +#ps2gif script by Ian Hutchinson 1998; use at your own risk. +#You need Ghostscript and the pbmplus utilities installed. +if [ $# -lt 2 ] ; then + echo " Usage: ps2gif <file.ps> <file.gif> [<icon.gif>]" 1>&2 + exit 1 +else + echo "Calling ghostscript to convert, please wait ..." >&2 + filein=$1 + gs -sDEVICE=ppmraw -sOutputFile=- -sNOPAUSE -q $filein -c showpage -c quit | pnmcrop| pnmmargin -white 10 | ppmtogif >$2 + shift 2 + if [ $# -eq 1 ] ;then +# Make an icon file. + gs -sDEVICE=ppmraw -sOutputFile=- -sNOPAUSE -r12 -q $filein -c showpage -c quit | pnmcrop| ppmtogif >$1 + fi +fi + + diff --git a/ivoatex/tth_C/ps2png b/ivoatex/tth_C/ps2png new file mode 100755 index 0000000..039b7eb --- /dev/null +++ b/ivoatex/tth_C/ps2png @@ -0,0 +1,20 @@ +#!/bin/sh +#ps2png script by Ian Hutchinson 1999; use at your own risk. +#You need Ghostscript and the netpbm utilities installed. +if [ $# -lt 2 ] ; then + echo " Usage: ps2png <file.ps> <file.gif> [<icon.gif>]" 1>&2 + exit 1 +else + echo "Calling ghostscript to convert, please wait ..." >&2 + filein=$1 +# The following uses the internal gs driver but does no cropping etc. +# gs -sDEVICE=png256 -sOutputFile=$2 -sNOPAUSE -q $filein -c showpage -c quit + gs -sDEVICE=ppmraw -sOutputFile=- -sNOPAUSE -q $filein -c showpage -c quit | pnmcrop| pnmmargin -white 10 | pnmtopng >$2 + shift 2 + if [ $# -eq 1 ] ;then +# Make an icon file. + gs -sDEVICE=ppmraw -sOutputFile=- -sNOPAUSE -r12 -q $filein -c showpage -c quit | pnmcrop| pnmtopng >$1 + fi +fi + + diff --git a/ivoatex/tth_C/tth.1 b/ivoatex/tth_C/tth.1 new file mode 100644 index 0000000..8dcc375 --- /dev/null +++ b/ivoatex/tth_C/tth.1 @@ -0,0 +1,362 @@ +.TH TTH 1 "1 May 2002" 3.10 "TeX to HTML translator" +.SH NAME +tth, latex2gif, ps2gif, ps2png \- TeX and LaTeX to HTML translator +and its auxiliary program +.SH SYNOPSIS +.B tth +[\fIoptions\fP] [\fI<file.tex\fP] [\fI>file.html\fP] [\fI2>err\fP] +.sp +.B tth +[\fIoptions\fP] \fIfile.tex\fP [\fI2>err\fP] +.sp +.B latex2gif +.I file +(no extension) +.sp +.B ps2gif +.I file.ps file.gif +[\fIicon.gif\fP] +.sp +.B ps2png +.I file.ps file.gif +[\fIicon.gif\fP] +.SH DESCRIPTION +.PP +.I tth +translates TeX source that uses the plain macro package or LaTeX, +including most mathematics, into a near equivalent in HTML. The formal +standard that TTH-translated documents follow is strictly HTML4.0 +Transitional. +.PP +The complete documentation is contained in "tth_manual.html" distributed +with the program. This man page is an incomplete summary and updated on an +irregular basis. [Last updated 1 May 2002 by Hans Fredrik Nordhaug.] +.PP +The program is a filter, i.e. it reads from standard input and +writes to standard output. In addition, diagnostic messages concerning +its detection of unknown +or untranslated constructs are sent to standard error. +.PP +In handling embedded graphical files \fItth\fP +can make use of auxiliary programs, \fI ps2gif\fP or \fIps2png\fP, +which in turn make use of the ghostscript interpreter \fIgs\fP (1) +and the Portable Bitmap Graphics suite of commands, see \fIpbm\fP (1). +.PP +.I tth +is extremely fast in default mode on any reasonable hardware. +Conversion of even large TeX files should be a matter of a second or +two. This makes it possible to use \fItth\fP in a CGI script to output +HTML directly from TeX source if desired; (standard error may then +need to be redirected.) +.PP +To discuss how to get the best from \fItth\fP, you can subscribe to a +mailing list by sending an email containing the message +subscribe tth_mailing_list to "majordomo@hutchinson.belmont.ma.us". +Then you can send messages to "tth_mailing_list@hutchinson.belmont.ma.us". +.PP +\fItth\fP handles TeX things like: +.nf +.in 1i +Almost all mathematics, including symbols, fractions, delimiters. +{} \\begingroup\\endgroup grouping. +\\it \\bf \\sl etc styles. +\\beginsection. +\\centerline{}. +\\item{...} \\itemitem{...} {\\obeylines ...}. +Almost all accented latin characters written like \\"o, or \\"{e}. +\\hang \\hangindent \\narrower for entire paragraphs + (\\hangafter ignored). +\\headline is made into a title. +% Comments. Simply removed. +\\halign tables, checks template for the presence of \\vrule, + to decide if the table is to be border style. +\\settabs \\+ style tables. +\\input: But, of course, not from the implicit texinputs path. +\\newcount, \\number, \\advance and counter setting. +\\def, \\edef, \\xdef but no delimited arguments. + All definitions are global. +\\matrix, \\pmatrix but not \\bordermatrix. \\cases. +.in +.fi +.PP +LaTeX support includes essentially all mathematics plus the following +environments: +.in 1i +em, verbatim, center, flushright [one paragraph only], verse, +quotation, quote, itemize, enumerate, description, list [treated +as if description], figure, table, tabular[*,x], equation, +displaymath, eqnarray [only one equation number], math, array, +thebibliography, [raw]html, index [as description]. +.in +.fi +and Latex commands: +.in 1i +[re]newcommand, newenvironment [optional arg not permitted], chapter, +section, subsection, subsubsection, caption, label, ref, pageref [no +number], emph, textit, texttt, textbf, centering, raggedleft, +includegraphics, [e]psfig, title, author, date [not automatic], +lefteqn, frac, tableofcontents, input, include [as input], textcolor, +color [8 standard colors], footnote [ignoring optional arg], cite, +bibitem, bibliography, tiny ... normalsize ... Huge, newcounter [no +``within'' support], setcounter, addtocounter, value [inside set or +addto counter], arabic, the, stepcounter, newline, verb[*], bfseries, +itshape, ttfamily, textsc, ensuremath, listoftables, listoffigures, +newtheorem [no optional arguments permitted], today, printindex, +boldmath, unboldmath, newfont, thanks, makeindex, index. +.in +.fi +.PP +Hypertext cross-references within the document are automatically +generated by (e.g.) ref, and tableofcontents. +.PP +When \fItth\fP encounters TeX constructs that it cannot handle either +because there is no HTML equivalent, or because it is not clever +enough, it tries to remove the mess they would otherwise cause in the +HTML code, generally giving a warning of the action if it is not sure +what it is doing. +Untranslatable TeX math tokens are inserted verbatim. +.SH "Independence of [La]TeX installation and the -L switch" +A major difference between \fItth\fP and \fIlatex2html\fP is that \fItth\fP +does not call the \fIlatex\fP or \fItex\fP programs at all by default, +and is not specifically dependent upon these, or indeed any other +(e.g. \fIperl\fP), programs being installed on the translating system. +Its portability is therefore virtually universal. +.PP +Forward references in LaTeX are handled by multiple passes that write +auxiliary files. \fItth\fP does only a single pass through the source. +If you want \fItth\fP to use LaTeX constructs (e.g. tableofcontents, +bibliographic commands, etc.) that depend on auxiliary files, then +you do need to run LaTeX on the code so that these files are +generated. Alternatively, the \fItth\fP switch -a +causes \fItth\fP automatically to attempt to run \fIlatex\fP on the file, +if no auxiliary file .aux exists. +.PP +When run specifying a filename on the command line as a non-switch argument, +x \fItth\fP constructs the name of the expected auxiliary LaTeX files in the +usual way and looks for them in the same directory as the file. +If you are using \fItth\fP as a filter, you must tell \fItth\fP , using the +switch -Lfilename, the base file name of these auxiliary files +(which is the name of the original file omitting the extension). If +\fItth\fP cannot find the relevant auxiliary file because you didn't +run LaTeX and generate the files or didn't include the switch, then it +will omit the construct and warn you. +Forward references via ref will not work if the .aux file is +unavailable, but backward references will. The -L switch with no +filename may be used to tell \fItth\fP that the document being translated +is to be interpreted as a LaTeX file even though it lacks the usual +LaTeX header commands. This may be useful for translating single +equations that (unwisely) use the \\frac command. +.SH "BibTeX bibliographies" +\fItth\fP supports bibliographies that are created by hand using +\\begin{thebibliography} etc. Such bibliographies do not require +anything beyond the .aux file. \fItth\fP also supports +bibliographies created using BibTeX from a biblography database. The +filename.bbl file is input at the correct place in the document. +However, this filename.bbl is not created +automatically by \fIlatex\fP. In addition to running \fIlatex\fP on the source +file to create the auxiliary file, you must also execute +bibtex filename in the same directory, to create the +filename.bbl file, and then run \fIlatex\fP again to get the +references right. (This is, of course, no more than the standard +procedure for using \fIbibtex\fP with \fIlatex\fP but it must be done if you +want \fItth\fP to get your bibliography right). If you don't create the + .bbl file, or if you create it somewhere else that \fItth\fP does not +search, then naturally \fItth\fP won't find it. Since the BibTeX process +is relatively tortuous, \fItth\fP offers an alternative. Using the -a +switch with \fItth\fP will cause it to attempt to generate the required .bbl +file automatically using \fIbibtex\fP and \fIlatex\fP. +.PP +There are many different styles for bibliographies and a large number +of different LaTeX extension packages has grown up to implement +them, which \fItth\fP does not support. More recently, a significant +rationalization of the situation has been achieved by the package +natbib. \fItth\fP has rudimentary support built in for its +commands \\citep and citet in the default author-date +form without a second optional argument. A style file for +natbib is distributed with TTHgold which makes it possible to +accommodate most of its more useful styles and commands and easily switch from +author-date citation to numeric citation. +.SH "Indexing" +\fItth\fP can make an extremely useful hyperlinked index using LaTeX automatic +indexing entries. But indexing an HTML document is different +from indexing a printed document, because a printed index refers to +page numbers, which have no meaning in HTML because there are no page +breaks. TTH indexes LaTeX documents by section number rather +than by page; assuming, of course, that they have been prepared with +index entries in the standard LaTeX fashion. +.PP +\fItth\fP will construct an index based on the standard LaTeX commands +"\\makeindex" and "\\index{...}", and automatically process it and read it +in when "\\printindex" is encountered. The command line for calling the +makeindex program (not part of this distribution) may be changed using +the +.I -x +switch. For a file without the "\\makeindex" command, tth will write no +index files, just read in an existing one "file.ind" if it exists. +.SH "Graphics inclusion: epsfbox/includegraphics" +.PP +The standard way in plain TeX to include a graphic is using the epsf +macros. The work is done by \\epsfbox{file.ps} which +.I tth +can parse. By +default +.I tth +produces a simple link to such a postscript file, or indeed any format file. +.PP +Optionally TTH can use a more appropriate graphics format, by using +.I ps2gif +or +.I ps2png +to convert the postscript file to a png or gif file, "file.png" or file.gif" +When the switch -e1 or -e2 is specified, if +``file.png'', ``file.gif'' or ``file.jpg'' already exists in the same +directory as implied by the reference to ``file.ps'' then no +conversion is done and the file found is used instead. That graphics +file is then automatically either linked (-e1) or inlined (-e2) in the +document. If no such file is found, TTH tries to find a postscript +file with extension that starts either .ps or .eps and convert it, +first using ps2png then, if unsuccessful, ps2gif. By popular request, +a third graphics option -e3 for generating icons is now available. +.PP +The LaTeX command \\includegraphics{...} and the older +\\[e]psfig{file=...} are treated the same as \\epsfbox. +Their optional arguments are ignored. +.SH "Picture Environments" +The picture environment cannot be translated to HTML. Pictures using +the built-in LaTeX commands must be converted to a graphics file such +as a gif or png, and then included using \\includegraphics. The switch -a, +causes \fItth\fP to attempt automatic picture conversion using +\fIlatex2gif\fP. +.SH OPTIONS +.TP +.B -a +attempt automatic conversion of picture environments. Default omit. +.TP +.B -c +prefix header "Content-type: text/HTML" (for direct web serving). +.TP +.B -d +disable definitions with delimited arguments. Default enable. +.TP +.BR -e ? +epsfbox handling: +.B -e1 +convert figure to png/gif using user-supplied ps2png/ps2gif. +.B -e2 +convert and include inline. +.B -e2 +as e2 but with icon. +.B -e0 +(default) no conversion, just ref. +.TP +.BR -f ? +sets the depth of grouping to which fractions are constructed built-up +.B f5 +(default) allows five levels built-up, +.B f0 +none, +.B f9 +lots. +.TP +.B -g +don't guess an HTML equivalent for font definitions, just remove. +.TP +.B -h +print some help. +.B -? +print usage +.TP +.B -i +use italic font for equations (like TeX). Default roman. +.TP +.B -j? +use index page length ?. Default 20 lines. -j single column. +.TP +.B -Lfile +tells \fItth\fP the base file (no extension) for LaTeX auxiliary input. +.TP +.B -n? +HTML title format control. 0 raw. 1 expand macros. 2 expand eqns. +.TP +.B -ppath +specify additional directories (path) to search for input files. +.TP +.B -r +output raw HTML (no preamble or postlude) for inclusion in other HTML. +.TP +.B -t +permit built-up items in textstyle equations. Default in-line items only. +.TP +.B -u +unicode character encoding. (Default iso-8859-1). +.TP +.B -v +give verbose commentary. +.TP +.B -V +even more verbose (for debugging). +.TP +.B -w? +HTML writing style. Default no head/body tags. -w -w0 no title. +-w1 single title only, head/body tags. -w2 XHTML. +.TP +.B -xmakindxcmd +specify a non-standard makeindex command line. +.TP +.B -y? +equation style: bit 1 compress vertically; bit 2 inline overaccents. + +.SH "SEE ALSO" +The tth manual which is more likely to be up-to-date. +.B http://hutchinson.belmont.ma.us/tth/manual.cgi +(or preferably your local copy). In addition reading the man pages for +\fIlatex\fP, \fIlatex2html\fP, \fItex\fP and \fImakeindex\fP +might be useful. +.SH "Browser Problems" +\fitth\fP translates (La)TeX into standard HTML and takes account as far as +possible of the idiosyncrasies of the major browsers. Nevertheless, +there are several problems that are associated with the +browsers. Authors and publishers should recognize that these are +not \fitth\fP bugs. +.PP +Many of the most serious difficulties of Mathematics rendering in HTML +are associated with the need for extra symbols. In addition to various +Greek letters and mathematical operators, one needs access to the +glyphs used to build up from parts the large brackets matching the +height of built-up fractions. These symbols are almost universally +present on systems with graphical browsers, which all have a +``Symbol'' font, generally based on that made freely available by +Adobe. The problem lies in accessing the font because of +shortcomings in the browsers and the HTML standards that relate to font use. +.PP +For more information please read the section "Browser Problems" in the +manual. +.SH AUTHOR +.PP +.I tth +is copyright (c) 1997-2002 Ian Hutchinson (hutch@psfc.mit.edu). +.SH LICENSE +.PP +You may freely use this software for non-commercial purposes. +It may not be used for commercial purposes without an additional +license. +If you distribute any copies, you must include this file and these +conditions must apply to the recipient. +No warranty of fitness for any purpose whatever is given, intended, or +implied. +You use this software entirely at your own risk. If you choose to use +tth, by your actions you acknowledge that any direct or consequential damage +whatever is your responsibility, not mine. + + For details see http://hutchinson.belmont.ma.us/tth/. +.SH ACKNOWLEDGEMENTS +.PP +Many thanks for useful discussions and input to +Robert Curtis, Ken Yap, Paul Gomme, Bruce Lipschultz, Mike Fridberg, +Michael Sanders, Michael Patra, Bryan Anderson, Wolfram Gloger, +Ray Mines, John Murdie, David Johnson, Jonathan Barron, Michael +Hirsch, Jon Nimmo, Alan Flavell, Ron Kumon. + + + + diff --git a/ivoatex/tth_C/tth.c b/ivoatex/tth_C/tth.c new file mode 100644 index 0000000..32ef2fc --- /dev/null +++ b/ivoatex/tth_C/tth.c @@ -0,0 +1,28979 @@ +/* TtH TeX to HTML translator. +TtH Version +"4.13" + (c) Ian Hutchinson +Sun Dec 17 17:43:50 EST 2017 +*/ + +#line 3 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include <inttypes.h> +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 1316 +#define YY_END_OF_BUFFER 1317 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[11276] = + { 0, + 1239, 1239, 1239, 1239, 1239, 1239, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 150, 150, 1019, 1019, 0, 0, 1019, 1019, 1026, 1026, + 0, 0, 0, 0, 522, 522, 866, 866, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 839, 839, 0, 0, 856, 856, + 0, 0, 1239, 1239, 0, 0, 679, 679, 0, 0, + 0, 0, 1239, 1239, 512, 512, 1239, 1239, 1237, 1237, + + 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 795, 795, + 606, 606, 0, 0, 0, 0, 0, 0, 0, 0, + 820, 820, 0, 0, 0, 0, 0, 0, 0, 0, + 1239, 1239, 1239, 1239, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1317, 1240, 1239, 761, 761, 1240, 1240, 1053, 102, 673, + 1240, 1240, 1135, 1133, 1240, 1240, 883, 742, 887, 1069, + + 748, 748, 1239, 1240, 755, 759, 759, 1053, 1240, 968, + 1242, 1316, 968, 99, 968, 967, 1044, 1316, 101, 1044, + 1043, 1040, 1040, 1039, 1036, 1034, 1033, 1033, 99, 1036, + 1032, 1238, 1042, 1042, 1238, 1011, 1010, 1136, 1112, 1134, + 1132, 1238, 1235, 1042, 20, 1238, 1207, 99, 1207, 972, + 1003, 1207, 970, 1207, 1001, 643, 1041, 643, 643, 132, + 132, 99, 132, 100, 132, 139, 139, 139, 100, 139, + 141, 141, 161, 161, 158, 158, 154, 153, 153, 150, + 152, 154, 1241, 1019, 1018, 1018, 1241, 1022, 1021, 1020, + 1241, 1316, 1024, 1316, 1019, 1018, 1018, 1241, 1017, 1241, + + 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, + 1027, 1026, 1025, 1025, 894, 894, 101, 894, 890, 891, + 961, 960, 959, 959, 961, 529, 522, 522, 522, 529, + 524, 524, 195, 871, 866, 865, 865, 101, 871, 867, + 869, 868, 1316, 1316, 1316, 1316, 1316, 101, 1316, 1316, + 874, 881, 877, 876, 876, 878, 879, 741, 990, 989, + 989, 990, 986, 862, 1299, 1299, 1297, 843, 843, 837, + 837, 847, 839, 839, 844, 845, 847, 847, 847, 855, + 855, 860, 856, 860, 858, 856, 860, 857, 806, 805, + 803, 100, 801, 806, 1053, 1240, 695, 688, 689, 689, + + 100, 695, 694, 684, 679, 678, 678, 100, 684, 183, + 182, 100, 183, 809, 1316, 670, 1240, 1229, 1239, 165, + 165, 512, 516, 1229, 1229, 236, 102, 180, 292, 515, + 322, 517, 331, 516, 332, 511, 1229, 212, 213, 1229, + 194, 297, 197, 1069, 1053, 1240, 1238, 1238, 1237, 761, + 1238, 1238, 1049, 102, 673, 1238, 1238, 1135, 1133, 1238, + 1238, 194, 742, 197, 1069, 1239, 761, 761, 1053, 102, + 1240, 1239, 761, 761, 102, 1240, 1238, 1053, 1238, 795, + 883, 887, 607, 1238, 606, 99, 990, 988, 1207, 101, + 1207, 998, 1000, 997, 1207, 999, 993, 991, 992, 993, + + 822, 820, 818, 818, 817, 822, 821, 819, 1301, 1302, + 1301, 1301, 1301, 983, 983, 983, 982, 1310, 1308, 1310, + 1313, 1312, 1311, 1311, 1312, 77, 47, 47, 77, 77, + 1053, 77, 77, 77, 77, 77, 1240, 77, 883, 77, + 77, 1240, 591, 590, 592, 1029, 1029, 1029, 1029, 1315, + 1315, 1315, 1315, 1315, 545, 532, 533, 544, 543, 534, + 545, 535, 542, 640, 640, 640, 29, 30, 29, 29, + 669, 664, 661, 663, 669, 660, 668, 100, 665, 668, + 666, 935, 937, 950, 950, 947, 950, 942, 930, 658, + 648, 647, 647, 656, 651, 658, 650, 653, 649, 1243, + + 747, 747, 746, 746, 1046, 101, 1046, 103, 103, 1207, + 971, 1002, 1207, 89, 553, 1063, 1061, 1061, 1061, 1063, + 1239, 0, 0, 0, 761, 1186, 1187, 1188, 1083, 1089, + 1094, 1102, 1109, 1185, 1119, 1130, 1144, 1153, 1166, 1161, + 1164, 1189, 0, 0, 1060, 102, 102, 102, 1190, 1221, + 1072, 1071, 1219, 0, 1215, 1214, 1204, 1113, 0, 1055, + 895, 1071, 1252, 0, 1220, 0, 1167, 1073, 1155, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1100, 1104, + 1296, 1105, 1296, 1296, 548, 677, 1124, 1218, 0, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1151, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1216, 1217, 1157, 1191, 748, 1239, 0, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1100, 1104, + 1296, 1105, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1151, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 759, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 0, 99, 99, 99, + 1202, 969, 0, 1043, 101, 101, 101, 1045, 1044, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 0, + 0, 1033, 1035, 1035, 1035, 1035, 1042, 1236, 0, 0, + + 0, 19, 18, 18, 18, 18, 18, 18, 18, 0, + 972, 1003, 1206, 1206, 972, 1003, 1041, 0, 0, 117, + 0, 0, 0, 100, 100, 100, 0, 0, 0, 0, + 0, 0, 162, 157, 150, 151, 151, 151, 151, 151, + 151, 151, 1019, 1018, 1022, 1021, 1023, 1023, 1024, 1024, + 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1018, 1017, 1015, 1015, 1012, 0, 0, 1027, 1026, + 1025, 1205, 892, 893, 959, 0, 0, 0, 0, 522, + 522, 527, 527, 527, 527, 527, 527, 525, 526, 866, + 865, 1203, 870, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 101, 101, 101, 101, 0, 1203, 969, + 876, 880, 878, 989, 984, 985, 987, 0, 1298, 841, + 836, 839, 844, 845, 846, 846, 0, 0, 854, 854, + 854, 854, 856, 856, 0, 858, 0, 856, 859, 804, + 0, 0, 0, 1296, 1296, 689, 700, 700, 700, 700, + 700, 700, 700, 700, 700, 700, 679, 678, 683, 683, + 683, 683, 683, 683, 188, 188, 188, 188, 188, 188, + 0, 0, 1296, 1296, 1239, 0, 518, 0, 165, 512, + 518, 0, 0, 198, 0, 292, 517, 333, 518, 335, + 511, 1071, 514, 514, 514, 514, 238, 238, 0, 1167, + + 1155, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1100, 1104, 1228, 1105, 1228, 1228, 1228, 1228, + 1228, 1228, 190, 202, 514, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1151, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 300, 327, 0, 1048, 0, 1237, 1051, 1296, 1296, 1239, + 0, 0, 0, 761, 1060, 102, 102, 102, 1296, 1296, + 1239, 0, 0, 0, 761, 102, 102, 102, 1296, 1296, + 1296, 1296, 1296, 796, 796, 796, 796, 796, 796, 796, + 796, 0, 0, 1124, 0, 1296, 1157, 795, 1296, 606, + + 1208, 0, 0, 0, 0, 0, 0, 0, 820, 818, + 817, 817, 817, 824, 824, 1302, 1303, 1304, 0, 1300, + 0, 0, 0, 977, 977, 977, 977, 977, 977, 977, + 977, 1308, 1308, 1308, 1309, 1311, 77, 0, 47, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 0, 66, 77, + 77, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 65, 65, 65, 77, + + 0, 0, 1296, 1296, 1296, 1296, 1296, 1296, 1151, 1296, + 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 530, 531, 0, + 0, 0, 30, 0, 0, 667, 951, 951, 947, 0, + 951, 942, 0, 647, 0, 0, 746, 746, 1047, 1046, + 1047, 1047, 1047, 1047, 1047, 1047, 1209, 1209, 104, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1057, 0, 0, 0, 0, 0, 102, 0, 0, 0, + 1221, 1071, 1294, 0, 1084, 1090, 1095, 1103, 1110, 0, + 1120, 1131, 1145, 1154, 1162, 1165, 0, 0, 1077, 1170, + + 1086, 1092, 1173, 1098, 1174, 1106, 1111, 1175, 0, 1116, + 1178, 1126, 1140, 1181, 1149, 1182, 1158, 1163, 1183, 0, + 1071, 1176, 1184, 0, 0, 0, 0, 0, 1167, 1073, + 1296, 1296, 1296, 1296, 1081, 1076, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 0, 1296, 1296, 1296, 1296, 1296, 677, 677, + 0, 1078, 1087, 1093, 1099, 1107, 0, 1117, 1127, 1142, + 1150, 1159, 1079, 1088, 1091, 1097, 1108, 0, 1115, 1128, + 1137, 1148, 1160, 1122, 1296, 1296, 1114, 1296, 1296, 1296, + 1296, 1296, 1296, 901, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 676, 1296, 1296, 1296, 1296, + 1296, 1261, 1296, 1296, 1296, 1296, 608, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 126, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1259, 1296, 156, 1296, 1296, 905, 1296, 1296, 0, + 1296, 1296, 1296, 1296, 1296, 0, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1151, 1296, 1296, 1296, 133, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 913, 1296, 1296, 0, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 906, 1296, 1296, 1168, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 908, 1296, 1296, 1296, 1296, 0, 1296, + 1296, 1296, 1296, 1129, 1296, 1296, 1296, 1296, 1260, 1296, + 1082, 1096, 1101, 1118, 1147, 1152, 0, 1081, 1076, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1122, + 1296, 1296, 1114, 1296, 1296, 1296, 1296, 1296, 1296, 901, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 676, 1296, 1296, 1296, 1296, 1296, 1261, 1296, 1296, + 1296, 1296, 608, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 126, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1259, 1296, 156, + 1296, 1296, 905, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 133, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 913, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 906, 1296, 1296, 1168, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 908, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1129, 1296, 1296, 1296, 1296, 1260, + 1296, 1296, 1296, 1296, 1296, 1296, 905, 1296, 1296, 1296, + 0, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + + 1045, 1045, 1045, 1045, 1045, 1043, 0, 1037, 1037, 1037, + 1037, 0, 0, 0, 3, 18, 18, 4, 6, 5, + 18, 18, 18, 18, 0, 0, 0, 131, 119, 0, + 0, 138, 135, 134, 0, 151, 151, 151, 151, 151, + 151, 1023, 1015, 0, 0, 0, 0, 527, 125, 155, + 527, 527, 0, 870, 0, 0, 0, 873, 101, 0, + 846, 0, 0, 854, 854, 854, 807, 0, 0, 0, + 1296, 1296, 700, 700, 700, 125, 700, 155, 700, 700, + 700, 700, 683, 125, 155, 683, 683, 188, 125, 155, + 188, 188, 811, 0, 0, 671, 908, 0, 0, 0, + + 513, 0, 0, 0, 1071, 1292, 0, 0, 0, 0, + 1167, 1228, 1228, 1228, 1228, 1081, 1076, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 288, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 274, 460, 1228, 421, 286, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 273, 1228, 190, 190, 0, 1122, + 1228, 1228, 1228, 1114, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 901, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 192, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 608, + + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 126, + 1228, 1228, 1228, 1228, 1228, 383, 336, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 156, 1228, 1228, 395, 1228, 905, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 382, 1228, 452, + 1228, 334, 453, 1228, 1228, 1228, 1228, 1228, 1228, 345, + 253, 1228, 389, 398, 1228, 254, 1151, 1228, 1228, 1228, + 1228, 1228, 133, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 256, 344, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 913, 1228, 1228, 1228, 1228, + + 1228, 1228, 1228, 1228, 1228, 906, 1228, 1228, 1228, 1168, + 1228, 1228, 1228, 1228, 1228, 1228, 408, 1228, 908, 1228, + 1228, 1228, 1228, 0, 1228, 1228, 1228, 1228, 1228, 1129, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 284, 1228, 255, + 1228, 327, 0, 0, 1296, 908, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 0, 0, 0, 905, 1296, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, + 0, 0, 0, 1296, 1296, 1296, 905, 1296, 908, 797, + 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, + + 797, 797, 797, 797, 797, 797, 908, 797, 797, 797, + 908, 996, 0, 0, 0, 995, 0, 0, 824, 0, + 0, 0, 0, 977, 977, 125, 977, 155, 977, 977, + 977, 77, 77, 67, 77, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 905, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 65, 65, 65, 65, 65, 65, 0, 0, + 0, 1296, 1296, 1296, 71, 70, 1296, 1296, 68, 1296, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 663, 951, 0, 951, 0, 0, 0, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1068, 1068, 1146, 0, 0, + 1170, 1173, 1174, 1175, 1141, 1178, 1181, 1182, 1183, 1170, + 1173, 1174, 1175, 1178, 1181, 1182, 1183, 1176, 1184, 0, + + 0, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1199, 1296, 1296, 1296, 1296, 1296, 1296, 1172, + 1296, 95, 1296, 1296, 1296, 0, 677, 1143, 1138, 1122, + 1296, 1296, 1296, 1296, 98, 1296, 1296, 1296, 1296, 901, + 1296, 1296, 1296, 1296, 1296, 1296, 1268, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 434, + 1296, 863, 1296, 1296, 1296, 1258, 1296, 1296, 1296, 1296, + 608, 1296, 1291, 1296, 1296, 1296, 1296, 1296, 1296, 126, + 126, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 952, 1256, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 160, 1296, 1296, 1296, 1296, + 905, 1296, 1296, 1296, 1296, 0, 0, 0, 0, 1296, + 1296, 1296, 1296, 861, 1296, 1296, 1296, 1180, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 760, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 913, 1296, 1296, 1296, 0, 0, 1296, 1296, + 1296, 1296, 1296, 1296, 939, 1296, 1296, 1296, 1296, 906, + 1296, 1296, 1296, 1296, 1168, 1296, 1296, 1296, 1296, 852, + + 1296, 1296, 1296, 1296, 1296, 908, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1129, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1257, 1296, 0, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1199, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 95, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 98, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1268, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 434, 1296, 863, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 754, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 952, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 160, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 861, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 749, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 939, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 852, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1291, 1296, 1296, + 1296, 758, 1296, 0, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 851, 1045, 1045, 0, 1037, 1037, + 1037, 0, 0, 0, 18, 18, 18, 18, 18, 18, + 0, 0, 0, 131, 130, 119, 0, 0, 135, 0, + 106, 151, 151, 148, 151, 151, 1023, 1015, 0, 958, + 0, 0, 527, 125, 527, 527, 527, 527, 527, 159, + 527, 527, 875, 0, 101, 101, 101, 101, 0, 0, + + 872, 846, 0, 0, 0, 0, 109, 854, 854, 0, + 802, 0, 1296, 760, 700, 700, 700, 700, 700, 700, + 700, 700, 700, 159, 700, 700, 700, 700, 683, 683, + 683, 683, 683, 683, 159, 683, 683, 188, 188, 188, + 188, 188, 188, 159, 188, 188, 0, 810, 1296, 1296, + 0, 0, 0, 0, 0, 0, 0, 0, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 499, + 1228, 1228, 1199, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 288, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 277, 274, + 460, 0, 278, 286, 95, 1228, 1228, 1228, 1228, 1228, + + 1228, 1228, 1228, 1228, 273, 1228, 0, 190, 1122, 1228, + 1228, 1228, 1228, 1228, 1228, 98, 1228, 1228, 1228, 1228, + 441, 337, 1228, 1228, 1228, 1228, 495, 1228, 1228, 901, + 1228, 1228, 1228, 499, 1228, 1228, 1228, 1228, 324, 1228, + 1228, 1228, 1228, 343, 1228, 1228, 1228, 1228, 1228, 266, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 442, 444, + 0, 0, 1228, 1228, 166, 446, 1228, 342, 434, 1228, + 1228, 863, 447, 1228, 1228, 463, 1228, 448, 1228, 376, + 1228, 494, 1228, 1258, 1228, 1228, 1228, 280, 1228, 608, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 246, 1228, 1228, + + 449, 1228, 1228, 1228, 126, 1228, 1228, 1228, 1228, 1228, + 462, 1228, 383, 384, 1228, 1228, 336, 1228, 1228, 1228, + 1228, 1228, 1228, 491, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 450, 1228, 1228, 1228, 1228, 952, 1256, + 1228, 1228, 1228, 179, 1228, 1228, 1228, 1228, 1228, 1228, + 160, 1228, 1228, 395, 1228, 1228, 461, 1228, 355, 1228, + 905, 1228, 1228, 1228, 1228, 1228, 451, 1228, 1228, 1228, + 1228, 1228, 1228, 382, 1228, 1228, 381, 1228, 861, 1228, + 452, 469, 1228, 1228, 334, 453, 454, 1228, 346, 1228, + 1228, 1228, 1228, 1228, 464, 1228, 1228, 1228, 380, 465, + + 177, 345, 253, 1228, 1228, 1228, 389, 317, 388, 1228, + 398, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 254, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 760, 1228, 1228, 264, 256, 344, + 1228, 1228, 1228, 1228, 1228, 1228, 267, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 258, + 1228, 913, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 455, 1228, 939, 1228, 1228, 1228, 328, 456, 1228, 1228, + 906, 1228, 1228, 1228, 1228, 1228, 1168, 1228, 1228, 1228, + 364, 466, 1228, 1228, 458, 262, 1228, 852, 1228, 1228, + + 1228, 1228, 1228, 323, 1228, 908, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 492, 347, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1257, 1228, 1228, 284, 1228, 255, 1228, 0, 0, 1296, + 1296, 0, 0, 0, 0, 1296, 1296, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1296, 1291, 1296, 1296, + 1296, 1296, 1296, 1296, 0, 0, 0, 0, 0, 824, + 0, 0, 0, 977, 977, 977, 977, 977, 977, 977, + 977, 159, 977, 977, 977, 977, 0, 77, 65, 65, + 65, 65, 65, 1296, 1296, 1296, 63, 1296, 1296, 1296, + + 1296, 1296, 46, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 59, 1296, 1296, 1296, 71, 70, 1296, 1296, 68, 1296, + 1296, 0, 1028, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 951, 0, 0, 0, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 0, 98, 0, 0, 0, 1065, + 0, 0, 1146, 1193, 0, 1141, 1170, 1173, 1174, 1175, + 1178, 1181, 1182, 1183, 0, 0, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 94, 1296, 91, 1296, 713, 1296, 1296, + 1296, 1296, 1296, 1296, 1143, 1138, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1262, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1269, 674, 1212, 1296, 436, 1296, + 1296, 1222, 864, 1296, 1296, 128, 610, 0, 0, 1296, + 1296, 0, 1296, 1296, 1296, 1296, 954, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 919, 1200, 943, 1296, 1296, + 953, 1296, 1296, 1296, 1296, 83, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 788, 1296, 1296, 963, 1169, 1171, + 1177, 1179, 1296, 1296, 1296, 946, 1296, 1296, 1296, 1296, + + 1296, 1276, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1225, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1074, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 966, 1080, 1121, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 931, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 852, 705, 1296, + 1296, 1296, 112, 1296, 0, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 743, 743, 743, 743, 743, + + 743, 743, 743, 743, 743, 743, 1296, 939, 1296, 1296, + 940, 745, 1296, 1296, 1296, 1296, 1296, 940, 0, 1296, + 1296, 1296, 94, 1296, 91, 1296, 713, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1269, 674, 1212, 1296, 436, 1296, 1296, 1222, 864, 1296, + 1296, 128, 610, 1296, 1296, 1296, 1296, 1296, 1296, 954, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 919, 1200, + 943, 1296, 1296, 953, 1296, 1296, 1296, 1296, 83, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 750, 1296, 1296, + 963, 1296, 1296, 1296, 946, 1296, 1296, 1296, 1296, 1296, + 1276, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1225, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1074, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 966, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 931, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 705, 1296, 1296, 1296, 112, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 743, 743, 743, 743, 743, 743, 1296, 939, 1296, 1296, + 940, 745, 1296, 1296, 1296, 1296, 1296, 940, 1296, 1296, + 1296, 1296, 1296, 1296, 788, 1296, 1296, 1296, 0, 1045, + 1045, 609, 1045, 221, 221, 1045, 1045, 1045, 1045, 851, + 0, 1045, 0, 1037, 1037, 127, 0, 0, 0, 15, + 0, 18, 18, 18, 0, 18, 0, 0, 129, 0, + 137, 0, 151, 151, 148, 151, 1023, 0, 1015, 0, + 0, 127, 527, 527, 527, 527, 527, 527, 527, 0, + + 527, 0, 0, 0, 0, 0, 846, 840, 0, 854, + 107, 802, 0, 1296, 700, 127, 0, 700, 700, 700, + 700, 700, 700, 700, 700, 700, 697, 700, 127, 683, + 683, 683, 683, 683, 683, 683, 681, 127, 188, 188, + 188, 188, 188, 188, 188, 188, 810, 671, 1296, 0, + 0, 0, 0, 0, 0, 0, 0, 1228, 1228, 1228, + 1228, 1228, 499, 499, 500, 499, 1228, 94, 1228, 91, + 1228, 1228, 1228, 1228, 713, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 277, 0, 0, 278, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 301, 1228, 1228, 1228, 1228, 1228, 1228, + + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 441, 337, 209, 1228, 1228, 1228, 495, 495, 483, 1228, + 240, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 330, 1228, 1228, 324, 1262, 1228, 1228, + 0, 287, 285, 0, 343, 1228, 1228, 341, 1228, 1228, + 1228, 266, 1228, 326, 1228, 1228, 1228, 1228, 1228, 401, + 1228, 1228, 442, 443, 444, 445, 192, 1212, 446, 1228, + 342, 1228, 436, 494, 447, 1228, 1228, 463, 0, 1228, + 448, 1228, 376, 1228, 494, 494, 1222, 481, 1228, 864, + 1228, 1228, 280, 128, 610, 1228, 0, 1228, 1228, 0, + + 1228, 1228, 1228, 1228, 498, 1228, 246, 1228, 1228, 449, + 1228, 1228, 221, 1228, 1228, 1228, 1228, 1228, 1228, 462, + 0, 384, 1228, 403, 1228, 1228, 1228, 1228, 919, 491, + 491, 478, 1200, 221, 1228, 1228, 1228, 953, 1228, 1228, + 1228, 1228, 450, 83, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 461, 0, 1228, 1228, 355, 0, 249, 788, + 1228, 1228, 1228, 1228, 451, 963, 1228, 348, 1228, 1228, + 1228, 1228, 1228, 1228, 503, 381, 1228, 1228, 1228, 469, + 0, 1228, 1228, 946, 1228, 454, 1228, 346, 1228, 1228, + + 1228, 1228, 1228, 1228, 1228, 464, 0, 221, 1228, 1228, + 1228, 380, 1228, 465, 0, 177, 1228, 1228, 1228, 317, + 388, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 0, 387, 0, 1228, 1225, + 1228, 1228, 1228, 357, 1228, 1228, 1228, 1228, 1228, 209, + 399, 1228, 1228, 1228, 1228, 1228, 325, 264, 1228, 329, + 1228, 1228, 1228, 365, 1228, 1228, 1228, 1228, 267, 1228, + 477, 1074, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 258, 1228, 1228, 1228, 966, 482, 1228, 1228, 1228, + 1228, 455, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + + 1228, 328, 1228, 456, 457, 931, 1228, 1228, 1228, 1228, + 1228, 1228, 485, 1228, 338, 1228, 1228, 364, 0, 466, + 0, 1228, 296, 1228, 458, 459, 262, 1228, 852, 1228, + 1228, 1228, 705, 1228, 1228, 323, 1228, 112, 1228, 0, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 743, 743, 743, 743, 743, 743, 743, + 743, 743, 1228, 939, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 221, 1228, 492, 492, 479, 347, 745, 298, 1228, + 1228, 1228, 1228, 1228, 940, 1228, 1228, 245, 0, 0, + + 943, 0, 0, 0, 0, 780, 1296, 1296, 0, 0, + 0, 0, 0, 0, 0, 0, 1296, 0, 1296, 785, + 1296, 1296, 1296, 0, 0, 127, 0, 0, 127, 127, + 824, 0, 0, 0, 0, 0, 0, 0, 0, 977, + 127, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 0, 977, 977, 77, 77, 65, 65, 65, 65, 65, + 1296, 1296, 1296, 1296, 64, 1296, 62, 1296, 54, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 73, 1296, 1296, 1296, + 1296, 1296, 1296, 1314, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 542, 0, 0, 0, 0, 951, + + 0, 947, 951, 0, 0, 0, 1047, 609, 1047, 1047, + 1047, 1047, 1047, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 112, 1296, 1296, 1296, 1296, 0, 32, 96, + 719, 93, 713, 712, 711, 1296, 97, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1056, 1296, 1210, 1296, 1296, 1296, 0, + 0, 0, 0, 1296, 0, 0, 0, 0, 1296, 728, + 1296, 1263, 1296, 1296, 1296, 1296, 1296, 897, 128, 128, + 1234, 1296, 1296, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1232, 1296, 1296, 1296, 1296, 111, 1296, 0, + + 827, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 0, 1296, 1296, 1296, 953, 925, 938, 703, 1296, + 769, 934, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 143, + 145, 1296, 114, 1296, 1296, 1296, 1296, 1296, 816, 1296, + 1296, 1296, 710, 1296, 1296, 1296, 1296, 964, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 567, 1296, 1296, + 1296, 1296, 1296, 34, 1075, 1296, 965, 1277, 1296, 1296, + 1296, 1296, 0, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 708, 1281, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 705, 43, 1296, 1296, 1296, 0, 0, 0, 0, + 0, 0, 0, 0, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 0, 1296, 744, + 744, 744, 744, 744, 744, 744, 1296, 744, 744, 744, + 744, 744, 744, 1272, 1296, 770, 936, 1296, 750, 32, + 96, 719, 93, 712, 711, 1296, 97, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1056, 1296, 1210, 1296, 1296, 1296, 1296, + 1296, 728, 1296, 1296, 1296, 1296, 1296, 1296, 897, 1296, + 1296, 1296, 1296, 1296, 1296, 111, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 953, 925, 938, 703, 1296, 752, 934, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 143, 145, 1296, 114, 1296, 1296, + 1296, 1296, 1296, 816, 1296, 1296, 1296, 710, 1296, 1296, + 1296, 1296, 964, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 34, 1075, 1296, + 965, 1277, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 708, 1281, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 43, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 744, 1296, 744, 744, 744, 744, 744, 1272, + + 1296, 770, 936, 1296, 1296, 1296, 1296, 1296, 1296, 769, + 1296, 1296, 1296, 708, 0, 1045, 1045, 1045, 221, 221, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 0, 1045, 0, 1037, 1037, + 127, 0, 0, 0, 0, 1007, 0, 0, 0, 18, + 18, 18, 18, 18, 18, 18, 18, 0, 18, 0, + 0, 0, 0, 151, 151, 1023, 0, 1015, 0, 0, + 0, 527, 527, 142, 144, 527, 113, 527, 0, 527, + 0, 0, 0, 882, 846, 0, 108, 800, 1296, 700, + 0, 0, 685, 700, 700, 142, 144, 700, 113, 700, + + 700, 700, 683, 683, 142, 144, 683, 113, 683, 188, + 188, 142, 144, 188, 113, 188, 188, 1296, 0, 208, + 0, 0, 0, 0, 112, 1228, 1228, 1228, 32, 500, + 500, 500, 96, 719, 270, 1228, 269, 93, 713, 712, + 1228, 711, 1228, 1228, 1228, 1228, 1228, 279, 0, 0, + 1228, 275, 271, 1228, 1228, 1228, 301, 97, 1228, 209, + 1228, 1228, 1228, 1228, 281, 239, 291, 1228, 1228, 1228, + 1228, 1228, 1228, 209, 209, 1228, 1228, 1228, 0, 1228, + 240, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 506, 330, 1228, 1228, 1228, 1210, + + 1228, 287, 285, 0, 0, 218, 1228, 341, 430, 1228, + 1228, 0, 0, 1228, 326, 1228, 0, 1228, 1228, 728, + 401, 1228, 1263, 1228, 443, 445, 1228, 1228, 1228, 431, + 242, 1228, 0, 0, 1228, 1228, 1228, 426, 427, 428, + 1228, 1228, 897, 128, 1228, 1228, 1228, 0, 0, 0, + 0, 1228, 1228, 1228, 1228, 1228, 0, 0, 0, 0, + 1292, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 385, 1228, + 1228, 1228, 111, 221, 1228, 0, 1228, 1228, 1228, 1228, + 1228, 241, 0, 0, 379, 1228, 1228, 1228, 1228, 1228, + 1228, 221, 1228, 1228, 1228, 1228, 953, 925, 938, 703, + + 1228, 769, 934, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 143, 145, 1228, 114, 1228, 1228, 282, 1228, 1228, 1228, + 0, 0, 290, 816, 0, 249, 1228, 1228, 283, 1228, + 250, 1228, 348, 1228, 710, 1228, 308, 429, 1228, 503, + 503, 1228, 1228, 1228, 1228, 378, 1228, 1228, 0, 0, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 964, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 0, 0, 1228, 1228, 1228, 1228, 0, + 0, 1228, 295, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 387, 0, + + 0, 397, 1228, 1228, 1228, 357, 0, 268, 1228, 350, + 1228, 1228, 1228, 1228, 1228, 1228, 399, 1228, 1228, 1228, + 1228, 1228, 325, 1228, 1228, 293, 1228, 365, 0, 1228, + 1228, 1228, 34, 1075, 1228, 965, 1228, 1228, 306, 1228, + 1228, 1228, 1228, 504, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 260, 400, 457, 1228, + 708, 510, 1228, 1228, 1228, 490, 490, 1228, 338, 1228, + 1228, 1228, 0, 0, 0, 1228, 296, 1228, 459, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 247, + 493, 377, 705, 43, 1228, 1228, 1228, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 257, 1228, 1228, 1228, + 221, 1228, 432, 744, 744, 744, 744, 744, 1228, 744, + 744, 744, 744, 744, 298, 1228, 1228, 770, 936, 1228, + 0, 349, 1228, 1228, 245, 0, 0, 0, 0, 780, + 0, 0, 0, 0, 781, 1296, 1296, 1296, 0, 0, + 785, 0, 0, 0, 0, 0, 0, 1296, 0, 1296, + + 784, 785, 784, 784, 784, 784, 784, 784, 784, 784, + 784, 784, 1296, 1296, 1296, 0, 0, 0, 994, 824, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 977, 975, 976, 977, + 977, 142, 144, 977, 113, 977, 977, 978, 977, 977, + 0, 77, 65, 65, 65, 65, 65, 1296, 1296, 1296, + 1296, 64, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 42, + 1296, 1296, 73, 75, 76, 74, 1296, 1296, 72, 0, + 0, 0, 536, 0, 0, 0, 537, 0, 639, 0, + 0, 0, 951, 0, 951, 0, 0, 0, 0, 1047, + + 1047, 0, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 111, 1296, 814, 1296, 1295, 0, 712, 711, 1296, + 92, 0, 0, 0, 1296, 1296, 1296, 1296, 1296, 1233, + 1233, 1296, 1296, 0, 1296, 885, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 0, 1067, 1066, 1066, 1296, + 0, 0, 0, 560, 0, 702, 1296, 1296, 1296, 28, + 1296, 1296, 889, 1296, 1296, 1296, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1296, 1296, 1296, 1296, + 1296, 827, 827, 827, 827, 827, 827, 1296, 1296, 1296, + + 1296, 1227, 1296, 1296, 1296, 1296, 0, 1296, 1296, 1296, + 0, 0, 0, 1296, 1296, 932, 1296, 1296, 147, 1296, + 1296, 1296, 116, 114, 114, 1296, 1296, 1296, 1224, 1296, + 1296, 1296, 1296, 710, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 0, 0, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 853, 1296, 1296, 962, 1296, 1296, 1296, + 1296, 1156, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 931, + 1296, 1296, 0, 955, 1296, 1296, 1296, 1296, 957, 1296, + 1296, 1296, 1296, 1296, 708, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 599, 1296, 602, 597, 1296, + 600, 605, 604, 601, 603, 1296, 1296, 1296, 1296, 902, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 88, 1296, 1296, 1296, + 1296, 1270, 1296, 1296, 1267, 1296, 1296, 0, 0, 0, + 0, 1296, 1296, 1296, 933, 0, 1296, 92, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 0, 1296, 885, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 28, 1296, 1296, 757, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1227, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 932, 1296, 1296, + 147, 1296, 1296, 1296, 116, 1296, 1296, 1296, 1224, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 853, 1296, 1296, 962, 1296, 1296, 1296, 1296, 1156, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 931, 1296, 1296, 1296, + 1296, 1296, 1296, 957, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 599, + 1296, 602, 597, 1296, 600, 605, 604, 601, 603, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 88, 1296, 1296, + 1296, 1296, 1270, 1296, 1296, 1267, 1296, 1296, 1296, 1296, + 1296, 933, 1296, 1296, 889, 1296, 1296, 1296, 1296, 1296, + 1296, 0, 1045, 27, 1045, 0, 172, 1045, 173, 170, + 176, 175, 850, 1045, 225, 227, 223, 1045, 222, 230, + 229, 226, 228, 0, 1045, 1045, 1038, 1037, 1031, 0, + + 0, 0, 0, 0, 0, 18, 7, 8, 18, 14, + 12, 10, 9, 11, 18, 0, 18, 0, 0, 0, + 0, 149, 0, 0, 1023, 0, 1015, 0, 958, 0, + 146, 527, 115, 113, 523, 0, 0, 527, 0, 0, + 875, 0, 846, 0, 1296, 0, 687, 0, 0, 0, + 0, 146, 700, 115, 700, 700, 700, 700, 146, 683, + 115, 683, 683, 146, 188, 115, 188, 188, 188, 1296, + 0, 0, 0, 111, 1228, 814, 1228, 270, 1228, 269, + 712, 272, 711, 1228, 1228, 1228, 1228, 1228, 279, 0, + 1228, 275, 271, 1228, 1228, 1228, 92, 0, 1228, 1228, + + 1228, 281, 239, 291, 1228, 386, 438, 439, 440, 433, + 1228, 1228, 476, 1233, 1233, 1228, 1228, 0, 1228, 885, + 1228, 1228, 1228, 1228, 358, 359, 1228, 1228, 1228, 360, + 1228, 1228, 1228, 1228, 340, 1228, 430, 1228, 1228, 1067, + 209, 1228, 0, 1228, 1228, 1228, 1228, 28, 435, 1228, + 431, 242, 1228, 0, 0, 1228, 1228, 1228, 426, 427, + 428, 1228, 889, 1228, 1228, 1228, 1228, 0, 0, 0, + 0, 1228, 1228, 1228, 1228, 1228, 497, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 385, 1228, 316, 1228, 1228, 1228, + 1228, 1228, 315, 1228, 241, 0, 0, 379, 505, 1228, + + 1228, 1228, 1228, 0, 1228, 1228, 1228, 1228, 0, 1228, + 1228, 932, 1228, 1228, 147, 1228, 1228, 1228, 116, 114, + 1228, 1228, 282, 1228, 1224, 1228, 0, 0, 290, 0, + 1228, 1228, 283, 1228, 250, 251, 310, 710, 304, 302, + 308, 429, 1228, 1228, 1228, 1228, 1228, 1228, 378, 309, + 0, 0, 467, 367, 468, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 407, 172, 1228, 173, 1228, + 170, 176, 175, 1228, 0, 0, 1228, 1228, 1228, 1228, + 0, 0, 1228, 1228, 295, 1228, 1228, 1228, 1228, 1228, + 0, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + + 1228, 396, 0, 397, 853, 1228, 1228, 0, 268, 962, + 350, 352, 351, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1156, 293, 1228, 0, 402, 1228, + 1228, 1228, 1228, 311, 305, 303, 306, 1228, 1228, 931, + 307, 504, 504, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 957, 1228, 1228, 1228, 1228, 1228, 260, 400, 1228, 708, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 391, 1228, + 0, 0, 0, 393, 1228, 1228, 1228, 225, 1228, 227, + 223, 1228, 222, 230, 229, 226, 1228, 228, 1228, 247, + 493, 493, 480, 377, 1228, 1228, 1228, 0, 0, 191, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 88, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 0, 1228, 265, 257, 259, 1228, 1228, 1228, 432, 1228, + 1228, 933, 349, 1228, 1228, 211, 0, 0, 0, 0, + 780, 1296, 1296, 1296, 0, 0, 785, 0, 0, 785, + 0, 785, 0, 0, 1296, 0, 1296, 1296, 1296, 1296, + 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 977, 146, 977, 115, 977, 973, 977, 977, 77, 77, + 65, 65, 65, 65, 1296, 0, 1296, 1296, 1296, 0, + 1296, 1296, 1296, 1296, 1296, 1296, 51, 1296, 1296, 75, + 76, 74, 1296, 1296, 72, 0, 540, 534, 538, 541, + 535, 539, 0, 0, 0, 947, 942, 0, 942, 0, + 0, 27, 1047, 172, 1047, 173, 170, 176, 175, 1047, + 87, 1047, 1047, 1062, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1296, 1296, 832, 90, 1139, 0, 1296, + 1296, 838, 1296, 1226, 1296, 1296, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1231, 1296, 1296, 1296, 1296, 1296, 772, + 1296, 1248, 1296, 1296, 1296, 1296, 1067, 1067, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 1296, 1296, + 1296, 1296, 827, 827, 827, 827, 827, 1296, 1296, 1296, + 1296, 0, 1296, 0, 0, 1296, 799, 1296, 1296, 945, + 1223, 1296, 928, 0, 924, 1296, 932, 1296, 1296, 122, + 124, 120, 116, 116, 123, 1296, 815, 1296, 1296, 903, + 1201, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 955, + + 1296, 1296, 1296, 1296, 774, 1296, 1296, 1296, 1296, 1296, + 1296, 0, 1211, 1296, 1266, 1296, 1296, 1296, 1296, 1296, + 853, 1296, 1296, 1296, 1296, 1296, 1226, 1156, 1296, 1271, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 0, 1296, 914, + 1296, 1296, 956, 1296, 1296, 1296, 1296, 904, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 902, 1289, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 84, 1296, 1296, 1296, 1296, 568, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1264, + 911, 1296, 0, 0, 808, 0, 849, 940, 1296, 1296, + 1296, 933, 0, 90, 1296, 1296, 838, 1296, 1226, 1296, + 1296, 0, 1296, 1296, 1296, 1296, 1296, 753, 1296, 1248, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 36, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1223, 1296, 928, 924, + 1296, 1296, 1296, 122, 124, 120, 123, 1296, 815, 1296, + 1296, 903, 1201, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 955, 1296, 1296, 1296, 1296, 753, 1296, 1296, 1296, + + 1296, 1296, 1296, 1211, 1296, 1266, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1226, 1296, 1271, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 914, 1296, 1296, + 1296, 1296, 1296, 904, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 84, 1296, 1296, 1296, 1296, 568, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 911, 1296, 1296, 1296, 1296, 1296, 772, 1296, + 1296, 1296, 774, 1296, 1296, 0, 1045, 1045, 235, 174, + + 850, 1045, 1045, 0, 1045, 1045, 1037, 0, 0, 0, + 0, 0, 0, 18, 18, 16, 0, 18, 0, 0, + 0, 0, 149, 0, 848, 1023, 0, 1015, 0, 0, + 121, 115, 0, 0, 527, 0, 875, 846, 0, 1296, + 0, 0, 0, 121, 700, 700, 696, 700, 121, 683, + 683, 121, 188, 188, 188, 1296, 0, 0, 0, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 90, 0, 1228, 424, + 1228, 276, 1228, 1228, 838, 1228, 386, 438, 439, 440, + 433, 1228, 1226, 0, 1228, 1228, 0, 0, 1228, 1228, + 1228, 1228, 1228, 358, 0, 359, 0, 1228, 1228, 772, + + 360, 0, 1228, 1228, 1228, 1228, 340, 1228, 1228, 1228, + 1228, 1228, 1067, 1228, 1228, 1228, 1228, 1228, 437, 1228, + 0, 339, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 0, + 0, 0, 0, 0, 1228, 36, 1228, 243, 1228, 1228, + 1228, 1228, 939, 1228, 1228, 1228, 1228, 316, 1228, 1228, + 1228, 1228, 1228, 315, 1228, 0, 1228, 0, 1228, 1228, + 1228, 235, 1223, 1228, 928, 1228, 924, 1228, 1228, 1228, + 122, 118, 118, 124, 120, 116, 123, 1228, 815, 1228, + 0, 0, 1228, 903, 1201, 251, 252, 310, 304, 302, + 1228, 1228, 1228, 163, 1228, 1228, 309, 0, 467, 0, + + 367, 468, 0, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 955, 1228, 1228, 174, 0, 0, 470, 0, 0, + 216, 0, 1228, 1228, 774, 1228, 0, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1211, 1228, 189, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 396, 0, 853, 1228, 1228, 0, + 352, 351, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 289, 1226, 219, 1156, 1228, 0, 402, 1228, 1228, 1228, + 1228, 311, 305, 303, 1228, 1228, 1228, 307, 1228, 1228, + 1228, 914, 1228, 1228, 956, 1228, 1228, 1228, 1228, 1228, + 904, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 391, + + 1228, 1228, 0, 0, 393, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 84, 1228, 1228, 1228, 1228, 568, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1264, 411, 1228, 911, 263, 1228, + 0, 1228, 265, 259, 1228, 1228, 1228, 1228, 1228, 211, + 0, 0, 0, 0, 0, 0, 0, 781, 0, 779, + 782, 1296, 0, 0, 0, 0, 0, 785, 0, 0, + + 563, 0, 1296, 786, 1296, 1296, 0, 0, 0, 823, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 977, 121, 977, 973, + 977, 977, 0, 77, 65, 65, 1296, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1231, 1296, 1296, 53, 0, 0, + 1296, 58, 64, 1296, 1296, 57, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 0, 0, 0, 0, 0, 0, 0, + 1047, 174, 1047, 1047, 1047, 0, 0, 0, 0, 0, + 0, 1307, 1058, 0, 1296, 1296, 1192, 1296, 1296, 566, + + 1226, 1226, 1296, 1296, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 900, 1265, 1296, + 1296, 771, 916, 1296, 1296, 1296, 569, 1067, 1296, 729, + 1296, 1296, 1296, 888, 1290, 1296, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 1296, + 1296, 827, 827, 827, 827, 827, 827, 827, 1296, 1293, + 792, 0, 0, 1296, 0, 1296, 1296, 1296, 45, 0, + 1296, 1296, 1296, 122, 122, 124, 124, 120, 120, 123, + 123, 1296, 1296, 1296, 789, 903, 1296, 1296, 764, 1296, + + 1296, 1296, 1296, 1254, 1296, 1296, 1296, 910, 773, 1296, + 918, 1278, 1296, 835, 1296, 0, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 909, 0, 955, 1296, 576, + 1296, 1296, 1296, 0, 0, 0, 0, 915, 904, 1296, + 1296, 1296, 0, 0, 0, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 907, 0, 0, 0, + 944, 0, 0, 0, 0, 0, 0, 0, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 0, 1287, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 766, 1296, 911, 1296, 0, 0, 1296, 1296, + 1296, 0, 1296, 1296, 566, 1296, 1296, 0, 900, 1296, + 1296, 753, 916, 1296, 1296, 1296, 1296, 729, 1296, 1296, + 1296, 756, 1290, 1296, 35, 1296, 1296, 1296, 1293, 792, + 1296, 1296, 1296, 1296, 45, 1296, 1296, 1296, 1296, 1296, + 1296, 751, 1296, 1296, 764, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 910, 753, 1296, 918, 1278, 1296, 835, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 909, + + 1296, 1296, 1296, 915, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 907, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 766, 1296, 1296, 1296, 1296, 1296, 771, 888, 789, + 773, 1296, 1296, 1306, 1045, 1045, 1045, 1045, 232, 765, + 1045, 1037, 0, 0, 0, 0, 0, 17, 18, 0, + 18, 0, 0, 0, 0, 1023, 0, 1015, 0, 0, + 121, 0, 0, 527, 846, 0, 1296, 0, 0, 0, + + 700, 700, 0, 974, 683, 683, 188, 188, 188, 1296, + 0, 0, 207, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 0, 1228, 1228, 276, 1228, 1228, 566, 1228, 1226, 1226, + 0, 1228, 1228, 0, 0, 900, 1228, 1228, 771, 0, + 0, 363, 1228, 0, 361, 916, 1228, 1228, 1228, 1228, + 1228, 1228, 318, 729, 1228, 1228, 0, 339, 1228, 1228, + 1228, 1228, 294, 888, 1228, 1228, 0, 0, 0, 0, + 0, 1228, 35, 243, 0, 0, 1228, 215, 1228, 1228, + 1228, 931, 1228, 1228, 1228, 1228, 1228, 792, 0, 1228, + 1228, 1228, 1228, 45, 1228, 1228, 1228, 1228, 122, 118, + + 118, 1228, 120, 178, 120, 118, 118, 1228, 1228, 1228, + 0, 0, 789, 903, 252, 1228, 1228, 1228, 764, 1228, + 0, 0, 0, 0, 0, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1254, 1228, 1228, 1228, 0, 910, 773, 1228, + 0, 1228, 1228, 918, 1228, 1228, 835, 1228, 1228, 1228, + 1228, 1228, 169, 1228, 1228, 1228, 0, 1228, 1228, 0, + 1228, 1228, 1228, 496, 1228, 1228, 299, 1228, 289, 1228, + 0, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 909, 1228, + 1228, 1228, 1228, 1228, 314, 0, 0, 915, 904, 1228, + 1228, 1228, 1228, 0, 164, 1228, 1228, 392, 1228, 0, + + 0, 394, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 907, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 231, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 0, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 766, 1228, 1228, 911, 263, 1228, + 1228, 261, 248, 1228, 1228, 1228, 0, 779, 0, 0, + 0, 0, 0, 0, 1296, 0, 0, 786, 0, 0, + 0, 0, 0, 1296, 1296, 1296, 0, 0, 0, 1305, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 587, 0, 0, 0, 0, 0, 981, 977, 977, 977, + 77, 77, 65, 65, 1296, 0, 60, 60, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1296, 1296, 53, 0, 1296, 44, 1296, 57, 0, 1296, + 1296, 50, 1296, 1296, 68, 0, 0, 0, 0, 942, + 0, 0, 1047, 1047, 765, 1047, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1296, 1296, 1296, 1247, + 1296, 1296, 0, 0, 0, 0, 0, 611, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 900, 1296, 1284, 916, + 1296, 714, 1296, 1283, 1296, 1125, 1296, 1296, 791, 0, + 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, + 0, 1296, 730, 0, 0, 827, 827, 827, 827, 827, + 827, 827, 827, 1296, 1293, 1293, 792, 0, 1296, 0, + 0, 776, 0, 0, 0, 921, 1296, 45, 0, 769, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1250, 1296, 1296, + 1296, 1296, 551, 1279, 910, 790, 1296, 1296, 1296, 110, + 1296, 1296, 0, 1296, 1296, 1296, 1296, 898, 1296, 731, + + 922, 1296, 1296, 1296, 0, 1296, 1296, 1296, 909, 0, + 1296, 1296, 1296, 1296, 0, 0, 0, 915, 1296, 777, + 1296, 0, 0, 0, 0, 1296, 1296, 1296, 1296, 720, + 1296, 727, 1296, 928, 926, 907, 0, 0, 675, 1014, + 0, 0, 105, 0, 0, 0, 1296, 1296, 1296, 1296, + 1296, 1296, 0, 0, 0, 1296, 86, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 768, 1296, 0, 1296, 1296, 1282, 751, 1296, 1247, 1296, + 1296, 0, 1296, 1296, 714, 1296, 1296, 1125, 1296, 1296, + + 791, 1296, 730, 1296, 1296, 776, 921, 1296, 769, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1250, 1296, 1296, 1296, + 1296, 551, 1279, 790, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 898, 1296, 731, 922, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 753, 1296, 1296, + 1296, 1296, 1296, 720, 1296, 727, 1296, 928, 926, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 86, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 768, 1296, 1296, 1296, 1296, 777, 1045, 1045, 0, 1045, + + 767, 1037, 1009, 0, 0, 0, 0, 18, 0, 0, + 0, 0, 0, 0, 0, 1013, 0, 0, 0, 0, + 0, 353, 0, 0, 0, 1296, 0, 0, 0, 700, + 698, 683, 682, 188, 184, 188, 1296, 519, 1228, 1228, + 425, 417, 1228, 1228, 1228, 1228, 460, 1228, 1228, 1228, + 1228, 313, 0, 1228, 1228, 0, 0, 900, 1228, 0, + 0, 363, 0, 362, 0, 361, 0, 916, 1228, 1228, + 1228, 714, 1228, 318, 1228, 1125, 0, 1228, 1228, 1228, + 1228, 412, 294, 791, 0, 0, 0, 0, 237, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 730, 1228, 1293, 1292, + + 792, 1228, 0, 776, 0, 921, 1228, 45, 320, 769, + 1228, 1228, 124, 123, 1228, 1228, 1228, 0, 0, 1228, + 1228, 404, 1228, 0, 0, 0, 0, 0, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 551, 1228, 0, + 910, 790, 0, 1228, 184, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 0, 898, 0, 1228, 1228, 1228, + 496, 496, 484, 1228, 731, 299, 922, 1228, 0, 1228, + 1228, 0, 1228, 1228, 1228, 1228, 909, 1228, 1228, 1228, + 1228, 1228, 314, 0, 915, 1228, 777, 1228, 321, 1228, + 1228, 392, 1228, 0, 0, 394, 1228, 720, 1228, 727, + + 1228, 507, 928, 926, 907, 0, 0, 0, 0, 0, + 520, 0, 0, 0, 0, 0, 0, 0, 501, 502, + 234, 1228, 1228, 1228, 1228, 1228, 1228, 0, 1228, 1228, + 86, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 354, 1228, 1228, 1228, 1228, 1228, 768, 1228, 1228, 1228, + 248, 1228, 1228, 0, 0, 0, 779, 1296, 0, 0, + 0, 0, 786, 0, 0, 1296, 1296, 1296, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 977, 0, 0, 65, 65, + + 1296, 0, 0, 60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1296, 1296, 0, 0, 0, 44, 78, 0, + 0, 1296, 1296, 50, 52, 69, 68, 543, 0, 0, + 31, 0, 0, 0, 1047, 85, 767, 0, 0, 0, + 629, 0, 0, 0, 0, 0, 0, 1296, 1296, 1296, + 1247, 884, 1296, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1296, 1296, 763, + 1296, 1296, 1296, 0, 0, 0, 0, 0, 0, 0, + + 634, 0, 0, 0, 0, 1296, 0, 0, 0, 0, + 827, 827, 827, 827, 827, 827, 827, 927, 0, 792, + 1296, 863, 0, 0, 0, 920, 0, 79, 1296, 1296, + 1296, 778, 1245, 1244, 1250, 0, 1296, 1296, 1296, 1296, + 736, 1296, 1296, 1296, 1296, 1198, 1197, 1196, 1195, 1296, + 1296, 912, 709, 1296, 554, 1296, 715, 0, 1275, 1296, + 1296, 0, 0, 0, 955, 706, 1296, 1296, 0, 0, + 775, 1296, 0, 0, 1296, 1296, 1296, 1296, 1296, 598, + 0, 0, 0, 0, 0, 0, 0, 1296, 1296, 585, + 1296, 570, 1296, 929, 37, 1296, 1296, 571, 552, 941, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 577, 1296, 1296, + 1296, 1296, 1296, 1296, 1246, 1296, 949, 917, 1296, 0, + 940, 1296, 1296, 884, 1296, 0, 1296, 1296, 763, 1296, + 1296, 1296, 1296, 927, 1296, 920, 79, 1296, 1296, 1296, + 778, 1245, 1244, 1296, 1296, 1296, 1296, 736, 1296, 1296, + 1296, 1296, 1296, 1296, 912, 709, 1296, 554, 1296, 715, + 1296, 1296, 706, 1296, 753, 1296, 1296, 1296, 1296, 1296, + 1296, 598, 1296, 1296, 585, 1296, 570, 1296, 37, 1296, + 1296, 571, 552, 941, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 577, 1296, 1296, 1296, 1296, 1296, 1296, 1246, 1296, + + 949, 917, 1296, 940, 1296, 775, 171, 1045, 0, 220, + 224, 1030, 0, 0, 0, 0, 13, 0, 980, 0, + 0, 136, 140, 1016, 0, 0, 353, 842, 0, 0, + 1296, 0, 693, 0, 0, 700, 683, 188, 188, 1296, + 1228, 1228, 1228, 1228, 1228, 1228, 460, 419, 1228, 1228, + 1247, 313, 0, 884, 1228, 0, 0, 1228, 0, 0, + 0, 362, 0, 0, 0, 171, 1228, 763, 1228, 463, + 1228, 1228, 1228, 1228, 167, 0, 0, 0, 473, 1228, + 1228, 1228, 1228, 1228, 927, 1228, 462, 920, 320, 79, + 1228, 1228, 1228, 778, 461, 366, 1228, 1228, 1228, 469, + + 0, 0, 1250, 1228, 1228, 1228, 1228, 406, 1228, 1228, + 1228, 464, 465, 1228, 736, 1228, 1228, 1228, 1228, 1228, + 1228, 912, 709, 390, 0, 0, 0, 471, 1228, 1228, + 1228, 554, 0, 1228, 715, 0, 220, 1228, 1228, 0, + 409, 706, 1228, 1228, 1228, 775, 1228, 321, 1228, 1228, + 1228, 0, 466, 1228, 1228, 224, 0, 0, 0, 0, + 0, 0, 0, 521, 0, 0, 0, 0, 0, 1228, + 1228, 585, 1228, 570, 1228, 1228, 37, 1228, 1228, 571, + 552, 941, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 577, + 1228, 1228, 486, 1228, 1228, 1228, 354, 1228, 1228, 1228, + + 949, 917, 1228, 1228, 244, 940, 1228, 1050, 0, 783, + 0, 0, 0, 0, 0, 0, 626, 787, 1296, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 979, 77, 65, + 65, 1296, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1296, 49, 0, 0, 0, + 55, 1296, 69, 0, 0, 0, 0, 1047, 0, 0, + 0, 0, 0, 778, 0, 1059, 0, 0, 1296, 0, + 558, 558, 1296, 1296, 1296, 82, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 624, 1054, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1296, 1296, 1296, 1296, 1296, 0, 0, 0, 0, 633, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 827, 827, 827, 827, 827, 827, 1296, 864, + 0, 704, 1296, 1296, 1296, 0, 0, 1296, 1296, 1296, + 1255, 733, 0, 0, 0, 1296, 0, 1296, 0, 1085, + 1123, 0, 1251, 1296, 912, 709, 1296, 1296, 0, 0, + 1296, 1296, 0, 706, 1296, 0, 0, 0, 0, 0, + 1296, 0, 0, 1296, 579, 1296, 1296, 1296, 0, 0, + + 0, 0, 0, 0, 0, 0, 2, 1296, 1296, 574, + 573, 948, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 572, + 1296, 1296, 1296, 1296, 1005, 917, 0, 0, 596, 0, + 1296, 1296, 1296, 0, 1296, 1296, 1296, 1296, 1296, 25, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1255, 1296, 1296, + 1251, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 2, 1296, 1296, 574, 573, 948, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 572, 1296, 1296, 1296, 1296, 1005, + 1296, 24, 220, 0, 0, 0, 0, 0, 1052, 0, + 0, 0, 0, 0, 24, 686, 690, 680, 185, 188, + + 1296, 1228, 1228, 1228, 1228, 1228, 1228, 414, 1228, 0, + 1228, 0, 237, 1228, 0, 0, 0, 0, 0, 0, + 1228, 1228, 463, 319, 1228, 1228, 1228, 0, 0, 0, + 1226, 1228, 1226, 1228, 25, 1228, 462, 1228, 1228, 1228, + 461, 366, 1228, 469, 0, 0, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 464, 465, 185, 0, 1228, 1228, 1228, + 1228, 912, 709, 390, 356, 1228, 1228, 1228, 0, 1228, + 220, 0, 1228, 1228, 706, 509, 1228, 0, 1228, 1228, + 1228, 0, 466, 1228, 1228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 181, 0, 0, 2, 1228, 1228, + + 1228, 574, 573, 948, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 572, 1228, 1228, 1228, 1228, 1005, 917, 413, 0, + 244, 1228, 0, 0, 626, 787, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 586, 0, 0, 0, 0, 65, + 65, 1296, 39, 0, 0, 0, 0, 0, 0, 0, + 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1296, 0, 0, 55, 1296, 0, + 0, 0, 655, 24, 0, 0, 0, 0, 0, 0, + 778, 0, 0, 831, 762, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, + 0, 632, 0, 0, 0, 0, 0, 615, 1296, 80, + 1296, 1296, 1296, 0, 0, 0, 621, 0, 0, 0, + 701, 0, 0, 0, 0, 827, 0, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, 707, 0, + 1288, 1280, 1296, 1250, 1296, 556, 1296, 0, 828, 1296, + 0, 0, 1070, 0, 0, 1251, 0, 1296, 923, 1296, + 0, 1275, 735, 1296, 0, 1296, 0, 0, 0, 0, + 0, 0, 1249, 1249, 0, 0, 0, 0, 0, 1296, + 1296, 1296, 0, 793, 0, 0, 0, 0, 0, 0, + + 722, 1296, 593, 1296, 1296, 583, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 0, 0, 0, 0, 1296, 831, + 762, 0, 1296, 80, 1296, 1296, 1296, 707, 1280, 1296, + 1296, 556, 1296, 1296, 1070, 1296, 923, 1296, 735, 1296, + 1296, 1296, 1296, 1296, 593, 1296, 1296, 583, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 220, 0, 220, + 0, 0, 0, 0, 0, 642, 0, 0, 188, 1296, + 1228, 1228, 1228, 1228, 831, 0, 762, 214, 1228, 0, + 0, 0, 0, 0, 0, 80, 1228, 319, 508, 1228, + 1228, 0, 0, 0, 1226, 1226, 1228, 707, 1228, 1228, + + 1228, 0, 0, 1228, 556, 1228, 1228, 1228, 1228, 1228, + 1070, 1251, 1228, 356, 923, 1228, 1228, 0, 1228, 0, + 220, 735, 1228, 1228, 0, 1249, 0, 1228, 374, 1228, + 1228, 233, 193, 0, 0, 0, 0, 0, 489, 0, + 203, 0, 1228, 593, 1228, 1228, 1228, 583, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 778, 0, 778, + 787, 0, 0, 564, 813, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, + + 0, 0, 60, 61, 0, 0, 1296, 0, 638, 0, + 0, 0, 621, 0, 0, 0, 0, 0, 613, 0, + 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 0, 1296, + 0, 0, 0, 1296, 1296, 0, 1230, 0, 718, 0, + 630, 0, 0, 827, 827, 0, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 707, 0, 1296, + 557, 1253, 1296, 0, 1070, 1194, 0, 0, 1273, 1296, + 0, 0, 732, 1296, 0, 0, 1296, 0, 0, 0, + 0, 0, 81, 0, 833, 1296, 1296, 312, 0, 0, + + 0, 899, 794, 23, 1296, 1296, 0, 1296, 528, 1296, + 1296, 1296, 580, 1296, 0, 0, 0, 22, 0, 1296, + 1296, 1296, 1296, 557, 1253, 1296, 1273, 1296, 1296, 1296, + 1296, 312, 1296, 1296, 1296, 528, 1296, 1296, 1296, 580, + 1296, 22, 220, 0, 1004, 0, 0, 1004, 0, 0, + 0, 188, 672, 1228, 418, 1228, 1228, 214, 0, 1228, + 0, 0, 0, 0, 0, 0, 0, 1228, 1228, 0, + 0, 168, 0, 200, 707, 1228, 1228, 467, 468, 557, + 405, 1228, 1228, 1228, 1228, 1070, 1228, 475, 1228, 375, + 1228, 220, 0, 1228, 1228, 1228, 374, 1228, 312, 0, + + 0, 199, 0, 472, 0, 488, 1228, 1228, 1228, 1228, + 528, 1228, 1228, 1228, 580, 1228, 22, 0, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, + 0, 60, 0, 0, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 56, 0, 659, 0, 0, + 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 620, 0, 636, 0, 0, 632, 0, + 0, 645, 0, 0, 0, 0, 1296, 0, 565, 0, + 0, 0, 0, 0, 623, 0, 0, 827, 0, 827, + + 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, + 827, 0, 1296, 1253, 0, 1253, 1253, 1253, 1296, 0, + 0, 1251, 737, 0, 1275, 1296, 0, 1296, 0, 0, + 0, 0, 0, 0, 0, 581, 1296, 312, 0, 826, + 0, 0, 899, 1296, 1296, 0, 721, 886, 1296, 1296, + 1296, 1296, 0, 724, 0, 0, 1296, 1296, 1296, 737, + 1296, 1296, 1296, 1296, 886, 1296, 1296, 1296, 1296, 0, + 220, 0, 0, 825, 641, 0, 196, 0, 423, 1228, + 420, 0, 1228, 0, 0, 0, 0, 0, 0, 0, + 1228, 416, 467, 468, 1228, 410, 1253, 1253, 1253, 1228, + + 474, 375, 737, 0, 220, 1228, 1228, 1228, 312, 0, + 0, 0, 0, 1228, 0, 1228, 886, 1228, 1228, 1228, + 1228, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60, 0, 60, 0, 0, 0, 60, + 0, 0, 0, 0, 0, 0, 0, 56, 637, 0, + 623, 0, 1058, 0, 834, 0, 0, 550, 0, 0, + 549, 0, 546, 0, 631, 0, 717, 0, 644, 0, + 625, 0, 0, 612, 1296, 559, 0, 0, 0, 594, + 0, 0, 827, 0, 827, 827, 827, 827, 827, 827, + + 827, 827, 827, 827, 0, 798, 33, 1253, 0, 0, + 0, 734, 1296, 1274, 1296, 830, 0, 0, 0, 0, + 0, 726, 555, 0, 0, 575, 1296, 578, 1296, 584, + 1296, 0, 716, 1296, 33, 1296, 555, 575, 1296, 578, + 1296, 584, 1296, 0, 210, 0, 1228, 214, 1228, 368, + 369, 0, 0, 370, 0, 0, 33, 1228, 1228, 1228, + 555, 204, 205, 206, 217, 575, 0, 1228, 578, 1228, + 584, 1228, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, + 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, + + 0, 0, 60, 0, 58, 0, 0, 0, 0, 0, + 622, 0, 616, 0, 0, 1296, 0, 0, 619, 827, + 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 33, 0, 0, 739, 0, 740, 0, 0, + 1286, 0, 0, 896, 0, 0, 0, 0, 1, 0, + 582, 0, 1296, 1, 582, 1008, 186, 1228, 1228, 368, + 369, 0, 0, 370, 0, 201, 1228, 187, 1, 582, + 812, 0, 0, 0, 0, 0, 0, 829, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 60, 0, 60, + 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, + + 1296, 0, 0, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 0, 33, 0, 738, 0, 0, 0, + 0, 0, 0, 0, 723, 0, 1296, 1228, 1228, 373, + 0, 371, 1228, 0, 0, 0, 0, 0, 0, 0, + 487, 0, 0, 0, 0, 0, 0, 60, 0, 0, + 0, 0, 0, 628, 547, 0, 618, 1285, 0, 0, + 827, 827, 827, 827, 827, 827, 0, 0, 0, 725, + 0, 1064, 0, 595, 422, 373, 372, 371, 415, 0, + 0, 0, 0, 0, 652, 654, 0, 0, 0, 0, + 0, 38, 0, 60, 0, 0, 0, 0, 0, 827, + + 827, 827, 0, 33, 0, 0, 0, 562, 372, 0, + 0, 0, 0, 0, 0, 0, 0, 588, 1213, 0, + 40, 0, 0, 827, 0, 0, 0, 0, 0, 0, + 0, 657, 646, 0, 0, 0, 0, 0, 0, 0, + 662, 0, 0, 0, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 699, 0, 0, 60, 0, 0, 0, + 691, 692, 26, 0, 0, 635, 0, 0, 1006, 0, + 0, 0, 0, 559, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, + 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 26, 27, 27, 27, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 40, 40, 44, 45, 46, 47, 48, + 40, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[94] = + { 0, + 1, 1, 2, 3, 4, 5, 1, 1, 6, 7, + 8, 9, 1, 1, 1, 10, 1, 1, 1, 11, + 1, 12, 12, 12, 12, 12, 12, 1, 1, 1, + 13, 1, 1, 14, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 16, 17, 18, + 19, 20, 19, 21, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, + 1, 24, 1 + + } ; + +static yyconst flex_int32_t yy_base[12007] = + { 0, + 0, 91, 16, 19, 23, 30, 39, 61, 50, 111, + 22, 47, 121, 130, 69, 72, 141, 162, 10, 12, + 183, 186, 127, 138, 25, 28, 151, 153, 174, 198, + 203, 218, 227, 230, 37, 43,36609,36607,36604,36603, + 287, 344, 401, 458, 229, 241, 515, 0, 221, 266, + 239, 269, 278, 298, 319, 330, 349, 379, 27, 56, + 437, 446, 339, 409,36657,36656, 303, 432, 49, 85, + 36594,36593, 3, 54, 596, 684, 101, 140, 527, 608, + 489, 498, 772, 863, 565, 600, 637, 641, 659, 668, + 9, 20, 59, 320, 956, 0, 237, 268, 1048, 1140, + + 672, 709, 729, 741, 750, 759, 305, 306, 1232, 0, + 1324, 0, 737, 762, 503, 520, 748, 778, 467, 789, + 811, 838, 449, 712, 297, 329, 226, 340, 560, 719, + 1415, 1506,36595,36594,36648,36647,36646,36641, 807, 820, + 852, 1087, 1102, 1105, 375, 385, 200, 335, 1100, 1101, + 638, 787, 0, 0, 0, 0, 1065, 1078, 1097, 1124, + 0, 0, 1201, 1454, 0, 0, 884, 901, 1205, 1215, + 819, 1179, 310, 398, 0, 0, 0, 0, 1059, 1219, + 36644,45164, 1426, 1435, 1445, 1587,36560,36632, 33,45164, + 36628,36617,45164,45164, 1675,36572,45164,45164,45164,45164, + + 1462, 1478, 1487, 1765,45164, 1536, 1545,45164, 845,45164, + 45164,45164,36551, 172,36622,45164,45164, 1496, 271, 1178, + 0,45164,36567,45164,45164,45164,45164,36600, 290, 1858, + 45164,45164,45164,36551, 792,45164,45164,45164,45164,45164, + 45164, 237,45164,36550,45164, 1546, 73, 368, 500,45164, + 45164,45164,45164, 822,45164,45164,45164,36549, 104,45164, + 36548, 412, 873, 426, 434,45164,36547,36463, 461, 1216, + 45164,36462,45164, 0,45164, 0,45164,45164,45164, 909, + 45164, 1487,45164, 453,45164,36540,36460, 1554, 924,45164, + 36459, 1565, 1618, 0, 1949, 1967, 1985, 1936, 1954,36454, + + 36457, 76,36468, 400,36462,36456,36452, 275,36448,36445, + 0, 491,45164,36521,45164,36520, 511, 517,45164,45164, + 45164,45164,45164,36517, 490,45164, 1069, 1082, 1091, 1538, + 36430,36429,45164,45164, 582,45164,36514, 573,36506,45164, + 45164,45164,36507, 1989, 1997, 2004, 1942, 1193, 1535, 2067, + 45164,45164,45164,45164,36511, 2152,45164,45164,45164,45164, + 36510, 601,45164,45164,45164,36452,45164,45164,36423,45164, + 0,45164, 1247, 1449, 2148, 2156,36424,36418,36413,45164, + 662,45164, 620, 2167, 2175, 623, 0,45164,45164,45164, + 45164, 632,45164, 1974, 0, 2223,45164,45164,45164,36500, + + 664, 2137,45164,45164, 650,45164,36499, 676, 1454,45164, + 45164, 680, 1403,45164, 523,45164, 477,45164, 2314, 2318, + 2327, 2331,45164, 2378,36415, 1643, 690,45164, 473,45164, + 36478, 2328,36466, 1458,36463, 0, 2466,36435,45164,36426, + 1657,45164,45164,45164,36478,36419,45164,36418, 2360, 2364, + 0,36402,45164, 732,45164,36467,36460,45164,45164, 1552, + 36415,45164,45164,45164,45164, 2376, 2389, 2393,36467, 815, + 826, 2423, 2557, 2561, 835, 1207, 2608, 0, 2370, 0, + 45164,45164,45164, 722, 0, 887, 2315,45164,36393, 935, + 2567,45164,45164,45164, 2564,45164,45164,45164,45164,36403, + + 45164, 696,45164,36466, 1072,36396,45164,45164,45164,45164, + 36464, 2561, 1112,45164,36384, 2523,45164,45164, 1094, 2570, + 45164,45164,45164,36462,45164,36432, 2599, 2608, 2694, 391, + 36427,36430, 517, 826,36429,36428, 2785, 234, 699,36423, + 36422, 2667,45164,45164,45164,45164, 2698,36355,36351,45164, + 2876,36357,36355,36348,45164,45164,45164,45164,45164,45164, + 2633,45164,45164,45164,36408, 785,45164,45164,36414,36349, + 45164,45164,45164,45164,36326,45164,45164, 1110,45164, 1120, + 45164,45164,45164,45164,36350, 2658,36346, 2716,45164,45164, + 45164,45164,36406,45164,45164,36326,45164,45164,45164,45164, + + 45164, 2213,45164,36403,45164, 1173, 2565,45164, 1180, 2330, + 45164,45164, 1196,45164,45164,36337,36336,45164,36335, 228, + 2880, 2889, 1208, 1173, 2893,45164,45164,45164,45164,45164, + 45164,45164,45164,45164,45164,45164,45164,45164,45164,45164, + 45164,45164,36310,36382,36332, 1224, 2902, 2906,45164,36371, + 45164, 766,45164, 2960,45164,45164,45164,45164, 3045,45164, + 45164,36383,45164, 1387,45164, 2909, 2932,36382,45164, 1184, + 3130, 3208, 2672, 2389, 2692, 2550, 2907, 2393, 2693, 2844, + 2846, 2898, 2938, 2955,45164, 1578, 3132,45164, 3217, 2988, + 3224, 3172, 3254, 3267, 3108, 2902, 3312, 3281, 2962, 2971, + + 3293, 3263, 3015, 3065, 3342, 3183, 3343, 3391, 3408, 3360, + 3486, 3043, 3053,45164,45164, 3447,45164, 2983, 3308, 1209, + 3564, 3642, 3115, 2998, 3327, 3406, 3442, 3386, 3149, 3326, + 3444, 3425, 3455, 3466, 3538, 3581, 3611, 3558, 3656, 3638, + 3464, 3701, 3679, 3485, 3504, 3729, 3738, 3756, 3771, 3783, + 3675, 3798, 3846, 3826, 3859, 3936, 3720, 3805, 3940, 3884, + 709,36236, 3906, 3828, 3948,36236,36228, 1253,45164,36306, + 45164, 0, 3214, 0, 1261,45164,36305, 0, 0,36230, + 36221, 480,36237,36236, 1222,36216,36235, 1460,36193,36177, + 36198,45164,45164, 0, 365,36192,45164,45164,36189,36184, + + 36177,45164, 0,36190, 1359,36175,36181, 850, 1541, 769, + 45164,45164,45164, 810,45164,45164,45164,36188,36175,45164, + 36176,36178,36180, 1438,45164,36244,36160,36167,36169,36171, + 36158,36154, 0, 0, 2729, 0,36170,36155,36148,36160, + 36166,36161, 912,45164, 1091, 2903, 0,36115, 3944, 0, + 3982, 4028,36110, 1013,36121, 979,36113,36107,36107, 854, + 36097, 4062, 3970, 0,36084,45164,36091,36079, 0, 1130, + 45164,45164,45164,45164,45164,36084,36096,36050, 1404, 2218, + 2593, 0,36057,36059,36061,36057,36041,45164,45164, 1233, + 45164,45164, 1163,36114, 3421, 3733, 4032, 4066, 4054, 3671, + + 4079, 4108, 40, 2963,36113, 876, 4128, 317,36112, 4166, + 45164,45164, 0,45164,45164,45164,45164,36060,45164,45164, + 0, 3369, 1276, 4096, 0,36035,36025, 4257, 0,36052, + 36037,36046, 1562, 1577, 1614, 4136, 0,36107, 0,45164, + 36031, 1533,36030, 4342, 4424,45164, 0,36032, 1420,36034, + 36030,36035,36019,35996,35997,35988, 1521,45164, 0,35995, + 35996,35998,35982,35989, 0,35989,35991,35991,35973,35973, + 35974, 1534, 4200, 4202, 4283, 4287, 3881, 1602, 4296, 4300, + 4039,35971, 4142,45164, 4316,36047, 4310,45164, 4320,45164, + 0, 1626,45164,45164,45164,45164,45164,45164, 4357, 4410, + + 45164, 1933, 4502, 4580, 3505, 3566, 3549, 4314, 3737, 3612, + 4388, 3599, 3757, 3981, 4319, 3782, 4030, 3931, 4031, 4327, + 3883, 4328, 2396,45164,45164, 4621, 4470, 4549, 4504, 4662, + 4576, 4601, 4707, 4399, 4422, 4488, 4688, 4649, 4554, 4790, + 4737, 4437, 4756, 4834, 4773, 4725, 4913, 4521, 4395, 4487, + 45164, 4817,35972,45164,35980, 4879,45164, 4858, 4879, 4926, + 4960, 1672, 1958, 4964, 0, 1686, 4994, 4998, 4810, 4994, + 5021, 5025, 1776, 2936, 5034, 2007, 5038, 5083, 5031, 5079, + 5046,35965, 5054,45164,45164,45164,45164,45164,45164,45164, + 45164, 5161, 5246, 5133, 5134, 5189, 5302, 0, 5275, 0, + + 45164, 1411, 1973, 1946, 2317, 1645, 2942,35973, 1792,45164, + 2019,45164,36043, 0,35968,45164,45164,45164,35872,45164, + 35913, 1973,35838, 0,35848,35844,35846,35831,35843, 1574, + 35828, 2037,45164,35906,45164,45164,35903,35902, 5372,35898, + 35897,35896,35895,35894,35889,35888,35887,35886,35885,35883, + 35880,35879,35878,35877,35876,35875, 2277,35867,45164,35870, + 2206, 0, 0, 2179, 0, 5426, 0, 0, 0, 0, + 5511, 0, 0,35869, 0, 2257, 0, 5365, 5375,35868, + 0, 2697, 0, 2400, 5378, 0, 5408, 5596, 5674, 5694, + 5718, 5426, 5451, 5743, 5456, 5565, 0, 0, 5376,35867, + + 1209, 1955, 5638, 5577, 5767,35787, 5786, 5804, 5822, 5840, + 35794, 4335,35796,35792,35789,35781, 4949,35796,35795,35784, + 35776,35782,35786,35788, 2715, 2956,35779,45164,45164,35763, + 35777,35767,45164,35766,35746,45164, 0,35767, 4631,35765, + 35765, 4703, 2347,45164,35751, 4346,45164,35825, 0, 0, + 35746, 2090,35762,35762,35742,35743,45164,35815,45164,45164, + 35759, 1115, 1940, 2234, 5404, 5538,35740,35739,35738,35741, + 45164, 2194, 2317, 5603,35737, 5678, 5721, 5922, 2339, 2352, + 45164, 2353,45164, 2355,45164,45164,45164,45164,45164,35736, + 45164,45164,45164,45164,45164,45164,35748, 273,45164,35714, + + 45164,45164,35713,45164,35685,45164,45164,35684,35703,45164, + 35682,45164,45164,35681,45164,35629,45164,45164,35604, 5218, + 35689,35602,35601, 2139, 2409, 2577, 2699, 2584, 2611,35686, + 0,35621,35610,35605, 5000, 5209, 5650, 5506, 5864, 5867, + 5872, 5894, 5904, 5929, 5938, 5948, 5959, 5972, 5980, 5985, + 6014, 5995,35593, 6019, 6006, 6036, 6061, 6062, 2397, 2438, + 35624,45164,45164,45164,45164,45164,35611,45164,45164,45164, + 45164,45164,45164,45164,45164,45164,45164,35610,45164,45164, + 45164,45164,45164, 6069, 6084, 6091, 6099, 6108, 6116, 6138, + 6146, 6133, 6165, 6155, 6176, 6198, 6209, 6220, 6241, 6246, + + 6256, 6275, 6265, 6280, 6297, 6304, 6328, 6345, 6352, 6360, + 6381, 6428, 6391, 6398, 6436, 6443, 6451, 6462, 5668, 4988, + 6472, 6475, 6494, 6499, 6520, 6525, 6549, 6556, 6564, 6583, + 6588, 6605, 6614, 6633, 6638, 6648, 6669, 6670, 6691, 6698, + 6719, 6783, 6732, 6856, 6747, 6755, 6788, 6758, 6779, 3039, + 6809, 6824, 6832, 6871, 6879,35586, 6892, 6914, 6922, 6941, + 6948, 6949, 6970, 6978, 6999, 2639, 7004, 7025, 7030, 7035, + 7054, 7059, 7076, 7067, 7093, 7101, 7112, 7125, 7144, 7153, + 7136, 7175, 7178, 1518, 7201, 7206, 7216, 7227, 7238, 7246, + 7261, 7269, 7293, 7298, 7308, 7323, 7331, 7332, 7353, 7358, + + 7379, 7380, 7401, 7422, 7423, 6462, 7430, 7445, 3041, 7464, + 7469, 7477, 7500, 7490, 6084, 7515, 7540, 7555, 6684, 6856, + 45164,45164,45164,45164,45164,45164, 1779, 7635, 7713,35613, + 35608,35596,35606, 2375,35574, 1584, 574,35564,35575,35585, + 35577,35574,35594,35561,35571,35569,35559,35562,35558,35626, + 35543, 2835, 0,35547,35558, 2539,35560,35556,35548, 1981, + 35536, 2994,35552, 2082,35547,35531,35494,35497,35477,35487, + 2494, 877, 3134,35488, 1702, 2561, 2644, 7564,35489,35471, + 35483,35468, 2633,35482, 1976,35480,35464,35467, 2373,35463, + 2571, 2591,35476,35471,35413,35384,35397, 2813, 2873,35392, + + 35395, 2644,35383,35381,35383, 1412, 3200, 7604,35372, 7526, + 35373, 3081, 3100,35384,35367,35363, 1079, 3201, 2867,35357, + 2890, 3011, 3030,35375,35374,35359,35349, 5497, 2915, 3013, + 3074,35366, 0,35365, 2987,35355,35347, 1988, 3427,35346, + 35362, 3044, 3433, 1595,35349,35349,35338, 3081, 3081, 3162, + 35353,35328,35344, 3023,35351, 3102, 3540, 2928,35346,35343, + 35319,35337, 2657, 3102,35320, 5113, 3693, 3180,35328, 3354, + 35285, 3193,35203, 3104,35191, 2556,35171, 4385,35176, 7620, + 35185,35182, 3508,35170,35128, 2675, 3529,35119, 3168,35121, + 35111, 0,35106,35103,35073,35072,35070,35061,35054,35060, + + 35062,35038,35055,35051,35024,45164,35006, 0,35015,35003, + 35000,35003,35001,34996, 0,34986,34997, 0, 0, 0, + 34995,34850,34869,34859,34858,34860,34843, 3195, 0,34847, + 34835,45164, 0,45164,34845,34821,34830,34824,34830,34822, + 34832,34805,34797,34797,34777,34792,34784,34779, 3314, 4466, + 34757,34758, 3005,45164, 3036, 2966, 3176,45164, 3696, 7667, + 34755, 4480, 7672,34736,34746,34729,45164,34694,34683,34680, + 34673, 3228,34678,34667,34652, 3360,34639, 5286,34634,34638, + 34628, 3232,34611, 3385, 5358,34616,34618,34607, 3386, 5836, + 34571,34565,45164,34560,34543, 2918, 5138, 3348,34552,34514, + + 4855,34504, 6592,34468, 3118,45164, 3317, 3482, 3811, 3709, + 3512, 0,34473,34462,34456, 7791, 7869,34471,32704,32688, + 32697, 3845,32681, 2331, 3515, 2375,32671,32679,32686,32672, + 32658,32665,32666,32662,32723,32679, 3490,32652,32637,32642, + 32625,32620,32685, 2647, 3953, 0, 3373,32610,32601,32493, + 32485, 4075,32448,32443,32495,32412, 3188, 3201,32420, 51, + 3352, 122, 3593, 0, 3743, 3342, 3799, 3642, 4371, 3147, + 3778, 3279, 3553, 320, 3753, 3554, 3852, 379, 417, 4233, + 3247, 436, 3827, 3371, 3490, 4595, 6311, 5479, 493, 526, + 4201, 4760, 4437, 3974, 7681, 598, 645, 766, 3670, 3496, + + 3018, 3590, 4233, 3697, 1255, 3758, 1358, 3710, 1456, 3617, + 4418, 1503, 1561, 1605, 1640, 4640, 1729, 1747, 1897, 1932, + 3649, 4345, 3775, 2120, 2143, 3512, 2181, 2268, 3847, 3437, + 5066, 7728, 2269, 7690, 2422, 2537, 5096, 2526, 4633, 2582, + 2601, 2634, 2820, 3896, 3459, 2878, 3879, 6184, 2987, 3088, + 4010, 3133, 3272, 4834, 5199, 4062, 4067, 3249, 4437, 3740, + 3857, 3917, 5012, 3341, 7726, 4574, 4322, 4245, 4097, 3320, + 3368, 3971, 0, 4980, 3935, 3394, 3394, 3798, 4279, 3432, + 3547, 4602, 3516, 3950, 4915, 3544, 3557, 3588, 4674, 3899, + 3602, 4692, 3616, 3633, 3698, 4261, 3751, 3806, 4323, 4265, + + 4195, 5337, 3839, 5394, 3878, 4290, 3991, 4493, 4008, 5512, + 4523, 4705, 4733, 4004, 4030, 5528, 4515, 4031, 5413, 4782, + 5198, 4050, 4623, 4808, 4406, 4280, 4547, 4644, 4329, 4067, + 4306, 4172, 5772, 4217, 7759, 4278, 4294, 4404, 4317, 4384, + 4310, 4484, 4363, 4389, 4531, 6180, 4506, 6964, 7468, 4598, + 4506, 7717, 4451, 7825, 7829, 7838, 4656, 5116, 4939, 4485, + 4714, 7842, 7856, 4481, 4653, 4489, 7860, 4571, 7874, 7901, + 7905, 4788, 5219, 4981, 4508, 4907, 5336, 4533, 6222,45164, + 45164,45164,45164,45164,45164,45164,45164, 4518,45164,45164, + 4520,45164, 4536,45164,45164, 4564,45164,45164,45164,45164, + + 45164,45164,45164,45164,45164,45164, 6330,45164,45164,45164, + 6505,45164, 5268, 4672, 5357,45164, 5023, 4612, 4661, 4677, + 6633, 4887, 4688, 4678, 4701, 4953, 4715, 6345, 4726, 4735, + 4873, 4820, 4864,45164, 4832, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4750, 0, + 0, 4758, 0, 4797, 0, 0, 4805, 0, 4809, 0, + 0, 4813, 0, 4829, 0, 0, 4833, 4842, 4856, 7915, + 7943, 7953, 4938, 5037, 5013, 5027, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8029, 8107, 5053, 5029, + + 5056, 5410, 5106, 6540, 5227, 5515, 5110, 5076, 5222, 5261, + 5663, 5549, 0, 0, 0, 0, 0, 0, 4907, 4910, + 4933, 5133, 5122, 5113, 5878, 6920, 5177, 5683, 5667, 5295, + 4949, 4968, 4981, 5021, 5028, 5084, 5074, 5078, 5127, 5144, + 5145, 5175, 5191, 5188, 5206, 5223, 5270, 5284, 5295, 5273, + 45164, 5286, 5357, 5304, 5326, 5312, 5324, 0, 5328, 5349, + 5350, 5355, 5369, 5386, 5392, 5422, 7924, 5408, 5410, 5412, + 5433, 5496, 5659, 7950, 5555,45164, 5435, 5502, 5429, 5453, + 45164,45164,45164,45164, 5524,45164,45164,45164,45164, 5443, + 5444, 5448, 5460, 5463, 5472, 5474, 5490,45164,45164, 5772, + + 5604, 5529, 5534, 5543, 5548, 5539, 5727, 5574, 5610, 5573, + 5697, 5635, 5557, 5593, 5577, 5691, 5717, 5736, 5634,45164, + 5755, 5784, 5728, 5714, 5782, 5597,45164, 5670, 5680, 5810, + 5783, 6111, 5756, 5806, 5813, 5870, 5656, 5873, 5816, 5957, + 5932, 5899, 6664, 5915, 5881, 5829, 7963, 5910, 6047, 5907, + 5951, 6703, 5630, 6000, 5966, 5930, 5753, 5977, 5992, 5677, + 6046, 6005, 6085, 6054, 6420, 7975, 6220, 6041, 5814, 6514, + 6010, 6131, 7989, 6773, 5776, 6403, 5890, 5934, 5918, 5914, + 6129, 6011, 6019, 6115, 6304, 6080, 6053, 6100, 6144, 6097, + 6203, 6182, 5788, 6205, 6132, 6165, 6161, 5859, 6366, 6235, + + 6278, 6152, 6405, 6617, 7990, 6313, 6606, 6397, 6442, 6242, + 6291, 6307, 6225, 6555, 6414, 5954, 6456, 6317, 6532, 6691, + 6318, 6472, 7613, 6435, 5981, 5980, 6000, 6168, 6183, 6468, + 6280, 6486, 6588, 6490, 6619, 6780, 6653,45164, 6261, 6701, + 6538, 6842, 7026, 6914, 6488, 7954, 6752, 6670, 6201, 6535, + 6807, 6550, 6363, 6697, 6715, 6818, 6251, 6750, 6863, 6835, + 6725, 6298, 6321, 6639, 6718, 6829, 6884, 6570, 6663, 6865, + 6895, 6970, 6657, 6947, 6919, 6917, 6326, 6329, 6932, 6971, + 6940, 7846, 6897, 6984, 6999, 7278, 7059, 7002, 6415, 7056, + 7956, 7072, 6955, 7011, 7099, 7048, 7131, 7123, 7079, 7090, + + 7024, 7149, 7108, 7446, 7169, 7157, 7172, 8129, 7164, 7200, + 7197, 7223, 7970, 8214, 7253,45164, 7337, 7185, 7244, 7245, + 7275, 7270, 7009, 7386, 7292, 8058, 7372, 6407, 8302, 8380, + 7190, 6797, 7335, 7356, 7131, 7208, 7457, 7506, 7313, 7324, + 7582, 7470, 7362, 7410, 7502, 7580, 7581, 7596, 7641, 7677, + 0, 7492, 7530, 7645, 7547, 7567, 7752, 7597, 8039, 7786, + 7659, 7703, 8047, 7694, 7879, 7815, 7731, 7940, 7606, 7701, + 7819, 6464, 7740, 7977, 7968, 7661, 7854, 7675, 7692, 7994, + 8019, 8024, 8048, 7784, 8068, 6443, 8345, 8075, 8077, 7371, + 8020, 8082, 7801, 8052, 8054, 8084, 8088, 8097, 8099, 8090, + + 8056, 8109, 8242, 8114, 8110, 8244, 8134, 8246, 8248, 8263, + 8270, 8274, 8284, 8250, 7405, 8286, 8293, 6522, 8139, 8302, + 8303, 8304, 8324, 8320, 8341, 8322, 8276, 8285, 8326, 8294, + 7480, 8350, 8357, 8359, 8366, 8370, 8371, 8381, 8382, 8389, + 8328, 8400, 8387, 8393, 8405, 8409, 8410, 8420, 8418, 8424, + 8432, 8442, 8440, 8441, 8448, 7413, 8446, 8453, 8461, 8462, + 8463, 8467, 8468, 8469, 8475, 8484, 8483, 8485, 8493, 8495, + 8501, 8503, 8509, 8513, 8518, 8517, 8519, 8528, 8530, 8529, + 8534, 8535, 8536, 8541, 8543, 8548, 6548, 8552, 8557, 8561, + 8563, 8565, 8570, 8578, 8582, 8572, 8590, 8592, 8594, 8618, + + 8600, 8598, 8607, 7381, 8611, 8616, 8628, 8633, 8638, 8637, + 8653, 8654, 8728, 8757, 8755, 8761, 8766, 8652, 8774, 8772, + 8778, 7428, 8783, 8784, 8793, 8798, 8799, 8868, 8807, 8808, + 8818, 8819, 8817, 6579, 6676, 6709, 6717, 6754, 6732, 6748, + 6778, 6822, 6822, 6825, 6924, 6883, 6881, 6940, 6947, 6961, + 6972, 6964, 7023, 7055, 7057, 7055, 7098, 7100, 7117, 7470, + 7147, 7149, 7179, 8827, 0, 0, 7177, 7222, 0, 7218, + 0, 7232, 7259, 7335, 7265, 7287, 7303, 7726, 8900, 7388, + 7338, 7336, 7351, 8838, 7367, 7403, 7432, 7453, 7706, 0, + 7480, 7554,45164, 8904, 8907, 7791, 8910, 7650, 8917, 8872, + + 45164, 7486, 7705, 8921, 8929, 7483, 0, 7493, 7512, 7531, + 45164, 7535, 7622, 8859, 7540, 7633, 7625, 7656, 7670, 7755, + 7753, 7771, 7890, 0, 7756, 7807, 7806, 7832, 7845, 7862, + 7867, 7848, 7876, 7922, 0, 7861, 7875, 7894, 7899, 7908, + 7898, 7924, 7942, 0, 7927, 7975, 7974,45164, 8847, 8960, + 7972, 7980, 7989, 8000, 8010, 7991, 8862, 8919, 8019, 8025, + 8033, 9040, 9118, 8902, 8116, 8780, 8300, 8142, 8368, 9005, + 8097, 8041, 8075, 8423, 8306, 8254, 8417, 8095, 8411, 8507, + 8928, 8616, 8492, 8594, 8598, 8615, 8579, 8748, 8888, 8929, + 8955, 8820, 8895, 8957, 8909, 8112, 8356, 8228, 8841, 8911, + + 8913, 8930, 8907, 8929, 8968, 8466, 8260,45164, 8987, 8939, + 8937, 8964, 8972, 8940, 8982, 8965, 8639, 8992, 8958, 9006, + 9011, 9032, 8976, 9022, 8822, 9001, 9096, 8857, 9015, 9053, + 9041, 8978, 9054, 9199, 9000, 9028, 9030, 9036, 9055, 9131, + 9050, 8656, 9119, 9105, 9091, 9061, 9009, 9052, 9085, 9114, + 9056, 8334, 9106, 8919, 9095, 9070, 9123, 9101, 9144, 9169, + 9218, 9222, 9111, 9122,45164, 9132, 9112, 9173, 9141, 9143, + 9153, 8270, 9172, 9154, 9163, 9174, 8301, 9190, 9183, 9226, + 9158, 9267, 9167, 9270, 8377, 9178, 9192, 9229, 9214, 9232, + 9232, 9313, 9215, 9252, 9185, 9228, 9075, 9261, 9202, 9231, + + 9292, 9247, 9235, 9255, 9330, 9249, 9251, 9271, 8380, 8393, + 9303, 8456, 9332, 9306, 9272, 9276, 9333, 9277, 9274, 9289, + 9290, 9138, 9297, 9372, 9317, 9283, 9310, 9321, 9315, 9316, + 9320, 9318, 9330, 9345, 9331, 9333, 9338, 9347, 9344, 9407, + 9349, 9351, 9364, 9371, 8483, 8497, 9360, 9350, 9373, 8534, + 8607, 9361, 9369, 9349, 9366, 9385, 9437, 9387, 9440, 9394, + 9451, 8759, 9405, 9383, 9410, 9399, 9454, 9404, 9418, 9413, + 9426, 9392, 9408, 9486, 9419, 9417, 9459, 9429, 9430, 9431, + 9492, 9504, 9446, 9453, 9506, 9509, 9513, 9456, 9518, 9465, + 9462, 9466, 9475, 9474, 9522, 9471, 9488, 9501, 9540, 9542, + + 9543, 9547, 9548, 9485, 9495, 9491, 9559, 9567, 9568, 9527, + 9569, 9509, 9533, 9520, 9511, 9539, 9529, 9556, 8781, 9598, + 9600, 9547, 9552, 9549, 9558, 9559, 9557, 9562, 9565, 9572, + 8881, 9569, 9570, 9579, 9589, 9587, 9580, 9624, 9648, 9652, + 9584, 9515, 9592, 9601, 9606, 9590, 9658, 9611, 9608, 9604, + 9618, 9614, 9623, 9628, 9625, 9631, 9634, 9637, 9630, 9675, + 9641, 9697, 9650, 9651, 9648, 9642, 9653, 9643, 9659, 9665, + 9714, 9670, 9672, 9677, 9680, 8904, 9716, 9717, 9681, 9682, + 9719, 9691, 9693, 9704, 9700, 9696, 9758, 9715, 9706, 9719, + 9739, 9748, 9711, 9730, 9767, 9768, 9726, 9780, 9732, 9735, + + 9724, 9742, 9745, 9798, 9746, 9804, 9755, 9813, 9756, 9761, + 9758, 9776, 9752, 9777, 9786, 9898, 9771, 9789, 9920, 9772, + 9788, 9989, 9991, 9811, 9792, 9826, 9810, 9928, 9941, 9931, + 10002, 9943, 9801, 9992, 8932,10006, 9954, 8965, 8980, 9963, + 9952,10035, 9048,10048,10031, 9987, 9998,10070, 9179, 9302, + 9333, 9762, 9938,10079,10038,10040,10024,10097, 9778,10041, + 10054, 9992, 9954,10009,10036,10038,10045,10067, 9761, 9774, + 9805,10077, 9824, 9825, 9833, 9959, 9997,10000, 9984,10005, + 10006, 0,10006,10032,10049,10031,10107,10113,10151,10166, + 10086,10100,10089,10245,10323,10061,10144,10060,10068,10079, + + 10083,10102,10088,10048,10117,10120,10050,10121,10118,10127, + 45164,10130,10122,10136,10201,10202,10139,10132,10205,10157, + 10142,10059,45164,10093,10110,10147,10149,10158,10165,10158, + 10153,10167,10174,10167,10163,10159,10172,10172,10155,10180, + 10169,10177,10170,10175,10169,10183,10194,10193,10187,10195, + 10173,10190,10194,10195,10205,45164,10175,10198,10192,45164, + 10264,10276,10269,45164,10276,10277,45164,45164,45164,45164, + 45164,45164,45164,45164,10278,10284,10202,10202,10204,10205, + 10206,10228,10217,10210,10218,10211,10221,10289,10268,10235, + 10225,10236,10238,10242,10299,10316,10258,10252,10249,10257, + + 10261,10291,10288,10276,10283,10286,10297,10295,10311,10312, + 10329,10304,10328,10392,10259,10306,10342,10290,10423,10254, + 10427,10339,10353,10373,10435,10294,10308,10359,10316,10356, + 10387,10397,10330,10360,10317,10418,10326,10449,10469,10357, + 10399,10452,10412,10384,10406,10419,10381,10416,10472,10455, + 10420,10415,10439,10428,10422,10451,10425,10503,10429,10474, + 10454,10457,10468,10475,10470,10482,10479,10484,10488,10442, + 10493,10486,10489,10492,10495,10498,10512,10499,10513,10507, + 10511,10504,10521,10431,10494,10529,10535,10458,45164,45164, + 45164,45164,10532,10533,10527,10538,10528,10526,10541,10551, + + 10555,10531,10547,10558,10561,10554,10562,10568,10564,10569, + 10567,10576,10578,10585,10575,10588,10580,10590,10598,10534, + 10601,10589,10602,10603,10597,10611,10605,10659,10614,10612, + 10595,10622,10619,10623,10625,10628,10630,10635,10627,10618, + 10632,10636,10639,10616,45164,45164,10652,10637,10645,10661, + 10651,10660,10667,10655,10664,10675,10665,10647,10672,10671, + 10688,10681,10668,10695,10698,10684,10720,10759,10762,10701, + 10692,10710,10693,10704,10739,10730,10747,10744,10750,10705, + 10716,10761,10751,10767,10775,10768,10779,10737,10769,10778, + 10734,10787,10793,10786,10755,45164,10834,45164, 0,10696, + + 10784,10798,10794,10805,10806,10801,10818,10819,10815,10807, + 10880,10963,10816,10817,10824,10814,10829,11051,10713,11129, + 11214,10839,10840,10841,10842,10850,11052,10876,10852,10854, + 10860,10864,10861,10879,10872,10885,10882,10889,10866,10892, + 10995,10996,10997,10999,11007,11014,10836,11021,11023,11034, + 11035,11027,11044,11056,11123,11054,11137,11005,11093,11097, + 11145,11042,11067,11109,11095,11112,11113,11149,11115,11119, + 11133,11201,11136,11161,11180,11182,11146,11186,11192,11160, + 11189,11225,11231,11204,11205,11222,11207,11241,11213,11243, + 11253,11249,11252,11250,11260,11262,11269,11271,11272,11275, + + 11278,11282,11281,11290,11291,11292,11299,11300,11306,11312, + 11302,11319,11320,11323,11327,11330,11336,11344,11345,11346, + 11354,11356,11358,11364,11365,11367,11368,11371,11382,11383, + 11389,11393,11063,11395,11404,11406,11223,11407,11413,11414, + 11422,11424,11428,11434,11437,11441,11445,11443,11447,11046, + 11453,11455,11456,11457,11466,11467,11473,11470,11479,11483, + 11485,11486,11492,11500,11504,11506,11512,11496,11513,11521, + 11524,11525,11523,11532,11534,11540,11542,11543,11554,11121, + 11544,11561,11562,11563,11564,11572,11573,11581,11590,11574, + 11596,11599,11606,11647,11608,11612,11597,11587,11618,11621, + + 11619,11622,11630,11653,11632,11641,11662,11670,11673,11680, + 11687,11681,11699,11702,11705,11708,11709,11165,11711,11712, + 11715,10857,11723,11729,11731,11732,11296,11738,11744,11747, + 11754,11836,11753,11755,11757,11866,11765,11925,11869,10853, + 11868,11870,11879,11771,11740,11418,11883,11889,10863,10870, + 10879, 0,10985,11703,11962,11897,11002,11012,11905,11078, + 11017,11026,11033,11053,11054,11229,11181,11106,11333, 0, + 11073,11108,11918,11148,11907,11161,11211,11220,45164,11220, + 45164,11234,11257,11294,11366,11317,11321,11332,11340,11935, + 11349,11435,11953,11968,11999,12000,12005,12006,12007,11378, + + 11689,12016,11963,12004,12033,11400,11389,45164,11415,11409, + 0,11425,11440,11927,11465,11641,11495,11473,11475,11496, + 11503,11524,11511,11873,11533,11544, 0,11533,11824,12038, + 12042,12043,12044,12048,12053,12049,12054,12055,12059,12060, + 12066,12067,12065,12075,12073,12077,11559,11928,12022,11550, + 11578,11591,11598,11643,11653,12068,12079,11653,11654,11664, + 12148,12233,12089,12109,12122,12152,12033,12034,12067,12036, + 12074,12075,12095,12099,12116,12098,11947,12097,12114,12124, + 12125,12132,11967,11681,11683,12009,12140,12142,12143,12156, + 12160,12164,12173,12171,12183,12199,12201,12207,12209,12210, + + 12217,12220,12153,12235,12232,12241,12015,12242,12253,12260, + 12102,12276,12327,12270,12226,12273,12340,12344, 0,12249, + 12287,12288,12289,12296,12299,12310,11707,12297,12319,12335, + 12308,12321,12323,12348,12342,12351,12349,12407,12371,12357, + 12408,12336,12358,12138,12417,12373,12372,12380,12392,12395, + 12462,12422,12408,12437,12410,12477,12407,11751,12427,12440, + 12443,12491,12463,12441,12489,12493,12524,12428,12513,12469, + 12516,12468,12470,12545,12537,12492,12490,12546,11957,12500, + 12552,12511,12559,12518,12592,12597,12565,45164,12512,12520, + 12535,12542,12560,12604,12544,12548,12638,12551,12576,12622, + + 12582,12583,12585,12592,12728,12593,12644,12602,12613,12661, + 12624,12635,12819,12601,12820,12642,12646,12654,12631,12821, + 12041,12696,12764,12767,12765,12778,12780,12768,12786,12856, + 12860,45164,12787,12864,12807,12828,12817,12818,12837,12809, + 12840,12838,12888,12847,12849,12858,12865,12861,12871,12872, + 12874,12878,12881,12882,12893,12884,12900,12901,12903,12911, + 12917,12919,12946,12133,12921,12928,12960,11719,12938,12944, + 12929,12946,12954,12957,12981,12958,12177,12967,12964,12973, + 12974,12980,12981,12983,13061,12998,12984,13006,12993,13048, + 12425,13008,13018,13029,13031,13050,13035,13052,13020,13048, + + 13050,13062,13079,13091,13068,13090,12547,13161,13106,12145, + 13112,13097,13077,13146,12649,13107,13119,13125,13126,13162, + 13165,12115,13134,13137,13138,13144,13146,13154,13163,13164, + 13170,13171,13177,13180,13178,13205,11944,12481,13187,13188, + 12185,13190,13194,13213,13191,13205,13206,13212,13215,13292, + 13239,13221,13235,13209,13245,13237,13261,13274,13255,13252, + 13268,13258,13270,13286,13279,13296,13277,13299,13309,13308, + 45164,13302,13312,13314,13315,13323,13327,13329,13331,13330, + 13337,13379,13339,13345,13343,13349,45164,13359,13361,13362, + 13363,13398,13370,13369,11955,13376,13388,13386,13395,13396, + + 13380,13405,13397,13431,13399,13405,13406,13407,13415,13424, + 13426,13427,13497,13440,13441,13447,13453,13447,11884,13492, + 12797,13460,13474,13462,13502,13475,13514,13539,13529,13472, + 13484,13485,13501,13494,13500,13540,13504,13508,13510,13558, + 13513,13516,13580,13520,13526,13549,13581,13524,13568,13589, + 13602,13608,13610,13618,13537,13619,13627,12091,13587,13612, + 13626,13543,13635,13661,45164, 0,13636,11916,13645,13647, + 13653,13654,12167,13662,13637,13665,13671,13673,13682,13688, + 13690,13760,13703,13770,13774,45164,13752,13842,13722,13674, + 13718,13720,13728,13730,13749,13734,13740,13763,12012,12006, + + 13764,13871,12054,13154,13551,13940,13737,13893,12110,12150, + 12156,12803,12198,13587,13933,13743,13757,13948,13883,14040, + 13899,13907,13915,14069,14074,14138,14144,14157,13977,12277, + 12208,12233,14097,12836,12612,12906,13932,12946,12247,13751, + 12851,12267,12254,12287,12294,12330,12324,13743,12375,12405, + 0,12501,12419,12517,12824,14159,14169,12625,12490,12880, + 14244,14322,13922,13274,13479,13950,13767,13961,12978,12644, + 13958,14129,14152,12952,14130,13929,14164,13037,13114,13131, + 14094,14134,14147,45164,12459,12510,12543,12592,12597,12602, + 12650,12829,12837,12843,45164,12896,12923,12924,12950,12950, + + 12986,45164,12984,13005,13008,13082,13030, 0,13031,13117, + 14174,13053,13063,13097,13766,14176,13092,13122,14204,13945, + 13730,14221,13806,13142,13139,13161,14257, 0,13250,13880, + 13924,14068,13963,14220,14225,14194,14109,14218,14284,14219, + 14186,14234,14251,14239,14238,14328,14223,14262,14282,14110, + 13263,14131,14283,14246,14290,14289,14302,14295,13170,14389, + 14416,14401,13212,13906,14378,14445,13240,13210,14366,14310, + 14331,14439,14399,14391,14406,14404,14407,13270,13440,14333, + 45164,14405,14411,13266,14155,14413,14245,14294,14363,14361, + 14415,14438,45164,14428,14426,14440,14432,14445,14447,14429, + + 14528,14433,14448,14449,14472,14474,14479,14468,14476,14487, + 14493,14491,13291,14494,14495,14451,14470,14500,14576,14515, + 14507,14516,14518,14520,14522,14523,14534,14536,14539,14537, + 14540,14541,14617,14554,14556,14558,14559,14561,13329,14562, + 14570,14579,14605,14582,14584,14597,14601,14563,14590,13399, + 14613,14612,13921,14614,14596,14616,14619,14625,14628,14631, + 14632,14645,14644,14630,14650,14652,14651,14656,14657,14658, + 14659,14670,14676,14671,14663,14677,14684,45164,14678,14685, + 13966,14691,14703,14690,14696,14705,14710,14698,14714,14709, + 14718,14727,13405,14716,14725,14729,14730,14732,14733,14738, + + 14744,14746,14752,14773,14755,14757,14764,14759,14768,14775, + 14761,14776,14781,14780,14784,14793,14788,14796,14807,13592, + 14812,13980,14800,14819,14818,14820,13436,13440,13894,14829, + 13436,13560,14087,13472,14832,14823,14834,14839,14836,14840, + 14847,14851,14856,14863,14864,14871,14872,14876,14877,14878, + 14883,14897,14894,14902,14879,14900,14909,14905,14914,14920, + 14921,14922,14925,14928,14939,14934,15015,14985,14954,45164, + 14268, 0,14640,45164, 0,14945,14957,14963,14961,14966, + 14968,14975,13491,14970,14974,14977,14982,14983,13506,15100, + 15178, 0, 0,13594,13603,13547, 0,13561,14920,14597, + + 14990,13618,13726,13631,13616,15067,13647,13641,13656,13693, + 14978,13742,13766, 0,13777, 0,13779,13870,14997,14325, + 14129,13908,13918,13936,13951,13963,14030,14069,14126,14127, + 14256,14307,14149,15006,14178,14174,14192,14224,14236,14264, + 14294,14790,14721,14312,14340,14361,14360,14999,14380,15013, + 0, 0, 0,15085,15024,14388,14390,14412,14427,14468, + 15027,14469,14497,14510, 0,14545,14560,14699,14566,14598, + 14665,14677,14739,14785,14787,14798,14813,14899,15015,14834, + 14933,14852, 0,14840,15016,15033,14866,14880,14899,14926, + 14937,14948,14951,14976,15026,14974,15057,14999,15011,15018, + + 15039,15036,15040,15041,15037,15032,15042,15050,15036,15034, + 15041,15053,15038,15060,15057,15064,15065, 0,15065,15069, + 15073, 0,15075,15072,15073,15082,15079,15069,15072,15068, + 15066,15070,15078,15091,15086,15080,15155, 0,15094,15100, + 15088,15102,15104,15092,15093,15108,15095,15091,15108,15098, + 15102,15119,15112,15108, 0,15122,15108,15120,15159,15125, + 15119,15135,15122,15131,15132,15142,15145,15139,15150,15157, + 15134,15148,15142,15157,15145,15162,15161,15165,15144,15158, + 15158,15153,15168,15174,15153,15163,15165,15159,15181,15171, + 15247,15190, 0,15187,15191,15188,15191,15199,15185, 0, + + 15182, 0,15198,15200,15271,15204,15206,15200,15202,15212, + 15199,15215,15212,15280,15207,15199,15220,15222,15287,15291, + 15229,15235,15217,15225,15233,15220,15223,15240,15237,15224, + 15241,15231,15234,15245,15229,15248,15250,15237,15247,15239, + 15316,15238,15259,15232,15258,45164,15250,15256,15261,15266, + 15262,15249,15255,15258,15269,15253,15257,15262,15266,15253, + 15274,15282,15283,15268,15351,15275,15270,15282,15280,15282, + 15287,15296,15283, 0, 0,15298,15364,15286,15298,15294, + 15363,15372,15376,45164,15307,15309, 0,45164,15319,15381, + 15307,15325,15387,15388,15390,15389,15391,15392,15396,15401, + + 15394,15397,15333,15322, 0, 0,15337,15403,15342,15342, + 15329, 0, 0,15344,15410,15348,15331,15345,15350,45164, + 15337,15350,15340,15420,15416,15347,15344,15360,15486,15428, + 15432,15567,15439,15490,15494,15498,15518,15522,15423,15526, + 15531,15535,15539,15543,15551,15555,15571,15577,15363,15365, + 15581,15599,15603,15607,15618,15625,15443,15632,15636,15652, + 15657,15661,15665,15669,15673,15677,15683,15687,15693,15701, + 15705,15709,15714,15720,15725,15737,15754,15758,15356,15765, + 15444,15769,15773,15778,15789,15796,15800,15804,15812,15827, + 15833,15840,15845,15853,15859,15459,15866,15872,15876,15882, + + 15893,45164,45164,15360,15363,15903,15911,15483,15918,15922, + 15928,15958,15943,15933,15557,15950,15994,16005,16009,16013, + 15594,16026,16014,16043,15612,15620,16050,16054,16058,16062, + 16066,16070,15385,15380,16082,16086,16093,16101,16105,16116, + 16134,16140,16148,15782,16152,16163,16167,15808,16107,16097, + 15887,16177,16187,16191,16197,16203,15449,16118,15451,16275, + 15458,16368,16461,15405,15402,15408,15678,15407,16207,16552, + 16556,16560,16564,16217,16568,15888,16572,16576,16580,16584, + 16588,16224,15433,15428,16232,16593,16597,16601,16605,16610, + 16625,16641,16651,16659,16670,16680,16249,16253,16263,16684, + + 16689,16695,16700,16704,16708,16712,16722,16717,16730,16742, + 16746,16750,16774,16778,16782,16797,16801,16807,16811,16816, + 15435,15437,16820,16824,15444,15759,16828,16833,16840,16847, + 16851,16856,15790,16863,16867,16872,16876,16880,16884,16900, + 16904,16910,16922,16933,16938,16953,16957,16961,15446,15441, + 16967,16971,16975,16979,16983,16989,16995,17003,17008,17012, + 17016,17029,17034,17041,17058,17062,17066,17073,17082,17086, + 17095,17099,17111,15461,15472,17117,17129,17134,17138,15480, + 15484,17142,17146,17154,17167,17175,17180,17187,17196,17206, + 17210,17222,17226,17230,17238,17244,17249,17257,15558,15489, + + 15483,17263,17272,17278,17296,16020,15503,17307,17315,17319, + 17324,17330,17335,17339,17343,17352,15887,17356,17361,17365, + 17369,17373,15898,17377,17397,17401,17414,16157,15519,17422, + 17435,17439,17447,17454,17458,17463,17467,17471,17477,17484, + 17490,17499,17504,17508,17512,17526,17543,17548,17556,17560, + 17565,17570,17574,17588,17592,17596,17602,17609,15904,17613, + 17617,17625,17632,17636,17641,17655,17666,17670,15942,17674, + 17680,17684,15519,15542,15538,17690,15996,17703,16094,17710, + 17716,17720,17724,17728,17732,17736,17750,17761,17771,17786, + 17796,17823,16096,17800,17832,17842,17846,15624,15674,15865, + + 15549,15630,15549,15566,15649,15795,17850,17854,17858,17863, + 17870,17874,17879,17895,17899,17903,17907,17916,17925,17911, + 17929,17935,17939,17943,17953,17958,17990,17995,17999,18007, + 18024,18011,18031,18035,18039,18043,18047,18051,18058,18062, + 18069,18079,18074,18084,18090,18098,18102,18108,18112,18126, + 18130,18138,18159,16110,16156,45164, 0,18143,18149,18172, + 18184,18192,18199,18163,16208,18215,18219,18234,18239,18243, + 16764,18250,18258,18271,16211,15579,15572,16997,16153,18275, + 16613,16038,18279,18283,45164,15751,15670,15587,17220,15566, + 15678,15651,15669,15690,16628,16128,17046,15926,18143,15707, + + 45164,16219,16241,45164, 0, 0,15733,15743,15729,15752, + 15919,15749,15955,15769,15777,15776,15957,16853,45164,15814, + 15814,15818,15860,15866,15890,15891,15908,15931,16015,16167, + 16092,16012,16120,16628,16661,15966,15966, 0, 0,16012, + 16030, 0, 0,16049,16237,16067,16066, 0,16072,16084, + 16158,16192,18293,18303,16561,16588,16601,18359,18447,16193, + 16183,17042,16540,16599,16659,16555,16694,16560,18229,16105, + 17031,16585,16636,16759,16760,16852,16660,16819,17123,16158, + 16176,16724,45164,16181,16555,16825,45164,16569,45164,16562, + 16667,16682,16688,16694,16692,16697,16723,16716,16739,16767, + + 16781,16913,16794,16828,16812,16820,16828,16818,16851,16843, + 16857,16891,16853,16853,16851,16875,16878,16869,16874,17117, + 17022,17024,16909, 0,16928,18329,16912,17077,17188,17215, + 16942,17378,16952, 0,17087,17367,17014,17452,17581,18287, + 18341,16960,17469,18522,17029,17085,17227,17126,17142,17157, + 17158,17175,17189,17712,16975,18344,18372,45164, 0,17226, + 17014,17034,17062,45164,17320,45164,17586,17233,17316,17074, + 17271,17141,17204,17442,17676,17630,17729,17731,17541,17511, + 17321,17878,17694,17518,17797,17687,17327,17403,17681,17904, + 17250,18401,18412,18416,18431,18453,18496,17349,17459,17307, + + 17753,17438,17417,18482,17895,17701,17096,17094,17811,17508, + 18371,18487,17124,17942,17902,17528,17365,17457,17715,18111, + 17884,17885,18118,17887,18178,18092,17373,18112,17909,18471, + 18191,18147,18189,17258,17733,17739,18042,18232,18385,18330, + 17751,17501,17941,17759,18240,17636,18187,18451,18255,17600, + 18153,18261,18119,18000,17131,18311,18130,17669,18310,18333, + 17567,18363,18319,18224,18398,18365,18380,17697,18016,18428, + 18427,18505,18429,18213,18452,18466,18476,18443,18467,18267, + 18231,18344,17179,17239,18477,18485,18490,18534,18558,18493, + 17800,18528,18364,18488,17416,18396,18532,18544,18422,18535, + + 18468,18547,17855,18542,18184,18540,18545,18546,18562,17410, + 17418,17474,18553,17543,18554,18090,18556,17988,18561,17650, + 17622,17686,17730,17766,17793,17853,17887,17918,17940,18003, + 18030,18039,18560,18565,18576,18566,18571,18581,18572,18586, + 18592,18582,18584,18589,18259,18058,18598,18600,18607,18278, + 18591,18603,18308,18613,18602,18601,18057,18621,18625,18627, + 18450,18687,18619,18635,18069,18408,18693,18714,18718,18166, + 18261,18647,18653,18648,18342,18290,18803,18881,18335,18668, + 18387,18665,18670,18386,18667,18949,18436,18474,18497,18506, + 18512,18531,18517,18606,18637,18675,18646,18652,18676,18660, + + 18675, 0,18665,18674,18685,18671,18688,18689,18671,18684, + 18693,18698,18699,18693,18690,18686,18706,18712,18705,18772, + 18696,18713,18700,18708,18707,18708,18716,18773,18726,18728, + 18714,18726,18727,18728,18796,18729,18719,18735,18727,18738, + 18743,18739,18745,18738,18739,18739,18750,18750,18748,18743, + 18736,18757,18748,18764,18771,18757,18770,18771,18774,18765, + 18766,18773,18778,18769,18774,18772,18774,18787,18776,18787, + 18848,18780,18790,18791,18785,18786,18795,18786,18859,18789, + 18788,18804,18805,18811,18798,18800,18813,18804,18796,18806, + 18822,18814,18858,18871,18822,18830,18837,18827,18841,18847, + + 18842,18849,18842,18834,18837,18857,18853,18848,18858, 0, + 18851,18851,18862,18851, 0, 0, 0, 0,18856,18868, + 18860,18868,18865,18863,18867,18875,18865,18868,18879,18870, + 18882,18888,18885,18878,18882,18887,18892,18894,18898,18903, + 18896,18886,18904,18901,18910,18892,18899, 0,18912,18911, + 18914,18908,18974,18914,18915, 0,18910,19000,18926,18936, + 18907,18972,18926,18914,18941,18926,18944,18947,18934,18955, + 18959,18944,18959, 0,18973,18960, 0,18964, 0, 0, + 0, 0,19034,18964, 0, 0, 0,18962, 0, 0, + 0, 0, 0,18966,18981,18974,45164,18966, 0,18972, + + 18963,18969,18984,18977,18972,18979, 0, 0,18974, 0, + 0, 0, 0, 0,18966,18974,18990,18980,18994,18981, + 18982,19058,19062,18977,19002,18999,19004,18992,45164,19006, + 0,19007,19073,19074, 0,19000,19003,19000,19074,19082, + 19024,19089,19021,19012,19033,19092,45164,19018,19035,19099, + 19035, 0,19039,19105,19031,19031,19035,19034, 0,19046, + 19112,19038,19038, 0,19051,19117,19043,19043,19049,19042, + 19058,19045,19125,19126,19052, 0,19066,19130,19177,19131, + 19132,19255,19134,19058,19071,19073,19073,19081,19138,19074, + 19066,19142,19143,19064,19087,19076, 0,19150,19076,19102, + + 19087,19154,19161,19162,19103,19170,19171,19172,19174,19178, + 19122,19123,45164,19184,19209,19113,19148,19323,19128,19130, + 19143,19136,19135,19153,19217,19224,19134,19143,19145,19225, + 19157,19143,19152,19153,19226,19165,19231,19163,19155,19241, + 19245,19163,19240,19180,19191,19170,19184, 0, 0,19176, + 19264,19267,19192,19211,19213,19223,19203,19216,19288,19290, + 19294,19216,19233,19234,19219,19239,19237,19294,19296,19328, + 19301,19237,19227,19240,19239,19241,45164,19420,19259,19264, + 19261,19260,19275,19276,19323,19266,19339,19268,19281,19276, + 19273,19269,19347,19292,19351,19282,19284,19354,19302,19294, + + 19511,19280,19297,19288,19286,19291,19290,19450,19522,19293, + 19299,19357,19310,19313,19300,19342,19517,19312,19526,19527, + 19532,19299,19513,19315,19318,19468,19321,19326,19515,19333, + 19463,19349,19531,19350,19533,19537,19413,19539,19542,19543, + 19544,19545,19476,19478,19474,19479,19480,19489,19555,19554, + 19487,19490,19560,19561,19562,19501,19504,19502,19493,19504, + 19505,19499,19492,19513,19499,19508, 0,19509,19510,19586, + 0, 0,19515,19592,19523,19527,19535,19540,19526,19538, + 19531,19533,19531,19543,19607,19546,19550,19544,19546,19552, + 19619,19558,19549,19551,19557,19555,19560,19569,19575,19563, + + 19573,19635,19579,19639,19640,19570,19580,19577,19646,19583, + 19650,19647,19651,19594,19584,19591,19584,19592,19588,19596, + 19597,19591,19591,19580,19662,19665,19595,19595,19668,19592, + 19612,19615,19620,19679,19680,19681,19682,19611,19614,19627, + 19687,19696,19700,19613,19620,19610,19629,19640,19632,19676, + 19715,19635,19644,19631,19653,19641,19714,19715,19650,19716, + 19663,19681,19660,19684,19651,19660,19645,19649,19727,19684, + 19675,19675,19682,19753,19691,19686,19696, 0,19689,19687, + 19699,19688, 0, 0, 0, 0,19692,19693,19705,19767, + 19771,19778,45164,19772,19702,19715,19711,19700,19710,45164, + + 19722,19721,19722,19718,19729,19718,19719,19710,19722,19724, + 19729,19739,19727,19731,19742,19732,19737,19745,19751,19748, + 19741,19745,19751,19755,19757,19758,19764,19755,19746,19764, + 19761,19751,19772,19755,19755,19762, 0,19775,19774,19779, + 19772,19839,19780,19759,19782,19781,19775, 0,19779,19866, + 19870,19809,19849,19851,19850,19783,19784,19810,19873,19808, + 19806,19869,19881,19805,19814,19884,19828,19815,19826,19891, + 19894,19823,19827,19841,19835,19825,19902,19841,19845,19905, + 19910,19912,19915,19917,19848,19911,19857,19850,19866,19868, + 19861,19866,19923,19867,19858,19857,19877,19867,19857,19876, + + 19864,19881,19938,19940,19941,19942,19944,19945,19946,19878, + 19875, 0,19891,19958,19885,19957,19897,19887,19961,19962, + 19963,19937,19936,19938,20036,20119,20207,19902,20008,19897, + 19948,19909,19955,19921,19962,19964,19934,19976,19993,19993, + 19998,20025,19978,20000,20038,19918,45164,45164,45164,45164, + 45164,45164,19916,19934,19958,20211,20216,19972,45164,19976, + 19980, 0,19990, 0,19991, 0, 0, 0, 0,20009, + 0,20010,20004,20018,19996,19997,20014,20002,20017,20007, + 20070,20208,20219,20019,20016,45164,20041,45164,19997,20164, + 20171,20178,20184,20220,20186,20194,19998,20211,20212,20228, + + 20238,20231,20246,20236,20252,20261,20265,20264,20267,20268, + 20277,20283,20281,45164,20242,20290,20296,20310,20312,20320, + 20318,20326,20332,20334,20341,20347,20401,20281,20358,20365, + 20367,20372,20379,20384,20391,20393,20400,20282,20394,20339, + 20398,20356,20316,20401,20405,20430,20437,20412,20428,20436, + 20441,20453,20515,20529,20534,20614,20539,20476,20455,20481, + 20486,20032,20434,20559,20563,20500,45164,20509,20514,45164, + 20520,20533,20538,20027,20551,20572,45164,20583,20585,20629, + 20645,20656,20103,20319,20658,20595,20601,20611,20609,20618, + 20616,20627,20635,20643,20671,20666,20676,20684,20700,20691, + + 20689,20698,20706,20708,20718,20720,20725,20733,20738,20740, + 20745,20038,20747,20753,20758,20760,20772,20766,20774,20783, + 20296,20788,20790,20796,20798,20803,20833,20303,20810,20812, + 20820,20826,20828,20835,20841,20850,20848,20051,20859,20866, + 20873,20039,20929,20875,20890,20968,20892,20926,20900,20906, + 20933,21006,20942,20911,20950,20957,20955,20973,20978,20983, + 20989,20996,20966,20994,20111,45164,20157,20157,20179,20213, + 20216,20234,20261,20267,20268,20272,20278,21004,21012,21014, + 21022,21027,21029,21040,21042,21047,21057,21064,21071,21073, + 21079,21081,21088,21094,21099,21106,21108,21119,21117,21124, + + 21134,21140,21145,21147,21129,21156,21165,21171,21173,21233, + 21197,21190,21272,21276,45164,20253,45164,20352,21195,21212, + 21214,45164,20278,21361,21439,20310,20267,20390,21265,20286, + 20719,21231,20376,20401,20515,20492,20568,20506,20674,20531, + 20546,20635,20625,20404,20690,20652,20918,20470,21148,20431, + 20504,20544,21213,20295,20804,20825,20833,21083,20900,20856, + 21230,20700,20730,20764,21231,20947,20357,21053,21056,20996, + 20619,20875,20923,21298,21313,21314,21315,21256,21165,21238, + 20873,21267,20385,21025,21049,21242,21074,20681,21227,20950, + 21332,21254,21245,21268,20410,20855,21257,21266,20885,20989, + + 21091,20968,20895,20452,21129,21169,21264,21289,20471,21258, + 21291,21292,21285,21296,21290,21317,21373,21297,21294,21330, + 21334,21321,21331,21088,21345,21329,21353,21216,21394,21328, + 21336,21518,21346,21416,21363,21352,21366,21449,21250,21396, + 21367,21372,21364,21375,21391,21395,21399,21392,21388,21393, + 21410,21403,21412,21429,21405,21414,21486,21436,21423,21433, + 21441,21425,21427,20518,21442,21149,21435,21450,21452,21467, + 21481,21476,21431,21488,21489,21491,21471,21494,21499,21498, + 21500,21503,21526,21504,21482,21495,21520,21515,21517,21514, + 21521,21532,21523,21540,21528,21595,20600,20623,45164, 0, + + 20815,20831,20944,20983,21010,21039,21254,21358,21375,21544, + 21446,21506,21529,21521,21537,45164,21550,21538,21551,21542, + 21558,21561,21624,21539,45164,21555,21544,21557,21567,21560, + 21635,21636,21562,21561,21641,21645,45164,21568,21578,21583, + 21589,21571,21581,21654,21655,21656,21660,21662,21666,21667, + 21668,21672,21673,21674,21678,21604,21580,21687,21691,21615, + 21613,21778,21856,21627,21621,21629,21608,21604,21625,21624, + 21630,21703,21632,21646,21635,21636,21709,21712,21715,21716, + 21719,21649,21720,21653,21650,21675,21718,21721,21651,21666, + 21658,21677,21684,21758,21672,21759,21680,21681,21692,21698, + + 21765,21690,21700,21701,21704,21709,21780,21699,21729,21737, + 21702,21775,21789,21744,21745,21738,21748,21756,21728,21751, + 21736,21825,21754,21757,21741,21759,21768,21761,21770,21825, + 21834,21836,21838,21839,21794,21781,21795,21858,21863,21953, + 21797,21807,21808,21809,21820,21824,21826,21864,21827,21834, + 21836,21840,21841,21885,21833,21843,21865,22044,21844,21859, + 21864,45164,21846,21983,21984,21872,21847,21870,21986,21868, + 22051,45164,22049,22057,22062,22053,22068,22004,22003,22021, + 21861,21875,22010,22064,21871,22063,22071,22081,22084,22085, + 21874,21980,22014,22015,22027,22025,22091,22026,22095,22025, + + 22100,22101,22033,22040,22039,22045,22036,22069,22042,22077, + 22139,22070,22088,22046,22061,22164,22168,45164,22172,22177, + 45164,22073,22075,22110,22111,22112,22078,22117,22133,22122, + 22120,22138,22126,22134,22074,22140,22080,22141,22118,22149, + 22144,22136,22081,22160,22180,22105,22200,22158,22157,22129, + 22218,22233,22163,22162,22164,22175,22173,22167,22177,22183, + 22240,22242,22172,22250,22190,22188,22259,22188,22204,22201, + 22196,22265,22266,22269,22200,22199,22221,22280,22210,22214, + 22236,22216,22271,22214,22299,22220,22223,22231,22344,22229, + 22306,22259,22256,22263,22260,22339,22258,22238,22268,22325, + + 22273,22280,22223,22263,22341,22277,22296,22261,22299,22281, + 22300,22304,22297,22315,22313,22308,22294,22305,22320,22317, + 22318,22311,22327,22317,22323,22335,22318,22334,22326,22329, + 22327,22336,22343,22337,22346,22400,22347,22354,22349,22365, + 22366,22356,22357,22358,22360,22402,22367,22363,22370,22372, + 22386,22381,22377,22388,22393,22395,22409,22417,22384,22406, + 22407,22410,22408,22414,22476,22387,22415,22470,22488,22433, + 22509,22430,22498,22500,22445,22446,22448,22442,22452,22511, + 22438,22445,22446,22528,22531,22538,22547,22534,22541,22486, + 22471,22473,22491,22481,22485,22490,22559,22563,22567,22569, + + 22481,22559,22514,22492,22496,22500,22493,22499,22575, 0, + 22568,22502,22522,22505,22534,22537,22519,22529,22594,22595, + 22598,22599,22603,22606,22602,22620,22543,22614,22549,22612, + 22544,22616,22617,22631,22596,22602,22701,22540,22541,22784, + 22587,22571,22583,22593,22557,22565,22577,22597,22572,22594, + 22588,22609,22611,22608,22585,22872,22611,22662,22684,22876, + 22623,45164,45164,22616,22624,22677,22692,22631,22636,22648, + 22632,22637,22643,22630,22641,22634,22642,22651,22637,22644, + 22653, 0,22654,22653,22659,22671,22662,22663,22657,22676, + 22678,45164,22873,22881,22661,22669,45164,22678,22679,22681, + + 22744,45164,22685,22688,22871,22872,22875,22876,22877,22873, + 22886,22895,22892,22889,22885,22884,22893,22888,22897,22899, + 22917,22908,22902,22928,22922,22926,22911,22930,45164,22690, + 22683,22684,22878,22693,22694,22695,45164,45164,22691,22697, + 22851,22846,22933,22708,22842,22862,22915,22932,22937,22931, + 22934,22918,22940,22979,22997,23001,23000,23005,22709,22957, + 22954,23039,23119,23045,23199,23279,23359,23051,22959,23022, + 23028,22710,22712,22854,22812,23032,22965,22984,23000,22840, + 22990,22849,22991,23033,23073,23061,23075,23077,23081,23082, + 23099,23030,23027,23033,22853,23122,23007,23046,22867,23043, + + 23048,23064,23067,23131,23083,23072,22969,23113,22998,23081, + 23052,23082,23084,23087,23088, 0,23086,23095,23109,23089, + 23102,23103,23090,23104,23120,23092,23108,23107,23114,23128, + 23123,23125,23131,23126,23127,23191,23140,23150,23142,45164, + 23145,23149,23161,23227,23242,23250,23291,23228,23205,23173, + 23192,23145,23283,23288,23229,23172,23170,23255,23230,23239, + 23175,23244,23260,23258,23144,23262,23272,23154,23165,23164, + 45164,23193,23196,23208,23239,23250,23251,23261,23267,23269, + 23270,23274,23276,23281,23352,23340,45164,23323,23283,23298, + 23292,23309,23299,23307,23327,23328,23326,23329,23331,23332, + + 23334,23335,23304,23346,23338,23360,23340,23339,23341,23354, + 23365,23348,23306,23308,23419,23364,23374,23356,23372,23376, + 23377,23370,23462,23540,23379,23381,23383,23436,23447,23390, + 23387,23388,23454,23395,23394,23393,23401,23403,23404,23407, + 23426,23405,23427,23414,23406,23415,23412,23432,23475,23501, + 23442,23511,23433,23455,23480,23434,23444,23452,23469,23457, + 23468,23450,23482,23484,23458,23479,23472,23489,23492,23504, + 23505,23467,23552,23487,23493,23507,23509,23510,23512,23516, + 23514,23517,23529,23525,23527,23532,23536,23530,23538,23533, + 23547,23548,23531,23543,23549,23542,23559,23561,23562,23607, + + 23566,23568,23569,23632,23575,23573,23574,23576,23580,23585, + 23582,23586,23588,23593,23598,23600,23577,23595,23659,23601, + 23605,23608,23612,23613,23616,23692,23621,23614,23633,23619, + 23624,23625,23634,23640,23641,23639,23642,23644,23645,23646, + 23647,23654,23658,23651,23663,23669,23665,23652,23672,23680, + 23667,23653,23673,23677,23685,23684,23678,23686,23689,23691, + 23693,23698,23695,45164,23686,23682,23677,23705,45164, 0, + 23702,23687,23680,23709,23707,23710,23713,45164,23714,23709, + 23774,23715,23698,23719,23720,23779,23718,23781,23724,23783, + 23787,23709,23724,23713,23789,23706,23729,23710,23724,23728, + + 23718,23726,23798,45164,23721,23729,23723,23731,23737,23746, + 23732,23812,45164,23731,23744,23899,23980,23737,23763,23738, + 23743,23748,23749,23822,23759,23761,23745,23783,23831,45164, + 23751,23766,23760,23847,23823,23864,23792,23774,23772,23781, + 23783,23875,23785,23787,23860,23862,23808,23790,23810,23805, + 23803,23793,23876,23791,23825,23801,23802,23886,23883,23891, + 23832,23804,23897,23827,23823,23854,23892,23896,23928,23904, + 23900,23859,23816,23921,23994,24012,23882,45164,24102,23908, + 23904,23839,23927,23870,23904,23887,23988,23964,23846,23927, + 24006,23940,23947,23962,23942,23952,23963,23958,24026,24031, + + 24036,24193,24048,24065,24197,24052,24058,23992,23954,24007, + 23848,23852,23855,24066,24069,24009,24010,23924,23955,23996, + 23997,24011,24007,24014,24009,24123,24128,24139,24141,24138, + 24005,24143,24202,24149,24144,24148,24007,24209,24008,24015, + 24016,24152,24140,24125,24132,24146,24169,24162,24171,24177, + 24182,24174,24157,24168,24176,24178,24178,24183,24202,24180, + 24190,24192,24207,24286,24189,24201,24253,24211,24268,24212, + 24212,24218,24217,24215,24224,24230,24220,24231,24302,24225, + 24234,24249,24247,24248,24312,24318,24330,24315,24317,24265, + 24279,24244,24245,24363,24246,24276,24285,24340,24304,24271, + + 24277,24358,24295,24293,24296,24306,24311,24309,24322,24317, + 24319,24385,24324,24334,24324,24329,24323,24332,24334,24343, + 24331,24341,24335,24347,24344,24393,24351,45164,24342,24349, + 24344,24345,24356,24360,24444,24423,24365,24377,24371,24354, + 24384,24379,24388,24378,24380,24394,24383,24381,24401,24405, + 24397,24398,24408,24407,24391,24400,24416,24424,24411,24412, + 24347,24429,24436,24418,24350,24431,24425,24501,24502,24435, + 24438,24423,24512,24455,24448,24437,24454,45164,24524,24532, + 24541,24550,24554,24535,24494,24477,24462,45164,24448,24546, + 24559,24562,24552,24503,24502,24505,24469,24498,24571,45164, + + 24494,24491,24506,24501,24498,24505,24576,24503,24512,24579, + 24580,24583,24584,24586,24585,24513,45164,24519,24542,24596, + 24598,24599,24572,24576,24659,24515,45164,45164,24519,24742, + 24570,24539,24525,24534,24542,24550,24537,24546,24555,24542, + 24544,24551,24548,24566,24555,24550,24572,24570,24568,24559, + 24830,24579,45164,24563,24636,24614,24585,45164,24641,24593, + 24594,24644,24624,24595,24655,24591,24601,24584,24601,24611, + 24608,24602,24592,24608, 0,24611,24599,24619,24617,24599, + 24622,24620,24633,24827,24829,24837,24633,24634,24639,24832, + 24641,24645,24824,24827,24832,24828,24830,45164,24829,24842, + + 24844,24831,24835,24843,24849,24846,24855,24856,24847,24850, + 24854,24860,24865,24888,24866,24916,24698,24642,45164,24704, + 24649,24650,24663,45164,24661,24654,24803,24887,24805,24871, + 24876,24864,24934,24873,45164,24948,24874,24951,24938,24953, + 24955,24908,24651,24647,24668,25045,25053,25133,25018,25082, + 25099,25030,25120,24810,24844,45164,24969,24965,24910,24667, + 24669,24675,24973,24979,24669,24785,24820,45164,24796,24813, + 24930,24919,24929,24815,24909,24937,24945,25025,24932,24943, + 24980,24953,24821,24827,24998,24975,24988,25010,25020, 0, + 24978,25028,25048,24935,25034,25057,25052,25080,24982,24950, + + 25017,25042,25043,25064,24927,24996,25081,25102,25137,25030, + 25103,25045,25105,25085,25128,25075,25164,25167,25115,25108, + 25113,25084,25168,25100,25097,25126,25119,25135,25129,25121, + 25139,25136,25144,25137,25141,25203,25135,25139,45164,45164, + 25158,25156,45164,25147,25158,25148,25162,25163,25164,25166, + 25165,25167,25232,25244, 0,25168,25181,25169,25187,25189, + 25190,25195,25198,25188,25196,25197,25200,25201,25209,25216, + 25214,25217,25218,25222,25220,25223,25224,25228,25226,25233, + 25231,25244,25215,25243,25245,45164,45164,25317,25395,25293, + 25308,25299,25310,25311,25312,25313,25315,25314,25318,25330, + + 25319,25327,25320,25323,25340,25321,25322,25324,25325,25347, + 25331,25328,25326,25343,25348,25356,25352,25341,25363,25332, + 25355,25329,25339,25353,25367,25351,25358,25357,25373,25379, + 25371,25359,25377,25382,25360,25344,25361,25364,25370,25369, + 25397,25368,25441,25442,25447,25449,25451,25452,25457,25458, + 25453,25459,25460,25346,25466,25349,25469,25350,25354,25462, + 25470,25473,25475,25464,25476,25461,25477,25463,25465,25488, + 25481,25490,25482,25485,25484,25497,25495,25489,25494,25496, + 25491,25498,25508,25493,25510,25502,25501,25507,25499,25509, + 25362,25513,25515,25506,25516,25523,25398,25412,25392,25410, + + 0,25407,45164,25406,25411,25418,25423,25434,25443,25458, + 0,25435,25442,25450,25458,45164,25474, 0,25517,25520, + 25524,25590,25538, 0,25506,25593,25585,25536,25525,25527, + 0,25528, 0,25529, 0,25524,25601,45164,25540,25541, + 25672,25750,25546,25530,25540,25549,25608,25529,25538,25534, + 25612,25613,25539,25542,25550,25609,25610,25617,25550,25555, + 25556,25626,25556,25641,25559,25629,25559,25631,25563,25561, + 25573, 0,25573,25637,25572,25567,25564,25577,25575,25575, + 25584, 0,25648,25573,25639,25643,25648,25649,45164,25604, + 25713,25833,25598,25601,25605,25636, 0,25583,25680,45164, + + 25699,25652,25592, 0,25702, 0,25606,45164,25684, 0, + 25646,25613,25722,25739,25626,25629,25642,25630,25641,25664, + 25666, 0,25672,25656,25667,25669,25670,25672,25742,25665, + 25688,25677,25687,25682,25700,25682,25691, 0, 0,25685, + 25762,25691,25689,25703, 0,25713,25701,25706,25709,25723, + 25722,25723,25706,25724,25711,25727,25713,25924,25713,25717, + 25801,25928,45164,25738, 0,25929,25730,25733,25734,25735, + 25729,25721,25750,25737,25930,25733,25931,25753,25747,25746, + 25743,25735,25932,25933,25934,25752,25759,25750,25935,25874, + 25753,25937,25748,25872,25863,25940,25870, 0,25881, 0, + + 25873, 0, 0, 0,25944,25873,25873,25889,25882,25882, + 45164,25889,25887,25891,25883,25904,25893,25899,45164,45164, + 45164,25896,25901,25902,25904,25900,25905,25980,25905,25901, + 25912,25926,25904,25926,25919,25928,25934,25933,25924,25937, + 25935,25926,25931,25932,25935,25938,25937,25954,25936,25958, + 26015,25948,25947,25953,25939,25956, 0,25950,25961,25953, + 26026,25966,25958,25944,26033,26040,26037,26041,25971,25983, + 25982,26048,26050,26054,26040,26054,26055,26057,25983,26000, + 25993,25998,25995,25984,26060,26061,25988,26008,26009,26065, + 26066,26067,26069,26070,26009,26000, 0,26076,26050,26051, + + 26140,26223,26042,45164,26039,26044,26045,26043,26046,26048, + 26050,26047,26049,26052,26057,26056,26058,26069,26060,26103, + 26094,26104,26311,26038,26097,26145,26024,45164,26043,26108, + 26033,26075,26076,26147,26082,26314,26149,45164,26067,26073, + 45164,26086,26095,26088,26104, 0, 0,26101,26096,26092, + 45164,26117,26116,26116,26175,26308,26317,26104,26394,26121, + 26184,26124,26128,26472,26473,26474,26475,26476,26477,26478, + 26479,26480,26482,26484,26481,26483,26498,26487,26494,26490, + 26492,26488,26509,26506,26520,26523,26521,26126,26133,26129, + 26131,26146,26252,26512,26511,26528,26501,26526,26527,26110, + + 45164,26514,26524,26532,26513,26136,26622,26147,26324,26630, + 26604,26655,26626,26659,26666,26670,26689,26261,26331,45164, + 26274,45164,26145,26318,26134,26265,26152,26154,26285,26258, + 26292,26256,26293,26294,26660,26738,26298,26306,26435,26260, + 26621,26699,26299,26297,26318,26645,45164,45164,45164,26438, + 26451,26720,26325,26434,26301,26444,26454,26297,26673,26449, + 26456,26679, 0,26464,45164,26611,26461,26711,26474,26457, + 26471,26631,26471,26471,26655,26535,26661,26555,26547,26482, + 26543,26540,26572,26568,26595,26616,26605,26682,26658,26629, + 26700,26632,26657, 0,26654,26692,26701,26683,26665,26703, + + 26707,26708,26710,26714,26709,26728,26718,26716,26725,26719, + 26736,26738,26740,26742,26732,26746,26744,26809,26811,26750, + 26813,26754,26896,26974,26756,26807,26754,26758,26759,26760, + 26767,26761,26762,26764,26768,26770,26772,26773,26776,26777, + 26778,26779,26783,26784,26785,26786,26792,26846,26867,26798, + 26795,26809,26814,26815,26861,26878,26819,26800,26821,26822, + 26828,26825,26885,26903,26824,26836,26844,26882,26856,26848, + 26868,26842,26847,26858,26845,26865,26870,26873,26874,26875, + 26879,26880,26881,26886,26883,26887,26890,26898,26892,26913, + 26904,26884,26901,26918,26914,26934,26920,26936,26908,26939, + + 26921,26984,27003,27004,26943,26923, 0,26914,26921,27010, + 0, 0,26945,26953,26941,26948, 0,26941, 0,26939, + 26956,45164,45164, 0,26959,26945,27024, 0,26939,27026, + 26965,26942,45164,26954,26968,26961,26963,26966,26965,26977, + 26964,27118,27206,27284,26978,26969,27045,26973,26974,26995, + 27052,27056,27000,26997,26988,27203,27200,26999,27002,27003, + 26999,27207,27002,27009,27004,27003,27017,27007,27013,27083, + 27014,27021,27027,27022,45164,27205,27204,27202,27011,27367, + 27033,27167,27174,27018,27028,27023,27105,27036,27216,27032, + 27146,27176,27136,27133,27218,27219,27177,27178,27145,27228, + + 27164,27171,27244,27171,27193,27179,27195,27188,27181,27200, + 27198,27258,27264,27205,27261,27458,27222,27223,27218,27231, + 27252,27277,27459,27294,27219,27463,27467,45164,27242,27233, + 27238,27240,27250,27249,27246,27234,27468,27251,27253,27469, + 27254,27470,27269,27266,27474,27257,27264,27475,27259,27466, + 27275,27258,27337,27263,27420,27267,27270,27276,27293,27295, + 27288,27296,27279,45164,27286,27417,27404,27418,27420,27407, + 27408,27410,27413,27412,27423,27431,27415,27421,27426,27440, + 27430,27434,27433,27444,27441,27448,27436,27456,27452,27437, + 27457,27451,27473,27464,27471,27488,27536,27480,27454,27487, + + 27463,27540,27484,27544,27560,27565,27493,45164,27571,27505, + 27510,27510,27503,27576,27580,27567,27514,27518,27519,27520, + 27514,27513,27510,27515,27514,27517,27512,27513,27515,27518, + 27519,27592,27594,27595,27596,27587,27539, 0, 0,27573, + 27670,27758,27841,27540,27547,27535,27534,27537,27548,27551, + 27528,27530,27552,27558,27546,27701,27573,27553,27698,27574, + 27695,27575,27703,27706,27704,27929,27583,27765,27571,27578, + 27758,27590,27769,27571,27589,27581,27592,27583,27694,27712, + 27709,27703,27711,45164,27776,45164,27926,27934,27937,27797, + 45164,27784,28027,27723,27726,45164,27928,27921,27931,27932, + + 27929,27933,27934,28105,28106,27930,45164,45164,28107,28108, + 28110,28109,28111,28112,28113,28114,28115,28126,28127,28117, + 27729,27731,27737,27738,27740,28128,28129,28130,27717,45164, + 28122,28125,28136,28123,28137,28135,27742,27964,27736,28151, + 27730,27733,28161,28180,28232,28236,28242,28252,27748,45164, + 27746,45164,27889,27751,27760,27951,28252,27753,27890,27754, + 27761,45164,28246,28282,27738,27766,27743,27770,28253,45164, + 45164,28095,28226,27924,27976,28128,27891,27897,27904,27904, + 27936,28072,27874,28129,28265,28298,28317,27888,27915,27940, + 28334,27938,27942,28322,45164,28069,28090,28068,27936,28081, + + 28082,28091,28092,28088,28088,28082,28221,28113,28197,28107, + 28213,28108,28121,28224,28261,28229,28165,28240,28263,28110, + 28249,28267,28271,28265,28112,28332,28336,28134,28149,28167, + 28198,28421,28499,28328,28221,28288,28294,28270,28291,28183, + 28302,28296,28298,28306,28308,28305,28318,28184,28316,28321, + 28372,28320,28323,28339,28332,28328,28412,28418,28333,28373, + 28331,28385,28365,28342,28304,28337,28329,28379,28383,28390, + 28388,28386,28401,28393,28340,28391,28396,28413,28400,28351, + 28414, 0,28474,28423,28409,28412,28405,28417,45164,28413, + 28404,28422,28435,28500,28430,45164, 0, 0, 0,28445, + + 28440,28508,28598,28686,28764,28449,28437,28438,28450,28431, + 28457,28679,45164,28451,28460,28461,28463,28462,28465,28467, + 28467,28476,28540,28688,28479,28471,28477,28680,28685,28682, + 28847,28729,28488,28710,28472,28483,28552,28481,28485,28497, + 28563,28564,28496,28566,28490,28496,28512,28505,28506,28515, + 28507,28511,28513,28588,28589,28518,28718,28625,28629,28721, + 28621,28694,28698,28591,28699,28650,28628,28652,28631,28662, + 28725,28655,28665,28658,28713,28659,28742,28938,28939,28943, + 28660,28657,28736,28684,28672,28687,28671,28677,28678,28686, + 28696,28707,28697,28706,45164,28705,28724,28728,28737,28726, + + 28746,28715,28716,28735,28741,28739,28750,28744,28745,28762, + 28747,28749,28755,28757,28889,28760,28761,28944,28766,28945, + 28946,28902,28968,28777,45164,45164,28974,28949,28958,28865, + 28879,28896,28911,28917,28906,28920,28921,28904,28905,28906, + 28919,28982,28983,28984,28985,28972,28981,28917,28920,29006, + 29096,29184,45164,29267,28921,28932,28942,28948,28934,28937, + 45164,45164,28956,28949,28938,28941,28946,29345,28968,28976, + 28967,28962,28970,28966,29432,28967,28971,45164,28978,28971, + 28968,28980,45164, 0,28979,28980,28973,28994,28981,29182, + 29065,29359,28979,28996,28997,29350,29351,29352,29354,29353, + + 29355,29356,29358,29360,29359,29369,29361,29368,29390,45164, + 28982,29017,29383,29392,29373,29385,29397,45164,29000,29003, + 29397,29123,29012,29398,29379,29404,45164,29382,28991,29384, + 45164,29402,29389,29463,29017,29082,29005,29499,29514,29520, + 29525,29529,29539,29546,29561,29611,29626,29630,29410,29002, + 45164,29145,29122,45164,29120,29148,29151,29000,45164,29154, + 29002,29037,29417,29398,29101,29194,29220,29174,29157,29181, + 29152,29367,29493,29310,29405,29150,29131,29641,29157,29152, + 29657,29628,29642,29680,29167,29231,29710,29714,29168,29306, + 29316,29653,29196,45164,29181,29301,29312,29313,29305,29298, + + 45164,29326,29334,29352,29431,29348,29478,29504,29518,29472, + 29519,29532,29492,29597,29336,29319,29357,29355,29543,29799, + 29877,29640,29410, 0,29500,29654,29415,29479,29623,29438, + 29434,29665,29445,29460,29532,29457, 0,29464,29555,29478, + 29480,29481,29670,29508,29509,29508,29507, 0,29517,29538, + 29544,29543,29563,29561,29556,29550,29566,29652,29599,29665, + 29568,29595,29624,29606,29631,45164,29623,29664,29658,29663, + 29955,30033,29660,29669,29662,29657,29664,29693,29670,29681, + 29682,29685,29683,29687,29689,29676,29757,29758,29679,29698, + 29699,29752,29753,29757,29765,29764,30119,29770,29709,29706, + + 29701,29700,29704,29708,29725,29702,29715,29724,29726,29729, + 29785,29801,29727,29802,29728,29731,29741,29736,29743,29768, + 29828,29819,29768,29767,29890,29900,29857,29760,29832,29762, + 29805,45164,45164,29759,29769,29774,29769,29784,45164,29774, + 45164,29766,29789,29794,29781,29782,29784,29769,29806,29850, + 29851,29809,29864,29808,29846,29803,29847,29893,29782,29930, + 29934,29924,29849,45164,45164,29877,29936,29869,29880,29872, + 29870,29884,29882,29883,29888,29874,29875,29953,29880,29881, + 29894,29888,29891,30212,29904,29905,29892,29955,29901,29906, + 29913,29883,29908,29915,45164,29893,29930,29909,29916,29926, + + 29912,29920,45164,29930,29910,29974,29933,29935,45164,29945, + 29943,29949,45164,29941,29931,30014,29933,30023,45164,30014, + 30015,30016,30019,30026,30290,29944,29982,30025,30291,30292, + 45164,30293,30294,29983,30300,30296,30302,30298,30299,29994, + 29952,30305,29953,30011,30013,30315,45164,30304,45164,30306, + 45164,30305,29979,45164,30044,29981,30335,30341,30345,30349, + 30360,30429,30433,30440,30444,30524,30450,30045,29982,30012, + 30251,30539,30252,29992,30055,45164,30440,30460,30344,30029, + 29995,29994,45164,30253,30311, 0,29993,30533,30554,29993, + 29996,30068,45164,29988,45164,30297,30345,30396,30075,30018, + + 30020,30098,45164,45164,30376,30398,30017,30280,30261,30413, + 30424,30437,30281,30513,30232,30249,30260,30476,30442,30618, + 30696,30449,30524,30316,30781,30529,30383,30537,30558,30592, + 30579,30619,30657,30636,30599,30670,30683,30741,30753,30752, + 30772,30780,30352,30309,45164,30291,30371,45164,30288,30299, + 30335,30321,30789,30874,30955,30351,30336,30372, 0,30587, + 30357,30368,30392,30397,30395,30414,30615,30801,30443,30615, + 30399,45164,30403,45164,30500,30432,30421,30518,30519,30600, + 0,30489,30454,30887,30459,30562,30607, 0,30483,30566, + 30508,30578,30526,30522,30530,30586,30601,30527,30611,30554, + + 30544,45164,30560,45164,30547,45164,30550,30544,30634,30559, + 0,30556,30576,30577, 0,30639,30580,30571,45164,30601, + 30593,30616,30603,30679,30612,30615,30632,30636,30632,30633, + 30641,30736,30661,30662,30667,30656,45164,31038,30660,30669, + 30644,30679,30679,30667,30688,45164,30675,30691,30773,30693, + 30694,30699,30707,30671,30723,30800,30680,45164,30706,30693, + 30718,45164,30808,30788,30703,30848,30825,30780,30798,30829, + 30835,30737,30852,45164,30858,45164,30866,30742,45164,30730, + 30867,45164,30870,30871,30872,30876,30850,30731,45164,30736, + 30739,30773,30742,30878,45164,30903,30900,30929,30896,31129, + + 30968,31133,31137,31141,31145,31225,31151,31305,31385,31465, + 31157,31166,30848,30979,30989,31006,31153,31240,31105,30775, + 31231,45164,31137,30776,45164,30866,30745,30809,30878,31250, + 31268,30810,30820,30838,30873,45164,30943,30945,30916,45164, + 30842,30864,30940,31121,31177,30862,45164,31106,31236,30942, + 31266,31125,30874,45164,30902,31149,31543,31626,31223,31201, + 30908,30915,31144,31108,30926,31200,30954,31267,31116,30909, + 30981,30916,31001,45164,45164,30949,45164,31328,31704,31782, + 31071,31098,31218,31082,31084,31095,31115,31132,31147,31208, + 31199,31142,31219,31232,31162,31174,31339,31351,31375,31336, + + 31180,31279,31299,31226,31281,31235,31229,31262,31292,31214, + 31226,31252,31252,31347,31396,31291,31258,31356,31252,31359, + 31305,45164,31262,31263,31272,31370,31301,31376,31303,31322, + 31323,31335,31358,31360,31423,31366,31368,31355,31415,31865, + 31425,31426,31375,45164,31371,45164,31377,31355,31380,45164, + 31382,31383,31388,31439,31474,31423,31414,45164,45164,31380, + 45164,31377,31449,31369,45164,31448,31450,45164,31446,31381, + 45164,31382,45164,31421,45164,31467,45164,31466,45164,31483, + 45164,31468,31394,45164,31425,31436,31438,31412,31411,45164, + 31488,31489,31517,31503,31956,31580,32013,32093,32173,31595, + + 31508,31612,31658,31624,31551,45164,31521,31726,31418,31600, + 31423,45164,31606,45164,31519,45164,31452,31444,31445,31436, + 31588,45164,31566,31458,31468,31460,31531,31470,31543,31497, + 31598,31463,45164,32251,32329,31686,31578,31698,31707,31726, + 31743,31752,31764,31460,45164,31942,32407,45164,32485,31539, + 31555,31479,31491,31565,31505,31576,31776,31539,31622,31631, + 31753,45164,45164,45164,45164,31521,31962,31583,31536,31611, + 31570,31636,31564,31585,31599,31590,31598,31602,31606,31621, + 31625,31625,31640,31648,31967,31635,31637,31641,45164,32568, + 31628,45164,31632,45164,31642,45164,31641,45164,31671,45164, + + 31670,31645,45164,31992,45164,31704,31683,31697,31762,31766, + 45164,31751,45164,31761,31961,31931,31696,31984,45164,31998, + 32042,32067,32101,32659,32075,32105,32126,32142,32158,32199, + 32208,32230,31716,31725,31698,45164,31699,45164,31701,31965, + 45164,31720,31728,45164,31720,31737,31719,31723,32068,31711, + 31742,31749,32098,31947,32157,45164,45164,31777,31938,31824, + 31825,31753,31757,31839,31764,45164,31781,45164,31952,31782, + 45164,31793,31853,31887,31901,31891,31916,45164,31930,31931, + 31987,31933,31940,31939,31945,31947,31949,45164,31937,45164, + 31950,31960,31990,31966,31972,32059,32067,45164,32152,32151, + + 32169,31972,32176,32295,32300,32305,32317,32334,32362,32386, + 32412,32454,32663,31998,32002,31982,45164,32001,32011,32008, + 32030,32025,32032,32020,45164,32041,32212,32068,32063,32129, + 32055,32133,32096,32060,32072,32087,32098,32103,32157,32158, + 45164,32105,32108,32118,32112,32115,32184,45164,32154,32128, + 32177,32152,32167,45164,45164,32235,45164,45164,32166,32237, + 32366,32443,32458,32667,32684,32692,32188,32181,32184,45164, + 32254,45164,32174,45164,32189,32259,32260,32263,32196,32201, + 32200,32220,32207,32224,45164,45164,32214,32216,32229,32284, + 32290,45164,32236,45164,32278,32251,32236,32315,32267,32478, + + 32492,32696,32276,45164,32251,32259,32251,45164,32338,32268, + 32277,32268,32272,32276,32334,32335,32280,45164,45164,32313, + 45164,32364,32294,32702,32281,32304,32354,32314,32304,32306, + 32317,45164,45164,32321,32312,32407,32325,32317,32408,32318, + 45164,32338,32341,32399,32345,32348,32336,45164,32360,32431, + 32346,32361,32416,45164,32418,32420,45164,32379,32361,32375, + 45164,45164,45164,32378,32374,45164,32444,32401,45164,32467, + 32385,32385,32386,45164,45164,32781,32805,32829,32853,32877, + 32901,32925,32949,32973,32997,33021,33045,33069,33093,33117, + 33141,33165,33189,33213,33237,33261,33285,33309,33333,33357, + + 33381,33405,33429,33453,33477,33501,33525,33549,33573,33597, + 33621,33645,33669,33693,33717,33741,33765,33789,33813,33837, + 33861,33885,33909,33933,33957,33981,34005,34029,34053,34077, + 34101,34125,34149,34173,34197,34221,34245,34269,34293,34317, + 34341,34365,34389,34413,34437,34461,34485,34509,34526,34548, + 34572,34596,34616,34638,34662,34673,34682,34691,32499,32509, + 34700,34722,34733,34748,34770,34794,34813,34835,32511,32513, + 34845,32523,32526,34869,34880,34889,34898,34919,34941,32534, + 34965,34989,32471,32482,35013,35037,35054,35071,35095,35106, + 35123,35132,35154,35178,35200,35224,35235,35257,35281,35305, + + 35329,35353,35377,35397,35406,35424,35442,35464,32544,35488, + 35512,35523,35532,35541,35563,35587,35598,35607,35616,32689, + 32694,35625,35647,35658,35676,35698,35722,35746,35757,35779, + 32698,32715,35789,32718,32731,35809,35818,35827,35836,35857, + 32742,35875,35884,35902,35924,35948,35972,35996,36020,32484, + 32518,36037,36054,36076,36087,36104,36113,36135,36159,36181, + 36203,32747,36223,36232,36250,36272,36283,36292,36314,36338, + 36362,36382,36391,36409,36418,36440,36460,36469,36478,36487, + 36508,32540,32521,36517,32755,36526,36535,36557,36581,36605, + 32758,34521,36616,36625,36634,36652,36661,36679,36701,36721, + + 36744,36768,36792,36809,36826,36835,36852,36861,36883,36905, + 34523,36923,36932,36950,36972,36983,36992,37014,37038,37062, + 37082,37091,37113,37133,37142,37151,37160,37169,32703,32536, + 37178,34613,37187,37196,37218,37242,37266,37290,37314,34677, + 34686,37325,37334,37343,37361,37370,37388,37410,37434,37458, + 37475,37492,37501,37518,37527,37549,37571,37589,37598,37616, + 37625,37634,37656,37680,37704,37724,37733,37746,37766,37776, + 37785,37793,37804,37813,34695,37822,37843,37865,37889,37913, + 34703,34705,37924,37945,37966,37984,37993,38011,38034,38049, + 38073,38097,38120,38143,38152,38169,38178,38187,38209,38231, + + 38249,38258,38276,38285,38294,38316,38340,38364,38384,38393, + 34736,38415,38439,38463,38478,38502,38526,38550,38570,38579, + 38588,38596,38607,38616,34738,38625,38634,38656,38680,34746, + 34810,38700,38710,38719,38737,38746,38764,38777,38801,38825, + 38849,38873,38893,38902,38917,38928,38945,38954,38963,38985, + 39007,39025,39034,39055,39065,39074,39096,39120,39144,39154, + 39178,39193,39217,39241,39265,39280,39304,39328,39352,39362, + 39382,39391,39400,39408,39419,39437,39445,34884,39456,39465, + 39487,39511,39535,34893,39546,39555,39564,39585,39603,39612, + 39630,39643,39658,39682,39706,39723,39734,39751,39760,39782, + + 39804,39822,39831,39849,39870,39879,39901,39925,39949,39960, + 39973,39993,40015,40039,40063,40073,40093,40102,40111,40119, + 40130,40139,34914,40150,40171,40193,34917,40216,40237,40258, + 40279,40288,40306,40324,40337,40361,40385,40402,40413,40430, + 40439,40461,40483,40492,40510,40532,40543,40565,40589,40600, + 40613,40637,40661,40681,40690,40712,40732,40741,40750,40758, + 40769,40787,40805,40814,40832,40841,40850,40859,40868,40886, + 40899,40919,40941,40965,40985,41004,41013,41035,41057,41066, + 41084,41106,41117,41139,41163,41174,41187,41211,41235,41246, + 41268,41292,41303,41321,41330,41352,41363,41371,41382,35051, + + 35059,41403,35068,41411,41422,41431,41440,41449,41467,41480, + 41504,41528,41552,41571,41580,35109,41602,41611,41629,41638, + 41660,41684,41708,41719,41732,41756,41780,41804,41828,41851, + 41862,41880,41889,41911,41922,41930,41941,35111,35120,35128, + 41949,41960,41969,41978,41987,42005,42018,42042,42066,42090, + 42109,35392,42131,42140,42158,42167,42189,42213,42237,42260, + 42283,42298,42322,42346,42370,42381,42405,42429,42439,42463, + 42487,42507,42516,42538,42548,42559,42568,42577,42598,42617, + 42630,42654,42678,42702,42726,42745,42766,42785,42794,42816, + 42840,42850,42874,42898,42922,42946,42957,42981,43005,43016, + + 43024,43044,43052,43076,43100,43120,43142,43152,43163,43181, + 43194,43218,43242,43253,43271,43293,43317,43341,43360,43382, + 43406,43416,43431,43455,43479,32654,43503,43527,43551,43575, + 43599,43623,43647,43657,43665,43689,43713,43737,43757,43779, + 43803,43814,43833,43855,43870,43894,43905,43922,43944,43968, + 43991,44001,44025,44049,44073,34605,44097,44121,44145,44169, + 44193,44217,44237,44259,44283,44294,44316,44340,44364,44388, + 44408,44430,44454,44474,44492,44514,44525,44542,44564,44588, + 44611,44621,44645,44669,44693,44717,44741,44765,44789,44813, + 44837,44857,44880,44900,44918,44936,44946,44970,44985,45009, + + 45033,45057,45081,45091,45115,45139 + } ; + +static yyconst flex_int16_t yy_def[12007] = + { 0, + 11276,11276, 2, 2, 2, 2,11277,11277,11278,11278, + 11279,11279,11280,11280,11281,11281,11281,11281,11282,11282, + 11281,11281,11283,11283,11284,11284,11285,11285,11286,11286, + 11286,11286,11287,11287,11288,11288,11289,11289,11290,11290, + 11291,11291,11292,11292,11293,11293,11292, 47,11294,11294, + 11295,11295,11296,11296,11297,11297,11298,11298,11299,11299, + 11300,11300,11301,11301,11302,11302,11303,11303,11304,11304, + 11305,11305,11306,11306,11307,11307,11308,11308,11309,11309, + 11310,11310,11311,11311,11312,11312,11313,11313,11314,11314, + 11315,11315, 84, 84,11275, 95, 84, 84,11316,11316, + + 84, 84, 84, 84, 84, 84, 84, 84, 100, 109, + 11275, 111,11303,11303,11317,11317,11317,11317,11318,11318, + 11319,11319,11320,11320,11321,11321,11322,11322,11323,11323, + 11324,11324, 132, 132,11325,11325,11326,11326,11327,11327, + 11328,11328,11329,11329,11330,11330,11331,11331,11332,11332, + 11333,11333,11334,11334,11335,11335,11336,11336,11336,11336, + 11337,11337,11338,11338,11339,11339,11340,11340,11341,11341, + 11342,11342,11342,11342,11343,11343,11344,11344,11345,11345, + 11275,11275,11275,11275,11275,11275,11275,11346,11347,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275, 204,11275, + 11275,11275,11275,11348,11349,11275,11275,11275,11350,11351, + 11352,11275,11275,11275,11275,11275,11275,11275,11348,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11353,11354,11348,11354,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11348,11275,11355,11275,11275,11275,11275,11355,11275, + 11275,11275,11275,11356,11275,11357,11275,11275,11275,11275, + 11275,11358,11275,11275,11275,11275,11275,11275,11275,11275, + 11359,11275,11275,11360,11275,11275,11275,11275,11275,11361, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11362,11275,11275,11275,11275,11275,11350,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11363, + 11275,11275,11275,11275,11275,11275,11275,11350,11364,11275, + 11275,11275,11365,11365,11365,11365,11275,11366,11365,11275, + 11275,11275,11275,11275,11275,11367,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11368,11275,11275,11275,11275, + 11369,11275,11275,11275,11275,11275,11370,11275,11371,11275, + 11372,11275,11275,11275,11275,11275,11373,11275,11275,11275, + 11275,11355,11275,11275,11374,11275,11275,11275,11275,11275, + + 11355,11375,11275,11275,11275,11275,11275,11355,11376,11275, + 11275,11355,11377,11275,11275,11275, 396,11275,11275,11275, + 11275,11275,11275,11275,11275,11378,11379,11275,11275,11275, + 11275,11275,11275,11275,11275,11380,11275,11275,11275,11275, + 11378,11275,11275,11275,11275, 396,11275,11275,11275,11275, + 424,11275,11275,11379,11275,11275,11275,11275,11275, 396, + 11275,11275,11275,11275,11275,11275,11275,11275,11374,11381, + 396,11275,11275,11275,11382, 396,11275,11374, 396,11383, + 11275,11275,11275, 396,11384,11385,11275,11275,11275,11386, + 11387,11275,11275,11275,11388,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11389,11390,11275,11275,11275,11275, + 11275,11275,11391,11275,11275,11392,11275,11275,11393,11275, + 11275,11275,11275,11275,11275,11394,11275,11275,11394,11394, + 11395,11394,11394,11394,11394,11394,11275,11394,11275,11394, + 11394, 537,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11396,11275,11275, + 11275,11275,11275,11275,11397,11275,11397,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11386,11398,11275,11275,11275, + 11275,11275,11275,11275,11275,11399,11399,11275,11399,11399, + 11275,11275,11400,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11401,11402,11403,11275,11400,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11404,11404,11275,11275,11405, + 11406,11406, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672,11275,11275,11275,11275,11275, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672,11275,11275,11275,11275,11275,11275,11275, + 11407,11407, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722,11275, 722, + 739, 742, 722, 722, 722, 753,11275,11408,11275,11275, + 11275,11409,11275,11410,11411,11275,11275,11412,11412,11412, + 11412,11412,11412,11412,11412,11412,11412,11412,11412,11275, + 11275,11275,11275,11413,11413,11413,11275,11275,11275,11275, + + 11275,11275,11414,11414,11414,11414,11414,11414,11414,11415, + 11275,11275,11275,11415,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11416,11275,11275,11275,11275,11275,11275, + 11275,11275,11417,11418,11275,11419,11419,11419,11419,11419, + 11419,11419,11275,11275,11275,11275,11420,11420,11275,11421, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11422,11422,11275,11275,11275,11423,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11424,11424,11424,11424,11424,11424,11275,11275,11275, + 11275,11275,11425,11426,11275,11426,11426,11426,11275,11426, + + 11426,11426,11427,11428,11426,11426,11411,11426,11426,11275, + 11275,11275,11429,11275,11275,11275,11275,11430,11275,11275, + 11431,11275,11275,11275,11432,11432,11433,11275,11434,11434, + 11434,11434,11275,11275,11275,11275,11435,11275,11435,11275, + 11275,11275,11275,11436,11436,11275,11437,11437,11437,11437, + 11437,11437,11437,11437,11437,11437,11275,11275,11438,11438, + 11438,11438,11438,11438,11439,11439,11439,11439,11439,11439, + 11275,11275, 945, 945,11275,11275,11275,11275,11275,11275, + 11275,11275,11440,11275,11275,11275,11275,11275,11275,11275, + 11441,11275,11275,11275,11275,11275,11275,11275,11442,11442, + + 11275,11443,11444,11444, 1004, 1004, 1004, 1004, 1004, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, + 1004, 1004,11275,11275,11275, 1004, 1004, 1004, 1004, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1026, 1004, 1004, 1004, + 11275,11275,11275,11275,11275,11275,11275, 945, 945,11275, + 11275,11445,11275,11275,11446,11447,11275,11445, 945, 945, + 11275,11275,11448,11275,11275,11449,11275,11448, 945, 945, + 945, 1070, 945,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275, 1092, 1094, 945, 1094,11450, 945,11451, + + 11275,11452,11452,11452,11452,11453,11453,11275,11275,11275, + 11454,11275,11275,11455,11455,11275,11275,11275,11275,11275, + 11456,11456,11275,11457,11457,11457,11457,11457,11457,11457, + 11457,11458,11275,11275,11275,11275,11459,11460,11275,11459, + 11459,11459,11459,11459,11459,11459,11459,11459,11459,11459, + 11459,11459,11459,11459,11459,11459,11459,11461,11275,11459, + 11459,11462,11462,11462,11462,11462,11462,11462,11462,11462, + 11462,11462,11462,11462,11462,11462,11462,11463,11463,11462, + 11462,11464,11462,11462,11462,11462, 1185,11465,11465, 1189, + 1189, 1190, 1189, 1189, 1189, 1189,11462,11462,11462,11459, + + 11275,11275, 1189, 1189, 1189, 1191, 1205, 1189, 1190, 1189, + 1194,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11466,11275,11467,11467,11275,11275, + 11467,11275,11275,11275,11275,11275,11275,11275,11468,11468, + 11468,11468,11468,11468,11468,11468,11275,11275,11275,11275, + 11469,11469,11469,11470,11275,11470,11275,11275,11275,11275, + 11275,11471,11471,11275,11275,11470,11275,11470,11470,11470, + 11275,11275,11275,11472,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11473,11472,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11473, + 11275,11275,11275,11275,11275,11474,11474,11474,11275,11275, + 11475,11475,11475,11475, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209,11275, 1209, 1209, 1209, 1209, 1209,11275,11275, + 11476,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1412, 1412, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1412, 1209, 1209, 1209, 1209, 1209, 1209, 1209,11275, + 1209, 1209, 1209, 1209, 1209,11275, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209,11275, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209,11275, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, + + 1209, 1209, 1209, 1209, 1209, 1412, 1209, 1209,11275, 1209, + 1209, 1209, 1209, 1209, 1412, 1209, 1209, 1209, 1412, 1412, + 11275,11275,11275,11275,11275,11275,11275,11477,11477, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + 11275,11478,11478,11478,11478,11478,11478,11478,11478,11478, + + 11478,11478,11478,11478,11478,11275,11275,11479,11479,11479, + 11479,11275,11275,11275,11480,11480,11480,11480,11480,11480, + 11480,11480,11480,11480,11275,11275,11275,11481,11482,11275, + 11275,11275,11483,11275,11275,11484,11484,11484,11484,11484, + 11484,11485,11486,11275,11275,11275,11275,11487,11487,11487, + 11487,11487,11275,11275,11488,11489,11488,11275,11490,11489, + 11491,11275,11275,11492,11492,11492,11275,11275,11275,11275, + 1529, 1529,11493,11493,11493,11493,11493,11493,11493,11493, + 11493,11493,11494,11494,11494,11494,11494,11495,11495,11495, + 11495,11495,11275,11275,11275, 1529, 1529,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11496,11496,11496, + 11275,11497,11497,11497,11497,11498,11498, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817,11275,11275,11499, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817,11275, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817,11275, 1817, 1817, 1817, 1817, 1817, 1817, + 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, + 1817,11500,11275,11275, 1529, 1529,11501,11275,11501,11275, + 11502,11275,11275,11501,11275,11501,11501,11501, 1529, 1529, + 11503,11275,11503,11275,11275,11275,11275,11275,11503,11275, + 11503,11503,11503, 1529, 1529, 1529, 1529, 1529, 1529,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275, 1529,11275,11275,11275, + 1529,11275,11504,11504,11504,11275,11505,11275,11506,11275, + 11275,11507,11275,11508,11508,11508,11508,11508,11508,11508, + 11508,11509,11510,11275,11510,11511,11511,11511,11511,11511, + 11511,11511,11511,11511,11511,11511,11511,11511,11511,11511, + 11511,11511,11511,11511,11511,11511,11511,11511,11511,11511, + 11511,11511,11511,11511,11511,11511,11511,11511,11511,11512, + 11512,11512,11513,11513,11513,11513,11511,11511,11511,11511, + 11511,11511,11511,11511,11511,11511,11511,11511,11511,11511, + 11511,11511,11511,11511,11511,11511,11514,11514, 2198, 2198, + + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198,11511,11511,11511,11511,11511,11511,11275,11275, + 11275, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11515, + 11275,11516,11275,11516,11275,11275,11275,11517,11517,11517, + 11517,11517,11517,11517,11517,11518,11275,11275,11275,11275, + 11275,11502,11519,11275,11520,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11521, + + 11521,11522,11522,11522, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,11275, + 2198, 2198, 2198, 2198, 2198,11523,11275,11275,11275,11275, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,11275, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198,11521, 2198, 2198, 2198, 2198, + 11275, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,11275, + 11275, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + + 2198, 2198, 2198, 2198,11521, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 11275, 2198, 2198, 2198, 2198,11275,11275,11275,11275, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198,11275, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, + 2198, 2198,11275, 2198, 2198, 2198,11275,11275, 2198, 2198, + 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,11275, + 2198, 2198, 2198, 2198,11275, 2198, 2198, 2198, 2198, 2198, + + 2198, 2198, 2198, 2198, 2198,11275, 2198, 2198, 2198, 2198, + 2198, 2198, 2198,11275, 2198,11275, 2198, 2198, 2198, 2198, + 2198, 2198, 2198, 2198, 2198,11521, 2198,11275,11524,11524, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530,11275, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, 2530, + 2530, 2530, 2530,11275,11525,11525,11525,11525,11525,11525, + 11525,11525,11525,11525,11525,11525,11525,11275,11526,11526, + 11526,11275,11275,11275,11527,11527,11527,11527,11527,11527, + 11275,11275,11275,11275,11528,11529,11275,11275,11530,11275, + 11531,11531,11531,11531,11531,11531,11532,11533,11275,11275, + 11275,11275,11534,11275,11534,11534,11534,11534,11534,11534, + 11534,11534,11275,11535,11536,11537,11537,11538,11535,11539, + + 11275,11540,11275,11275,11275,11275,11541,11541,11541,11275, + 11275,11275, 2530, 2530,11542,11542,11542,11542,11542,11542, + 11542,11542,11542,11542,11542,11542,11542,11542,11543,11543, + 11543,11543,11543,11543,11543,11543,11543,11544,11544,11544, + 11544,11544,11544,11544,11544,11544,11275,11275, 2530, 2530, + 11275,11275,11275,11275,11275,11275,11545,11545,11546,11546, + 11546,11547,11547, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 11275, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863,11275, + 11275,11275, 2863,11275, 2863, 2863, 2863, 2863, 2863, 2863, + + 2863, 2863, 2863, 2863,11275, 2863,11548,11275,11275, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863,11275, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 11275,11275, 2863, 2863,11275, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863,11545, 2863, 2863, 2863, 2863, 2863,11275, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + + 2863, 2863, 2863, 2863,11275, 2863, 2863, 2863, 2863, 2863, + 2863, 2863,11275, 2863, 2863, 2863,11275, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863,11545, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863,11275, 2863, 2863, 2863, 2863, 2863, 2863, + 11275, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863,11275, 2863, 2863, 2863, 2863, 2863, 2863, + 11275, 2863, 2863, 2863,11275,11275, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + + 2863,11275,11275, 2863, 2863, 2863,11275, 2863, 2863, 2863, + 11275, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 11275, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863,11275,11275, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863,11275, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 11275, 2863, 2863, 2863, 2863, 2863,11275, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + + 2863, 2863, 2863, 2863, 2863,11275, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863,11275, 2863, 2863, 2863, 2863, + 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, + 11545, 2863, 2863,11275, 2863,11275, 2863,11275,11275, 2530, + 2850,11275,11275,11275,11549, 2530, 2530,11275,11275,11275, + 11275,11275,11275,11275,11550,11550, 2530, 2530, 2530, 2530, + 2530, 2850, 2850, 2850,11551,11551,11551,11552,11275,11553, + 11275,11554,11275,11555,11555,11555,11555,11555,11555,11555, + 11555,11555,11555,11555,11555,11555,11556,11557,11558,11558, + 11559,11559,11559,11560,11560, 3295, 3295, 3295, 3295, 3295, + + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 11275, 3295, 3295, 3295,11275,11275, 3295, 3295,11275, 3295, + 3295,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11561,11275,11275,11561,11275,11275,11275,11562,11562,11562, + 11562,11562,11562,11562,11563,11275,11275,11275,11275,11275, + 11564,11565,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11566,11566,11567,11567,11567, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295,11275,11275, 3295, 3295, 3295, 3295, + + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295,11566, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295,11275,11275, 3295, + 3295,11568, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295,11275,11275, + 11275,11275, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295,11275,11275, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295,11275, 3295, 3295, + 3295, 3295, 3295, 3295,11275, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295,11275,11566,11275,11567, 3295, + + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295,11275, 3295, 3295, 3295, 3295, 3295, 3295,11275,11569, + 11569, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621,11275, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,11275,11570, + 11570,11570,11570,11570,11570,11570,11570,11570,11570,11275, + 11275,11570,11275,11571,11571,11571,11275,11572,11275,11573, + 11275,11573,11573,11573,11275,11573,11275,11275,11275,11275, + 11275,11275,11574,11574,11275,11574,11575,11275,11576,11275, + 11275,11577,11577,11577,11577,11577,11577,11577,11577,11275, + + 11577,11578,11579,11580,11578,11580,11581,11275,11275,11582, + 11582,11275,11275, 3621,11583,11583,11275,11583,11583,11583, + 11583,11583,11583,11583,11583,11583,11583,11583,11584,11584, + 11584,11584,11584,11584,11584,11584,11584,11585,11585,11585, + 11585,11585,11585,11585,11585,11585,11275, 3621, 3621,11275, + 11275,11275,11275,11275,11275,11586,11586,11587,11587,11587, + 11588,11588,11275,11275, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962,11275,11275,11275,11275, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 11275,11275, 3962, 3962, 3962, 3962,11275,11275,11589, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962,11275,11586, 3962, 3962, + 11275, 3962, 3962,11275,11275, 3962, 3962, 3962, 3962, 3962, + 3962,11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962,11275, 3962,11275, 3962, 3962, 3962,11275, 3962, + 11275, 3962, 3962, 3962,11275, 3962, 3962,11275,11275, 3962, + 11275, 3962,11275, 3962,11275,11275, 3962,11275, 3962, 3962, + 3962, 3962,11275, 3962, 3962, 3962,11275, 3962, 3962,11590, + + 3962, 3962, 3962, 3962,11275, 3962,11275, 3962, 3962,11275, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275, + 11275,11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275, + 11275,11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962,11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962,11275,11275, 3962, 3962,11275,11275, 3962, 3962, + 3962, 3962, 3962, 3962,11275, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962,11275, 3962, 3962, 3962,11275, + 11275, 3962, 3962, 3962, 3962,11275, 3962,11275, 3962, 3962, + + 3962, 3962, 3962, 3962, 3962,11275,11275, 3962, 3962, 3962, + 3962,11275, 3962,11275,11275,11275, 3962, 3962, 3962,11275, + 11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962,11275,11275,11275, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275, 3962, + 11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962,11275, 3962, 3962, 3962, 3962,11275, 3962, 3962, 3962, + 3962,11275, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + + 3962,11275, 3962,11275, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275,11275,11275, + 11275, 3962, 3962, 3962,11275, 3962,11275, 3962,11275, 3962, + 3962, 3962, 3962, 3962, 3962,11275, 3962, 3962, 3962,11275, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962,11586,11275,11587, 3962, 3962, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, + 3962, 3962, 3962,11275,11275,11275,11275,11275, 3962, 3962, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962,11275,11275, + + 3621,11275,11275,11591,11591, 3621, 3621, 3621,11275,11275, + 11275,11275,11275,11592,11592,11592, 3621,11590, 3621,11275, + 3621, 3621, 3621,11275,11275,11593,11593,11593,11594,11275, + 11595,11275,11275,11596,11596,11596,11596,11596,11275,11597, + 11597,11597,11597,11597,11597,11597,11597,11597,11597,11597, + 11598,11597,11597,11599,11600,11601,11601,11602,11602,11602, + 11603,11603, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11604, + + 11275,11275,11604,11275,11275,11275,11605,11605,11605,11605, + 11605,11605,11605,11605,11606,11275,11275,11275,11607,11608, + 11275,11609,11609,11610,11610,11610, 4462,11611, 4462, 4462, + 4462, 4462,11275, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462,11275, + 11275,11609,11612, 4462,11275,11275,11613,11614, 4462, 4462, + 4462,11609, 4462, 4462, 4462, 4462, 4462, 4462,11275,11275, + 11275, 4462, 4462,11275,11615,11615,11615,11615,11615,11615, + 11615,11615,11275, 4462, 4462, 4462, 4462, 4462, 4462,11275, + + 11616, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462,11275, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462,11275, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462,11617, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462,11275, 4462, 4462, 4462, 4462,11275,11275,11275,11275, + 11275,11275,11275,11275, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462,11275, 4462,11275, + 11275,11618,11609,11275,11610, 4462, 4462, 4462, 4462, 4462, + 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462,11275,11619, + 11619, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + + 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791,11275,11620,11620,11620,11275,11275, + 11620,11620,11620,11620,11620,11620,11620,11620,11620,11620, + 11620,11620,11620,11620,11620,11275,11620,11275,11621,11621, + 11275,11275,11275,11622,11622,11275,11275,11275,11275,11623, + 11623,11623,11623,11623,11623,11623,11623,11275,11623,11275, + 11275,11275,11275,11624,11624,11625,11275,11626,11275,11275, + 11275,11627,11627,11627,11627,11627,11627,11627,11275,11627, + 11628,11275,11629,11275,11630,11275,11631,11275, 4791,11632, + 11275,11275,11632,11632,11632,11632,11632,11632,11632,11632, + + 11632,11632,11633,11633,11633,11633,11633,11633,11633,11634, + 11634,11634,11634,11634,11634,11634,11634, 4791,11275,11275, + 11275,11275,11275,11635,11635,11636,11636,11636,11637,11275, + 11275,11637, 5132, 5132, 5132, 5132, 5132, 5132,11275, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132,11275,11275, + 5132, 5132, 5132, 5132, 5132, 5132,11275, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132,11275,11275, 5132, 5132, 5132,11275, 5132, + 11275, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132,11275, 5132, 5132, 5132, 5132, + + 5132,11275,11275,11275,11275, 5132, 5132,11275, 5132, 5132, + 5132,11275,11635, 5132,11275, 5132,11275, 5132, 5132, 5132, + 11275, 5132,11635, 5132,11275,11275, 5132, 5132, 5132, 5132, + 5132, 5132,11275,11275, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132,11275, 5132, 5132, 5132,11638,11638,11638, + 11638, 5132, 5132, 5132, 5132, 5132,11639,11639,11275,11275, + 11639,11275,11275, 5263, 5263, 5263, 5263, 5263, 5132, 5132, + 5132, 5132, 5132,11275, 5132,11275, 5132, 5132, 5132, 5132, + 5132, 5132,11275,11275, 5132, 5132, 5132, 5132, 5132, 5132, + 5132,11275, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 11275,11275, 5132, 5132,11275,11275, 5132, 5132, 5132, 5132, + 5132, 5132,11275, 5132, 5132, 5132, 5132, 5132, 5132,11275, + 11275, 5132, 5132, 5132, 5132, 5132, 5132, 5132,11275,11275, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132,11275,11275, 5132, 5132, 5132, 5132,11275, + 11275, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132,11275,11275, + + 11275, 5132, 5132, 5132, 5132,11275,11275, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132,11275, 5132, 5132, 5132, + 5132, 5132,11275, 5132, 5132, 5132, 5132,11275,11275, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132,11275, 5132, + 5132, 5132, 5132, 5132, 5132,11275,11275, 5132,11275, 5132, + 5132, 5132,11275,11275,11275, 5132,11275, 5132,11275, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132,11275, 5132, 5132, 5132, 5132,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, 5132, + 11275, 5132, 5132,11275,11635,11275,11636, 5132, 5132, 5132, + 5132, 5132, 5132, 5132,11275, 5132, 5132, 5132, 5132, 5132, + 11275, 5132, 5132, 5132,11275,11275,11275,11275,11275,11275, + 11640,11640,11275,11275,11275, 4791, 4791, 4791,11275,11275, + 11641,11275,11275,11275,11642,11642,11642, 4791,11638, 4791, + + 11275,11275,11643,11275,11644, 4791, 4791, 4791, 4791, 4791, + 4791, 4791, 4791, 4791, 4791,11275,11275,11645,11275,11646, + 11275,11275,11275,11275,11275,11275,11275,11275,11647,11647, + 11647,11647,11647,11647,11647,11275,11648,11648,11648,11648, + 11648,11648,11648,11648,11648,11648,11648,11649,11648,11648, + 11650,11651,11652,11652,11653,11653,11653,11654,11654, 5659, + 5659,11275, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659,11275, 5659, 5659, 5659, 5659, 5659, 5659,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11655,11275,11655,11275,11275,11275,11275,11656, + + 11656,11275,11656,11656,11656,11656,11656,11656,11656,11656, + 11656,11657,11275,11275,11275,11275,11275,11275,11275,11658, + 11659,11643,11644,11644,11644,11643,11660,11275,11275, 5659, + 5659,11275,11275,11661, 5659, 5659, 5659, 5659, 5659,11275, + 11275, 5659, 5659,11662, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659,11275,11643,11275,11663, 5659, + 11664,11275,11665,11275,11275,11275, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659,11666,11666,11666,11666, + 11666,11666,11666,11666,11666,11666, 5659, 5659, 5659, 5659, + 5659,11667,11668,11667,11668,11667,11667, 5659, 5659, 5659, + + 5659, 5659, 5659, 5659, 5659, 5659,11275, 5659, 5659, 5659, + 11275,11275,11275, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659,11275,11275, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659,11275, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659,11275,11275, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659,11669,11275, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659,11275, 5659, 5659, 5659, 5659, 5659, + + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, + 5659, 5659, 5659, 5659, 5659, 5659, 5659,11275,11275,11670, + 11275, 5659, 5659, 5659, 5659,11275,11671,11671, 5978, 5978, + 5978, 5978, 5978, 5978, 5978,11662, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, + 5978,11275,11672,11672,11672,11275,11672,11672,11672,11672, + 11672,11672,11672,11672,11672,11672,11672,11672,11672,11672, + 11672,11672,11672,11275,11672,11672,11275,11673,11673,11275, + + 11275,11674,11275,11275,11275,11675,11675,11675,11675,11675, + 11675,11675,11675,11675,11675,11275,11675,11275,11275,11275, + 11275,11676,11275,11677,11678,11275,11679,11275,11275,11275, + 11680,11680,11680,11275,11680,11275,11275,11680,11681,11682, + 11683,11275,11684,11275, 5978,11275,11275,11275,11275,11275, + 11275,11685,11685,11685,11685,11685,11685,11685,11686,11686, + 11686,11686,11686,11687,11687,11687,11687,11687,11687, 5978, + 11275,11275,11688,11689,11690,11690,11690,11275,11691,11275, + 11275,11691,11275, 6282, 6282, 6282, 6282, 6282,11275,11275, + 6282,11275,11275, 6282, 6282, 6282, 6282,11275, 6282, 6282, + + 6282,11275,11275,11275, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282,11275,11275,11275, 6282, 6282,11692, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282,11275, 6282, 6282,11689, + 6282, 6282,11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 11275,11275, 6282,11275,11275, 6282, 6282, 6282,11275,11275, + 11275, 6282, 6282, 6282, 6282, 6282, 6282,11693,11693,11693, + 11693, 6282, 6282, 6282, 6282, 6282,11275,11275, 6378, 6378, + 6378, 6378, 6378, 6378,11275, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282,11275,11275,11275,11275, 6282, 6282, + + 6282, 6282, 6282,11275, 6282, 6282, 6282, 6282,11275, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282,11275, + 6282, 6282,11275, 6282, 6282, 6282,11275,11275,11275,11275, + 6282, 6282,11275, 6282,11275, 6282, 6282,11275, 6282, 6282, + 11275,11275, 6282, 6282, 6282, 6282, 6282, 6282,11275, 6282, + 11275,11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282,11275,11275, 6282, 6282, 6282, 6282, + 11275,11275, 6282, 6282,11275, 6282, 6282, 6282, 6282, 6282, + 11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + + 6282,11275,11275,11275, 6282, 6282, 6282,11275,11275, 6282, + 11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282,11275, 6282,11275, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282,11275, 6282, 6282, 6282, + 6282,11275,11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282,11275,11275, 6282,11275, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 11275,11275,11275, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282,11275, + 11275,11275,11275,11275, 6282, 6282, 6282,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, + 11275, 6282, 6282,11275, 6282, 6282, 6282, 6282,11275, 6282, + 6282, 6282,11275, 6282, 6282,11275,11275,11275,11275,11694, + 11694, 5978, 5978, 5978,11275,11275,11275,11275,11275,11275, + 11695,11695,11695,11695, 5978,11693, 5978, 5978, 5978, 5978, + 11275,11275,11696,11697,11275,11275,11275,11275,11275,11275, + + 11275,11275,11698,11698,11698,11698,11698,11698,11698,11275, + 11699,11699,11699,11699,11699,11699,11699,11699,11700,11701, + 11702,11703,11703,11703,11704,11275,11704, 6727, 6727,11275, + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727,11275, + 11275,11275, 6727, 6727,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11705,11705,11275,11275,11275, + 11275,11706,11706,11706,11706,11706,11706,11706,11706,11706, + 11706,11706,11706,11707,11275,11275,11275,11275,11275,11275, + 11275,11708,11709,11710,11710,11275, 6727,11275,11275, 6727, + 6727, 6727, 6727, 6727, 6727, 6727,11275,11711,11711,11711, + + 11711,11711,11711,11711,11711,11711,11711,11711,11711,11711, + 11711,11711,11711,11275, 6727, 6727, 6727, 6727, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727,11275,11712, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727,11693,11693,11693, + 11693,11693,11693,11693,11693,11693,11693, 6727, 6727, 6727, + 6727, 6727,11713,11713,11713,11714,11714, 6727, 6727, 6727, + 6727,11275, 6727,11275,11275, 6727,11275, 6727, 6727,11275, + 6727, 6727, 6727,11275, 6727, 6727,11275, 6727, 6727, 6727, + 6727, 6727,11275,11275, 6727, 6727, 6727, 6727, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + 6727,11275, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + 11275, 6727, 6727, 6727, 6727, 6727, 6727,11275, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727,11715, 6727, 6727, + 6727,11710,11712, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + 6727, 6727, 6727, 6727,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275, 6727, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, + + 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727, 6727,11712, + 6727, 6727,11275,11275,11275,11716,11275,11275, 6727, 6727, + 6727,11275,11275,11717,11717, 7025, 7025, 7025, 7025, 7025, + 7025,11711, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, 7025, + 7025, 7025, 7025, 7025, 7025,11275,11718,11718,11275,11718, + + 11275,11718,11718,11275,11718,11718,11719,11275,11275,11720, + 11275,11275,11275,11721,11721,11275,11275,11721,11275,11275, + 11275,11275,11275,11722,11275,11723,11275,11724,11275,11275, + 11725,11275,11275,11275,11725,11726,11275,11727,11275, 7025, + 11275,11275,11275,11728,11728,11728,11728,11728,11729,11729, + 11729,11730,11730,11730,11730, 7025,11275,11731,11275,11732, + 11732,11733,11733, 7263, 7263, 7263, 7263,11275, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263,11275,11275,11275,11275, + 11275, 7263, 7263,11275, 7263, 7263,11711,11711, 7263, 7263, + 7263, 7263, 7263,11275,11275,11275,11275, 7263, 7263, 7263, + + 11275,11275, 7263, 7263, 7263, 7263,11275, 7263, 7263, 7263, + 7263, 7263,11734, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 11275, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263,11735, + 11735,11735,11735,11735, 7263, 7263, 7263, 7263, 7263,11275, + 7340, 7340, 7340, 7340, 7340, 7340, 7263,11275, 7263, 7263, + 7263, 7263, 7263,11275, 7263,11275, 7263,11275, 7263, 7263, + 7263,11275, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263,11275,11275, 7263, 7263,11275, 7263, 7263, 7263, 7263, + 11275,11275, 7263, 7263, 7263,11275, 7263,11275,11275,11275, + 7263, 7263, 7263, 7263, 7263, 7263,11275,11275,11275,11275, + + 11275,11275,11275, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263,11275,11275,11275,11275,11275, + 11275,11275, 7263, 7263, 7263, 7263,11275, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263,11275,11275,11275, 7263, 7263,11275, + 11275,11275, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263,11275, 7263,11275,11275, 7263, 7263, 7263, + 7263,11275,11275,11275, 7263, 7263, 7263,11275, 7263, 7263, + 7263, 7263, 7263,11732,11734, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263,11275, + + 7263, 7263,11275,11275,11275, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275, 7263, + 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, 7263, + 7263, 7263, 7263, 7263,11734, 7263, 7263, 7263, 7263, 7263, + 11275, 7263,11275,11275, 7263, 7263, 7263, 7263, 7263,11275, + 11275,11275,11275,11736,11736,11275,11736,11736,11736, 7025, + 7025, 7025,11275,11275,11275,11275,11737,11737,11737,11737, + + 7025,11735, 7025, 7025, 7025, 7025,11275,11275,11738,11739, + 11275,11275,11275,11275,11275,11275,11275,11275,11740,11740, + 11740,11740,11740,11740,11275,11275,11741,11741,11741,11275, + 11741,11741,11742,11743,11744,11744,11745,11746,11746,11275, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640,11746,11745, 7656, 7656,11275,11275, + 7656,11275,11275, 7656, 7656, 7656, 7656, 7656, 7656, 7656, + 7656, 7656, 7656,11275,11275,11275,11275,11275,11275,11275, + 11747,11747,11747,11747,11747,11275,11275,11275,11275,11275, + 11275,11275,11748,11749,11750,11750,11275, 7656, 7656, 7656, + + 11275,11275, 7656, 7656,11751,11751,11751,11751,11751,11751, + 11751,11751,11751,11751,11751,11751,11751,11751,11751,11751, + 11751,11751,11751,11751,11751,11751,11751, 7656,11275, 7656, + 7656, 7656, 7656, 7656, 7656, 7656,11275,11275, 7656, 7656, + 7656, 7656, 7656, 7656, 7656, 7656,11735,11735,11735,11735, + 11735,11735,11735,11735,11735,11735,11735,11735, 7656, 7656, + 7656,11275,11752,11752,11752,11753,11753,11753, 7656, 7656, + 7656,11275,11275, 7656,11275, 7656, 7656, 7656, 7656,11275, + 7656, 7656, 7656,11275,11275,11275,11275,11275,11275,11275, + 11275, 7656, 7656, 7656, 7656,11275, 7656, 7656, 7656, 7656, + + 7656, 7656, 7656,11754, 7656, 7656, 7656, 7656, 7656, 7656, + 7656, 7656, 7656, 7656, 7656,11755, 7656, 7656, 7656, 7656, + 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, + 7656, 7656, 7656, 7656, 7656, 7656,11756,11275, 7656,11275, + 11750, 7656, 7656,11275,11275,11275,11754, 7656,11275, 7656, + 7656, 7656,11275,11275,11275, 7656, 7656, 7656, 7656, 7656, + 7656, 7656, 7656, 7656, 7656, 7656, 7656,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275, 7656, 7656, + 7656, 7656, 7656, 7656, 7656,11275,11275, 7656, 7656, 7656, + 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, + + 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, 7656, + 7656, 7656, 7656, 7656,11275, 7656,11275,11275, 7656, 7656, + 7656,11275,11757,11757, 7924, 7924, 7924,11751, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, 7924, + 7924, 7924, 7924,11275,11758,11758,11758,11758,11275,11758, + 11758,11759,11275,11760,11275,11275,11275,11275,11761,11275, + 11761,11275,11275,11275,11275,11762,11275,11763,11275,11275, + 11275,11275,11275,11764,11765,11275, 7924,11275,11275,11275, + + 11766,11766,11275,11275,11767,11767,11768,11768,11768, 7924, + 11275,11275,11275,11769,11769,11770,11770, 8117, 8117, 8117, + 11275, 8117, 8117,11275, 8117, 8117, 8117, 8117,11275,11275, + 11275, 8117, 8117,11751,11751, 8117, 8117, 8117, 8117,11275, + 11275, 8117, 8117,11275, 8117, 8117, 8117, 8117, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117,11275,11275, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117,11771,11771,11771,11771, + 11771, 8117, 8117,11275,11275,11275, 8117,11275,11275, 8179, + 8179, 8179, 8179, 8117, 8117, 8117, 8117, 8117,11275, 8117, + 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117,11275,11275, + + 11275, 8117,11275,11275,11275,11275,11275, 8117, 8117, 8117, + 11275,11275, 8117,11275,11275, 8117, 8117, 8117, 8117, 8117, + 11275,11275,11275,11275,11275, 8117, 8117, 8117, 8117, 8117, + 8117, 8117,11772, 8117, 8117, 8117,11275, 8117, 8117, 8117, + 11275, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117,11275, 8117, 8117,11275, + 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117,11275, 8117, + 11275, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, + 8117,11769, 8117, 8117, 8117,11275,11772, 8117,11275, 8117, + 8117, 8117, 8117,11275, 8117, 8117, 8117, 8117, 8117,11275, + + 11275, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, + 8117, 8117,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275, 8117, 8117, + 8117, 8117, 8117, 8117, 8117,11275, 8117, 8117, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, 8117, + 8117, 8117, 8117, 8117, 8117, 8117, 8117,11275,11275, 8117, + 8117, 8117, 8117, 8117, 8117, 8117,11275,11275,11773,11275, + 11773,11275,11773,11773, 7924,11275,11275,11275,11275,11774, + 11774,11774,11771, 7924, 7924, 7924,11275,11275,11775,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11776, + 11776,11776,11776,11776,11776,11275,11275,11777,11777,11777, + 11778,11779,11780,11780,11781,11782,11275,11275,11782,11275, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 11781, 8451,11275,11275, 8451, 8451, 8451,11275,11275, 8451, + 8451, 8451, 8451, 8451, 8451,11275,11275,11275,11275,11275, + 11275,11275,11783,11783,11783,11783,11275,11275,11275,11275, + 11275,11275,11275,11784,11784,11785,11786,11786, 8451, 8451, + 8451, 8451,11787,11787,11787,11787,11787,11275,11787,11787, + + 11787,11787,11787,11787,11787,11787,11787,11787,11787,11787, + 11787,11787,11787,11787,11787,11787,11275, 8451,11275,11275, + 8451, 8451, 8451,11275, 8451, 8451, 8451, 8451, 8451,11771, + 11771,11771,11771,11771,11275,11771,11771,11771,11771,11771, + 11771, 8451, 8451,11275,11275,11275,11788,11788,11788,11788, + 11789,11789,11789, 8451,11275,11275,11275,11275, 8451,11275, + 11275, 8451,11275,11275,11275, 8451, 8451,11275,11275, 8451, + 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, + 8451, 8451, 8451, 8451,11275, 8451, 8451, 8451, 8451,11790, + 8451, 8451,11275, 8451, 8451, 8451, 8451, 8451, 8451, 8451, + + 8451, 8451, 8451, 8451,11791, 8451, 8451, 8451,11275,11792, + 8451,11786, 8451, 8451,11275,11275,11275,11275, 8451, 8451, + 8451,11275,11275,11275,11275, 8451, 8451, 8451, 8451, 8451, + 8451, 8451, 8451, 8451, 8451,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275, 8451, 8451, 8451, 8451, + 8451, 8451,11275,11275,11793, 8451, 8451, 8451, 8451, 8451, + 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, + 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, 8451, + 8451, 8451,11275, 8451, 8451,11275,11275,11794,11794, 8689, + 8689,11787, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, 8689, + 8689, 8689, 8689, 8689, 8689, 8689,11795,11795,11796,11795, + + 11795,11797,11275,11798,11275,11275,11275,11799,11275,11275, + 11800,11275,11275,11275,11275,11275,11275,11801,11275,11275, + 11275,11802,11275,11803,11804, 8689,11275,11275,11275,11805, + 11805,11806,11806,11807,11807,11807, 8689,11275,11808,11808, + 11809,11809, 8842, 8842, 8842, 8842,11275, 8842, 8842, 8842, + 8842, 8842,11275, 8842, 8842,11787,11787,11275, 8842,11275, + 11275,11275,11275, 8842,11275,11275,11275,11275, 8842, 8842, + 8842, 8842, 8842,11275, 8842, 8842,11275, 8842, 8842, 8842, + 8842, 8842,11275, 8842,11810,11810,11810,11810,11275, 8842, + 8842,11275, 8892, 8892, 8892, 8842, 8842, 8842,11275,11275, + + 11275, 8842,11275, 8842,11275, 8842, 8842,11275, 8842, 8842, + 8842, 8842,11275,11275, 8842, 8842, 8842,11275,11275, 8842, + 8842, 8842, 8842,11275,11275,11275,11275,11275, 8842, 8842, + 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842,11275, + 11275, 8842,11275, 8842, 8842, 8842, 8842, 8842, 8842, 8842, + 8842, 8842, 8842, 8842,11275, 8842,11275, 8842, 8842, 8842, + 11275,11275,11275, 8842, 8842,11275, 8842, 8842,11275, 8842, + 8842,11811, 8842, 8842, 8842, 8842,11275, 8842, 8842,11808, + 8842, 8842,11275,11275,11275, 8842, 8842, 8842, 8842, 8842, + 8842,11275, 8842,11275,11275,11275, 8842, 8842, 8842, 8842, + + 8842, 8842, 8842, 8842,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275, 8842, 8842, 8842, 8842, 8842, 8842,11275, 8842, 8842, + 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, + 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, + 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, 8842, + 11275, 8842, 8842,11275,11812,11275,11812, 8689,11275,11275, + 11275,11813,11813,11813,11810, 8689, 8689, 8689,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11814, + 11814,11814,11814,11814,11275,11815,11816,11817,11818,11818, + + 11819,11275, 9102,11275, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102,11819, 9123,11275,11275,11275,11275, 9123,11275, + 11275, 9123, 9123,11275, 9123, 9123,11275,11275,11275,11275, + 11275,11275,11275,11275,11820,11820,11820,11275,11275,11275, + 11275,11275,11275,11275,11821,11822,11823,11824,11275, 9123, + 11275, 9123, 9123,11825,11825,11825,11825,11825,11825,11825, + 11825,11825,11825,11825,11825,11825,11825,11825,11825,11825, + 11825,11825,11825,11825,11825,11825,11825, 9123, 9123, 9123, + 9123, 9123, 9123,11810,11810,11810,11810,11810,11810,11275, + + 11275,11810,11810,11810,11810, 9123,11275,11275,11275,11275, + 11275,11826,11826,11826,11827,11827,11827, 9123,11275,11275, + 9123,11275,11275,11275,11275, 9123,11275, 9123, 9123, 9123, + 9123, 9123, 9123, 9123,11275,11275, 9123, 9123, 9123, 9123, + 9123, 9123, 9123, 9123, 9123,11275,11275,11275,11275, 9123, + 9123, 9123, 9123, 9123, 9123, 9123, 9123,11828,11275, 9123, + 9123,11275,11829,11830,11275, 9123,11824, 9123,11275,11275, + 9123, 9123,11275,11275, 9123, 9123, 9123, 9123, 9123, 9123, + 11275,11275,11275,11275,11275,11275,11275, 9123, 9123, 9123, + 9123, 9123, 9123,11831, 9123, 9123, 9123, 9123, 9123, 9123, + + 9123, 9123, 9123, 9123, 9123, 9123, 9123, 9123, 9123, 9123, + 9123, 9123, 9123, 9123, 9123, 9123, 9123, 9123, 9123,11275, + 9123, 9123,11832,11832, 9324,11825, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, 9324, + + 9324, 9324, 9324, 9324, 9324, 9324,11833,11833,11834,11275, + 11833,11835,11836,11275,11275,11275,11837,11275,11838,11275, + 11275,11275,11275,11839,11275,11275,11275,11840,11841,11275, + 9324,11275,11275,11275,11275,11842,11843,11844,11844, 9324, + 11845,11275,11846,11846, 9444, 9444,11275, 9444, 9444, 9444, + 11275,11275,11275, 9444, 9444,11825,11825, 9444,11275,11275, + 11275,11275,11275,11275,11275, 9444, 9444, 9444, 9444,11275, + 9444, 9444, 9444, 9444,11275,11847,11847,11847, 9444,11275, + 9480, 9480, 9480, 9444, 9444, 9444,11275, 9444,11275, 9444, + 9444, 9444, 9444, 9444,11275,11275, 9444, 9444, 9444,11275, + + 11275,11275,11275, 9444, 9444, 9444, 9444, 9444, 9444, 9444, + 9444,11275,11275, 9444, 9444, 9444, 9444, 9444, 9444, 9444, + 9444, 9444, 9444,11275,11275,11275,11275,11275, 9444, 9444, + 9444, 9444,11275, 9444, 9444,11848,11275, 9444, 9444,11275, + 9444, 9444, 9444,11845, 9444, 9444, 9444,11275, 9444, 9444, + 9444,11275,11275, 9444, 9444, 9444,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275, 9444, + 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, + 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, 9444, + 9444, 9444, 9444, 9444, 9444, 9444,11275, 9444, 9444, 9444, + + 9444, 9444, 9444, 9444, 9444, 9444, 9444,11275,11849, 9324, + 11275,11275,11275,11850,11850,11847, 9324, 9324, 9324,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11851,11851,11851,11851,11275,11275,11852,11853,11854, + 11275,11855,11275, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643,11855, 9666,11275,11275,11275, + 9666, 9666,11275,11275,11275,11275,11275,11856,11275,11275, + 11275,11275,11275,11275,11857,11275,11858,11859,11860,11861, + 11275,11275,11275, 9666, 9666,11275,11862,11862,11862,11862, + + 11862,11862,11862,11862,11862,11862,11275,11275,11862,11862, + 11862,11862,11862,11862,11862,11862,11862,11862,11862,11862, + 9666, 9666, 9666, 9666, 9666,11847,11847,11847,11275,11275, + 11847,11847,11847,11847,11847,11847, 9666,11275,11275,11275, + 11275,11275,11863,11863,11863,11863,11864,11865, 9666,11275, + 11275,11275, 9666, 9666, 9666,11275,11275, 9666, 9666, 9666, + 9666,11275,11275,11275,11866, 9666,11867, 9666,11275,11275, + 11275,11275, 9666, 9666,11275,11275, 9666, 9666,11275,11868, + 9666, 9666,11275,11275,11860,11275,11275,11869,11275,11275, + 9666,11275,11275, 9666,11275, 9666, 9666, 9666,11275,11275, + + 11275,11275,11275,11275,11275,11870, 9666, 9666, 9666, 9666, + 9666, 9666, 9666, 9666, 9666, 9666, 9666, 9666, 9666, 9666, + 9666, 9666, 9666, 9666, 9666,11275,11275,11871,11275,11275, + 9666,11872,11872,11862, 9833, 9833, 9833, 9833, 9833, 9833, + 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, + 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, + 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, + 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, 9833, + 9833,11873,11275,11874,11875,11275,11275,11275,11275,11275, + 11275,11275,11275,11275, 9833,11275,11876,11877,11878,11878, + + 9833,11879,11275,11880,11880, 9905, 9905, 9905, 9905,11275, + 9905,11862,11275, 9905,11275,11275,11275,11275,11275,11275, + 9905, 9905,11275, 9905, 9905, 9905, 9905,11881,11881,11881, + 11275, 9931, 9931, 9931, 9905, 9905,11275, 9905, 9905, 9905, + 11275,11275, 9905,11275,11275,11275, 9905, 9905, 9905, 9905, + 9905, 9905, 9905,11275,11275, 9905,11275, 9905, 9905, 9905, + 9905,11275,11275,11275,11275, 9905, 9905, 9905,11275, 9905, + 11275,11882, 9905, 9905,11275, 9905,11879,11275, 9905, 9905, + 9905,11275,11275, 9905, 9905,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275, 9905, 9905, 9905, + + 9905, 9905, 9905, 9905, 9905, 9905, 9905, 9905, 9905, 9905, + 9905, 9905, 9905, 9905, 9905, 9905, 9905,11275, 9905,11275, + 11275, 9905,11883,11275,11275,11275,11884,11884,11881,11885, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11886,11886,11275,11275,11275,11275,11887, + 11275,11888,11275,11275,10054,10054,10054,10054,10054,10054, + 11275,11275,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,11888,11275,11275,11275,10075,11275, + 11275,11275,11275,11889,11275,11275,11275,11275,11275,11890, + 11891,11275,11892,10075,10075,11862,11862,11862,11862,11862, + + 11862,11862,11862,11862,11862,11862,11862,11862,11862,11275, + 11275,11275,11862,11862,11862,11862,11862,11275,10075,10075, + 10075,10075,10075,11881,11881,11881,11275,11881,11275,11881, + 11275,11881,11881,11881,11275,11275,11275,11275,11893,11894, + 11895,11896,11894,11894,11894,11896,11896,11896,10075,11275, + 11275,10075,10075,11275,10075,10075,10075,11897,11275,10075, + 11898,11275,10075,11275,11275,11275,11275,10075,10075,10075, + 11899,11275,10075,10075,11275,11900,11901,11275,11275,11275, + 11275,11275,11275,11902,11275,11275,11275,11275,11903,10075, + 10075,10075,11275,11275,11275,11275,11275,11275,11275,11904, + + 11275,10075,10075,10075,10075,10075,10075,10075,10075,10075, + 10075,10075,10075,10075,11905,11275,11275,11275,10075,11906, + 11906,11862,10221,10221,10221,10221,10221,10221,10221,10221, + 10221,10221,10221,10221,10221,10221,10221,10221,10221,10221, + 10221,10221,10221,10221,10221,10221,10221,10221,10221,10221, + 10221,10221,10221,10221,10221,10221,10221,11275,11907,11275, + 11908,11275,11275,11275,11275,11275,11275,11275,11909,10221, + 11910,11910,10272,10272,10272,11275,10272,11275,10272,11275, + 11275,11275,11275,11275,11275,10272,10272,11275,10272,10272, + 10272,11911,11911,11911,11912,11912,11275,10272,10272,10272, + + 10272,11275,11275,10272,10272,10272,10272,10272,10272,10272, + 10272,11275,10272,11275,10272,10272,10272,11275,10272,11913, + 11275,10272,10272,11914,11275,11915,11275,10272,11275,10272, + 10272,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,10272,10272,10272,10272,10272,10272,10272,10272, + 10272,10272,10272,10272,10272,10272,10272,11916,11275,11917, + 11917,11911,11918,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11919,11275,11275, + 11275,11275,10075,11275,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,11275,11920,11275,10384,10384,10384, + + 10384,10384,11275,10075,11275,11275,10075,11275,11275,11275, + 11275,11275,11275,11275,11275,11921,11922,11275,11275,11923, + 11923,11923,11923,11923,11923,11275,11275,11923,11923,11923, + 11275,11923,11923,11924,11923,11923,11923,11923,11923,10075, + 11925,11275,11926,10075,10075,11911,11275,11911,11275,11911, + 11275,11911,11275,11275,11275,11275,11927,11928,11929,11929, + 11928,11928,11928,11927,11928,11930,11930,11275,11275,10075, + 10075,10075,10075,11931,11275,11275,11275,11275,10075,10075, + 11275,11932,11275,10075,11275,11933,11934,11275,11275,11275, + 11275,11275,11275,11935,11275,10075,10075,10075,11936,11275, + + 11275,11275,11275,11275,10075,10075,11937,10075,10075,10075, + 10075,10075,10075,10075,11938,11275,11275,10075,11923,11939, + 11939,10521,10521,10521,10521,10521,10521,10521,10521,10521, + 10521,10521,10521,10521,10521,10521,10521,10521,10521,10521, + 10521,10521,11275,11940,11275,11275,11941,11275,11275,11275, + 11275,11942,10521,11943,11943,10555,10555,11275,11944,10555, + 11275,11275,11275,11275,11275,11275,11275,10555,10555,11945, + 11275,11275,11275,11275,11275,10555,10555,11275,11275,10555, + 10555,10555,10555,10555,10555,11275,10555,10555,10555,11275, + 10555,11275,11946,10555,11947,10555,11275,10555,10555,11275, + + 11275,11275,11275,11275,11275,11275,10555,10555,10555,10555, + 10555,10555,10555,10555,10555,10555,10555,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11948,11275,11275,11275,11275,11275,11275,10638,10638, + 11949,11275,10638,10638,10638,11275,10638,10638,10638,10638, + 10638,10638,10638,11275,11950,10075,11275,11275,11275,11275, + 11275,11275,11951,11275,11952,11923,11923,11923,11923,11923, + 11923,11953,11923,11275,11923,11275,11923,11954,11275,11275, + 11923,11275,11923,11923,11923,11923,10075,11955,11275,11956, + 11275,11957,11958,11945,11275,11945,11945,11959,11275,11275, + + 11959,11959,11959,11959,11959,11960,11960,11961,11962,11962, + 11962,11275,10075,11275,11275,11275,11963,11275,10075,11964, + 11275,11275,10075,11965,11275,10075,11275,11966,11275,11275, + 11275,11275,11275,11275,11967,11275,10075,11275,11968,11275, + 11275,11275,11275,10075,10075,11969,11275,10075,10075,10075, + 10075,10075,11970,11275,11275,11923,11971,11971,10758,10758, + 10758,10758,10758,10758,10758,10758,10758,10758,10758,11972, + 11275,11275,11973,11275,11275,11275,11275,11275,11974,11974, + 10780,11275,10780,11275,11275,11275,11275,11275,11275,11945, + 10780,10780,11275,11275,10780,10780,11275,11975,11275,10780, + + 10780,11275,10780,11976,11275,10780,11977,10780,11275,11275, + 11275,11275,11275,10780,11275,10780,10780,10780,10780,10780, + 10780,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11978,11275,11275,11275,11275,11275, + 10840,10840,10840,11275,10840,11275,10840,11979,10840,11275, + 10840,10840,10840,10840,11275,11980,11275,11275,11275,11275, + 11275,11275,11981,11982,11275,11923,11923,11275,11923,11275, + 11275,11275,11275,11983,11275,11923,11275,11923,11275,11923, + 11275,11923,11275,11275,10075,11275,11984,11275,11985,11275, + 11945,11945,11986,11275,11986,11986,11275,11987,11987,11987, + + 11988,11989,11989,11989,11275,11275,10075,11275,11990,11275, + 11991,11275,10075,11275,11992,11275,11275,11275,11275,11993, + 11993,11275,10075,11275,11275,10075,10075,10075,10075,10075, + 10075,11275,11275,11994,11994,10935,10935,10935,10935,10935, + 10935,10935,10935,11275,11275,11275,11995,11275,11995,11275, + 11275,11275,11275,11275,11275,11945,10949,10949,10949,11996, + 10949,11275,11275,11275,11275,10949,11275,10949,10949,10949, + 10949,10949,11275,11275,11275,11275,11275,11275,11997,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11998,11275,11998,11275,10990,11275,10990,11275,10990,11275, + + 10990,11998,11275,11275,11275,11275,11275,11275,11999,11999, + 11275,11999,11275,11999,11999,10075,11275,11945,11275,11986, + 11275,11275,11986,11986,11986,11275,11987,11987,11987,11989, + 11989,11989,11275,12000,11990,11275,11991,11275,12001,11275, + 11275,11275,11275,11275,11993,11993,11275,11275,10075,12002, + 10075,11275,10935,10935,10935,11275,11275,10949,10949,11275, + 11275,11275,11275,11275,11275,11275,10949,11275,10949,10949, + 11275,11275,11275,11275,11275,11275,11997,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,10990,11275, + 10990,10990,11275,11275,11275,11999,11999,11275,11999,11999, + + 10075,11275,11945,11275,11275,11986,11986,11986,11987,11987, + 11987,11989,11989,12000,11275,12001,11275,11275,11275,11993, + 11993,11275,11275,12002,11275,11275,10935,10949,10949,11275, + 11275,11275,10949,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,10990,10990, + 11275,11275,11275,11275,11275,11999,11275,11275,11275,11945, + 11986,11986,11986,11987,11987,11989,12003,11275,11275,11275, + 11993,11275,11275,11275,10949,11275,11275,11275,10949,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,10990,11275,11275,11275,11275,11999,11275,11986, + + 11986,11987,12003,11275,11275,11275,11993,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,10990, + 11275,11999,11275,11986,12004,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,10990,11999,11275,12004,11275,11275, + 11275,11275,11275,11275,11275,11275,10990,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,12005,11275, + 11275,11275,11275,11275,12005,11275,11275,11275,11275,11275, + 11275,12006,12006,11275, 0,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275 + } ; + +static yyconst flex_int16_t yy_nxt[45258] = + { 0, + 11275,11275, 183, 184, 185, 183, 212, 186, 187, 188, + 189, 190, 191, 233, 244, 233, 244, 414, 192, 201, + 202, 203, 201, 202, 203, 212, 206, 207, 414, 193, + 212, 194, 208, 206, 207, 248, 647, 648, 248, 208, + 212, 211, 212, 211, 211, 272, 212, 213, 899, 214, + 212, 272, 218, 218, 218, 218, 2909, 212, 195, 212, + 219, 371, 196, 211, 212, 211, 211, 415, 208, 213, + 416, 214, 233, 234, 204, 233, 234, 204, 415,11275, + 223, 209, 253, 254, 255, 253, 254, 255, 209, 197, + 198, 199, 200, 183, 184, 185, 183, 215, 186, 187, + + 188, 189, 190, 191, 212, 223, 366, 205, 220, 192, + 205, 224, 371, 218, 218, 218, 218, 417, 342, 215, + 193, 219, 194, 226, 227, 228, 226, 235, 216, 1758, + 235, 229, 226, 227, 228, 226, 224, 248, 367, 221, + 229, 866, 366, 212, 233, 234, 238, 342, 248, 195, + 216, 866, 239, 196, 257, 258, 257, 258, 236, 381, + 237, 236, 811, 237, 812, 233, 234, 238, 818, 220, + 240, 819, 241, 239, 367, 769, 770, 257, 261, 230, + 197, 198, 199, 200, 262, 249, 233, 234, 230, 233, + 234, 240, 245, 241, 239, 245, 249, 239, 381, 242, + + 221, 257, 261, 568, 569, 2911, 257, 261, 262, 259, + 231, 259, 240, 264, 241, 240, 250, 241, 251, 231, + 242, 257, 261, 312, 313, 314, 312, 250, 264, 251, + 257, 267, 263, 257, 267, 268, 519, 269, 268, 1138, + 269, 246, 257, 316, 246, 292, 445, 292, 293, 317, + 293, 293, 293, 293, 293, 293, 263, 292, 570, 292, + 293, 265, 293, 293, 293, 293, 293, 293, 312, 313, + 314, 312, 257, 316, 776, 777, 265, 445, 1298, 317, + 322, 323, 324, 322, 520, 270, 1262, 294, 270, 278, + 279, 278, 278, 769, 770, 446, 1200, 318, 1263, 294, + + 322, 323, 324, 322, 800, 515, 360, 361, 280, 280, + 280, 280, 280, 280, 208, 208, 281, 281, 281, 801, + 613, 327, 328, 329, 327, 895, 446, 318, 319, 208, + 320, 416, 327, 328, 329, 327, 325, 515, 568, 569, + 866, 353, 354, 355, 353, 282, 278, 279, 278, 278, + 519, 335, 336, 337, 335, 516, 325, 866, 319, 338, + 320, 362, 1297, 446, 446, 280, 280, 280, 280, 280, + 280, 769, 770, 281, 281, 281, 1760, 330, 417, 331, + 332, 335, 336, 337, 335, 565, 517, 516, 330, 338, + 331, 332, 363, 570, 364, 565, 1138, 356, 520, 611, + + 2932, 612, 282, 284, 285, 286, 284, 339, 613, 287, + 333, 353, 354, 355, 353, 769, 770, 288, 517, 288, + 289, 333, 289, 289, 289, 289, 289, 289, 357, 825, + 826, 290, 1709, 566, 1710, 360, 361, 339, 340, 344, + 345, 346, 344, 566, 820, 347, 2941, 348, 344, 345, + 346, 344, 510, 511, 347, 843, 348, 512, 843, 291, + 284, 285, 286, 284, 825, 826, 287, 356, 340, 498, + 498, 498, 498, 1157, 288, 866, 288, 289, 986, 289, + 289, 289, 289, 289, 289, 649, 866, 611, 290, 612, + 362, 2942, 390, 870, 349, 350, 870, 391, 357, 392, + + 393, 390, 822, 349, 350, 823, 391, 513, 392, 393, + 813, 489, 2948, 490, 776, 777, 291, 295, 296, 297, + 295, 363, 1138, 364, 499, 500, 351, 872, 489, 1160, + 490, 298, 383, 298, 299, 351, 299, 299, 299, 299, + 299, 299, 973, 384, 761, 384, 385, 394, 385, 385, + 385, 385, 385, 385, 876, 1695, 394, 386, 814, 974, + 877, 491, 522, 523, 524, 525, 1696, 398, 399, 400, + 398, 2968, 878, 300, 879, 401, 776, 777, 491, 301, + 302, 303, 304, 305, 890, 387, 306, 890, 971, 815, + 307, 816, 492, 308, 493, 2969, 309, 310, 373, 374, + + 373, 373, 398, 399, 400, 398, 873, 972, 874, 492, + 401, 493, 375, 383, 375, 376, 388, 376, 376, 376, + 376, 376, 376, 402, 384, 933, 384, 385, 938, 385, + 385, 385, 385, 385, 385, 825, 826, 2534, 386, 405, + 406, 407, 405, 405, 406, 407, 405, 408, 578, 579, + 934, 408, 957, 934, 377, 957, 403, 2535, 402, 915, + 378, 411, 411, 411, 411, 2985, 387, 825, 826, 412, + 411, 411, 411, 411, 466, 467, 468, 466, 412, 825, + 826, 469, 470, 825, 826, 379, 373, 374, 373, 373, + 916, 403, 917, 647, 648, 409, 580, 388, 1109, 409, + + 375, 1109, 375, 376, 1201, 376, 376, 376, 376, 376, + 376, 466, 467, 468, 466, 510, 511, 413, 469, 470, + 512, 522, 523, 524, 525, 2986, 413, 581, 930, 581, + 471, 466, 467, 468, 466, 647, 648, 931, 469, 470, + 360, 361, 377, 466, 467, 468, 466, 486, 378, 932, + 469, 470, 472, 473, 474, 472, 489, 1202, 490, 469, + 475, 472, 473, 474, 472, 360, 361, 471, 469, 475, + 513, 1282, 486, 379, 183, 184, 185, 183, 1684, 186, + 187, 395, 189, 190, 191, 1685, 489, 471, 490, 761, + 192, 498, 498, 498, 498, 487, 1283, 578, 579, 471, + + 798, 193, 798, 194, 1099, 494, 495, 496, 476, 547, + 547, 547, 547, 502, 503, 504, 502, 476, 1067, 1068, + 487, 505, 547, 547, 547, 547, 363, 608, 488, 609, + 396, 1138, 813, 2987, 196, 494, 495, 496, 1077, 1078, + 502, 503, 504, 502, 1161, 580, 499, 500, 505, 1231, + 798, 363, 1232, 488, 551, 551, 551, 551, 811, 799, + 812, 197, 198, 199, 200, 183, 184, 185, 183, 506, + 186, 187, 395, 189, 190, 191, 581, 610, 581, 905, + 813, 192, 548, 820, 895, 549, 602, 603, 604, 602, + 769, 770, 193, 761, 194, 548, 506, 1069, 549, 811, + + 507, 812, 508, 602, 603, 604, 602, 1070, 611, 760, + 612, 813, 761, 813, 843, 762, 763, 843, 552, 866, + 764, 396, 553, 765, 1720, 196, 766, 507, 1721, 508, + 835, 835, 835, 835, 835, 835, 866, 554, 776, 777, + 821, 822, 2573, 846, 823, 846, 846, 846, 846, 846, + 846, 2574, 197, 198, 199, 200, 418, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 430, 423, 423, 423, 431, 423, 423, 432, 432, 432, + 432, 432, 432, 423, 423, 433, 434, 435, 423, 418, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 430, 437, 430, 438, 439, 440, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 441, 442, 443, 444, 448, + 449, 184, 450, 449, 866, 451, 452, 453, 454, 455, + 456, 617, 618, 617, 619, 866, 457, 212, 212, 212, + 212, 880, 880, 880, 880, 1112, 1113, 458, 866, 459, + 212, 212, 212, 212, 880, 880, 880, 880, 866, 551, + 551, 551, 551, 880, 881, 880, 880, 1133, 1134, 212, + + 212, 212, 212, 212, 212, 212, 460, 845, 212, 845, + 461, 572, 572, 825, 826, 556, 557, 620, 556, 557, + 1120, 558, 559, 585, 558, 559, 212, 212, 212, 212, + 1236, 1236, 870, 573, 573, 870, 585, 462, 463, 464, + 465, 448, 449, 184, 450, 449, 2529, 451, 452, 453, + 454, 455, 456, 552, 586, 587, 2637, 553, 457, 560, + 561, 562, 560, 561, 562, 574, 574, 586, 1753, 458, + 1120, 459, 554, 1262, 574, 574, 776, 777, 575, 575, + 574, 574, 587, 1257, 1258, 1263, 588, 608, 779, 609, + 576, 576, 563, 1754, 1122, 563, 905, 906, 460, 1257, + + 1258, 907, 461, 591, 592, 593, 591, 212, 212, 212, + 212, 1265, 1266, 588, 1201, 606, 594, 212, 212, 212, + 212, 617, 618, 617, 619, 606, 820, 647, 648, 462, + 463, 464, 465, 447, 595, 890, 1267, 610, 890, 477, + 1268, 478, 780, 781, 1269, 782, 783, 1332, 784, 922, + 922, 922, 922, 785, 786, 1333, 769, 770, 787, 596, + 788, 789, 783, 607, 776, 777, 597, 1202, 611, 1334, + 612, 1079, 1267, 607, 1080, 597, 1268, 620, 1081, 598, + 1527, 597, 775, 828, 829, 1699, 1697, 830, 1082, 1083, + 479, 599, 923, 831, 923, 480, 480, 480, 480, 480, + + 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, + 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, + 480, 481, 2999, 482, 447, 447, 449, 184, 450, 449, + 447, 451, 452, 478, 454, 455, 456, 447, 447, 447, + 447, 447, 457, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 458, 447, 459, 447, 447, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, + 483, 447, 484, 447, 447, 447, 461, 485, 485, 485, + 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, + + 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, + 485, 485, 485, 481, 463, 482, 465, 183, 527, 528, + 183, 2112, 529, 530, 531, 189, 532, 533, 621, 622, + 622, 621, 3002, 534, 1716, 1717, 623, 622, 622, 622, + 622, 825, 826, 1322, 535, 623, 536, 622, 625, 622, + 622, 922, 922, 922, 922, 623, 591, 592, 593, 591, + 989, 989, 989, 989, 622, 622, 622, 622, 876, 594, + 966, 967, 623, 537, 968, 1323, 1324, 538, 969, 2612, + 622, 718, 622, 622, 624, 970, 1747, 595, 623, 621, + 622, 622, 719, 624, 1774, 2613, 1775, 623, 773, 773, + + 773, 773, 2112, 624, 539, 540, 199, 541, 183, 527, + 528, 183, 596, 529, 530, 531, 189, 532, 533, 597, + 624, 960, 961, 957, 534, 962, 957, 1702, 597, 963, + 1703, 964, 598, 3004, 597, 535, 624, 536, 622, 622, + 622, 622, 1704, 895, 599, 720, 623, 622, 759, 622, + 622, 802, 2477, 837, 802, 623, 802, 908, 908, 908, + 908, 908, 838, 839, 537, 1057, 3009, 933, 538, 840, + 845, 841, 845, 846, 842, 846, 846, 846, 846, 846, + 846, 2478, 938, 1359, 849, 774, 849, 849, 849, 849, + 849, 849, 934, 1360, 624, 539, 540, 199, 541, 626, + + 2473, 1768, 1794, 624, 802, 883, 884, 934, 1722, 885, + 804, 1723, 886, 805, 1769, 1795, 627, 806, 628, 761, + 887, 629, 1058, 1724, 2533, 630, 807, 808, 809, 631, + 935, 1805, 935, 632, 1059, 1361, 3010, 849, 633, 849, + 849, 849, 849, 849, 849, 983, 983, 983, 983, 634, + 635, 2129, 984, 2533, 636, 2116, 1806, 2130, 637, 983, + 983, 983, 983, 2678, 638, 1798,11275, 1799, 639, 1268, + 640, 3011, 937, 1269, 641, 2048, 2049, 642, 651, 1800, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 1067, + 1068, 661, 662, 663, 664, 665, 666, 666, 666, 667, + + 666, 666, 662, 668, 2116, 669, 662, 3012, 670, 671, + 672, 673, 674, 674, 674, 675, 676, 674, 677, 678, + 674, 679, 680, 681, 682, 674, 674, 674, 683, 674, + 684, 674, 685, 686, 3017, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 674, 674, 714, 2577, 715, 716, 651, 2529, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 2062, + 2063, 661, 662, 663, 664, 665, 666, 666, 666, 667, + 666, 666, 662, 668, 1109, 669, 662, 1109, 670, 721, + + 722, 723, 724, 724, 724, 725, 726, 724, 727, 728, + 724, 729, 730, 731, 732, 724, 724, 724, 733, 724, + 734, 724, 685, 686, 3018, 687, 688, 689, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, + 757, 758, 724, 724, 714, 2270, 715, 716, 793, 793, + 793, 2528, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 794, 794, 794, 794, 794, 794, 794, 794, 794, + + 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 793, 793, 793, 793, 793, + 793, 794, 795, 794, 794, 796, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 793, 793, 793, + 793, 851, 852, 852, 851, 863, 2112, 863, 863, 863, + 863, 863, 863, 903, 903, 903, 903, 903, 903, 852, + 852, 852, 852, 863, 3019, 863, 863, 863, 863, 863, + 863, 2121, 940, 2112, 940, 940, 2340, 852, 862, 852, + 852, 896, 897, 898, 896, 3020, 1813, 899, 1262, 901, + + 902, 902, 901, 2266, 1814, 899, 901, 897, 902, 901, + 1077, 1078, 899, 853, 854, 855, 856, 857, 1815, 2219, + 858, 1267, 1112, 1113, 859, 1268, 2220, 860, 2114, 2050, + 861, 853, 854, 855, 856, 857, 2221, 2112, 858, 941, + 1133, 1134, 859, 1636, 942, 860, 900, 2113, 861, 853, + 854, 855, 856, 857, 900, 2122, 858, 2588, 943, 2668, + 859, 900, 2557, 860, 2112, 2669, 861, 894, 894, 894, + 894, 894, 894, 894, 894, 895, 894, 909, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + + 894, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 894, 894, 894, 894, 894, 894, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 2562, 894, 894, 894, + 912, 912, 912, 912, 923, 2260, 923, 924, 2563, 924, + 924, 924, 924, 924, 924, 924, 2261, 924, 924, 924, + 924, 924, 924, 935, 1282, 935, 936, 3027, 936, 936, + 936, 936, 936, 936, 936, 1322, 936, 936, 936, 936, + + 936, 936, 948, 2272, 949, 950, 3028, 951, 952, 1283, + 912, 1138, 953, 954, 955, 1246, 1247, 1248, 1246, 956, + 880, 880, 880, 880, 2135, 937, 651, 1323, 652, 653, + 654, 655, 656, 657, 658, 659, 660, 1265, 1266, 661, + 662, 663, 664, 665, 666, 666, 666, 667, 666, 666, + 662, 668, 1273, 669, 662, 3031, 670, 721, 722, 723, + 724, 724, 724, 725, 726, 724, 727, 728, 724, 729, + 730, 731, 732, 724, 724, 724, 733, 724, 734, 724, + 685, 686, 1138, 687, 688, 689, 735, 760, 737, 738, + 944, 740, 741, 762, 763, 744, 745, 746, 764, 748, + + 749, 945, 751, 752, 766, 754, 755, 756, 757, 758, + 724, 724, 714, 2168, 715, 716, 975, 976, 976, 975, + 976, 976, 976, 976, 623, 1101, 2272, 2112, 623, 976, + 979, 976, 976, 975, 976, 976, 980, 623, 1259, 3032, + 1260, 623, 1265, 1266, 977, 2169, 1324, 3042, 977, 987, + 987, 987, 987, 987, 987, 1265, 1266, 977, 1282, 2133, + 1284, 981, 1056, 622, 622, 1056, 622, 625, 622, 622, + 623, 2869, 978, 915, 623, 1273, 978, 1092, 1060, 1061, + 1061, 1060, 1093, 1283, 2115, 978, 1062, 2273, 813, 978, + 626, 1061, 1061, 1061, 1061, 1061, 1064, 1061, 1061, 1062, + + 2869, 1857, 1359, 1062, 916, 1359, 917, 627, 2112, 628, + 2255, 1858, 629, 2277, 1325, 1360, 630, 2256, 624, 813, + 631, 813, 624, 2275, 632, 1071, 1072, 1072, 1071, 633, + 1094, 674, 1095, 1073, 1063, 674, 1558, 761, 2871, 1283, + 634, 635, 2531, 1359, 1297, 636, 1652, 1063, 1653, 637, + 2592, 1063, 1096, 1859, 1361, 638, 1354, 1361, 2872, 639, + 674, 640, 1097, 674, 674, 641, 674, 674, 642, 651, + 674, 992, 653, 654, 993, 994, 995, 996, 659, 997, + 998, 1074, 661, 662, 663, 664, 665, 999, 999, 999, + 1000, 999, 999, 662, 668, 1361, 1001, 662, 3052, 1002, + + 1003, 1004, 1005, 1006, 1007, 1007, 1008, 1009, 1010, 1011, + 1012, 1007, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1007, 685, 1023, 1024, 687, 1025, 689, 1026, + 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, + 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, + 1047, 1048, 1049, 1007, 1050, 714, 1051, 715, 1052, 1072, + 1072, 1072, 1072, 1072, 1075, 1072, 1072, 1073, 2570, 1117, + 2571, 1073, 2572, 2380, 813, 1250, 2381, 813, 1135, 1135, + 1135, 1135, 1325, 1118, 1118, 1118, 1118, 1118, 1125, 1325, + 1126, 1127, 674, 1128, 1129, 880, 880, 880, 880, 1130, + + 3053, 622, 622, 622, 622, 1131, 1636, 1283, 3060, 623, + 622, 1139, 622, 622, 1283, 1074, 1329, 2553, 623, 1074, + 626, 674, 813, 1636, 674, 813, 2719, 674, 1135, 2578, + 1251, 1107, 1252, 1350, 1103, 1253, 2579, 627, 2371, 628, + 1254, 1283, 629, 1119, 1466, 3064, 630, 1255, 1256, 1104, + 631, 1105, 2891, 813, 632, 813, 813, 624, 813, 633, + 1239, 1239, 1239, 1239, 2301, 3065, 624, 2594, 2595, 1283, + 634, 1084, 1085, 1085, 1085, 1086, 1085, 1085, 1085, 1087, + 1085, 1085, 1085, 1085, 1085, 1088, 1085, 1085, 1085, 1089, + 1085, 1090, 1085, 1085, 1085, 1091, 1085, 1224, 642, 1138, + + 1212, 1212, 1212, 1212, 1325, 2892, 1140, 1225, 1203, 2580, + 1204, 2586, 3066, 1226, 674, 2607, 1240, 1227, 1242, 1242, + 1242, 1242, 1228, 1141, 1229, 1142, 2581, 2608, 1143, 1283, + 1331, 1205, 1144, 2701, 674, 674, 1145, 1206, 1207, 2702, + 1146, 1208, 2612, 674, 1209, 1147, 674, 1210, 1211, 1347, + 835, 835, 835, 835, 835, 835, 1148, 1149, 2729, 1348, + 2174, 1150, 2300, 674, 674, 1151, 674, 674, 2175, 674, + 674, 1152, 1349, 1213, 1243, 1153, 1214, 1154, 2237, 2238, + 2239, 1155, 2176, 2240, 1156, 1162, 1162, 1162, 1163, 1162, + 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1162, + + 1162, 1173, 1174, 1175, 1176, 1177, 1178, 1178, 1178, 1179, + 1178, 1178, 1174, 1180, 1162, 1181, 1174, 1162, 1182, 671, + 672, 673, 674, 674, 674, 675, 676, 674, 677, 678, + 674, 679, 680, 681, 682, 674, 674, 674, 683, 674, + 684, 674, 1183, 1184, 1162, 1185, 1186, 1187, 690, 1188, + 1189, 693, 1190, 695, 696, 1191, 1192, 699, 700, 701, + 702, 703, 704, 1193, 706, 707, 1194, 1195, 1196, 711, + 712, 713, 674, 674, 1197, 1162, 1198, 1199, 1217, 1217, + 1217, 1217, 621, 622, 622, 621, 674, 2601, 674, 2602, + 623, 622, 622, 622, 622, 622, 622, 622, 622, 623, + + 3067, 2549, 2529, 623, 1274, 1274, 1274, 1274, 1276, 1277, + 1278, 1276, 623, 1355, 1325, 674, 1279, 674, 674, 2550, + 674, 674, 846, 1356, 846, 846, 846, 846, 846, 846, + 666, 666, 666, 666, 666, 666, 2603, 1329, 624, 1283, + 674, 1351, 1218, 2641, 674, 3072, 1219, 624, 2642, 674, + 2604, 624, 2116, 666, 666, 666, 666, 666, 666, 2644, + 1275, 1220, 1283, 2645, 1280, 1284, 905, 906, 1428, 674, + 1352, 907, 674, 674, 895, 674, 1429, 1327, 674, 1430, + 674, 674, 1431, 2849, 674, 622, 622, 622, 622, 2658, + 2659, 1328, 2574, 623, 1285, 2696, 1353, 674, 1286, 1267, + + 1327, 2116, 1287, 2064, 674, 2532, 1288, 2065, 1357, 674, + 1753, 1289, 674, 674, 1328, 674, 2117, 2066, 1290, 2241, + 2242, 2243, 1358, 1291, 2244, 2794, 674, 1292, 2490, 674, + 674, 1293, 674, 674, 2533, 1754, 674, 1294, 1449, 1448, + 724, 624, 674, 1295, 895, 674, 1325, 1296, 674, 1297, + 1298, 1384, 775, 1385, 1386, 1387, 2664, 674, 2559, 674, + 1450, 3080, 1388, 2560, 1389, 674, 1390, 2665, 1391, 724, + 1466, 1283, 724, 2426, 1558, 724, 1558, 2427, 1462, 1299, + 2660, 1300, 1463, 1301, 2992, 674, 674, 1302, 2646, 674, + 1303, 1304, 1464, 3081, 1305, 674, 1306, 2529, 1465, 2993, + + 1307, 1308, 2428, 1309, 2692, 2421, 2429, 674, 1310, 1519, + 1311, 2647, 1312, 2673, 674, 2674, 1313, 674, 2516, 1520, + 674, 1314, 1315, 1805, 674, 2793, 1316, 674, 1317, 1467, + 674, 1468, 1318, 1319, 1320, 1325, 674, 1298, 3085, 674, + 2661, 2529, 674, 1469, 1558, 1470, 2629, 2630, 1806, 1471, + 674, 1326, 1326, 1326, 1326, 1326, 1326, 724, 2682, 2631, + 1283, 2683, 2684, 1331, 1335, 2694, 1362, 2632, 1336, 2695, + 1363, 1422, 1423, 1424, 1364, 2718, 2703, 2532, 1365, 1425, + 2704, 2633, 674, 1366, 895, 1426, 724, 2608, 1427, 724, + 1367, 724, 1539, 1857, 1337, 1368, 1338, 2764, 1339, 1369, + + 2764, 2531, 1540, 1370, 1340, 1652, 1857, 1653, 1341, 1371, + 2575, 1342, 1343, 1325, 674, 1372, 773, 773, 773, 773, + 724, 1297, 1298, 724, 2923, 674, 724, 2685, 2924, 1326, + 1326, 1326, 1326, 1326, 1326, 1400, 2686, 2664, 1283, 1401, + 2687, 1331, 1402, 1403, 2688, 1859, 1404, 1636, 2732, 1405, + 1344, 1373, 1406, 1407, 674, 1374, 1558, 674, 1859, 1375, + 674, 2712, 1477, 1376, 2638, 2793, 1478, 2531, 1377, 2639, + 2716, 1652, 1337, 2614, 1338, 1378, 1339, 3086, 2615, 1344, + 1379, 2616, 1345, 2640, 1380, 1346, 1341, 1392, 1381, 1342, + 1343, 1393, 1394, 1395, 1382, 1396, 674, 2664, 674, 1397, + + 1383, 1398, 2828, 774, 1399, 674, 1297, 2828, 2814, 674, + 621, 622, 622, 719, 2863, 3098, 2784, 1408, 623, 2784, + 1409, 1410, 1807, 674, 2947, 674, 1457, 1458, 674, 1459, + 1460, 1411, 1412, 1413, 1461, 674, 1414, 674, 674, 1415, + 674, 1416, 1417, 1418, 674, 1419, 3111, 1806, 2928, 1444, + 1445, 1420, 674, 1421, 674, 674, 1451, 1446, 674, 1452, + 1453, 2929, 2784, 1447, 1454, 2784, 720, 674, 724, 724, + 1455, 922, 922, 922, 922, 1432, 1433, 1434, 2894, 1435, + 1436, 1437, 1456, 674, 674, 674, 1438, 2784, 2784, 1439, + 2784, 2784, 1440, 1441, 1442, 1350, 3126, 724, 724, 1443, + + 724, 724, 674, 724, 724, 1472, 1479, 1541, 2916, 1473, + 1480, 2917, 2851, 674, 674, 2862, 674, 674, 1481, 1474, + 1482, 2714, 1475, 1476, 2268, 1652, 1483, 1653, 724, 2910, + 2852, 674, 1484, 674, 674, 3127, 1505, 674, 1506, 2895, + 1507, 1508, 1755, 1755, 1755, 1755, 1755, 1755, 724, 1545, + 674, 2952, 1298, 2953, 1485, 1486, 1487, 724, 1488, 1489, + 724, 3132, 1490, 724, 1491, 1492, 1493, 724, 674, 1494, + 3133, 1498, 1495, 1496, 1497, 1499, 1543, 724, 1500, 1501, + 724, 1521, 674, 724, 724, 1502, 724, 1807, 1503, 1542, + 1504, 1509, 1522, 1523, 2531, 2670, 724, 724, 1652, 724, + + 1653, 2990, 724, 3138, 3035, 1544, 724, 2675, 724, 2676, + 1524, 1546, 1806, 724, 2677, 724, 724, 1811, 724, 724, + 3036, 1547, 2862, 1525, 1526, 1548, 724, 724, 674, 724, + 1594, 1353, 724, 1549, 2421, 724, 1297, 724, 1595, 3071, + 724, 1596, 1806, 724, 1597, 2495, 724, 1007, 2533, 1510, + 1511, 1434, 3139, 1512, 1513, 2869, 724, 674, 2930, 724, + 674, 2954, 1614, 1514, 1515, 2883, 1516, 1517, 1518, 1325, + 2884, 1615, 2559, 2955, 2991, 724, 1007, 2726, 724, 1007, + 724, 724, 1828, 3029, 2870, 1326, 1326, 1326, 1326, 1326, + 1326, 1007, 1829, 1450, 1283, 3030, 2730, 1331, 1528, 3143, + + 724, 1550, 1529, 1551, 1552, 1553, 2532, 2531, 1007, 724, + 2633, 1652, 1554, 1653, 1555, 724, 1556, 2935, 1557, 2380, + 1007, 1574, 3005, 1007, 1575, 1576, 1007, 3148, 1530, 724, + 1531, 2936, 724, 1830, 2931, 1577, 1578, 1007, 1532, 3149, + 1007, 1007, 1533, 1831, 1558, 1534, 1535, 1325, 1559, 1560, + 1561, 3150, 1562, 724, 1007, 724, 1563, 2865, 1564, 2912, + 2863, 1565, 1840, 1326, 1326, 1326, 1326, 1326, 1326, 3155, + 1007, 2994, 1283, 1007, 1566, 1331, 1007, 2913, 1567, 895, + 724, 1568, 1569, 1007, 1536, 1570, 1007, 1835, 1571, 1007, + 3159, 1572, 1573, 1756, 1756, 1756, 1756, 1756, 724, 2796, + + 2797, 1588, 1589, 1590, 907, 2919, 1530, 2920, 1531, 1591, + 3160, 2921, 724, 1536, 1807, 1592, 1537, 724, 1593, 1538, + 1533, 724, 1579, 1534, 1535, 1580, 2868, 724, 1581, 3021, + 1582, 1583, 1584, 724, 1585, 896, 897, 898, 896, 1806, + 1586, 899, 1587, 724, 2988, 3102, 724, 1610, 1611, 724, + 724, 2989, 724, 724, 1640, 1612, 724, 2709, 1641, 2710, + 2998, 1613, 724, 2711, 1598, 1599, 1600, 3161, 1601, 1602, + 1603, 724, 724, 2862, 2868, 1604, 1466, 2711, 1605, 1007, + 724, 1606, 1607, 1608, 1542, 2798, 1680, 3003, 1609, 2858, + 900, 724, 1616, 2869, 724, 1617, 1618, 724, 724, 1007, + + 1619, 1621, 1622, 724, 1623, 1624, 1620, 2865, 1007, 1625, + 2914, 1007, 724, 724, 1007, 724, 1807, 2933, 1456, 1626, + 1834, 2915, 2934, 1627, 1007, 724, 3164, 724, 1007, 3000, + 724, 1007, 1841, 1628, 1007, 1630, 3001, 1631, 3025, 1629, + 724, 1806, 724, 2925, 2926, 724, 1635, 724, 724, 1632, + 1636, 1633, 3026, 1850, 724, 1634, 1007, 724, 2927, 1007, + 1637, 1642, 3103, 1638, 1639, 1643, 2865, 3134, 724, 724, + 724, 1681, 724, 1644, 2857, 1645, 724, 2918, 3135, 724, + 3165, 1646, 724, 989, 989, 989, 989, 1484, 724, 1660, + 2949, 1621, 1622, 1661, 1623, 1688, 1662, 1663, 2950, 1625, + + 724, 724, 724, 1664, 2951, 724, 1665, 3175, 1666, 1647, + 1648, 1649, 2866, 1650, 1651, 3033, 2867, 1652, 2005, 1653, + 1654, 1655, 3034, 724, 1656, 1007, 2937, 1657, 1658, 1659, + 724, 3104, 2938, 724, 2939, 1667, 724, 1668, 2940, 1669, + 1670, 1509, 622, 622, 622, 622, 2863, 1558, 724, 3180, + 623, 1682, 1560, 1561, 1855, 1683, 3073, 1007, 724, 1563, + 1007, 1564, 2862, 849, 1565, 849, 849, 849, 849, 849, + 849, 3068, 3069, 1007, 1610, 1611, 3070, 724, 724, 3154, + 724, 3105, 1612, 724, 851, 852, 852, 851, 1687, 863, + 724, 863, 863, 863, 863, 863, 863, 3106, 624, 1671, + + 1672, 1600, 1007, 1673, 1674, 1007, 3131, 724, 1007, 1852, + 724, 1689, 2868, 1675, 1676, 1636, 1677, 1678, 1679, 724, + 2866, 3144, 724, 1007, 2893, 1637, 2005, 3145, 1638, 1639, + 852, 852, 852, 852, 901, 902, 902, 901, 3128, 2981, + 899, 989, 989, 989, 1801, 3129, 853, 854, 855, 856, + 857, 1842, 1843, 858, 3183, 1007, 2982, 859, 1007, 2983, + 860, 1844, 1845, 861, 852, 852, 852, 852, 901, 897, + 902, 901, 1007, 1007, 899, 903, 903, 903, 903, 903, + 903, 901, 902, 902, 901, 3082, 3083, 899, 3186, 900, + 3197, 3084, 853, 854, 855, 856, 857, 3198, 1853, 858, + + 1851, 1007, 1007, 859, 1007, 1007, 860, 1007, 1007, 861, + 902, 902, 902, 902, 3205, 924, 895, 924, 924, 924, + 924, 924, 924, 900, 3216, 2862, 853, 854, 855, 856, + 857, 776, 777, 858, 2863, 3033, 900, 859, 2900, 3096, + 860, 2901, 2865, 861, 983, 983, 983, 983, 3097, 1759, + 1759, 1759, 1759, 1759, 1759, 936, 2902, 936, 936, 936, + 936, 936, 936, 3125, 2863, 900, 894, 894, 894, 894, + 894, 894, 894, 894, 895, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 894, 894, 894, 894, 894, 894, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 3227, 894, 894, 894, 1762, + 1762, 1762, 1762, 1566, 2970, 1660, 3162, 1567, 2863, 1661, + 1568, 1569, 1662, 1663, 1570, 3169, 3170, 1571, 2971, 1664, + 1796, 1573, 1665, 1534, 1797, 975, 976, 976, 975, 976, + 976, 976, 976, 623, 3230, 3181, 2995, 623, 976, 976, + + 976, 976, 975, 976, 976, 980, 623, 2943, 2862, 2996, + 623, 2944, 3124, 977, 2945, 2946, 2997, 977, 1803, 1803, + 1803, 1803, 989, 989, 989, 989, 977, 1967, 2862, 3163, + 977, 987, 987, 987, 987, 987, 987, 1212, 1212, 1212, + 1212, 978, 3168, 2862, 3232, 978, 1763, 1325, 1246, 1247, + 1248, 1246, 1806, 1846, 978, 3136, 1007, 3220, 978, 3137, + 3233, 1007, 1807, 1326, 1326, 1326, 1326, 1326, 1326, 1007, + 1007, 3182, 1283, 2865, 1804, 1331, 3226, 1832, 999, 999, + 999, 999, 999, 999, 3235, 1007, 1847, 1806, 1007, 3236, + 1848, 1007, 3237, 1007, 1833, 1856, 1849, 1854, 1007, 1007, + + 3225, 1007, 1007, 3166, 1007, 1007, 1530, 3167, 1579, 3234, + 1213, 1684, 3030, 1214, 1581, 1811, 1582, 1583, 1685, 3022, + 1585, 3023, 1836, 1534, 1535, 1809, 1586, 3024, 1771, 1325, + 1007, 999, 999, 999, 999, 999, 999, 1007, 2866, 1810, + 1806, 1007, 2867, 3238, 2005, 1326, 1326, 1326, 1326, 1326, + 1326, 1837, 2531, 2922, 1283, 1838, 1652, 1331, 2721, 1007, + 3239, 2039, 1007, 2722, 1007, 1839, 2040, 1934, 1935, 1007, + 1007, 2865, 1007, 1007, 1936, 1937, 1938, 1353, 1809, 1007, + 3218, 1939, 1762, 1762, 1762, 1762, 3219, 1772, 1530, 2042, + 1531, 1636, 1810, 1007, 3006, 3007, 1007, 1940, 3008, 1941, + + 2977, 1637, 1533, 3099, 1638, 1639, 1535, 1807, 1007, 2048, + 2049, 1007, 2978, 3100, 1007, 2272, 1986, 1987, 2979, 3101, + 1988, 2980, 2050, 1808, 1808, 1808, 1808, 1808, 1808, 1007, + 1007, 2785, 1806, 1871, 2786, 1812, 1816, 1872, 1873, 1874, + 1817, 1875, 2787, 2788, 1007, 1876, 1007, 1877, 2789, 3247, + 1878, 1942, 2790, 1879, 2041, 1943, 3184, 3249, 1007, 1007, + 3185, 1007, 1007, 1007, 1007, 1007, 1818, 1890, 1819, 1763, + 1891, 1892, 3252, 1297, 3258, 1893, 1820, 1450, 1007, 3121, + 1821, 1894, 1895, 1822, 1823, 1807, 3188, 2035, 2036, 3203, + 3189, 1007, 2037, 3204, 2603, 1007, 1007, 3261, 1007, 2038, + + 2868, 1808, 1808, 1808, 1808, 1808, 1808, 3140, 3240, 2286, + 1806, 2287, 1880, 1812, 2863, 1881, 1882, 1962, 1007, 1883, + 1884, 1963, 1824, 1885, 3221, 1964, 1886, 2288, 1007, 1887, + 1888, 1965, 1889, 1239, 1239, 1239, 1239, 1966, 3061, 1907, + 1908, 1909, 3253, 1007, 1818, 3013, 1819, 1910, 3122, 3123, + 1007, 1825, 2066, 1911, 1826, 2289, 1912, 1827, 1821, 2048, + 2049, 1822, 1823, 1007, 1913, 3141, 1914, 1915, 1916, 2956, + 1917, 2957, 1007, 2958, 2270, 1918, 2959, 2960, 1919, 3142, + 3243, 1920, 2112, 1921, 1860, 1861, 1862, 1863, 1864, 1240, + 3217, 1007, 1007, 3269, 2867, 1865, 2005, 1866, 1007, 1867, + + 3062, 1868, 1869, 1870, 1007, 1242, 1242, 1242, 1242, 3222, + 2868, 3223, 1955, 1956, 3063, 1957, 1958, 2062, 2063, 3014, + 1959, 3015, 3016, 1007, 3224, 3270, 1007, 1960, 1896, 3250, + 1007, 1897, 1961, 1007, 1898, 3251, 1899, 1900, 1901, 1007, + 1902, 1903, 3266, 3151, 1904, 3152, 1905, 3271, 1906, 1007, + 3153, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 3273, 1951, + 3274, 1243, 1952, 2112, 1953, 1954, 3156, 1007, 3157, 3190, + 1922, 1923, 1924, 3158, 1925, 1926, 1927, 1456, 1007, 1007, + 3191, 1928, 3275, 3192, 1929, 3193, 3276, 1930, 1931, 1932, + 1834, 2062, 2063, 3283, 1933, 1967, 1007, 3194, 1007, 1007, + + 1978, 2020, 1007, 2021, 1979, 2022, 2023, 1980, 1981, 3195, + 3284, 1007, 1982, 1807, 1983, 1007, 3196, 1984, 1985, 1989, + 1990, 1991, 2042, 1992, 1993, 3287, 1994, 1995, 2972, 2973, + 1007, 1996, 1007, 1997, 2974, 2975, 2013, 1138, 1806, 1998, + 2014, 2281, 2976, 2015, 2016, 1484, 3210, 1007, 3211, 2282, + 2017, 1521, 3212, 2018, 1968, 2019, 1969, 989, 989, 989, + 989, 1970, 1522, 1523, 1007, 1971, 3212, 1007, 1972, 1138, + 1973, 1974, 1975, 724, 1976, 1977, 1007, 724, 1610, 1611, + 1524, 1056, 622, 622, 1056, 2516, 1612, 724, 2283, 623, + 724, 1534, 2059, 1525, 1526, 2121, 2284, 1999, 2000, 2001, + + 2286, 2002, 2003, 3087, 2287, 2004, 1297, 2005, 2006, 2007, + 3088, 1007, 2008, 2009, 3089, 2010, 2011, 2012, 2024, 3090, + 2288, 1598, 2045, 1600, 2289, 1601, 1602, 1603, 1060, 1061, + 1061, 1060, 1604, 2298, 3288, 1605, 1062, 624, 1686, 1607, + 1608, 1542, 1660, 3285, 2421, 1609, 1661, 2299, 3286, 1662, + 1663, 1217, 1217, 1217, 1217, 2784, 1664, 3272, 2784, 1665, + 1534, 2046, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, + 1062, 1331, 2629, 3259, 1062, 3311, 2025, 2026, 1924, 2027, + 2028, 2029, 2866, 3146, 1063, 2631, 3147, 1007, 2005, 1007, + 2030, 2031, 3311, 2032, 2033, 2034, 2052, 2052, 2052, 2052, + + 2054, 2055, 2056, 2054, 1062, 1325, 3246, 3311, 2057, 1326, + 1326, 1326, 1326, 1326, 1326, 1218, 2532, 3107, 1063, 1219, + 2633, 2533, 1063, 1071, 1072, 1072, 1071, 1072, 1072, 1072, + 1072, 1073, 3322, 2116, 1220, 1073, 1072, 1072, 1072, 1072, + 2067, 2067, 2067, 2067, 1073, 3257, 1331, 2866, 1073, 3323, + 2726, 2867, 2053, 2005, 3130, 2375, 2058, 1647, 1648, 1649, + 1331, 1650, 1651, 3324, 1337, 1652, 1338, 1653, 1654, 1690, + 1331, 724, 1656, 1536, 724, 1657, 1658, 2060, 1341, 1074, + 674, 3108, 2116, 1074, 674, 2069, 2070, 2071, 2069, 3292, + 3325, 3109, 1074, 2072, 1558, 3297, 2068, 3110, 1682, 1560, + + 1561, 3054, 2074, 3291, 3268, 674, 1563, 3293, 1564, 724, + 3326, 1565, 1534, 724, 1610, 1611, 3296, 1660, 2506, 2048, + 2049, 1661, 2076, 724, 1662, 1663, 724, 1534, 2077, 674, + 3298, 1664, 2390, 2866, 1665, 1534, 2079, 2867, 1298, 3037, + 3306, 2073, 724, 2506, 3038, 1579, 724, 3039, 1684, 3327, + 3328, 1581, 674, 1582, 1583, 2075, 724, 1585, 3329, 724, + 1534, 3055, 3056, 1586, 3057, 1587, 1284, 1362, 1373, 3300, + 3313, 1363, 1374, 2493, 3058, 1364, 1375, 3305, 3059, 1365, + 1376, 2706, 674, 2707, 1366, 1377, 674, 3245, 2708, 674, + 2532, 1367, 1378, 3314, 3330, 1285, 2097, 2102, 674, 1286, + + 2098, 2103, 3312, 1287, 2099, 2104, 2706, 1288, 2850, 674, + 2100, 2105, 1289, 2708, 1325, 2532, 2101, 2106, 3331, 1290, + 2081, 3332, 2062, 2063, 2080, 2081, 2081, 2081, 2082, 2081, + 2081, 2081, 2083, 2081, 2081, 2081, 2081, 2081, 2084, 2081, + 2081, 2081, 2081, 2081, 2085, 2081, 2081, 2081, 2086, 2081, + 1297, 1298, 1660, 674, 2290, 3333, 1661, 3317, 3334, 1662, + 1663, 3213, 3335, 2291, 3214, 2865, 1664, 2292, 3091, 1665, + 1534, 2107, 3092, 1337, 2293, 1338, 2280, 3093, 2112, 3215, + 1299, 3094, 1300, 2294, 1301, 3095, 3336, 1341, 1302, 674, + 3255, 1303, 1304, 674, 2295, 1305, 3302, 1306, 674, 2296, + + 3256, 1307, 1308, 674, 1309, 3337, 2297, 3303, 3307, 2087, + 2081, 2088, 2081, 2089, 2081, 2081, 2081, 2090, 2081, 2081, + 2081, 2081, 2091, 2092, 2081, 2081, 2081, 2093, 2081, 2094, + 2081, 2081, 2081, 2095, 2096, 1320, 1521, 2501, 1660, 3338, + 11275, 2421, 1661, 3308,11275, 1662, 1663, 1522, 1523, 3265, + 3339, 2819, 1664,11275, 2820, 1665, 1534, 2111, 3321, 2112, + 11275, 3340, 2821, 2822, 2251, 2108, 3341, 2112, 2823, 2081, + 1325, 674, 2824, 2081, 622, 622, 622, 622, 2109, 2110, + 1329, 1298, 623, 1298, 3344, 2081, 666, 666, 666, 666, + 666, 666, 3345, 3346, 3347, 1283, 666, 666, 666, 666, + + 666, 666, 3171, 3260, 3348, 1283, 1274, 1274, 1274, 1274, + 2213, 3172, 2177, 2532, 623, 3173, 2178, 2633, 3206, 3174, + 2179, 2214, 2215, 2830, 2180, 3342, 2831, 3349, 3350, 2181, + 624, 1284, 3351, 2171, 2832, 2833, 1367, 3267, 3343, 2216, + 2834, 2182, 2187, 2171, 2835, 2183, 2188, 2172, 2112, 2184, + 2189, 3352, 2217, 2218, 2190, 2185, 3353, 2172, 3354, 2191, + 2137, 2186, 1275, 3176, 2138, 1297, 1378, 1297, 2139, 3177, + 3178, 2192, 2140, 2391, 3356, 2193, 3357, 2141, 3358, 2194, + 1262, 3207, 3179, 3208, 1290, 2195, 674, 3299, 3209, 2142, + 2868, 2196, 1338, 2143, 1444, 1445, 3355, 2144, 674, 3359, + + 674, 674, 1446, 2145, 1341, 3360, 2278, 3363, 2204, 2146, + 674, 1325, 674, 2147, 2205, 1297, 1298, 3187, 1473, 1498, + 3364, 674, 674, 2209, 3365, 674, 1500, 2210, 1474, 3366, + 674, 1475, 1476, 1502, 3367, 3368, 1503, 1342, 1504, 3369, + 1276, 2267, 1278, 1276, 2966, 2148, 2866, 2149, 1279, 2150, + 2867, 3370, 2005, 2151, 3371, 2967, 2152, 2153, 1265, 1266, + 2154, 2652, 2155, 3372, 2653, 3373, 2156, 2157, 2654, 1309, + 1337, 2655, 1338, 2305, 2158, 2656, 2159, 2657, 2160, 2866, + 3304, 3374, 2161, 2867, 1341, 2005, 674, 2162, 2163, 2484, + 674, 674, 2164, 2485, 2165, 3377, 1280, 2486, 2166, 2167, + + 1320, 1325, 3199, 3200, 3201, 1274, 1274, 1274, 1274, 1325, + 3202, 2223, 3378, 623, 3379, 3380, 1473, 1326, 1326, 1326, + 1326, 1326, 1326, 2363, 674, 674, 1283, 3310, 674, 1331, + 2513, 3362, 674, 674, 1283, 674, 674, 3382, 1344, 674, + 2224, 2211, 674, 2212, 674, 1507, 1508, 674, 674, 674, + 674, 674, 2485, 3386, 674, 1325, 2327, 674, 1342, 1392, + 1337, 1275, 1338, 2197, 1394, 1395, 1353, 1396, 2272, 674, + 3385, 1397, 3319, 1398, 1341, 3395, 1399, 1342, 1343, 1325, + 1276, 2274, 1278, 1276, 2503, 3396, 674, 3376, 1279, 1326, + 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, + + 1326, 674, 3384, 3390, 1283, 674, 3422, 1331, 674, 674, + 674, 674, 674, 1392, 1337, 674, 1338, 1273, 674, 1342, + 3402, 2222, 3361, 1274, 1274, 1274, 1274, 2510, 1341, 3309, + 674, 623, 674, 2512, 674, 3320, 1280, 1400, 1337, 674, + 1338, 2198, 1339, 674, 2199, 1403, 1392, 2512, 1404, 2374, + 3318, 1405, 1341, 674, 1406, 1407, 1343, 674, 3387, 674, + 1413, 674, 3383, 1414, 674, 674, 1415, 674, 1416, 1417, + 2200, 674, 1419, 674, 674, 1342, 3389, 1325, 1420, 1275, + 1421, 2201, 2202, 1434, 3388, 2203, 1436, 1437, 674, 674, + 674, 3392, 1438, 674, 1473, 1439, 3393, 3381, 1440, 1441, + + 1442, 1350, 1283, 674, 674, 1443, 1485, 1486, 1487, 1344, + 2206, 1489, 674, 674, 1490, 2330, 1491, 1492, 1493, 3400, + 674, 2207, 3391, 674, 1495, 1496, 2208, 1466, 674, 674, + 1392, 674, 674, 3426, 2197, 2225, 1395, 674, 1396, 2866, + 1283, 674, 1397, 2867, 1398, 3228, 3375, 1399, 1342, 674, + 3229, 2305, 3444, 674, 1444, 1445, 3394, 674, 674, 674, + 674, 674, 1446, 674, 3459, 3397, 674, 2227, 2226, 1325, + 1452, 1453, 1325, 1473, 674, 1454, 3381, 1325, 674, 3435, + 2305, 1455, 674, 3315, 674, 1342, 2228, 3404, 1468, 674, + 674, 674, 674, 1456, 674, 3413, 674, 674, 674, 1325, + + 1469, 2839, 1470, 1479, 2840, 674, 1471, 1480, 674, 1325, + 674, 674, 2841, 2842, 674, 2229, 2380, 1482, 2843, 2380, + 674, 1342, 2844, 1483, 1276, 2267, 1278, 1276, 1337, 1484, + 1338, 1337, 1279, 1338, 1325, 3464, 1337, 3401, 1338, 1473, + 2305, 2306, 1341, 1325, 674, 2307, 674, 674, 674, 3403, + 1341, 674, 674, 1325, 674, 2306, 674, 674, 1337, 2341, + 1338, 2308, 2340, 3412, 1325, 1490, 674, 1491, 1337, 2310, + 1338, 3446, 1341, 3415, 674, 674, 3406, 1325, 674, 3410, + 1280, 2309, 1341, 674, 674, 1325, 674, 1283, 674, 3417, + 1325, 674, 3448, 1337, 674, 1338, 3411, 1473, 2310, 3405, + + 1325, 2311, 1337, 1490, 1338, 1491, 674, 1341, 674, 674, + 674, 1325, 1337, 674, 1338, 2371, 1341, 3425, 674, 1325, + 3447, 2312, 674, 1337, 1325, 1338, 1341, 674, 674, 3418, + 674, 3419, 674, 2314, 2313, 2315, 1337, 1341, 1338, 674, + 1283, 1325, 674, 674, 1337, 3427, 1338, 2316, 3424, 1337, + 1341, 1338, 674, 674, 2317, 3428, 674, 3488, 1341, 1337, + 674, 1338, 2318, 1341, 674, 674, 1325, 1325, 674, 674, + 1337, 3489, 2322, 1341, 2330, 2319, 674, 3423, 1337, 674, + 1338, 674, 2306, 1337, 1341, 1338, 674, 674, 2321, 1325, + 674, 3490, 1341, 3449, 674, 674, 1325, 1341, 674, 674, + + 1337, 3450, 1338, 674, 1325, 1326, 1326, 1326, 1326, 1326, + 1326, 2323, 3416, 1325, 1341, 3429, 674, 674, 3434, 3453, + 674, 1325, 674, 674, 2309, 1337, 1337, 1338, 1338, 674, + 674, 2380, 2324, 1337, 2381, 1338, 2325, 3431, 1325, 1341, + 1341, 674, 674, 1325, 3452, 674, 674, 1341, 1337, 674, + 1338, 1325, 3430, 674, 2521, 1337, 674, 2332, 2305, 1283, + 2340, 674, 1341, 1337, 674, 1338, 3456, 2331, 674, 1341, + 1325, 674, 1337, 674, 1338, 2333, 674, 1341, 2305, 674, + 1337, 1325, 2335, 674, 3454, 2506, 2334, 674, 674, 3074, + 3451, 674, 674, 3398, 1341, 3399, 674, 1337, 1473, 2338, + + 674, 3437, 1337, 1325, 1338, 1473, 3461, 674, 674, 2337, + 1337, 1341, 1338, 674, 1325, 3455, 2336, 674, 674, 1337, + 674, 1338, 674, 3468, 1341, 1325, 674, 2506, 674, 1337, + 674, 1338, 2306, 1341, 2339, 674, 2341, 674, 2310, 674, + 1337, 674, 1338, 1341, 3463, 674, 1325, 3075, 2706, 674, + 3241, 1325, 3076, 3462, 1341, 2708, 2342, 2532, 674, 3491, + 674, 1325, 2343, 3077, 1338, 3078, 3079, 2344, 3458, 2338, + 1325, 3460, 2345, 1337, 3492, 1338, 1341, 3516, 674, 674, + 1325, 674, 674, 3457, 1337, 1325, 1338, 1341, 3433, 674, + 2706, 3477, 3262, 674, 2346, 2363, 674, 2708, 1341, 2532, + + 674, 3380, 1325, 3466, 674, 1337, 2347, 1338, 2348, 1325, + 1337, 674, 1338, 2961, 2961, 2961, 2962, 3474, 674, 1341, + 1337, 674, 1338, 2421, 1341, 674, 674, 3524, 2349, 1337, + 674, 1338, 2350, 1325, 1341, 2506, 674, 3499, 2351, 1337, + 674, 1338, 3500, 1341, 1337, 674, 1338, 2352, 1283, 674, + 1325, 2353, 3467, 1341, 674, 674, 674, 1325, 1341, 674, + 674, 1337, 2365, 1338, 674, 1325, 3475, 674, 1337, 2357, + 1338, 2354, 2362, 2355, 3530, 2356, 2963, 674, 2358, 2363, + 674, 674, 1341, 674, 674, 2964, 1325, 3470, 674, 674, + 3476, 3482, 1337, 674, 1338, 2308, 1325, 3531, 2706, 1490, + + 3263, 1491, 2965, 1325, 2359, 2708, 1341, 2532, 674, 1337, + 3277, 1338, 674, 3278, 2360, 2361, 1337, 3545, 1338, 2305, + 3546, 3279, 3280, 1341, 1337, 674, 1338, 3281, 2362, 674, + 1341, 3282, 674, 1325, 3465, 2363, 674, 3520, 1341, 674, + 674, 1325, 674, 2306, 674, 1337, 2364, 1338, 1325, 2366, + 2366, 2366, 2366, 2366, 2366, 1337, 2371, 1338, 2367, 1341, + 3472, 674, 1337, 2365, 1338, 674, 3445, 1325, 3469, 1341, + 1473, 674, 1473, 674, 3619, 674, 1341, 1325, 2368, 674, + 1325, 674, 674, 1326, 1326, 1326, 1326, 1326, 1326, 3480, + 674, 674, 1337, 2485, 1338, 1473, 674, 2309, 1392, 1325, + + 1337, 3432, 1338, 2369, 1325, 3473, 1341, 1337, 674, 1338, + 2506, 3487, 674, 3673, 1341, 1337, 674, 1338, 674, 2306, + 674, 1341, 2380, 674, 2370, 2381, 1337, 674, 2373, 2372, + 1325, 674, 674, 3481, 724, 674, 1337, 3493, 1338, 1337, + 1341, 1338, 674, 2513, 674, 2421, 674, 3485, 674, 2377, + 2376, 3661, 674, 1341, 1325, 674, 674, 1392, 1337, 674, + 1338, 1325, 674, 1337, 674, 1338, 674, 2309, 3507, 1325, + 3494, 2378, 1341, 2706, 674, 3264, 2379, 1341, 674, 674, + 2708, 3436, 2532, 674, 1337, 1490, 1338, 1491, 1325, 1337, + 674, 1338, 3704, 1325, 1803, 1803, 1803, 1803, 1341, 3483, + + 674, 2382, 2383, 1341, 674, 674, 3517, 3301, 674, 674, + 1325, 674, 2384, 1337, 674, 1338, 674, 2309, 724, 1325, + 1337, 2423, 1338, 2385, 3502, 3519, 674, 1341, 1337, 674, + 1338, 674, 2309, 674, 1341, 3478, 674, 3479, 1325, 3537, + 674, 2386, 1341, 1325, 674, 3849, 674, 1337, 674, 1338, + 1804, 2388, 1337, 1325, 1338, 1118, 1118, 1118, 1118, 1118, + 2387, 1341, 2473, 674, 674, 2306, 1341, 674, 674, 1337, + 3495, 1338, 674, 1473, 1325, 1325, 3471, 2391, 1337, 2389, + 1338, 2390, 674, 1341, 2308, 674, 3496, 1283, 1490, 674, + 1491, 2392, 1341, 674, 674, 674, 1325, 1337, 674, 1338, + + 2393, 2394, 1337, 1325, 1338, 2526, 2526, 2526, 2526, 2526, + 2526, 1341, 1337, 674, 1338, 674, 1341, 674, 674, 2395, + 3498, 3532, 674, 3533, 1325, 2306, 1341, 1392, 674, 674, + 3407, 2396, 674, 1337, 1337, 1338, 1338, 1325, 3408, 674, + 674, 2398, 3850, 2397, 3538, 3409, 674, 1341, 1341, 674, + 674, 2305, 1325, 674, 674, 1337, 3515, 1338, 1473, 2399, + 1325, 3521, 1337, 1325, 1338, 2400, 3420, 674, 3501, 1341, + 3421, 674, 3851, 674, 3484, 674, 1341, 674, 674, 674, + 2309, 2401, 674, 1337, 1325, 1338, 2308, 3852, 3529, 3534, + 1490, 674, 2402, 2421, 674, 2306, 1337, 2403, 1338, 674, + + 2404, 674, 3522, 674, 2405, 2405, 2405, 2405, 2405, 2405, + 2407, 1337, 674, 1338, 1325, 1392, 674, 3853, 3854, 1337, + 2418, 2419, 2424, 2417, 1338, 1341, 674, 674, 674, 1325, + 3525, 674, 3514, 2420, 3855, 674, 1341, 1325, 674, 674, + 2308, 3443, 674, 1337, 1490, 1338, 1491, 2308, 3856, 674, + 674, 1490, 1337, 1491, 1338, 2422, 674, 1341, 2406, 2425, + 2309, 1325, 3497, 674, 724, 2309, 1341, 724, 674, 2423, + 3518, 2703, 674, 1337, 1473, 1338, 1325, 1326, 1326, 1326, + 1326, 1326, 1326, 674, 1325, 2305, 3857, 1341, 1337, 2430, + 1338, 2305, 3535, 674, 674, 2432, 1337, 1325, 1338, 3523, + + 2433, 2431, 1341, 3858, 674, 674, 3527, 3859, 674, 3503, + 1341, 674, 674, 1490, 2434, 1491, 674, 3528, 674, 1325, + 1337, 2408, 1338, 2527, 2409, 3316, 2410, 1325, 3539, 3860, + 3526, 2411, 2412, 2413, 1341, 1337, 674, 1338, 2414, 674, + 2415, 674, 2416, 1337, 3861, 1338, 1325, 2435, 3862, 1341, + 3536, 674, 2436, 1325, 1325, 674, 1337, 1341, 1338, 674, + 674, 2439, 3540, 674, 2437, 2440, 2052, 2052, 2052, 2052, + 1341, 674, 674, 674, 1062, 1325, 674, 1392, 1337, 3551, + 1338, 2305, 3543, 1325, 3544, 3506, 1337, 3301, 1338, 2305, + 674, 2441, 1341, 674, 674, 674, 674, 2309, 674, 3547, + + 1341, 2423, 674, 2442, 1325, 1337, 674, 2443, 674, 1325, + 3542, 3549, 1337, 1337, 2444, 1338, 674, 3863, 3864, 1341, + 3562, 674, 2053, 674, 2306, 674, 1341, 1341, 674, 2445, + 1325, 674, 674, 674, 1337, 1325, 1338, 2308, 3865, 3866, + 1325, 3541, 2447, 1491, 1338, 2448, 674, 674, 1341, 2449, + 674, 3552, 2450, 3867, 674, 2446, 2451, 3548, 2452, 1325, + 674, 2490, 674, 1337, 1325, 1338, 1473, 1392, 1337, 3558, + 1338, 2455, 1325, 2453, 2454, 674, 3563, 1341, 674, 674, + 3616, 1325, 1341, 674, 674, 674, 1283, 2461, 674, 1337, + 3504, 2456, 2305, 2305, 1337, 3568, 1338, 2457, 1325, 1337, + + 674, 1338, 674, 1341, 2495, 674, 1325, 3505, 1341, 674, + 674, 3569, 3868, 1341, 674, 674, 3869, 1325, 1337, 674, + 1338, 2458, 3557, 1337, 674, 1338, 3564, 3870, 2459, 1283, + 1325, 1337, 1341, 1338, 674, 674, 2306, 1341, 674, 2460, + 1337, 2473, 1338, 674, 3871, 1341, 3560, 674, 674, 1325, + 2462, 674, 2461, 3561, 1341, 674, 674, 1337, 1325, 1338, + 674, 3567, 2506, 3872, 2463, 1337, 674, 1338, 2308, 2465, + 2464, 1341, 1490, 674, 1491, 3571, 1337, 674, 1338, 1341, + 1325, 674, 3873, 1325, 674, 674, 1392, 1283, 2467, 1337, + 1341, 1338, 674, 3874, 1392, 2466, 674, 3566, 3623, 674, + + 1337, 724, 1338, 1341, 2474, 674, 1325, 674, 1337, 674, + 1338, 1325, 3565, 2468, 1341, 2469, 674, 1337, 3877, 1338, + 674, 1325, 1341, 3570, 674, 674, 2309, 2470, 674, 2471, + 3589, 1341, 1325, 674, 2472, 3574, 3573, 674, 3878, 1337, + 674, 1338, 1337, 1325, 1338, 674, 3879, 3590, 674, 2306, + 2475, 1325, 2476, 1341, 3880, 674, 1341, 724, 674, 674, + 724, 674, 674, 1392, 3592, 1337, 1325, 1338, 2687, 1392, + 1337, 3611, 1338, 674, 2490, 724, 674, 3591, 724, 1341, + 1337, 674, 1338, 2480, 1341, 2479, 674, 3593, 3594, 3881, + 674, 1337, 2483, 1338, 1341, 3882, 2481, 2482, 1325, 674, + + 674, 2484, 1337, 1325, 1338, 2485, 2487, 674, 3612, 2486, + 1337, 674, 1338, 2495, 3883, 2306, 1341, 3607, 674, 3613, + 674, 674, 674, 3884, 1341, 1337, 674, 1338, 1325, 674, + 674, 3608, 2489, 1337, 2488, 1338, 1325, 1325, 3614, 1341, + 3885, 674, 3553, 3554, 3615, 674, 674, 1341, 3886, 674, + 2491, 674, 3555, 674, 674, 2309, 2492, 1337, 1325, 1338, + 3556, 2493, 1337, 1325, 1338, 2494, 2503, 2771, 674, 3887, + 3618, 1341, 1337, 674, 1338, 2308, 1341, 674, 674, 1490, + 3626, 1491, 674, 724, 1325, 1325, 1341, 1337, 674, 1338, + 2496, 3627, 674, 3890, 724, 2497, 2498, 1338, 1338, 3621, + + 2309, 1341, 724, 674, 3891, 724, 1325, 674, 3609, 1341, + 1341, 674, 674, 674, 2780, 674, 674, 1337, 3892, 1338, + 3610, 3622, 1337, 724, 1338, 2500, 724, 2506, 1325, 3630, + 3893, 1341, 724, 674, 3678, 1325, 1341, 674, 674, 2499, + 3433, 724, 674, 1337, 1337, 1338, 1338, 2363, 674, 3617, + 1325, 724, 3735, 1473, 2503, 2501, 3798, 1341, 2504, 674, + 674, 2502, 674, 674, 674, 1337, 3894, 1338, 3702, 1325, + 2054, 3242, 2056, 2054, 1325, 724, 3747, 2529, 2057, 1341, + 724, 674, 1325, 724, 2505, 674, 1337, 2510, 1338, 2511, + 2507, 3837, 2508, 2512, 1337, 1325, 1338, 2509, 724, 2309, + + 1341, 1341, 674, 674, 2514, 1325, 674, 2512, 1341, 1337, + 674, 1338, 2515, 1473, 674, 3895, 1490, 3506, 1491, 3896, + 1325, 3572, 674, 1341, 724, 674, 2058, 724, 1337, 674, + 1338, 3875, 1392, 1337, 3624, 1338, 3876, 724, 2517, 3629, + 724, 1337, 1341, 1338, 674, 1325, 2518, 1341, 674, 674, + 724, 3899, 3907, 674, 1337, 1341, 1338, 2519, 2399, 2529, + 1325, 674, 724, 3717, 1337, 3631, 1338, 3909, 1341, 724, + 674, 2520, 724, 724, 674, 3910, 724, 2306, 1341, 1337, + 674, 1338, 3625, 2396, 674, 2366, 2366, 2366, 2366, 2366, + 2366, 2619, 3911, 1341, 2620, 674, 2621, 3638, 2522, 674, + + 724, 2622, 2623, 2624, 1337, 3912, 1338, 2308, 2625, 3913, + 2626, 1490, 2627, 2523, 2529, 3900, 3915, 724, 2524, 1337, + 674, 1338, 3628, 3640, 674, 2405, 2405, 2405, 2405, 2405, + 2405, 1636, 2525, 1341, 724, 674, 3901, 724, 3641, 674, + 1325, 2526, 2526, 2526, 2526, 2526, 2526, 724, 724, 724, + 724, 724, 724, 776, 777, 3633, 1326, 1326, 1326, 1326, + 1326, 1326, 3632, 724, 724, 1283, 724, 724, 1331, 2799, + 2799, 2799, 2799, 724, 3643, 895, 724, 2803, 3634, 2617, + 2308, 2532, 3658, 3486, 1490, 3914, 1491, 2529, 2804, 674, + 2804, 2805, 724, 2805, 2805, 2805, 2805, 2805, 2805, 1530, + + 3916, 1531, 2984, 2984, 2984, 2984, 2984, 2984, 2529, 3639, + 2803, 724, 724, 1533, 3917, 724, 1534, 1535, 1325, 2052, + 2052, 2052, 2052, 3635, 2800, 3636, 724, 1062, 724, 724, + 2806, 724, 3918, 3919, 1326, 1326, 1326, 1326, 1326, 1326, + 3637, 3649, 724, 1283, 724, 724, 1331, 724, 2865, 3040, + 3040, 3040, 3040, 3040, 3040, 3043, 2801, 3651, 3044, 3666, + 3045, 724, 724, 2806, 724, 3046, 3047, 3048, 724, 3650, + 724, 724, 3049, 724, 3050, 2053, 3051, 1530, 3659, 1531, + 3231, 3231, 3231, 3231, 3231, 3231, 3897, 3888, 3898, 3112, + 3113, 1533, 3889, 3114, 1534, 1535, 1807, 3115, 724, 895, + + 3116, 724, 3117, 3041, 3118, 2868, 3119, 724, 3120, 3654, + 724, 3655, 1808, 1808, 1808, 1808, 1808, 1808, 3920, 3642, + 3662, 1806, 724, 1652, 1812, 1653, 2863, 2054, 3244, 2056, + 2054, 2052, 2052, 2052, 2052, 2057, 3921, 3922, 3925, 1062, + 2054, 3242, 2056, 2054, 2067, 2067, 2067, 2067, 2057, 3671, + 3647, 724, 1073, 724, 724, 1818, 724, 1819, 2069, 3248, + 2071, 2069, 2067, 2067, 2067, 2067, 2072, 3648, 724, 1821, + 1073, 724, 1822, 1823, 1807, 3681, 2069, 3254, 2071, 2069, + 2793, 3926, 724, 2058, 2072, 724, 724, 2053, 3927, 724, + 1808, 1808, 1808, 1808, 1808, 1808, 2058, 3653, 3928, 1806, + + 2068, 3660, 1812, 2067, 2067, 2067, 2067, 2069, 3248, 2071, + 2069, 1073, 3929, 2308, 2073, 2072, 3550, 1490, 2068, 1491, + 1325, 724, 674, 3665, 724, 3930, 1274, 1274, 1274, 1274, + 3931, 3932, 2073, 1818, 623, 1819, 1326, 1326, 1326, 1326, + 1326, 1326, 3933, 3936, 3652, 1283, 724, 1821, 1325, 724, + 1822, 1823, 1274, 1274, 1274, 1274, 2532, 3937, 1325, 2068, + 623, 3938, 3939, 2073, 1326, 1326, 1326, 1326, 1326, 1326, + 3923, 3940, 3924, 1283, 1326, 1326, 1326, 1326, 1326, 1326, + 1325, 3941, 1275, 1283, 3414, 3414, 3414, 3414, 3414, 3414, + 3942, 3438, 3438, 3438, 3439, 1325, 2366, 2366, 2366, 2366, + + 2366, 2366, 3934, 3656, 3935, 1283, 3289, 3657, 1275, 3945, + 724, 2405, 2405, 2405, 2405, 2405, 2405, 2532, 3508, 3509, + 1283, 3510, 3943, 2308, 3944, 3511, 3559, 1490, 3512, 1491, + 674, 3664, 674, 3290, 1325, 724, 3513, 2308, 724, 674, + 3595, 1490, 3946, 1491, 724, 3663, 674, 724, 3947, 3950, + 1326, 1326, 1326, 1326, 1326, 1326, 2305, 3951, 3440, 1283, + 3441, 724, 1331, 1325, 724, 674, 3952, 3953, 3414, 3414, + 3414, 3414, 3414, 3414, 3954, 3955, 3359, 3667, 3442, 2526, + 2526, 2526, 2526, 2526, 2526, 3958, 724, 724, 1283, 724, + 724, 724, 3669, 1337, 724, 1338, 2532, 1339, 3294, 2579, + + 3668, 3679, 1558, 3959, 3960, 3644, 724, 1341, 3968, 724, + 1342, 1343, 1325, 3645, 724, 724, 1007, 724, 724, 724, + 3646, 724, 724, 724, 724, 3670, 724, 3688, 1326, 1326, + 1326, 1326, 1326, 1326, 3682, 3672, 3683, 1283, 724, 1652, + 1331, 1653, 2531, 3676, 724, 724, 1652, 724, 1653, 724, + 1007, 724, 724, 3677, 724, 724, 2578, 724, 724, 3684, + 724, 3685, 3967, 2579, 724, 3686, 724, 724, 3680, 724, + 3973, 1337, 1007, 1338, 3687, 1339, 724, 724, 3689, 724, + 724, 724, 3987, 3295, 724, 1341, 3692, 1007, 1342, 1343, + 3575, 1007, 3136, 3576, 3577, 3578, 3579, 3580, 3581, 3582, + + 3691, 724, 3705, 3583, 724, 674, 724, 3584, 3694, 724, + 3585, 3586, 3587, 3588, 3596, 3596, 3203, 1007, 3596, 1325, + 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, + 3596, 3596, 3596, 3596, 3596, 3597, 3597, 3597, 3597, 3597, + 3597, 3596, 3596, 3596, 3598, 3596, 3596, 3599, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3596, 3596, 3596, 3596, 3596, 3596, 3600, 3601, 3600, + 3602, 3600, 3603, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3604, 3600, 3600, 3605, 3606, 3600, 3600, 3600, + + 3600, 3600, 3600, 3989, 3596, 3596, 3596, 1325, 2555, 724, + 3693, 724, 724, 724, 724, 724, 724, 724, 724, 2908, + 724, 3701, 3690, 1326, 1326, 1326, 1326, 1326, 1326, 1007, + 724, 3696, 1283, 724, 3695, 1331, 3971, 724, 3698, 3697, + 724, 724, 3699, 724, 724, 1007, 724, 3438, 3438, 3438, + 3439, 724, 724, 2531, 724, 724, 724, 1652, 3700, 1653, + 724, 3716, 3714, 724, 724, 3706, 1530, 3703, 1531, 724, + 724, 724, 724, 724, 724, 1007, 4080, 2579, 3707, 3708, + 1533, 1007, 3970, 1534, 1535, 1325, 3710, 724, 3179, 724, + 724, 724, 724, 724, 724, 3725, 724, 3713, 724, 4054, + + 3715, 1326, 1326, 1326, 1326, 1326, 1326, 3709, 724, 1007, + 1283, 724, 2529, 1331, 3674, 724, 3675, 724, 2532, 3988, + 724, 3711, 1558, 3712, 2531, 3718, 724, 3719, 1652, 724, + 1653, 1007, 3962, 724, 3442, 3720, 724, 724, 724, 3722, + 724, 724, 3721, 1007, 1530, 4090, 1531, 1636, 724, 724, + 3620, 724, 724, 2581, 3727, 4118, 724, 724, 1533, 724, + 724, 1534, 1535, 724, 3724, 3723, 2532, 2531, 4119, 3728, + 724, 1652, 3730, 1653, 3729, 724, 724, 3732, 3974, 724, + 724, 1652, 3726, 1653, 3733, 2529, 1007, 2529, 724, 3735, + 724, 724, 1007, 3972, 724, 3731, 3737, 3738, 1007, 3739, + + 3969, 3734, 724, 3740, 3736, 1558, 3741, 724, 724, 724, + 724, 724, 724, 724, 3742, 724, 724, 3745, 724, 3746, + 724, 3748, 3743, 724, 2972, 3750, 3744, 3749, 724, 724, + 2529, 724, 724, 724, 724, 724, 3755, 724, 724, 724, + 3996, 1007, 724, 3753, 3752, 724, 3756, 3758, 3754, 3751, + 724, 724, 724, 724, 724, 724, 3977, 3757, 4152, 3759, + 724, 3760, 724, 724, 3764, 724, 3763, 1007, 724, 3765, + 724, 724, 4153, 724, 3975, 3761, 724, 3762, 3766, 724, + 724, 3768, 1007, 724, 3769, 724, 2531, 724, 724, 724, + 3770, 3771, 1653, 3772, 3767, 724, 3773, 724, 724, 724, + + 724, 3774, 724, 724, 724, 724, 724, 3776, 2531, 4158, + 724, 3777, 1652, 724, 1653, 3779, 3780, 3781, 724, 724, + 3784, 3775, 724, 3568, 724, 3778, 3782, 724, 3785, 2532, + 724, 724, 2531, 724, 3783, 3786, 1652, 724, 1653, 724, + 724, 2687, 724, 3789, 3787, 724, 3981, 3790, 724, 724, + 3791, 3788, 724, 1558, 1007, 1558, 3976, 724, 2666, 724, + 724, 724, 724, 3978, 724, 724, 3793, 724, 724, 1007, + 724, 3792, 3796, 1007, 3797, 2532, 3794, 724, 3799, 3800, + 3979, 724, 1007, 724, 3980, 724, 724, 3795, 724, 3575, + 1007, 1007, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3814, + + 724, 1558, 3808, 724, 3817, 724, 3809, 724, 724, 3810, + 3811, 3812, 3813, 4004, 1007, 3816, 3815, 3818, 3819, 724, + 724, 2531, 724, 724, 3820, 1652, 3833, 1653, 3596, 3596, + 4040, 1007, 3596, 1325, 3596, 3596, 3596, 3596, 3596, 3596, + 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3597, + 3597, 3597, 3597, 3597, 3597, 3596, 3596, 3596, 3598, 3596, + 3596, 3599, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, + 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, + 3821, 3821, 3821, 3821, 3821, 3596, 3596, 3596, 3596, 3596, + 3596, 3821, 3822, 3821, 3823, 3821, 3821, 3821, 3821, 3821, + + 3821, 3821, 3821, 3821, 3821, 3821, 3824, 3821, 3821, 3825, + 3826, 3821, 3821, 3821, 3821, 3821, 3821, 3982, 3596, 3596, + 3596, 3827, 724, 1007, 724, 724, 3829, 724, 724, 2764, + 3832, 724, 2764, 724, 4170, 3828, 724, 3834, 3830, 724, + 2784, 724, 724, 2784, 724, 724, 3835, 3831, 724, 3836, + 724, 724, 3669, 724, 724, 1007, 4235, 2703, 3173, 2579, + 724, 3838, 3840, 724, 3839, 724, 724, 1807, 724, 724, + 3438, 3438, 3438, 3439, 724, 724, 3842, 724, 724, 3841, + 3904, 3844, 3846, 3845, 724, 2529, 724, 724, 724, 724, + 3756, 3848, 1806, 3983, 3984, 4015, 3985, 1007, 3788, 3847, + + 3986, 3757, 852, 852, 852, 852, 3902, 3902, 3902, 3902, + 2796, 2797, 895, 2796, 724, 907, 1007, 724, 895, 2799, + 2799, 2799, 2799, 3990, 1807, 895, 724, 3948, 4020, 724, + 3756, 3905, 1007, 2881, 2890, 2529, 3956, 3843, 724, 3675, + 2805, 3757, 2805, 2805, 2805, 2805, 2805, 2805, 2805, 1806, + 2805, 2805, 2805, 2805, 2805, 2805, 4249, 3442, 1806, 1806, + 2891, 3906, 2894, 1007, 853, 854, 855, 856, 857, 2865, + 1007, 858, 3961, 2905, 2800, 859, 2863, 1007, 860, 4301, + 2863, 861, 1007, 3179, 1007, 1806, 1007, 1806, 1007, 3994, + 3992, 3991, 2909, 2801, 1007, 4057, 2798, 2866, 1806, 2793, + + 4090, 3993, 3957, 2005, 1007, 1007, 2801, 3963, 3963, 3963, + 3964, 3995, 1007, 2892, 1007, 1007, 4011, 1806, 4002, 3998, + 3908, 3575, 4007, 3997, 3801, 3802, 3803, 3949, 3805, 3806, + 3807, 2863, 2863, 1007, 3808, 4001, 4399, 4012, 3809, 1007, + 1007, 3810, 3811, 3812, 3813, 1807, 3999, 1007, 4000, 2865, + 3203, 1007, 4003, 1007, 4013, 4023, 4400, 1007, 2930, 4005, + 4037, 1808, 1808, 1808, 1808, 1808, 1808, 1007, 2863, 3962, + 1806, 4008, 4006, 1812, 3965, 1007, 1007, 4016, 4021, 3966, + 3966, 1007, 4033, 1806, 1007, 3966, 1007, 4009, 4010, 2866, + 1007, 4048, 2868, 4014, 4034, 2005, 4035, 1007, 4017, 4017, + + 4017, 4018, 4036, 1007, 1818, 1007, 2926, 1007, 4022, 2868, + 4045, 1007, 2867, 4039, 2005, 4403, 1007, 2862, 1821, 4052, + 4024, 1822, 1823, 1807, 4041, 1007, 4047, 1007, 4025, 1007, + 1007, 1007, 2868, 4053, 4049, 4026, 1007, 4069, 2868, 1808, + 1808, 1808, 1808, 1808, 1808, 1007, 4106, 4059, 1806, 4063, + 1007, 1812, 4038, 4038, 4038, 4038, 4038, 4038, 4046, 4058, + 1007, 4042, 2867, 4050, 2005, 4051, 1007, 4043, 2865, 4055, + 1007, 1007, 2865, 4056, 4065, 4070, 1007, 4075, 4071, 4078, + 1007, 1007, 1818, 2868, 1819, 4019, 1007, 1007, 4062, 1007, + 4068, 4067, 4060, 2975, 1007, 4081, 1821, 1007, 1007, 1822, + + 1823, 3963, 3963, 3963, 3964, 4061, 1007, 1007, 4044, 4128, + 4072, 2866, 4073, 1007, 4064, 2867, 1007, 2005, 1007, 1007, + 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2962, 1007, 1007, + 4077, 4083, 4079, 1007, 4093, 4074, 4076, 2990, 1007, 4066, + 2865, 4084, 1007, 4089, 1007, 4409, 2868, 1007, 1007, 1007, + 2866, 2868, 1806, 1007, 2867, 4091, 2005, 4092, 1007, 4104, + 1007, 4082, 1806, 4027, 4028, 1007, 4107, 1007, 3965, 4085, + 4085, 4085, 4086, 3966, 3966, 1807, 4029, 1007, 4108, 3966, + 4030, 4094, 2866, 4031, 4032, 2867, 2867, 2005, 2005, 1007, + 1007, 2984, 2984, 2984, 2984, 2984, 2984, 4110, 4101, 2865, + + 1806, 1007, 4095, 1007, 1007, 4105, 1007, 1007, 4120, 2965, + 1007, 4122, 4109, 2965, 4096, 3438, 3438, 3438, 4097, 2866, + 4102, 4113, 1007, 4103, 1007, 2005, 1007, 1007, 4112, 4114, + 1007, 4115, 2380, 4116, 4117, 3005, 1007, 3013, 3017, 2866, + 4126, 4125, 1007, 4123, 2868, 2005, 1007, 1007, 4087, 1007, + 4143, 1007, 1007, 2868, 3054, 4111, 4088, 4124, 1007, 2865, + 1806, 4121, 1806, 1806, 1007, 1007, 4129, 1007, 4410, 4134, + 2863, 3015, 1007, 4127, 4130, 4130, 4130, 4131, 1007, 1806, + 2863, 1007, 4098, 2926, 4099, 1007, 4135, 4136, 1007, 4138, + 1007, 1007, 1007, 1007, 4141, 1007, 1007, 4133, 4142, 4144, + + 4411, 4137, 4100, 4140, 4139, 1007, 1007, 4145, 1007, 4146, + 4147, 2866, 1807, 1007, 2865, 2867, 4155, 2005, 2865, 1007, + 1007, 4149, 1007, 4148, 1007, 1007, 1007, 4150, 3040, 3040, + 3040, 3040, 3040, 3040, 4151, 1007, 1007, 1806, 4159, 1007, + 4161, 1007, 4163, 4154, 1007, 4167, 1007, 1007, 1007, 2868, + 2868, 4160, 4162, 4156, 2865, 4157, 3061, 4169, 1007, 4175, + 1007, 4132, 1007, 4182, 4186, 4172, 2865, 1007, 4177, 1007, + 4166, 2868, 2866, 2862, 1007, 4171, 2867, 4174, 2005, 1007, + 1007, 1806, 4180, 1007, 4178, 1007, 4173, 4179, 1007, 4181, + 4183, 3074, 1007, 1007, 1007, 4164, 2866, 3081, 4168, 4185, + + 4187, 1007, 2005, 4184, 1007, 1007, 1007, 2868, 4189, 4190, + 4188, 3085, 1007, 4194, 3086, 1007, 1806, 2868, 4196, 4165, + 2866, 1007, 1806, 4198, 2867, 4197, 2005, 4206, 1007, 1007, + 4176, 1007, 4199, 4202, 1007, 4195, 1806, 1007, 4200, 1806, + 1007, 1007, 2865, 4201, 4204, 4212, 1007, 4214, 4216, 1007, + 1007, 2868, 3102, 3103, 4205, 4209, 4203, 4208, 2862, 2867, + 1007, 2005, 4191, 1007, 3107, 4210, 1007, 4217, 2863, 4218, + 1007, 4219, 4220, 4221, 3111, 4192, 1007, 1806, 1806, 1007, + 4207, 4260, 4211, 4228, 1007, 4193, 1007, 4231, 1007, 1806, + 1007, 4222, 4223, 1007, 4224, 1007, 2862, 1007, 4225, 1806, + + 4215, 4226, 1007, 4236, 1007, 3121, 4230, 2863, 1007, 4227, + 4232, 4213, 4233, 4229, 1007, 1007, 4241, 1007, 1007, 4234, + 2868, 4240, 1007, 2865, 1007, 2863, 4245, 1007, 4237, 4258, + 1806, 1007, 1007, 1007, 1007, 4248, 4242, 1007, 4246, 4243, + 1007, 4244, 1007, 1007, 1007, 1007, 4252, 1007, 4247, 4250, + 4256, 4251, 4253, 3139, 1007, 1007, 4238, 3140, 4257, 1007, + 4254, 4268, 1007, 4269, 1007, 1007, 4259, 1007, 4261, 4239, + 4272, 4255, 4264, 1007, 4270, 2868, 4262, 4263, 1806, 1007, + 4282, 1007, 1806, 1007, 4265, 2868, 1007, 4273, 4266, 1007, + 4267, 4276, 4275, 1007, 4278, 4274, 4277, 4271, 1007, 1007, + + 1007, 4279, 3162, 1007, 2866, 1007, 1007, 4281, 4280, 1007, + 2005, 4283, 1007, 4284, 4285, 4286, 1007, 1007, 1007, 4292, + 4288, 4302, 4304, 1007, 3181, 1007, 1007, 1806, 1007, 4289, + 4290, 4287, 2866, 1007, 1007, 4291, 2867, 4294, 2005, 2865, + 1007, 4295, 4296, 4300, 4318, 1007, 3179, 1007, 4306, 1806, + 1007, 4297, 4298, 4320, 2868, 1007, 1007, 1007, 2866, 4299, + 3173, 4307, 2867, 3187, 2005, 4312, 1007, 4308, 1007, 4310, + 4311, 1007, 4325, 4327, 4309, 1007, 3136, 4323, 4313, 1007, + 4314, 1007, 2862, 4303, 4316, 4329, 1007, 4305, 1806, 1007, + 1007, 1007, 1007, 2862, 1007, 4315, 4293, 4319, 4331, 1007, + + 4317, 1007, 4332, 4336, 4324, 1007, 4321, 1007, 4328, 3206, + 1007, 4333, 4335, 4338, 1007, 2865, 4334, 1007, 4339, 2868, + 1007, 1007, 4354, 1007, 2862, 4357, 4412, 1007, 4430, 4322, + 1007, 1007, 4360, 1007, 1806, 4373, 1007, 4326, 4356, 4355, + 4358, 4359, 1007, 1007, 2863, 4419, 1007, 1007, 724, 4374, + 4431, 1007, 1007, 2866, 4361, 1007, 4362, 4363, 4382, 2005, + 4375, 1007, 4330, 1007, 1007, 2865, 4390, 1007, 4397, 4213, + 4383, 4432, 4376, 4337, 4340, 4388, 1007, 4341, 4342, 4343, + 4344, 4345, 4346, 4347, 4392, 1007, 1007, 4348, 1007, 4391, + 4439, 4349, 4440, 4389, 4350, 4351, 4352, 4353, 3596, 3596, + + 4441, 1007, 3596, 1807, 3596, 3596, 3596, 3596, 3596, 3596, + 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 3596, 4364, + 4364, 4364, 4364, 4364, 4364, 3596, 3596, 3596, 4365, 3596, + 3596, 4366, 4367, 4367, 4367, 4367, 4367, 4367, 4367, 4367, + 4367, 4367, 4367, 4367, 4367, 4367, 4367, 4367, 4367, 4367, + 4367, 4367, 4367, 4367, 4367, 3596, 3596, 3596, 3596, 3596, + 3596, 4367, 4368, 4367, 4369, 4367, 4367, 4367, 4367, 4367, + 4367, 4367, 4367, 4367, 4367, 4367, 4370, 4367, 4367, 4371, + 4372, 4367, 4367, 4367, 4367, 4367, 4367, 4377, 3596, 3596, + 3596, 4384, 4384, 4384, 4385, 1007, 4387, 3234, 4378, 4393, + + 4379, 4380, 4381, 1007, 4394, 3203, 1007, 1807, 2865, 4395, + 2863, 3236, 4396, 4402, 2270, 4424, 1007, 4398, 1007, 3804, + 4413, 3804, 1806, 3231, 3231, 3231, 3231, 3231, 3231, 1007, + 724, 2868, 1806, 724, 2048, 2049, 1806, 2052, 2052, 2052, + 2052, 2062, 2063, 2062, 2063, 1062, 2112, 4442, 2112, 4401, + 2052, 2052, 2052, 2052, 724, 2112, 4423, 724, 1062, 3804, + 4443, 1558, 4406, 4444, 1007, 724, 1007, 4445, 724, 4407, + 4425, 4446, 2067, 2067, 2067, 2067, 3804, 2116, 4386, 4408, + 1073, 2067, 2067, 2067, 2067, 2121, 4447, 1558, 4448, 1073, + 3644, 724, 4449, 2053, 724, 4417, 4450, 4453, 3645, 3438, + + 3438, 3438, 3439, 4426, 4427, 3646, 2053, 4404, 724, 4428, + 4451, 724, 3287, 4405, 4414, 4452, 4420, 1558, 1138, 1331, + 4415, 724, 1331, 4416, 724, 4421, 2116, 2112, 2068, 2112, + 4470, 4464, 4473, 1331, 4429, 4422, 2112, 2068, 4433, 4463, + 3323, 3419, 1343, 1343, 4434, 4466, 3438, 3438, 3438, 3439, + 1343, 4435, 4458, 4436, 4465, 4437, 1325, 4438, 4467, 3527, + 4460, 1343, 4478, 4484, 2529, 1343, 3843, 724, 3675, 4468, + 4469, 1325, 1326, 1326, 1326, 1326, 1326, 1326, 4459, 4455, + 4485, 1283, 4471, 1392, 1343, 4475, 4418, 1326, 1326, 1326, + 1326, 1326, 1326, 2461, 4476, 4474, 1283, 4477, 2309, 1343, + + 1343, 4472, 1343, 1343, 1343, 4479, 3315, 3316, 4480, 1343, + 3319, 2305, 1343, 3440, 1343, 3441, 4483, 4484, 1343, 4481, + 4482, 1343, 4486, 3561, 1343, 4456, 1343, 4487, 4488, 4489, + 4490, 1283, 1283, 3442, 2306, 1283, 4491, 4492, 4493, 1343, + 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4496, 4501, 4457, + 1325, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, + 4511, 4512, 4514, 1262, 4516, 4517, 1326, 1326, 1326, 1326, + 1326, 1326, 4518, 2272, 3363, 1283, 4515, 4513, 1331, 1265, + 1266, 4521, 3366, 1325, 4524, 4525, 4526, 4527, 1343, 1325, + 4530, 1392, 1343, 1343, 4533, 4528, 4529, 4532, 4531, 1343, + + 1343, 4536, 4535, 1343, 3395, 4537, 4534, 1343, 1283, 1337, + 1343, 1338, 3381, 1339, 1283, 2309, 4461, 1343, 1343, 4538, + 1343, 3396, 1273, 1341, 1343, 4539, 1342, 1343, 1325, 4540, + 4541, 1343, 4556, 4542, 1343, 2309, 4564, 4543, 4519, 1343, + 1343, 1343, 4520, 1343, 1326, 1326, 1326, 1326, 1326, 1326, + 1343, 4523, 4546, 1283, 1392, 4545, 1331, 1473, 1343, 4522, + 4549, 2485, 4544, 4547, 2305, 1343, 4550, 3364, 1343, 4548, + 1343, 1343, 4559, 1343, 4554, 1392, 1343, 1343, 2308, 1343, + 4529, 2309, 1490, 4557, 1491, 2306, 1343, 1337, 1343, 1338, + 1343, 1339, 4552, 4551, 1343, 2305, 2308, 1325, 1343, 4578, + + 1490, 1341, 4553, 4555, 1342, 4462, 4569, 2306, 1343, 4558, + 1343, 1343, 1343, 3414, 3414, 3414, 3414, 3414, 3414, 2309, + 4579, 1343, 1283, 4580, 1343, 4560, 4560, 4560, 4561, 4565, + 4565, 4565, 4566, 4570, 4574, 1343, 4575, 4582, 1343, 1343, + 4571, 1343, 1343, 4577, 4562, 4562, 4562, 4562, 4562, 4562, + 2309, 3438, 3438, 3438, 3438, 1343, 4572, 4572, 4572, 4572, + 4572, 4572, 4576, 1343, 2308, 4596, 1343, 4584, 1490, 1343, + 1491, 3438, 3438, 3438, 3439, 4583, 4594, 4600, 4606, 1343, + 4595, 1343, 4597, 3534, 4567, 4563, 4598, 4605, 1343, 2306, + 1490, 4609, 1491, 4599, 1343, 4608, 2485, 1343, 1343, 1283, + + 1343, 1343, 1343, 4607, 1343, 1343, 2305, 1343, 4612, 1343, + 1343, 4613, 4624, 4639, 4610, 4573, 4568, 1343, 4586, 4587, + 4588, 1343, 4611, 4589, 1343, 4602, 4590, 4591, 4616, 4603, + 4601, 4604, 2309, 1343, 4592, 4618, 1343, 1343, 4581, 1343, + 1343, 2305, 4619, 4593, 4602, 4617, 4621, 2306, 4614, 2309, + 1343, 4620, 1343, 4623, 1343, 4615, 1343, 1343, 4581, 2306, + 4625, 1343, 4622, 4627, 1343, 4640, 1343, 4626, 1343, 4628, + 1343, 1343, 4629, 4630, 1343, 1343, 1343, 1343, 4631, 2305, + 1343, 1343, 4632, 4633, 4634, 1343, 1343, 4636, 4633, 1343, + 2309, 4635, 4641, 1343, 1343, 1343, 2363, 4637, 4642, 4643, + + 4644, 4645, 4646, 1343, 2309, 4647, 4648, 4638, 1343, 1343, + 1343, 1343, 4649, 1343, 1343, 1343, 1343, 1343, 2308, 4651, + 1343, 1392, 1490, 1343, 1491, 2485, 4652, 4654, 2308, 1343, + 4657, 1392, 1490, 4650, 4656, 4662, 1343, 4653, 4655, 4658, + 1343, 4660, 4659, 1343, 1343, 4661, 1343, 4663, 4664, 1343, + 1343, 1343, 4665, 4666, 4667, 2309, 4668, 1343, 1343, 4669, + 1343, 4670, 1343, 4672, 1392, 4675, 3529, 1343, 4671, 2308, + 1343, 1343, 1343, 4673, 4678, 1491, 4676, 4681, 4680, 1343, + 1343, 4677, 3506, 1343, 1343, 1343, 4674, 1343, 4679, 4682, + 4683, 4685, 4684, 1343, 1343, 2305, 1343, 4686, 1343, 2309, + + 1343, 1343, 4687, 4689, 1343, 1343, 1490, 1343, 1491, 1343, + 1343, 4691, 1343, 4688, 1343, 3381, 4692, 1343, 1343, 1343, + 4690, 1343, 4696, 4694, 4695, 4697, 4693, 1343, 2309, 1343, + 1392, 4700, 4699, 1343, 1343, 4703, 2309, 1343, 4701, 4707, + 4702, 1343, 1343, 1343, 4698, 4704, 1343, 1343, 4706, 1343, + 1343, 4711, 2309, 1343, 1343, 2308, 4712, 1343, 4705, 1490, + 4708, 1491, 1473, 1343, 3568, 4709, 1343, 4722, 4723, 1490, + 1343, 1491, 4724, 4725, 1343, 1343, 4744, 1343, 1343, 4726, + 1343, 4710, 2306, 1343, 4713, 4714, 1343, 1343, 4789, 1283, + 4602, 4715, 1343, 1392, 4745, 4716, 4717, 2309, 1343, 4735, + + 4718, 4719, 4720, 4727, 4758, 4721, 4728, 4729, 4759, 4730, + 4737, 2305, 1343, 4736, 4749, 4740, 1343, 4738, 4763, 1343, + 4731, 4732, 4733, 4734, 4739, 4746, 1343, 4741, 4742, 1343, + 4750, 4743, 1343, 1343, 1473, 4755, 2305, 1343, 4747, 1325, + 4751, 4748, 4752, 1343, 1343, 2309, 1490, 1392, 1491, 1343, + 1343, 1343, 4741, 4753, 4756, 4756, 1392, 1343, 4754, 4757, + 1343, 1343, 2363, 4762, 1283, 2305, 1343, 4760, 1343, 1343, + 4761, 2306, 1473, 2308, 4767, 1343, 1343, 1490, 2309, 1491, + 1343, 1392, 4765, 1343, 4766, 4768, 1473, 1343, 1343, 1343, + 4784, 4786, 4787, 4785, 4788, 4764, 1343, 1343, 1343, 1343, + + 1343, 1343, 724, 724, 724, 724, 1343, 724, 724, 724, + 724, 1343, 4791, 724, 4794, 724, 4812, 724, 724, 4795, + 724, 4792, 724, 724, 724, 724, 4793, 724, 724, 724, + 4796, 4797, 724, 5006, 724, 724, 3620, 4804, 4798, 724, + 724, 2532, 724, 5015, 724, 724, 4799, 724, 724, 4800, + 724, 5016, 724, 724, 5017, 724, 2532, 724, 4802, 4805, + 724, 4769, 1343, 4770, 4770, 4803, 4801, 4770, 4771, 4770, + 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4772, 4770, + 4770, 4770, 4770, 4770, 4773, 4773, 4773, 4773, 4773, 4773, + 4770, 4770, 4770, 4774, 4770, 4770, 4775, 4776, 4776, 4776, + + 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, + 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, + 4770, 4770, 4770, 4770, 4770, 4770, 4777, 4778, 4776, 4779, + 4776, 4780, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, + 4776, 4781, 4776, 4776, 4782, 4783, 4776, 4776, 4776, 4776, + 4776, 4776, 4770, 4770, 4770, 4770, 4768, 4533, 724, 724, + 724, 5018, 4809, 724, 724, 724, 2529, 724, 724, 5027, + 724, 4806, 4821, 724, 2687, 724, 4807, 724, 4810, 5028, + 4808, 2531, 724, 3860, 724, 1652, 724, 1653, 2531, 724, + 724, 724, 1652, 4814, 4813, 724, 4811, 724, 724, 5036, + + 2532, 2529, 724, 724, 4817, 724, 5037, 724, 4816, 4815, + 724, 4818, 724, 4906, 724, 724, 5038, 724, 1473, 724, + 724, 2532, 724, 1636, 724, 4560, 4560, 4560, 4561, 5039, + 724, 724, 4769, 1343, 1325, 724, 4820, 5040, 4819, 4565, + 4565, 4565, 4566, 4890, 4562, 4562, 4562, 4562, 4562, 4562, + 1326, 1326, 1326, 1326, 1326, 1326, 724, 5049, 724, 1283, + 724, 724, 1331, 724, 4823, 724, 4572, 4572, 4572, 4572, + 4572, 4572, 724, 4822, 2532, 724, 724, 724, 724, 5050, + 724, 724, 724, 724, 4825, 4563, 724, 724, 4827, 724, + 5045, 724, 4826, 1530, 4567, 1531, 724, 5046, 4931, 724, + + 724, 724, 4828, 4579, 724, 724, 4580, 1533, 724, 724, + 1534, 1535, 724, 724, 724, 4829, 2531, 724, 4528, 1325, + 1652, 5057, 1653, 724, 724, 4824, 4568, 4834, 724, 724, + 4600, 5041, 5059, 724, 5041, 1326, 1326, 1326, 1326, 1326, + 1326, 4830, 4985, 724, 1283, 724, 4832, 1331, 724, 724, + 4833, 5042, 724, 3763, 724, 724, 4831, 724, 4612, 4836, + 724, 5043, 4835, 1652, 724, 1653, 4837, 724, 4842, 724, + 724, 4841, 724, 724, 4844, 724, 4846, 1558, 1530, 2687, + 1531, 724, 4790, 4601, 4847, 724, 4843, 5060, 724, 2529, + 724, 724, 1533, 724, 724, 1534, 1535, 4894, 5061, 724, + + 5062, 4838, 2532,11275, 724, 4839, 724, 4840, 2532, 724, + 4845, 724, 724, 724, 5063, 724, 724, 724, 724, 2529, + 724, 724, 4838, 724, 4851, 724, 4849, 2771, 724, 4853, + 724, 4848, 724, 4850, 724, 724, 4854, 724, 724, 724, + 724, 724, 4856, 724, 724, 724, 724, 4858, 4852, 724, + 724, 4859, 4855, 724, 724, 724, 4857, 4860, 724, 724, + 724, 5064, 724, 724, 724, 724, 4862, 724, 724, 724, + 724, 3885, 4861, 4988, 724, 724, 4863, 4864, 4866, 2529, + 724, 4865, 724, 724, 5065, 4867, 724, 724, 724, 4868, + 724, 724, 5066, 724, 4868, 724, 2532, 4869, 724, 724, + + 5047, 5048, 5067, 4870, 724, 2579, 4872, 724, 4876, 4877, + 4871, 5068, 724, 724, 724, 4875, 4873, 724, 4874, 724, + 5071, 724, 724, 4878, 724, 4879, 724, 724, 724, 4881, + 724, 724, 724, 724, 724, 724, 724, 5041, 4880, 724, + 5041, 2532, 4884, 5079, 4882, 724, 724, 4886, 4883, 2531, + 724, 724, 724, 1652, 4887, 1653, 724, 724, 724, 5082, + 5085, 724, 2531, 724, 4885, 4888, 1652, 724, 4891, 724, + 724, 2687, 724, 4889, 724, 724, 724, 724, 5086, 5087, + 4892, 724, 4897, 4893, 4895, 724, 724, 724, 4678, 4896, + 724, 724, 724, 4898, 4899, 4900, 724, 724, 5012, 2811, + + 724, 2532, 724, 4902, 724, 724, 4905, 5088, 724, 724, + 724, 724, 4901, 724, 4904, 724, 724, 4903, 724, 3758, + 724, 724, 2531, 724, 724, 4910, 4908, 4907, 1653, 724, + 724, 4911, 5090, 724, 724, 724, 724, 3735, 724, 4909, + 5093, 724, 724, 4912, 4913, 4914, 724, 724, 724, 724, + 2532, 724, 4916, 724, 724, 724, 5094, 4917, 5091, 724, + 724, 4918, 2532, 724, 724, 4915, 4919, 724, 724, 724, + 5095, 2529, 724, 4920, 724, 724, 724, 5092, 5096, 4921, + 724, 724, 4922, 1652, 724, 1653, 724, 724, 724, 724, + 5097, 724, 724, 724, 5098, 724, 4926, 724, 4923, 4925, + + 724, 3620, 724, 724, 5100, 4928, 724, 724, 724, 4924, + 724, 724, 724, 4722, 4929, 5101, 5102, 724, 4927, 4930, + 2532, 4932, 724, 4693, 724, 4934, 724, 724, 4933, 724, + 724, 724, 724, 2848, 5119, 4936, 724, 724, 4935, 2532, + 724, 724, 724, 5041, 724, 4940, 5041, 4937, 2531, 724, + 4957, 4938, 1652, 724, 1653, 724, 5120, 4939, 724, 724, + 724, 4941, 724, 1636, 724, 724, 4942, 724, 5121, 724, + 1652, 724, 1653, 4944, 724, 724, 724, 4956, 5120, 4955, + 724, 724, 4943, 4945, 724, 4961, 724, 724, 4959, 724, + 724,11275, 4962, 724,11275, 724, 4958, 2529, 724, 4963, + + 724, 4964, 4960, 4968, 724, 5019, 5019, 5019, 5019, 724, + 724, 4946, 4947, 4965, 5122, 724, 724, 4838, 4948, 4969, + 5123, 724, 4949, 4950, 2532, 724, 4970, 4951, 4952, 4953, + 724, 4966, 4954, 4973, 4967, 5126, 4974, 5127, 724, 4971, + 1636, 724, 4972, 724, 724, 4975, 5128, 4976, 724, 724, + 724, 1652, 5149, 1653, 4979, 724, 5080, 4980, 4977, 4768, + 5150, 4981, 724, 4978, 2532, 724, 4982, 724, 724, 2529, + 724, 724, 724, 724, 724, 4987, 724, 724, 724, 724, + 724, 4980, 4983, 724, 2579, 4965, 724, 5187, 4986, 4984, + 2529, 724, 724, 5325, 724, 724, 1636, 724, 2531, 724, + + 724, 4989, 1652, 724, 1653, 1636, 724, 724, 724, 2532, + 724, 5011, 724, 4990, 4991, 724, 724, 724, 724, 1007, + 724, 724, 724, 724, 5002, 724, 5041, 5000, 724, 5041, + 5004, 5001, 5219, 724, 724, 4992, 4770, 4770, 5010, 724, + 4770, 4771, 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4770, + 4770, 4772, 4770, 4770, 4770, 4770, 4770, 4773, 4773, 4773, + 4773, 4773, 4773, 4770, 4770, 4770, 4774, 4770, 4770, 4775, + 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, + 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, 4993, + 4993, 4993, 4993, 4770, 4770, 4770, 4770, 4770, 4770, 4994, + + 4995, 4993, 4996, 4993, 4993, 4993, 4993, 4993, 4993, 4993, + 4993, 4993, 4993, 4993, 4997, 4993, 4993, 4998, 4999, 4993, + 4993, 4993, 4993, 4993, 4993, 4770, 4770, 4770, 4770, 724, + 4768, 724, 724, 724, 724, 2531, 724, 724, 724, 1652, + 3890, 5007, 724, 5099, 5003, 5005, 724, 724, 5099, 5399, + 2531, 724, 724, 5008, 1652,11275, 5013, 724,11275, 5009, + 5473, 5021, 5022, 5014, 5019, 5019, 5019, 5020, 5023, 5029, + 11275, 3904, 3983,11275, 5047, 5048, 5030, 5024, 5025, 5026, + 5031, 5032, 5051, 5058, 1007, 5033, 5034, 5035, 724, 5052, + 724, 724, 1636, 724, 5053, 724, 724, 1806, 5054, 5055, + + 5056,11275,11275, 5089,11275,11275, 4992,11275,11275,11275, + 11275,11275,11275, 5141, 3986, 1007, 5069, 5070, 3902, 3902, + 3902, 3902, 3905, 1007, 895, 5081, 5081, 5081, 5081, 5081, + 5081, 5233, 5451, 5234, 5072, 5083, 5083, 5083, 5083, 1806, + 11275, 895, 5073,11275,11275,11275,11275,11275,11275,11275, + 11275,11275, 3906,11275,11275,11275,11275, 5041,11275,11275, + 5041,11275,11275, 5082,11275,11275, 5075,11275,11275,11275, + 11275,11275,11275, 1807, 5074,11275, 5077,11275,11275,11275, + 11275, 5077,11275, 1007, 1807, 724, 5170, 5576, 5076, 5078, + 724, 3963, 3963, 3963, 3963, 5577, 1007, 1007, 1806, 1007, + + 4966, 1007, 1007, 4967, 1007, 2801, 5133, 4011, 5118, 1806, + 5106, 3963, 3963, 3963, 3964, 5283, 5104, 5284, 5105, 5103, + 5109, 5139, 5084, 5108, 5130, 5130, 5130, 5131, 5108, 5580, + 1007, 5107, 1806, 5113, 5111, 1007, 5140, 5135, 5136, 1806, + 5110, 5112, 1007, 1007, 5116, 5115, 5125, 5134, 5114, 5124, + 5115, 2868, 5117, 1807, 3963, 3963, 3963, 3964, 5137, 1007, + 1007, 1007, 1007, 1007, 5142, 1007, 1007, 1007, 5535, 1808, + 1808, 1808, 1808, 1808, 1808, 5138, 5157, 5143, 1806, 1007, + 5204, 1812, 1007, 1007, 1007, 1007, 5205, 1007, 1007, 5385, + 1007, 2868, 1007, 1007, 5144, 5148, 5132, 5132, 5145, 5589, + + 1007, 5147, 5132, 1007, 5146, 1007, 5152, 5321, 1007, 5322, + 1007, 1007, 1818, 1007, 1819, 1007, 5166, 5590, 3961, 5153, + 1007, 1007, 5151, 1007, 1007, 5377, 1821, 1007, 1007, 1822, + 1823, 5591, 1007, 2868, 1007, 1007, 1007, 4528, 1807, 1007, + 5154, 1007, 4528, 5332, 5541, 1007, 1007, 5156, 2868, 5155, + 5158, 1007, 5403, 1007, 1808, 1808, 1808, 1808, 1808, 1808, + 2868, 3179, 1007, 1806, 1007, 5594, 1812, 1007, 5160, 1007, + 1007, 5620, 1007, 1007, 5161, 1007, 5159, 1007, 1007, 5041, + 1007, 4012, 5041, 1007, 2868, 1007, 5162, 2865, 1007, 1007, + 5165, 5163, 5181, 5164, 1007, 1007, 2862, 1818, 1007, 1819, + + 1007, 5129, 5167, 1007, 1007, 1007, 1806, 5177, 5168, 1007, + 1007, 1821, 1007, 5621, 1822, 1823, 1007, 1007, 5169, 5171, + 2866, 1007,11275, 5173, 5172, 5180, 2005, 5636, 1007, 5174, + 5174, 5174, 5175, 1007, 5639, 5640, 1007, 2868, 1007, 5176, + 5178, 1007, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4018, + 1007, 1007, 1007, 5196, 4037, 1007, 1007, 1007, 3179, 5184, + 5188, 5641, 1007, 2863, 1007, 1007, 3173, 1007, 5182, 5642, + 5185, 1007, 5183, 1007, 1806, 5193, 1007, 2866, 1007, 1806, + 5189, 2867, 1007, 2005, 1007, 5208, 1007, 1007, 5194, 1007, + 1007, 1007, 5186, 5195, 2865, 1007, 5643, 5190, 1007, 1007, + + 2868, 5191, 2866, 1007, 1007, 1007, 2867, 5644, 5192, 2863, + 1007, 1007, 1807, 4041, 1007, 2863, 1007, 5197, 5199, 1007, + 1007, 1007, 4045, 5198, 5201, 1007, 1007, 4052, 4038, 4038, + 4038, 4038, 4038, 4038, 1007, 1007, 1007, 1806, 1806, 1007, + 1007, 1007, 5215, 1007, 5200, 5221, 5225, 1806, 1007, 5207, + 5202, 3173, 1806, 5646, 5206, 1007, 5203, 2868, 1007, 5210, + 1007, 5209, 2865, 1007, 4560, 4560, 4560, 5212, 4063, 2868, + 1007, 1007, 5647, 1007, 5218, 1007, 1007, 5211, 1007, 4565, + 4565, 4565, 5217, 5213, 5213, 5213, 5213, 5213, 5213, 5214, + 1007, 1007, 5216, 1806, 4065, 1007, 1007, 4044, 5226, 5349, + + 1007, 5350, 5650, 1007, 1007, 1007, 1007, 5220, 1007, 1007, + 5222, 1007, 5223, 5223, 5223, 5223, 5223, 5223, 4069, 1806, + 2868, 4071, 5651, 1331, 4563, 1007, 2961, 2961, 2961, 2962, + 1007, 1007, 1007, 1007, 4567, 5228, 1007, 1007, 1007, 5229, + 1007, 4484, 4075, 1806, 5227, 1007, 1806, 4085, 4085, 4085, + 4086, 4078, 5400, 1007, 1007, 5231, 1007, 4081, 1007, 1007, + 1007, 1007, 5401, 1007, 4083, 4093, 4568, 1806, 1007, 2868, + 5232, 5224, 5649, 5656, 1007, 5241, 1806, 5235, 2865, 1007, + 1007, 1007, 1806, 1007, 5650, 5236, 1007, 1007, 1007, 1806, + 1806, 5680, 1007, 5237, 4085, 4085, 4085, 4085, 1007, 4085, + + 4085, 4085, 4086, 1007, 4079, 1007, 4579, 1007, 1007, 5244, + 1007, 1007, 1007, 1007, 1007, 2965, 1007, 5681, 5242, 1007, + 2121, 5374, 2868, 5375, 5243, 2868, 5230, 1806, 1007, 5238, + 5239, 5246, 2866, 1007, 4088, 5245, 5240, 4584, 2005, 1007, + 3438, 3438, 3438, 4097, 1007, 1007, 1007, 5253, 1007, 4107, + 1007, 5254, 5247, 1007, 4268, 1007, 1007, 5682, 1331, 5255, + 1007, 1007, 5252, 5256, 1007, 1007, 4110, 1007, 1806, 1007, + 1007, 5683, 1007, 3179, 1806, 5630, 1007, 5269, 5275, 5684, + 2866, 1007, 3173, 5270, 2867, 5248, 2005, 1007, 5249, 5250, + 4588, 1806, 1007, 4589, 5282, 5271, 4590, 5251, 1007, 1007, + + 5272, 4122, 5273, 1007, 4592, 1007, 2867, 5655, 2005, 1007, + 1007, 674, 5277, 4593, 1007, 5665, 5278, 1007, 5279, 2868, + 5280, 5281, 1007, 5380, 5685, 5381, 1806, 4581, 5257, 5257, + 5257, 5257, 5257, 5258, 5257, 5257, 5257, 5259, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5260, + 5260, 5260, 5260, 5260, 5260, 5257, 5257, 5257, 5261, 5257, + 5257, 5262, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, 5257, + 5257, 5263, 5264, 5263, 5265, 5263, 5263, 5263, 5263, 5263, + + 5263, 5263, 5263, 5263, 5263, 5263, 5266, 5263, 5263, 5267, + 5268, 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, + 5257, 5019, 5019, 5019, 5274, 5276, 4120, 1007, 5286, 1138, + 1007, 1007, 1007, 1007, 2866, 1007, 1007, 5289, 2867, 5285, + 2005, 1007, 5287, 1007, 2121, 2863, 1007, 5288, 1007, 5290, + 1007, 1806, 3179, 5041, 1007, 1007, 5041, 5291, 4130, 4130, + 4130, 4130, 4130, 4130, 4130, 4131, 5019, 5019, 5019, 5292, + 1007, 5474, 1007, 5475, 5592, 1007, 5299, 1007, 4601, 4121, + 1007, 1007, 1007, 1007, 5593, 1007, 1007, 1007, 1007, 5293, + 1806, 1007, 5297, 4143, 5686, 2863, 1007, 2868, 5277, 5296, + + 1007, 1007, 5294, 1007, 5652, 1007, 1007, 5300, 1007, 5295, + 1007, 5687, 1007, 1331, 2121, 1007, 5302, 1007, 1806, 5301, + 5688, 1007, 5629, 5689, 1007, 5298, 1007, 1007, 1007, 1007, + 5304, 5305, 1007, 1007, 1007, 1007, 5303, 1007, 5306, 1007, + 1007, 1007, 1007, 5326, 1007, 1007, 1007, 1007, 5308, 1007, + 1007, 4163, 1007, 5307, 2121, 5309, 1007, 5311, 5310, 5312, + 2863, 1007, 5657, 1007, 1007, 4167, 1007, 5313, 1007, 1007, + 5314, 1007, 5333, 5631, 1007, 5314, 1806, 2868, 5315, 1007, + 1007, 5317, 1007, 5316, 1007, 1007, 4175, 1007, 2868, 1007, + 1806, 1007, 5328, 4678, 2975, 5319, 1007, 1007, 2868, 5690, + + 5318, 1007, 5691, 4186, 4164, 5320, 1007, 1007, 5323, 1007, + 5324, 1806, 1007, 5635, 1007, 5327, 5329, 5330, 4168, 5670, + 5331, 1007, 1007, 2868, 2865, 1007, 1007, 1007, 1806, 674, + 1007, 5692, 1007, 5693, 2863, 1007, 1007, 1007, 5334, 5336, + 5335, 1007, 1007, 1007, 1007, 674, 1007, 1007, 1007, 1007, + 5339, 1007, 1007, 4190, 5337, 4196, 1007, 4198, 2868, 5346, + 5694, 1007, 5338, 5340, 5340, 5340, 5341, 5695, 5696, 1007, + 5348, 1007, 3179, 2866, 1007, 5674, 1007, 2867, 1806, 2005, + 1806, 1007, 1806, 1007, 5351, 2866, 1007, 5347, 1007, 2867, + 5352, 2005, 1007, 5354, 1007, 4206, 5697, 1007, 1007, 1007, + + 5359, 5353, 4212, 1007, 674, 5700, 4191, 5701, 5355, 5356, + 5357, 1007, 4216, 1007, 674, 5358, 1007, 2866, 1007, 5360, + 1806, 2867, 5702, 2005, 5342, 1007, 5362, 1806, 5343, 1007, + 1007, 1007, 5361, 5363, 5709, 5344, 1007, 1806, 2868, 5373, + 1007, 5345, 1007, 5710, 5364, 1007, 2866, 1007, 4207, 5698, + 2867, 4214, 2005, 5379, 1007, 5366, 5367, 2048, 2049, 1007, + 5699, 5365, 5368, 5019, 5019, 5019, 5274, 4220, 5369, 1007, + 4221, 5370, 5371, 5372, 1007, 1007, 1806, 5711, 5718, 2866, + 1007, 5675, 1007, 2867, 3173, 5378, 5376, 1007, 5383, 1007, + 5382, 674, 1806, 1007, 1007, 1806, 2868, 1007, 5676, 5719, + + 1007, 1007, 1007, 5384, 4215, 1007, 5388, 1007, 674, 1007, + 4236, 5386, 1007, 5387, 1007, 5389, 5390, 1007, 5406, 5723, + 5581, 5724, 1007, 2868, 1007, 5391, 1007, 1007, 5725, 1007, + 5392, 1007, 1007, 1007, 1007, 4237, 5394, 5755, 1007, 1007, + 1007, 5398, 5393, 1007, 5417, 1007, 1007, 5395, 1007, 5397, + 1007, 1007, 5396, 1007, 5408, 1007, 1007, 1007, 1007, 1007, + 4678, 2866, 1007, 5402, 5404, 5405, 5423, 2005, 4256, 1007, + 5759, 5407, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 4258, + 1007, 1007, 5412, 1007, 1007, 5420, 5418, 5410, 5409, 1007, + 2868, 5428, 4213, 5411, 5174, 5174, 5174, 5175, 1007, 5762, + + 1007, 5764, 1007, 1007, 1806, 1007, 2866, 1007, 1007, 5419, + 2867, 5422, 2005, 1007, 4269, 1007, 5421, 674, 1007, 2863, + 1007, 1007, 2868, 1007, 1007, 5426, 1007, 2306, 2865, 1007, + 674, 1007, 2868, 1007, 5425, 5424, 1007, 674, 1007, 1806, + 1007, 674, 1007, 5661, 5429, 1007, 2865, 1007, 5432, 1007, + 5749, 674, 5427, 2863, 1007, 1007, 5413, 4593, 5808, 1007, + 5414, 5430, 1007, 5431, 1007, 1007, 5415, 1007, 5433, 2863, + 1007, 1007, 5416, 2868, 5434, 1007, 1007, 1007, 1007, 5435, + 1007, 5436, 1007, 1007, 4282, 2867, 1007, 2005, 5438, 5437, + 1007, 1007, 1007, 1007, 1007, 1007, 674, 1007, 1007, 1007, + + 1007, 5439, 1007, 4292, 5459, 1007, 1007, 1007, 1007, 1806, + 4302, 1007, 1007, 1007, 5443, 5440, 5441, 1007, 5442, 3961, + 5445, 5444, 1007, 5446, 1007, 1007, 5448, 1007, 1806, 1007, + 1007, 1007, 1007, 1007, 5450, 1806, 4304, 1007, 1007, 1007, + 5447, 5449, 4579, 5457, 1007, 4579, 5469, 2868, 1007, 1007, + 4693, 1007, 4318, 5452, 1007, 5453, 1007, 5454, 5455, 1007, + 1007, 1806, 1007, 1007, 1007, 1007, 5841, 1007, 1007, 5460, + 1007, 5456, 2868, 1007, 1007, 1007, 5458, 1806, 1007, 5477, + 5479, 5461, 2866, 1007, 5662, 5462, 2867, 1007, 2005, 1007, + 1007, 5463, 1007, 5464, 1007, 1007, 5884, 4320, 5465, 5466, + + 5466, 5466, 5467, 1007, 1007, 4319, 5493, 4325, 1007, 1007, + 1007, 5920, 5470, 5468, 2865, 1007, 1007, 5921, 5927, 4327, + 5471, 1007, 1806, 1007, 2867, 1007, 2005, 5476, 1007, 5478, + 1007, 2867, 1806, 2005, 4329, 5490, 5472, 1007, 1007, 5932, + 1007, 2863, 1007, 1007, 1806, 4336, 674, 1007, 1007, 2868, + 4321, 5491, 1007, 1007, 2048, 2049, 674, 1007, 674, 1806, + 1007, 5494, 1007, 1007, 1007, 1007, 5492, 5496, 1007, 1007, + 1806, 1007, 1007, 1007, 2868, 5480, 1007, 5976, 1007, 5509, + 5495, 1007, 5507, 1007, 1007, 5497, 5510, 5522, 1007, 1007, + 2062, 2063, 1007, 5511, 1007, 5514, 5508, 5517, 5515, 5728, + + 1007, 5516, 1007, 5481, 5482, 1007, 5539, 1007, 5729, 5277, + 5483, 1007, 1007, 5530, 5484, 5485, 2868, 1007, 5582, 5486, + 5487, 5488, 5498, 5499, 5489, 5500, 4729, 5518, 4730, 5977, + 5928, 5523, 5501, 5502, 5503, 2865, 1007, 5929, 5504, 5505, + 5506, 4733, 4734, 1007, 1007, 5519, 5978, 2863, 1007, 1007, + 1007, 5512, 1007, 5595, 5524, 1007, 5525, 1007, 5520, 674, + 2867, 5521, 2005, 5513, 5536, 1007, 1807, 5526, 5527, 5529, + 1007, 1007, 5528, 1007, 5915, 1007, 1007, 5532, 1007, 2868, + 1007, 1007, 1007, 5981, 5530, 2863, 1007, 1007, 5531, 1007, + 1007, 1806, 5537, 5533, 1007, 1007, 3620, 5983, 1007, 1007, + + 1007, 5513, 2975, 1007, 1007, 1007, 5543, 5534, 1007, 5540, + 1007, 5538, 2863, 1007, 2865, 1007, 1007, 1007, 5987, 5988, + 2866, 1007, 1007, 3179, 2867, 5542, 2005, 5565, 1007, 2865, + 1007, 2868, 5544, 1007, 1007, 4521, 1007, 1007, 5989, 1007, + 2865, 1007, 1007, 5546, 5547, 1007, 2062, 2063, 5566, 5545, + 1007, 1007, 5548, 1007, 5571, 2866, 1007, 4387, 1007, 5549, + 5550, 2005, 5019, 5019, 5019, 5551, 1007, 2868, 5575, 5578, + 5990, 1007, 4384, 4384, 4384, 4384, 4384, 4384, 4384, 4385, + 2868, 1007, 1806, 1007, 5553, 1007, 1007, 5568, 1007, 3758, + 1007, 1007, 5982, 1007, 5567, 5570, 1007, 1007, 1007, 2868, + + 724, 5572, 1007, 1007, 1806, 724, 5569, 5597, 1007, 5992, + 5573, 1325, 1007, 5645, 5637, 2975, 2865, 1007, 5645, 5587, + 724, 3364, 5574, 1007, 1262, 724, 1007, 724, 1007, 5638, + 5552, 1007, 724, 5638, 674, 5712, 1283, 5993, 4640, 5598, + 5994, 5552, 4770, 4770, 674, 5995, 4770, 5554, 4770, 4770, + 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4772, 4770, 4770, + 4770, 4770, 4770, 5555, 5555, 5555, 5555, 5555, 5555, 4770, + 4770, 4770, 5556, 4770, 4770, 5557, 5558, 5558, 5558, 5558, + 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, + 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 4770, + + 4770, 4770, 4770, 4770, 4770, 5559, 5560, 5558, 5561, 5558, + 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, + 5562, 5558, 5558, 5563, 5564, 5558, 5558, 5558, 5558, 5558, + 5558, 4770, 4770, 4770, 4770, 5498, 2062, 2063, 4728, 4729, + 2121, 4730, 5583, 5583, 5583, 5584, 724, 674, 1265, 1266, + 5996, 724, 4731, 5579, 4733, 4734, 724, 674, 2579, 4872, + 4942, 724, 724, 4584, 1652, 5922, 1653, 724, 4533, 5600, + 724, 5923, 5999, 674, 4942, 724, 5588, 5760, 1652, 5041, + 1653, 5613, 5041, 724, 4959, 4722, 5615, 2116, 674, 1473, + 5614, 674, 5844, 1283, 6000, 5632, 674, 5585, 4960, 674, + + 5596, 674, 5633, 724, 5660, 2461, 674, 6001, 724, 5672, + 1283, 5011, 5721, 5634, 4586, 4587, 4588, 2305, 6002, 4589, + 4602, 5586, 4590, 4591, 5663, 674, 5664, 674, 674, 5666, + 5599, 4615, 3506, 674, 6003, 674, 2116, 5873, 674, 4593, + 5601, 5601, 5601, 5601, 5601, 5602, 5601, 5601, 5601, 5601, + 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, + 5601, 5603, 5603, 5603, 5603, 5603, 5603, 5601, 5601, 5601, + 5604, 5601, 5601, 5605, 5606, 5606, 5606, 5606, 5606, 5606, + 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, + 5606, 5606, 5606, 5606, 5606, 5606, 5606, 6004, 5601, 5601, + + 5601, 5601, 5601, 5606, 5607, 5606, 5608, 5606, 5606, 5606, + 5606, 5609, 5606, 5606, 5606, 5606, 5606, 5606, 5610, 5606, + 5606, 5611, 5612, 5606, 5606, 5606, 5606, 5606, 5606, 5601, + 5601, 5601, 5601, 4727, 5765, 674, 5616, 4729, 4727, 4730, + 5041, 5617, 4729, 5041, 4730, 674,11275, 6005, 2112,11275, + 4731, 4732, 4733, 4734, 2112, 4731, 4732, 4733, 4734,11275, + 5622, 674,11275, 5930, 1325, 5931, 5623, 2112, 5677, 5673, + 4584, 674, 5624, 5625, 1325, 5626, 674, 674, 5627, 5628, + 1326, 1326, 1326, 1326, 1326, 1326, 674, 5748, 4712, 1283, + 1326, 1326, 1326, 1326, 1326, 1326, 5667, 674, 5750, 1283, + + 1490, 674, 1491, 2532, 6006, 2363, 674, 674, 674, 5678, + 5671, 674, 5668, 2272, 674, 5618, 4713, 4714, 5766, 674, + 6010, 5679, 4602, 4715, 674, 5728, 1325, 4716, 4717, 2112, + 5729, 674, 4718, 5669, 4720, 2112, 5654, 4721, 5703, 5704, + 5653, 674, 5713, 5714, 6012, 5705, 4593, 5715, 5619, 1325, + 5716, 1283, 2687, 2308, 5706, 5707, 5708, 1490, 5717, 1491, + 4584, 674, 1273, 674, 5736, 1326, 1326, 1326, 1326, 1326, + 1326, 674, 6013, 1325, 1283, 5720, 5730, 1331, 5726, 5726, + 5726, 5726, 5726, 5726, 5735, 674, 674, 674, 5722, 5732, + 674, 6014, 674, 2503, 5745, 674, 674, 674, 1283, 5737, + + 674, 674, 674, 5731, 3381, 674, 674, 6015, 1337, 4584, + 1338, 674, 1339, 674, 3529, 674, 674, 5738, 674, 5739, + 5658, 5779, 1341, 674, 674, 1342, 1343, 1325, 674, 674, + 5740, 5740, 5740, 5741, 6007, 4579, 4593, 6008, 4580, 674, + 5746, 6016, 5733, 1326, 1326, 1326, 1326, 1326, 1326, 674, + 674, 674, 1283, 5752, 5751, 1331, 674, 674, 6017, 674, + 674, 674, 674, 1283, 5747, 5780, 674, 674, 5753, 674, + 1558, 5765, 674, 5734, 5767, 5754, 4584, 674, 4584, 674, + 4565, 4565, 4565, 4565, 6009, 4593, 1337, 674, 1338, 5659, + 1339, 4560, 4560, 4560, 4560, 674, 5998, 5742, 674, 2309, + + 1341, 5734, 2532, 1342, 1343, 674, 1325, 5768, 674, 5743, + 5756, 5756, 5756, 5756, 5756, 5756, 6020, 5744, 4560, 4560, + 4560, 4561, 5757, 5757, 5757, 5757, 5757, 5757, 4584, 6021, + 4584, 1283, 5782, 674, 4600, 4567, 6022, 5756, 5756, 5756, + 5756, 5756, 5756, 674, 1325, 5781, 1283, 4565, 4565, 4565, + 4566, 6024, 4593, 4584, 4593, 5766, 6027, 1636, 5770, 1283, + 4572, 4572, 4572, 4572, 4572, 4572, 674, 4568, 674, 1283, + 5769, 5772, 674, 674, 674, 1283, 674, 5771, 674, 6028, + 5777, 674, 5774, 674, 674, 5773, 5783, 4601, 674, 5775, + 5778, 1392, 5776, 674, 6029, 674, 4612, 5788, 5790, 674, + + 5798, 5784, 4567, 2306, 4593, 5787, 4593, 2308, 5785, 674, + 674, 5789, 674, 1491, 674, 674, 674, 674, 674, 5799, + 5786, 1283, 674, 2485, 674, 674, 5800, 5791, 674, 4593, + 5793, 5793, 5793, 5793, 4568, 674, 5801, 674, 5794, 674, + 2338, 674, 1392, 674, 6030, 674, 674, 674, 5802, 674, + 6032, 674, 5804, 674, 674, 5805, 674, 5734, 5795, 5803, + 674, 674, 5810, 6033, 674, 5809, 1490, 674, 1491, 5806, + 674, 674, 674, 5807, 674, 5815, 6034, 674, 5811, 5811, + 5811, 5812, 5814, 1473, 674, 5816, 1490, 5817, 1491, 674, + 5819, 5796, 674, 674, 1490, 674, 1491, 674, 5818, 674, + + 674, 674, 5821, 674, 674, 5822, 674, 2305, 5823, 5797, + 5834, 674, 2529, 674, 674, 5820, 674, 674, 674, 5824, + 5826, 674, 5825, 5827, 5828, 674, 674, 6035, 674, 674, + 674, 674, 6036, 674, 5813, 674, 674, 674, 674, 674, + 674, 5829, 5830, 674, 5831, 1325, 674, 674, 5832, 674, + 5854, 674, 5835, 674, 5833, 5837, 674, 674, 5840, 674, + 1392, 674, 5979, 5846, 674, 6037, 5836, 674, 674, 5839, + 1283, 2703, 674, 674, 674, 2503, 1392, 5838, 674, 674, + 674, 674, 674, 674, 674, 5845, 674, 5847, 5843, 674, + 5842, 674, 674, 674, 674, 674, 674, 5857, 674, 674, + + 5848, 5824, 674, 5855, 5825, 5850, 5851, 674, 674, 674, + 5849, 674, 674, 5858, 5852, 5859, 5853, 674, 5860, 1473, + 5856, 674, 2306, 5861, 5862, 674, 674, 674, 674, 674, + 674, 6038, 5863, 674, 674, 674, 674, 674, 674, 5864, + 2306, 5865, 5866, 674, 674, 674, 5868, 674, 674, 5867, + 5870, 674, 2305, 674, 5869, 674, 5874, 674, 674, 6039, + 5871, 674, 674, 2305, 2488, 674, 5872, 674, 674, 5875, + 674, 5876, 674, 674, 5877, 674, 5880, 674, 5895, 5878, + 674, 5879, 674, 1473, 1558, 674, 674, 674, 2485, 5881, + 1392, 674, 674, 674, 674, 674, 674, 674, 5885, 674, + + 674, 6019, 674, 5886, 5882, 674, 5887, 674, 5892, 674, + 674, 674, 5888, 674, 5891, 674, 5890, 5893, 5889, 674, + 6040, 674, 674, 674, 674, 5898, 674, 5899, 674, 674, + 5894, 674, 674, 5901, 674, 674, 5900, 5896, 5903, 5902, + 674, 674, 674, 674, 5905, 674, 2485, 674, 674, 5906, + 674, 674, 674, 5904, 5897, 674, 2555, 5907, 674, 5909, + 674, 674, 2532, 674, 6018, 5910, 5908, 674, 5933, 6041, + 674, 5911, 5912, 674, 2308, 5913, 6042, 674, 1490, 674, + 1491, 5914, 5917, 5916, 674, 674, 674, 674, 6043, 674, + 674, 5919, 5924, 5925, 5934, 674, 674, 674, 5918, 674, + + 674, 674, 5936, 674, 5834, 6046, 674, 674, 6049, 674, + 5926, 674, 5935, 674, 674, 5938, 674, 674, 1473, 5937, + 6048, 5941, 5939, 2308, 674, 5732, 2703, 1490, 674, 1491, + 674, 1473, 5940, 674, 1392, 5943, 5944, 5942, 674, 674, + 674, 674, 6052, 5946, 674, 674, 674, 5948, 674, 674, + 674, 6053, 5945, 674, 674, 674, 674, 2532, 5949, 5947, + 674, 5952, 5951, 5950, 674, 5955, 5954, 674, 5953, 674, + 6054, 674, 674, 5956, 674, 2485, 674, 674, 5733, 674, + 5959, 674, 674, 5957, 5960, 5958, 674, 674, 674, 674, + 4768, 674, 674, 6055, 5961, 674, 1558, 674, 674, 674, + + 5963, 674, 674, 5964, 5966, 674, 674, 5962, 6056, 5734, + 5967, 674, 674, 6047, 5965, 1283, 674, 5968, 5968, 5968, + 5969, 2308, 674, 2338, 674, 1490, 1392, 1491, 2305, 6057, + 674, 674, 5972, 674, 674, 1473, 6058, 674, 674, 5973, + 674, 674, 2308, 2306, 674, 674, 1490, 674, 1491, 1473, + 5975, 674, 674, 6059, 674, 2532, 5974, 2531, 6062, 674, + 674, 1652, 5854, 1653, 5997, 5991, 6023, 5971, 5980, 5740, + 5740, 5740, 5741, 2531, 2532, 6063, 2532, 6011, 6064, 1653, + 6025, 6065, 674, 6050, 1652, 6044, 1653, 5811, 5811, 5811, + 5812, 6026, 674, 2532, 6031, 1652, 1558, 1653, 1652, 6045, + + 1653, 6060, 6066, 6067, 5970, 1325, 1636, 6068, 6069, 6061, + 6051, 6070, 6071, 6072, 6074, 5855, 6073, 6075, 6076, 6077, + 6078, 1326, 1326, 1326, 1326, 1326, 1326, 2529, 6080, 6081, + 1283, 6082, 2529, 1331, 2532, 6083, 5984, 6084, 2690, 6087, + 6085, 6079, 6086, 5813, 6088, 1558, 1636, 6091, 5985, 6092, + 6093, 2687, 6094, 6095, 6096, 6097, 5986, 6098, 6099, 6089, + 5895, 6090, 6102, 6103, 1530, 6104, 1531, 6105, 6106, 6107, + 6108, 6109, 6111, 6112, 6113, 6114, 6110, 6115, 1533, 6120, + 2687, 1534, 1535, 1325, 6116, 6121, 2531, 6117, 6122, 2532, + 1652, 6123, 1653, 6118, 6119, 6124, 6125, 6126, 6127, 1326, + + 1326, 1326, 1326, 1326, 1326, 6128, 6129, 6130, 1283, 1636, + 6132, 1331, 2531, 6133, 6136, 6137, 1652, 1636, 1653, 6100, + 1558, 6134, 6135, 6131, 6138, 6141, 6139, 6142, 6143, 6145, + 6146, 6147, 6148, 6149, 6150, 6144, 6101, 6140, 6151, 6153, + 2687, 6154, 1530, 6155, 1531, 6156, 6157, 6158, 6152, 5968, + 5968, 5968, 5969, 2555, 1558, 2529, 1533, 2531, 1636, 1534, + 1535, 1652, 2532, 1653, 6161, 1636, 2531, 6162, 6159, 6160, + 1652, 6163, 1653, 5740, 5740, 5740, 5741, 6164, 6165, 6166, + 6027, 6167, 6168, 6169, 6172, 5895, 6173, 6174, 6175, 5019, + 5019, 5019, 5019, 5019, 5019, 5019, 5020, 6177, 6178, 6179, + + 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, + 6190, 6193, 6194, 6191, 6195, 6197, 6198, 6199, 5041, 6192, + 6200, 5041, 6201, 5046, 6196, 6202, 6203, 6204, 6205, 6206, + 6207, 6208, 6209, 6210, 6211, 6214, 5970, 6212, 6215, 6216, + 5984, 6217, 6218, 6213, 6170, 6219, 6220, 6221, 6222, 5046, + 6225, 6226, 5985, 6223, 6223, 6223, 6223, 6227, 6228, 6229, + 5744, 6171, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6234, + 6238, 3904, 6237, 6176, 6242, 6242, 6242, 6242, 5083, 5083, + 5083, 5083, 6243, 6244, 895, 6245, 6246, 6248, 6249, 6250, + 6250, 6250, 6250,11275,11275,11275,11275,11275, 6234,11275, + + 6259, 6234,11275, 6260, 6261, 6234,11275, 6262, 6234, 6264, + 6265, 6266, 6234, 6267, 6269, 6234, 6270, 5120, 6271, 6272, + 6273, 1807, 6240, 6263, 6275, 1807, 6276, 6277, 5139, 6268, + 5130, 5130, 5130, 5130, 5130, 5130, 5130, 5131, 6290, 3984, + 6224,11275,11275,11275, 1807, 6251, 1806, 6313, 5157, 5181, + 1806, 5202, 6241, 1806, 5203, 6252, 6354, 6355, 5259, 6254, + 6377, 5084, 1806, 6257, 5196, 5084, 6255, 5259, 6378, 6379, + 6247, 6253, 6258, 1806, 1806, 6380,11275,11275,11275,11275, + 11275,11275, 6256,11275, 6384,11275,11275, 6274, 5208, 1806, + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 6278, + + 11275,11275,11275, 1807, 6396, 6397, 6427, 1808, 1808, 1808, + 1808, 1808, 1808, 1806, 6428, 6430, 1806, 6451, 6452, 1812, + 11275,11275,11275, 6280,11275,11275,11275, 1807,11275,11275, + 11275, 6281, 6475,11275,11275,11275, 1807,11275,11275,11275, + 6283,11275,11275,11275, 1807,11275,11275,11275, 1807, 6476, + 1818, 6481, 1819,11275,11275,11275, 1807,11275,11275,11275, + 1807, 6482, 5215, 5399, 1821, 6502, 6503, 1822, 1823, 5130, + 5130, 5130, 5131,11275,11275,11275, 1807, 6508, 6279,11275, + 11275,11275, 6289,11275,11275,11275, 1807, 1806, 1808, 1808, + 1808, 1808, 1808, 1808, 6282, 6528, 6571, 1806, 2863, 5221, + + 1812,11275,11275,11275, 6292,11275,11275,11275, 6293,11275, + 11275,11275, 1807, 6572, 6285, 6573, 6603, 5225, 6286, 6284, + 11275,11275,11275, 1807, 1806, 5226, 6287,11275,11275,11275, + 1807, 1818, 6606, 1819,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 1806, 6607, 6291, 1821, 6666, 6667, 1822, 1823, + 1806, 6674, 6676, 6288, 5174, 5174, 5174, 5175, 2868,11275, + 11275,11275, 6298,11275,11275,11275, 1807,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 6302,11275, + 11275,11275, 6303, 6677, 6294,11275,11275,11275, 6304,11275, + 11275,11275, 1807, 6604, 6295,11275,11275,11275, 1807, 5920, + + 6605, 6598, 6296,11275,11275,11275, 1807,11275,11275,11275, + 1807,11275,11275,11275, 1807, 5733,11275,11275,11275, 1807, + 6608, 6297, 5174, 5174, 5174, 5174, 6299, 5174, 5174, 5174, + 5175, 5927, 2866, 6678, 6301, 3203, 2867, 6673, 2005,11275, + 11275,11275, 1807, 6300, 6236, 6381, 5734, 2532, 6599, 6382, + 4256, 6383, 6679, 6305, 6600, 1806,11275,11275,11275, 1807, + 11275,11275,11275, 1807, 5326, 6680, 3961, 6314, 6314, 6314, + 6315,11275,11275,11275, 1807,11275,11275,11275, 1807, 6306, + 11275,11275,11275, 1807, 4579, 6308, 6307, 5244, 6687, 1806, + 6309,11275,11275,11275, 1807, 5333, 1558, 3179,11275,11275, + + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, + 2529, 6167, 1806, 6310,11275,11275,11275, 1807, 6672, 1636, + 1806, 2866, 1652, 4584, 1653, 2867, 2532, 2005, 6311,11275, + 11275,11275, 1807, 6689, 6316,11275,11275,11275, 1807, 6312, + 6319, 6690,11275,11275,11275, 1807, 6317,11275,11275,11275, + 1807, 6320, 6691, 5921, 6318,11275,11275,11275, 1807, 6609, + 6321,11275,11275,11275, 1807, 5928, 6322, 6324,11275,11275, + 11275, 1807, 5929, 2868,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 6325, 6323,11275,11275,11275, 1807, 6368, 6694, + 6326, 6695, 5417, 5276, 2865,11275,11275,11275, 1807, 4593, + + 6696, 6327, 4584, 5423, 6328,11275,11275,11275, 1807, 5459, + 2868, 6329, 6330,11275,11275,11275, 1807, 1806, 1806, 6331, + 11275,11275,11275, 6337,11275,11275,11275, 1807, 1806, 6332, + 11275,11275,11275, 1807, 1806,11275,11275,11275, 1807, 2866, + 6697, 6601, 5921, 2867, 6602, 2005, 4601, 5469, 1807, 6698, + 6371, 2975,11275,11275,11275, 1807, 6334, 6699, 5783, 6333, + 4560, 4560, 4560, 5212, 6340, 6340, 6340, 6340, 6340, 6340, + 2866, 6700, 1806, 1806, 2867, 6335, 2005, 6336, 4593, 5756, + 5756, 5756, 5756, 5756, 5756, 2866, 2531, 6701, 1806, 2867, + 1652, 2005, 1653, 6685, 6702, 6339, 4565, 4565, 4565, 5217, + + 6341, 5477, 6338, 2532, 2867, 2868, 2005,11275,11275,11275, + 6343,11275,11275,11275, 1807,11275,11275,11275, 1807, 1807, + 2121, 6342, 6688, 2121, 1806, 5406, 1806, 2868,11275,11275, + 11275, 1807, 2532, 6692, 5921, 5223, 5223, 5223, 5223, 5223, + 5223, 2048, 2049, 6710, 1806,11275,11275,11275, 1807, 6711, + 1806, 4567,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807,11275,11275,11275, 6351,11275,11275, + 11275, 6352,11275,11275,11275, 1807, 2866, 6345, 5407, 6712, + 2867, 6706, 2005, 4568,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 6344, 6703, 5766,11275,11275,11275, 1807, 5479, + + 2121, 5493, 6346,11275,11275,11275, 6359,11275,11275,11275, + 6360, 6713, 4584, 6671, 6347, 1807, 6714, 6348,11275,11275, + 11275, 6361, 4584, 5258, 1806, 6350, 1806, 5259, 2121, 2866, + 6715, 2062, 2063, 2867, 6349, 2005,11275,11275,11275, 1807, + 1806, 6353,11275,11275,11275, 1807, 6716, 6717, 5261, 6357, + 11275,11275,11275, 1807,11275,11275,11275, 1807, 6356, 6718, + 6358, 1807, 5428, 5651, 2862,11275,11275,11275, 1807,11275, + 11275,11275, 1807, 5779, 5777, 2121, 6370, 6705, 6369,11275, + 11275,11275, 1807, 6707, 5778, 674, 1806, 1806, 4593,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 1138, 4593,11275, + + 11275,11275, 1807, 6682, 3179,11275,11275,11275, 1807,11275, + 11275,11275, 6385, 5565, 6362, 5429, 5575, 6668, 6363, 5019, + 5019, 5019, 5274, 5928, 5602, 2868,11275,11275,11275, 6395, + 5929, 6704, 6746, 6364,11275,11275,11275, 6398, 1806, 6234, + 6365, 1806, 6234, 6747, 6372, 6366, 1325, 1806, 6367, 1283, + 2862,11275,11275,11275, 1807,11275,11275,11275, 1807, 6729, + 6728, 6749, 6374, 674, 6373,11275,11275,11275, 1807, 6720, + 2309, 1283, 6376, 674, 6375, 5257, 5257, 5257, 5257, 5257, + 5258, 5257, 5257, 5257, 5259, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5260, 5260, 5260, 5260, + + 5260, 5260, 5257, 5257, 5257, 5261, 5257, 5257, 5257, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5257, 5257, 5257, 5257, 5257, 5257, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5259, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + + 5257, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5257, 5257, 5257, 5257, 5257, + 5257, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5258, 5257, 5257, 5257, + 5259, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5260, 5260, 5260, 5260, 5260, 5260, 5257, 5257, + 5257, 5261, 5257, 5257, 5262, 5263, 5263, 5263, 5263, 5263, + + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, + 5257, 5257, 5257, 5257, 5263, 5264, 5263, 5265, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5266, + 5263, 5263, 5267, 5268, 5263, 5263, 5263, 5263, 5263, 5263, + 5257, 5257, 5257, 5257,11275,11275,11275, 1807,11275,11275, + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807, 1331,11275,11275,11275, 1807,11275, + + 11275,11275, 1807,11275,11275,11275, 1807,11275,11275,11275, + 1807, 6731,11275,11275,11275, 1807, 2048, 2049, 6734, 2866, + 674, 1331, 6750, 6386, 6736, 2005, 6388,11275,11275,11275, + 1807, 2062, 2063, 2868, 1331, 674, 2121, 6387, 6722, 6390, + 674, 5673, 3173, 5019, 5019, 5019, 5292, 6391, 6389, 6752, + 6739, 6753, 6394,11275,11275,11275, 1807, 6392, 6393, 2926, + 2862,11275,11275,11275, 1807, 674, 1283, 6399, 6724, 2121, + 6723, 1806,11275,11275,11275, 1807, 6732, 6400, 6402, 674, + 6670, 6401,11275,11275,11275, 1807, 5811, 5811, 5811, 6409, + 5734,11275,11275,11275, 1807, 6681, 6708,11275,11275,11275, + + 1807, 6403,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807,11275,11275,11275, 1807, 6405,11275, + 11275,11275, 1807, 6404,11275,11275,11275, 1807, 2868, 6709, + 6406, 6743,11275,11275,11275, 1807, 6733, 6407, 6754, 674, + 674, 2867, 5813, 2005,11275,11275,11275, 1807,11275,11275, + 11275, 1807,11275,11275,11275, 1807, 6410, 2868, 6755, 6735, + 2867, 6408, 2005, 6411, 6740, 6741, 6756, 2865, 4502, 5571, + 6757, 6412, 2485, 6758, 674, 6413,11275,11275,11275, 1807, + 5824,11275,11275, 6420,11275,11275,11275, 1807, 6414, 6415, + 6759, 1228, 6760, 2867, 1806, 2005, 6417, 6748, 6416,11275, + + 11275,11275, 1807,11275,11275,11275, 6423, 6761, 6418,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 2863,11275,11275, + 11275, 1807,11275,11275,11275, 6429,11275,11275,11275, 1807, + 11275,11275,11275, 1807, 6762,11275,11275,11275, 1807, 674, + 674, 6419,11275,11275,11275, 6433, 5971, 6763, 6421,11275, + 11275,11275, 1807,11275,11275,11275, 6435, 6742,11275,11275, + 11275, 1807, 6764, 2112, 6422,11275,11275,11275, 1807,11275, + 11275,11275, 6438, 6424,11275,11275,11275, 1807,11275,11275, + 11275, 6441,11275,11275,11275, 6442,11275,11275,11275, 1807, + 6744, 6765, 1229, 6425, 6766, 6767, 6768, 6426, 6751, 674, + + 6769, 2868, 5340, 5340, 5340, 5340, 5340, 5340, 5340, 5341, + 6431, 6432,11275,11275,11275, 1807, 6770, 6771, 5702, 6436, + 6775, 6772, 6434, 2863,11275,11275,11275, 1807, 6693, 6776, + 6437, 6773, 674, 6777, 1806,11275,11275,11275, 1807, 6439, + 11275,11275,11275, 1807, 2112, 6440, 6778, 2866, 6779, 1262, + 6780, 2867, 6781, 2005, 6443,11275,11275,11275, 6449,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 6774, 6444,11275, + 11275,11275, 1807,11275,11275,11275, 1807,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, 6784, + 6445,11275,11275,11275, 1807, 6176, 6785,11275,11275,11275, + + 1807, 6446, 5578, 6786, 6447,11275,11275,11275, 1807, 6448, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 674, 6788, 2866, 1265, 1266, 1283, 4187, 1325, + 2005,11275,11275,11275, 1807, 6453,11275,11275,11275, 1807, + 6795, 6450, 2862,11275,11275,11275, 1807, 5662, 2868, 2062, + 2063, 6457, 6454, 6455, 1283, 6826, 6458, 3203, 6459, 6456, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 1283, 5762, 6460,11275,11275,11275, 1807, 6404, + 6461, 6792, 5728, 6462,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 2862, 2868, 674, 6738, 6815,11275,11275,11275, + + 1807,11275,11275,11275, 1807, 5961, 6463, 1283, 6783, 674, + 6464, 674, 6465,11275,11275,11275, 1807, 6683, 2868,11275, + 11275,11275, 1807, 4568, 6730, 2862, 2272, 6684, 6745, 6468, + 6467,11275,11275,11275, 1807, 6466,11275,11275,11275, 1807, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + 11275, 6485, 1473, 5764, 674, 6469,11275,11275,11275, 1807, + 6470, 6471, 2866, 6472, 6790, 674, 2867, 674, 2005,11275, + 11275,11275, 1807, 6870, 6871, 1273, 2868,11275,11275,11275, + 1807, 6473,11275,11275,11275, 1807, 6782, 5896, 6477,11275, + 11275,11275, 6491, 5729, 6874, 6817, 6478, 6474,11275,11275, + + 11275, 1807, 6912, 674, 5897, 6479, 674, 6483,11275,11275, + 11275, 1807,11275,11275,11275, 1807, 6818, 6834, 1283, 6480, + 6819, 674, 674, 6484,11275,11275,11275, 1807,11275,11275, + 11275, 1807,11275,11275,11275, 1807, 6820, 674, 674, 6486, + 11275,11275,11275, 1807, 6487, 5855,11275,11275,11275, 1807, + 6488,11275,11275,11275, 1807, 674, 6822, 6821, 6489,11275, + 11275,11275, 1807, 5834, 6490,11275,11275,11275, 6504, 674, + 5884, 1473, 6492, 6493,11275,11275,11275, 1807, 6787, 6494, + 11275,11275,11275, 1807, 674, 6495, 5713, 5714, 1283, 6496, + 6816, 5715, 2309, 2865, 5716, 674, 6938, 6497,11275,11275, + + 11275, 1807, 6675, 6829, 2309, 6498, 674, 674, 6499,11275, + 11275,11275, 6509, 674, 6852, 6831, 6500,11275,11275,11275, + 1807,11275,11275,11275, 6511, 5765,11275,11275,11275, 1807, + 674, 6501,11275,11275,11275, 1807, 4584,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, 6506, + 1283, 674, 6505, 6833,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 6507,11275,11275,11275, 1807,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807,11275, + 11275,11275, 1807, 5732, 3179, 6832, 2866, 674, 6842, 6860, + 2867, 2866, 2005, 6510, 6512, 2867, 674, 2005, 2862,11275, + + 11275,11275, 1807,11275,11275,11275, 6526, 674, 1283, 5766, + 6516, 6513, 4593, 6848, 6517, 6514,11275,11275,11275, 1807, + 6858, 5895, 6515, 6518,11275,11275,11275, 1807, 6878, 674, + 6791, 6521, 6522, 6519, 1473, 6520, 5733,11275,11275,11275, + 1807,11275,11275,11275, 1807, 674, 1283, 674, 6524,11275, + 11275,11275, 1807, 674, 6886, 6523,11275,11275,11275, 1807, + 11275,11275,11275, 1807, 2863,11275,11275,11275, 1807,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 6849, 6525,11275, + 11275,11275, 6537, 674, 6863, 6527,11275,11275,11275, 1807, + 6960, 2868,11275,11275,11275, 1807, 6862, 674, 674, 6529, + + 6530,11275,11275,11275, 1807, 6531,11275,11275,11275, 1807, + 6542, 6542, 6542, 6543,11275,11275,11275, 1807, 674, 2305, + 6879, 2863, 674, 6793, 6532, 6835, 4584, 6533,11275,11275, + 11275, 1807, 674, 4584, 6534, 6859, 6796, 674, 6535, 674, + 1490, 3173, 1491, 6877, 6536,11275,11275,11275, 1807, 674, + 11275,11275,11275, 1807, 674, 6538, 4584, 6539,11275,11275, + 11275, 1807,11275,11275,11275, 1807, 6540,11275,11275,11275, + 1807, 6544,11275,11275,11275, 1807,11275,11275,11275, 1807, + 6841, 674, 6845, 6545, 6541, 2868, 6873, 6900, 674, 2862, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + + 11275, 1807, 4593, 6546,11275,11275,11275, 6557, 674, 4593, + 2865,11275,11275,11275, 6558,11275,11275,11275, 1807,11275, + 11275,11275, 6560, 674, 6840, 6547, 6548,11275,11275,11275, + 1807, 6917, 4593, 6549,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 6550,11275,11275,11275, 1807, 674, 2308, 1392, + 6553, 6551, 1490, 6552, 1491, 6965, 6555, 5466, 5466, 5466, + 5466, 674, 6794, 6830, 6554, 6908, 674, 6556, 5466, 5466, + 5466, 5467,11275,11275,11275, 1807,11275,11275,11275, 1807, + 674, 6561,11275,11275,11275, 1807,11275,11275,11275, 1807, + 6966, 6559,11275,11275,11275, 1807, 1806, 6837, 6562, 6904, + + 6563, 1490, 4584, 1491, 6565,11275,11275,11275, 1807, 4584, + 674, 2975,11275,11275,11275, 1807, 674, 6564,11275,11275, + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807,11275,11275,11275, 1807,11275,11275, + 11275, 1807, 6915, 1473, 4584, 6568, 4584, 6850, 6570, 674, + 6566, 6567,11275,11275,11275, 1807, 674, 6847, 3173, 6836, + 6967, 674, 6569,11275,11275,11275, 1807, 6869, 3173, 2488, + 6844, 6924, 6574,11275,11275,11275, 1807, 674, 4593, 6577, + 6575, 674, 6823, 6824, 6578, 4593, 6825, 6576,11275,11275, + 11275, 6590, 674, 2485, 6581, 674, 6839, 6579, 6591, 6591, + + 6591, 6592,11275,11275,11275, 1807, 6580, 6968, 6892, 6582, + 6838, 6583, 4584, 674, 6893, 6584, 1392, 2866, 6585, 674, + 4593, 2867, 4593, 2005, 6586,11275,11275,11275, 6594, 6899, + 6861, 674, 6587, 674,11275,11275,11275, 1807, 2868, 674, + 6969, 6902, 6589, 6588,11275,11275,11275, 1807,11275,11275, + 11275, 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, + 11275,11275,11275, 1807, 6846,11275,11275,11275, 1807, 6945, + 6970, 2975,11275,11275,11275, 1807,11275,11275,11275, 1807, + 674,11275,11275,11275, 1807, 6593, 6610, 6872, 4593, 5824, + 2866, 674, 5824, 4584, 2867, 6595, 2005,11275,11275,11275, + + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 6597,11275,11275, + 11275, 1807, 6596, 6956, 6971, 6611, 6613,11275,11275,11275, + 1807,11275,11275,11275, 1807, 674, 6612,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807, 6615, + 6972, 6881, 6882, 6614, 6616,11275,11275,11275, 1807, 6843, + 11275,11275,11275, 1807, 674, 674, 2865, 6851, 6619, 4593, + 2866, 2305, 2306, 6876, 2867, 674, 2005, 6868, 6617, 2306, + 6618, 6620, 674, 2865, 674, 6973, 2309, 6621, 2862, 674, + 6622, 6623,11275,11275,11275, 1807, 6624,11275,11275,11275, + + 1807,11275,11275,11275, 1807, 5854, 6974, 6901, 6626,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 6625, 6629, 6627, + 2485, 674, 674, 6628, 6875, 6630,11275,11275,11275, 1807, + 1283, 3173, 6631,11275,11275,11275, 1807,11275,11275,11275, + 1807,11275,11275,11275, 1807,11275,11275,11275, 1807,11275, + 11275,11275, 1807,11275,11275,11275, 1807, 6963, 5855, 6633, + 11275,11275,11275, 1807,11275,11275,11275, 1807, 674, 6975, + 6632,11275,11275,11275, 1807, 6634,11275,11275,11275, 1807, + 6636,11275,11275,11275, 1807, 6635, 5968, 5968, 5968, 6651, + 6925, 6638,11275,11275,11275, 1807, 674, 6639, 6637, 6640, + + 11275,11275,11275, 1807,11275,11275,11275, 6654, 6976, 6641, + 11275,11275,11275, 1807,11275,11275,11275, 1807, 6894, 6977, + 6883, 6643, 674, 6884, 6644, 6642, 6991, 6645,11275,11275, + 11275, 1807, 5019, 5019, 5019, 5551, 6646, 674, 674, 6647, + 11275,11275,11275, 1807, 6649,11275,11275,11275, 1807, 674, + 6650,11275,11275,11275, 1807, 6648, 6961, 2865, 4584, 6885, + 1806,11275,11275,11275, 6659,11275,11275,11275, 1807, 6653, + 674, 6652, 674, 5970,11275,11275,11275, 1807, 6880, 6887, + 5824, 6656, 1490, 5825, 1491, 6655,11275,11275,11275, 1807, + 6911, 674, 674, 6657,11275,11275,11275, 1807, 674, 674, + + 3179,11275,11275,11275, 1807, 2866, 5784, 6914, 1283, 2867, + 674, 2005, 5971, 6686, 6890, 2926, 6658,11275,11275,11275, + 1807,11275,11275,11275, 1807, 5786, 2866, 674, 6909, 6921, + 2867, 6660, 2005, 674, 4593, 2862,11275,11275,11275, 1807, + 2868,11275,11275,11275, 1807,11275,11275,11275, 1807, 6958, + 2338, 2863,11275,11275,11275, 6663, 6891, 7017, 6889, 2865, + 11275,11275,11275, 1807, 674, 6905, 2866, 674, 2309, 674, + 2867, 674, 2005,11275,11275,11275, 1807, 5583, 5583, 5583, + 5583, 5583, 5583, 5583, 5583, 5583, 5583, 5583, 5584, 5740, + 5740, 5740, 5740, 674, 6737, 6930, 2308, 5913, 1325, 6895, + + 1490, 6661, 1491, 5914, 674, 6937, 2865, 6903, 1325, 674, + 6662, 674, 674, 1283, 1326, 1326, 1326, 1326, 1326, 1326, + 674, 6664, 6907, 1283, 1326, 1326, 1326, 1326, 1326, 1326, + 6990, 6936, 5585, 1283, 1325, 674, 5585, 6910, 7018, 674, + 5585, 674, 6665, 5740, 5740, 5740, 5741, 674, 2868, 6997, + 5726, 5726, 5726, 5726, 5726, 5726, 6669, 7022, 674, 1283, + 6721, 5740, 5740, 5740, 5741, 6827, 6827, 6827, 6827, 6827, + 6827, 1283, 7023, 5811, 5811, 5811, 5811, 1325, 6913, 7000, + 1326, 1326, 1326, 1326, 1326, 1326, 6916, 6919, 674, 1283, + 674, 674, 1331, 6828, 6828, 6828, 6828, 6828, 6828, 674, + + 6920, 6898, 1283, 5793, 5793, 5793, 5793, 2306, 2363, 4637, + 674, 5794, 7025, 674, 5793, 5793, 5793, 5793, 5793, 5793, + 5793, 5793, 674, 1337, 674, 1338, 5794, 1339, 5742, 5813, + 3548, 5795, 6923, 5793, 5793, 5793, 5793, 1341, 6947, 6918, + 6725, 1343, 5795, 674, 674, 674, 5795, 1473, 6726,11275, + 11275,11275, 1325, 6896, 7027, 5793, 5793, 5793, 5793, 1392, + 674, 5795, 2306, 5794, 5796, 674, 7030, 6897, 1326, 1326, + 1326, 1326, 1326, 1326, 6922, 6854, 6949, 1283, 674, 5796, + 1331, 7012, 5797, 5795, 6864, 6864, 6864, 6865, 674, 5811, + 5811, 5811, 5812, 6855, 6854, 6926, 6952, 5797, 5793, 5793, + + 5793, 5793, 674, 7033, 2309, 6929, 5794, 674, 674, 674, + 6928, 1337, 6855, 1338, 6927, 1339, 5796, 1283, 6906, 6931, + 6934, 7009, 1490, 674, 1491, 1341, 5795, 6727, 1342, 1343, + 674, 674, 674, 2305, 5797, 6856,11275, 6797, 2308, 1392, + 6932, 1636, 1490, 6935, 1491, 5813, 674, 674, 674, 6888, + 6954, 674, 6940, 6933, 2309, 6948, 674, 674, 6939, 5796, + 7034, 6857, 674, 6799, 6866, 674, 6941, 6942, 674, 6944, + 674, 6867, 2308, 674, 2532, 7035, 1490, 5797, 1491, 6943, + 6943, 6943, 6943, 6943, 6943, 674, 7036, 6800, 6801, 6802, + 6803, 1392, 6804, 6805, 7037, 7038, 6806, 6807, 6808, 2308, + + 6809, 6810, 6811, 1490, 6812, 6950, 6813, 6951, 674, 6946, + 1392, 2309, 674, 6814, 674, 674, 6957, 2306, 6953, 6959, + 674, 2306, 674, 2309, 674, 674, 674, 674, 6955, 2305, + 2306, 2309, 6962, 674, 674, 6964, 674, 6978, 674, 6979, + 674, 674, 674, 1473, 6981, 674, 674, 6982, 6983, 6987, + 6984, 674, 674, 2308, 6985, 6986, 674, 1490, 6980, 1491, + 6988, 674, 674, 6989, 674, 6992, 674, 6993, 6999, 674, + 6994, 674, 674, 6998, 6995, 2309, 1392, 7004, 674, 2461, + 674, 674, 674, 674, 7003, 7005, 1473, 674, 7039, 6996, + 7008, 7001, 2305, 674, 7002, 7013, 7013, 7013, 7014, 674, + + 7007, 674, 7011, 7006, 7040, 674, 5962, 674, 7010, 7010, + 7010, 7010, 7010, 7010, 1473, 674, 5968, 5968, 5968, 5968, + 5968, 5968, 5968, 5969, 7020, 7021, 7044, 7019, 674, 7045, + 2309, 7026, 2529, 674, 7031, 1636, 7028, 2531, 1652, 1558, + 1653, 1652, 7047, 1653, 7048, 7041, 7042, 7049, 1283, 7043, + 7050, 7029, 1636, 7046, 7051, 1636, 7053, 7054, 7055, 7056, + 1652, 7057, 1653, 7058, 7059, 2529, 7060, 674, 7061, 1558, + 6862, 7052, 7063, 674, 6864, 6864, 6864, 6865, 7065, 7066, + 7067, 2690, 7015, 7062, 7068, 7069, 2687, 7071, 6877, 7072, + 7070, 7073, 2687, 7074, 7075, 7076, 7077, 1652, 6883, 1653, + + 7078, 6884, 7079, 5970, 2532, 2531, 7082, 5970, 1325, 1652, + 7081, 1653, 7083, 7084, 7085, 7086, 7080, 7087, 7088, 7090, + 2532, 7091, 7092, 7093, 1326, 1326, 1326, 1326, 1326, 1326, + 7094, 7095, 7089, 1283, 7096, 7097, 1331, 7098, 7099, 7100, + 7101, 1652, 7102, 1653, 7103, 7104, 7105, 7106, 7107, 2579, + 4872, 7108, 7109, 6921, 7064, 7110, 7112, 7113, 1636, 7114, + 7115, 6867, 7116, 2532, 6928, 7118, 7024, 1530, 7111, 1531, + 7119, 7120, 2529, 7117, 1558, 7123, 7124, 7125, 7126, 7121, + 2532, 1533, 3775, 2532, 1534, 1535, 1325, 7127, 7122, 7128, + 7129, 6942, 6943, 6943, 6943, 6943, 6943, 6943, 7130, 7131, + + 1558, 7133, 1326, 1326, 1326, 1326, 1326, 1326, 7134, 2531, + 1558, 1283, 7137, 1652, 1331, 7136, 7138, 7139, 7132, 7140, + 1558, 7142, 7143, 7144, 2555, 7145, 2531, 7135, 2532, 2529, + 1652, 7146, 1653, 2532, 7147, 2532, 7148, 7149, 7141, 7150, + 7151, 7152, 1636, 7154, 7155, 1530, 7156, 1531, 7157, 2531, + 7158, 7159, 7160, 1652, 7161, 1653, 7162, 7153, 7163, 1533, + 7164, 7165, 1534, 1535, 6797, 7166, 7167, 7170, 7171, 7172, + 7168, 2532, 7173, 1558, 7176, 7177, 7178, 7181, 2529, 7182, + 2666, 1636, 7183, 7184, 7187, 7169, 7180, 7022, 7174, 7188, + 6799, 7175, 7189, 1636, 7179, 7010, 7010, 7010, 7010, 7010, + + 7010, 6153, 7013, 7013, 7013, 7014, 7185, 7186, 1636, 7190, + 7192, 7191, 7193, 2532, 6800, 6801, 6802, 6803, 1558, 6804, + 6805, 2532, 7196, 6806, 7032, 6808, 2531, 6809, 6810, 6811, + 1652, 6812, 7195, 6813, 7197, 7194, 7198, 7199, 7200, 7201, + 6814, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, + 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, + 5046, 7221, 7222, 7223, 6223, 6223, 6223, 6223, 7225, 7226, + 7227, 7228, 7229, 7230, 7231, 7232, 6234, 7233, 7232, 6234, + 7234, 7235, 3904, 5082, 7236, 7236, 7236, 7236, 7238, 7015, + 895, 6242, 6242, 6242, 6242, 7239, 7240, 6246, 7241, 7242, + + 2529, 6250, 6250, 6250, 6250, 7243, 7244, 7232, 7245, 7246, + 7232, 7247, 7248, 7249, 7232, 7250, 7251, 7232, 7252, 7232, + 7253, 7254, 7232, 7255, 7256, 5120, 7257, 7258, 7258, 7258, + 7258, 1807, 7260, 6240, 7261, 6278, 6280, 6281, 7263, 6283, + 7264, 7265, 7266, 6289, 7267, 7268, 7269, 6292, 6293, 7270, + 7271, 6224, 7272, 7273, 7275, 6298, 1806, 6251, 2868, 6302, + 1806, 1806, 1806, 6241, 1806, 7274, 6303, 6304, 1806, 2865, + 2863, 7237, 1806, 1806, 7276, 7277, 7278, 7279, 5084, 7280, + 1806, 6247, 1807, 7281, 1806, 7282, 6314, 6314, 6314, 6314, + 2866, 1806, 1806, 7285, 2867, 7289, 2005, 2865, 1808, 1808, + + 1808, 1808, 1808, 1808, 7283, 7291, 7290, 1806, 5733, 7292, + 1812, 6314, 6314, 6314, 6315, 7286, 7293, 7298, 7299, 2867, + 2868, 2005, 7294, 7300, 2863, 7304, 7303, 7305, 7306, 7296, + 7301, 7307, 7308, 7309, 7310, 7312, 6337, 7311, 2866, 1806, + 7314, 1818, 2867, 1819, 2005, 6343, 1807, 5174, 5174, 5174, + 5175, 7315, 7317, 7318, 2862, 1821, 7319, 7262, 1822, 1823, + 1807, 1806, 7313, 7313, 7313, 7313, 7313, 7313, 7316, 6351, + 1806, 1806, 6352, 7284, 7320, 7295, 1808, 1808, 1808, 1808, + 1808, 1808, 7297, 7302, 2865, 1806, 7321, 5233, 1812, 7322, + 7323, 2865, 7324, 6359, 1806, 6360, 7325, 1806, 7284, 6361, + + 2865, 7326, 7327, 2868, 7329, 2867, 2865, 2005, 2867, 4584, + 2005, 4584, 7335, 7336, 7337, 7338, 4584, 7339, 1806, 1818, + 1806, 1819, 7328, 3173, 1806, 5265, 5265, 5265, 6385, 5766, + 5265, 7349, 7347, 1821, 7341, 2863, 1822, 1823, 6797, 7343, + 7342, 5265, 5265, 4584, 7348, 7350, 7345, 7351, 7344, 7352, + 7346, 7353, 7354, 1806, 3179, 2862, 6395, 7356, 5283, 6398, + 6862, 7357, 7360, 7361, 6799, 7362, 7363, 7364, 7365, 7355, + 7368, 3173, 6877, 7369, 7330, 7367, 7370, 7331, 3173, 7375, + 7378, 1806, 7379, 7334, 1806, 4593, 7287, 4593, 6800, 6801, + 6802, 6803, 4593, 6804, 6805, 2868, 7381, 6806, 7288, 6808, + + 5321, 6809, 6810, 6811, 7332, 6812, 2866, 6813, 7382, 7371, + 2867, 7333, 2005, 2867, 6814, 2005, 7384, 7385, 7388, 4593, + 5257, 5257, 5257, 5257, 5257, 5258, 5257, 5257, 5257, 5259, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5260, 5260, 5260, 5260, 5260, 5260, 5257, 5257, 5257, + 5261, 5257, 5257, 5262, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, + 5257, 5257, 5257, 5263, 5264, 5263, 7340, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5266, 5263, + + 5263, 5267, 5268, 5263, 5263, 5263, 5263, 5263, 5263, 5257, + 5257, 5257, 5257, 6864, 6864, 6864, 7358, 2866, 6423, 7372, + 6429, 2867, 7373, 2005, 5811, 5811, 5811, 6409, 6883, 5824, + 7383, 7376, 6420, 7366, 7372, 2866, 6433, 7373, 6435, 2867, + 2868, 2005, 7386, 1806, 6438, 1806, 7380, 7389, 7390, 6441, + 6442, 7391, 1806, 7392, 7393, 7394, 7395, 1806, 7396, 7397, + 6449, 1806, 7398, 1806, 5349, 7399, 7401, 7402, 7404, 1806, + 7407, 7408, 7405, 7409, 1806, 1806, 7410, 7411, 7412, 7413, + 5813, 7414, 3203, 7415, 7374, 1806, 7406, 2868, 7416, 7416, + 7416, 7417, 2868, 7359, 7419, 7419, 7419, 7420, 7422, 7377, + + 6867, 5374, 7423, 7424, 7425, 7426, 7427, 5380, 7428, 2867, + 2866, 2005, 6485, 7430, 2867, 7431, 2005, 7387, 7400, 7432, + 7403, 7429, 7433, 7434, 6491, 7435, 7436, 7437, 2866, 2865, + 7438, 7439, 2867, 7440, 2005, 2975, 5319, 1806, 2862, 7442, + 7445, 7443, 7441, 7446, 6504, 7447, 7448, 7449, 7450, 1806, + 2865, 6509, 7451, 2865, 7444, 6511, 7452, 7453, 7454, 7455, + 7456, 7457, 7458, 7459, 7460, 7461, 7463, 7464, 2868, 1806, + 6526, 7465, 7466, 7467, 7468, 7418, 1806, 5855, 7462, 7469, + 1806, 7421, 2863, 2862, 7472, 7473, 7474, 6537, 7475, 7470, + 7476, 7477, 7478, 7479, 7480, 1806, 4289, 7471, 6542, 6542, + + 6542, 6542, 6542, 6542, 6542, 6543, 2868, 7482, 7483, 7484, + 7481, 7486, 1806, 7487, 7488, 7490, 2862, 7491, 2866, 6557, + 6558, 6560, 2867, 7494, 2005, 7496, 2862, 7497, 7498, 2866, + 1806, 7499, 7500, 2867, 7489, 2005, 7485, 7485, 7485, 7485, + 7485, 7485, 3203, 7492, 1806, 1806, 1806, 2862, 2866, 7503, + 7504, 2866, 2867, 2868, 7493, 2867, 5474, 2005, 7505, 7507, + 7508, 7509, 2926, 7510, 2868, 7502, 2863, 7495, 7511, 2868, + 2868, 7513, 6590, 6591, 6591, 6591, 6591, 6594, 7514, 7512, + 6591, 6591, 6591, 6592, 7515, 7516, 7517, 7518, 7519, 7520, + 7522, 7523, 7525, 7526, 7501, 7521, 7527, 1806, 7528, 7529, + + 7524, 7530, 1806, 7531, 2868, 7533, 2865, 7534, 1806, 7535, + 7536, 7537, 2866, 7538, 7539, 7540, 2867, 7541, 2005, 7542, + 7506, 7532, 7543, 7544, 7545, 7546, 7550, 7547, 7551, 7552, + 2868, 7548, 7553, 7554, 2868, 2862, 7557, 7558, 7559, 7560, + 3136, 2863, 7563, 7564, 7566, 7567, 7549, 2865, 7568, 7562, + 7555, 7569, 7570, 7556, 7573, 7574, 6654, 7561, 7575, 6514, + 7565, 7565, 7565, 7565, 7565, 7565, 7576, 6642, 7013, 7013, + 7013, 7571, 5968, 5968, 5968, 6651, 2866, 2865, 6659, 7578, + 7572, 1806, 2005, 7579, 7022, 2868, 6663, 3024, 3199, 7580, + 7577, 7581, 7582, 7583, 2048, 2049, 7585, 7586, 7587, 7585, + + 1806, 7590, 7591, 1806, 1558, 7593, 7594, 6677, 7595, 7596, + 6677, 1806, 7592, 2062, 2063, 2062, 2063, 7598, 2062, 2063, + 2062, 2063, 7141, 7601, 2531, 7604, 4584, 7607, 1652, 1558, + 1653, 1558, 7608, 2112, 7610, 7603, 7611, 7605, 7612, 7606, + 7613, 7614, 7615, 7616, 7617, 7618, 2121, 7141, 2121, 2121, + 2121, 7588, 2121, 2121, 7625, 7015, 7626, 7627, 7628, 5970, + 7232, 7629, 7630, 7232, 7631, 7632, 7633, 1138, 1325, 1331, + 1331, 1331, 674, 674, 7663, 7589, 674, 7584, 7602, 674, + 674, 7674, 7658, 7665, 1326, 1326, 1326, 1326, 1326, 1326, + 7609, 674, 674, 1283, 7675, 7667, 7597, 7599, 6740, 7676, + + 7600, 7619, 4593, 6741, 674, 674, 7636, 7620, 674, 7622, + 7659, 7659, 7659, 7660, 2112, 7621, 7624, 7635, 674, 674, + 7623, 7677, 674, 1283, 7664, 674, 674, 1392, 1283, 674, + 6742, 7666, 674, 674, 674, 674, 674, 7678, 674, 7670, + 7634, 1325, 7679, 6745, 7668, 7669, 674, 674, 674, 674, + 674, 7680, 674, 7681, 7672, 1283, 7671, 1326, 1326, 1326, + 1326, 1326, 1326, 674, 674, 7682, 1283, 674, 1283, 1331, + 674, 674, 7683, 7684, 7673, 7685, 1262, 7686, 674, 674, + 7687, 7688, 674, 7689, 7690, 7691, 7695, 7696, 7697, 6814, + 7661, 7692, 7692, 7692, 7692, 7692, 7692, 7662, 7772, 7773, + + 1337, 7780, 1338, 7637, 1339, 6883, 7816, 1490, 6883, 1491, + 7838, 674, 674, 7841, 1341, 674, 6965, 1342, 1343, 7638, + 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, + 7638, 7638, 7638, 7638, 7639, 7638, 7638, 7638, 7638, 7638, + 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, 7638, + 7638, 7638, 7638, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7641, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7638, 7638, 7638, 7638, + 7638, 7638, 7640, 7640, 7642, 6801, 7643, 7644, 7640, 7645, + 7646, 7640, 7640, 7647, 7648, 7649, 7640, 7650, 7651, 7652, + + 7640, 7653, 7640, 7654, 7640, 7640, 7640, 7640, 7638, 7638, + 7655, 7638, 1325, 1239, 1239, 1239, 1239, 2272, 1242, 1242, + 1242, 1242, 1265, 1266, 7868, 7701, 6797, 6797, 1326, 1326, + 1326, 1326, 1326, 1326, 674, 674, 7699, 1283, 674, 7869, + 1331, 674, 674, 6797, 7870, 674, 6797, 7698, 674, 674, + 7702, 6797, 674, 6797, 674, 674, 674, 674, 674, 7704, + 674, 6797, 7705, 7703, 674, 674, 1273, 6797, 674, 1240, + 7700, 1337, 2485, 1338, 1243, 1339, 6797, 7656, 6824, 6797, + 6797, 7657, 6797, 6797, 7693, 1341, 1325, 2308, 1342, 1343, + 674, 1490, 6797, 1491, 674, 7706, 6797, 4584, 6797, 7871, + + 7694, 6921, 6814, 6814, 7872, 7707, 7710, 7711, 6928, 7708, + 7712, 1283, 674, 674, 7873, 7709, 674, 7713, 7715, 6814, + 7714, 6883, 6814, 7728, 6884, 7874, 1283, 6814, 7718, 6814, + 7875, 4584, 7717, 1283, 7716, 7876, 7719, 6814, 7721, 7877, + 7723, 7720, 7878, 6814, 7017, 7922, 7724, 7747, 7727, 1283, + 724, 7722, 6814, 7725, 4584, 6814, 6814, 7917, 6814, 6814, + 674, 674, 7737, 7926, 674, 7726, 674, 674, 6814, 724, + 674, 4584, 6814, 4593, 6814, 7924, 7730, 7731, 724, 7729, + 674, 674, 674, 674, 674, 7732, 674, 1473, 7733, 674, + 674, 674, 674, 724, 674, 2309, 674, 674, 7752, 7734, + + 674, 2363, 674, 674, 674, 674, 674, 4593, 674, 4584, + 7735, 674, 7736, 4584, 7749, 674, 4584, 674, 674, 7737, + 4584, 674, 7738, 7738, 7738, 7738, 7738, 7738, 674, 674, + 4593, 7751, 674, 7918, 7739, 674, 674, 674, 674, 674, + 724, 674, 7742, 674, 2309, 4584, 674, 4593, 7741, 674, + 674, 7740, 4584, 674, 674, 674, 2309, 7929, 674, 724, + 6794, 674, 674, 674, 674, 674, 7743, 674, 724, 7744, + 674, 674, 7753, 724, 674, 7745, 7925, 7748, 2485, 7754, + 7746, 7750, 674, 674, 724, 4593, 674, 724, 7755, 4593, + 7729, 7973, 4593, 724, 7756, 7759, 4593, 7774, 674, 674, + + 7758, 7757, 674, 6923, 674, 674, 674, 674, 674, 7760, + 674, 674, 674, 7941, 724, 674, 1392, 7762, 7762, 7762, + 7762, 4593, 7770, 674, 674, 674, 674, 674, 4593, 674, + 7761, 7762, 7762, 7762, 7762, 724, 7762, 7762, 7762, 7762, + 7940, 5793, 5793, 5793, 5793, 7769, 674, 674, 7771, 5794, + 674, 674, 674, 724, 7985, 674, 674, 674, 2309, 7931, + 674, 6864, 6864, 6864, 6864, 6864, 6864, 6864, 6865, 5795, + 674, 674, 6900, 1636, 674, 724, 7777, 7776, 6854, 674, + 674, 7778, 7942, 674, 674, 674, 2309, 724, 674, 724, + 674, 674, 6854, 1283, 674, 7930, 6855, 6854, 724, 7764, + + 7779, 724, 7768, 674, 674, 1473, 2579, 674, 674, 674, + 6855, 7763, 674, 7934, 724, 6855, 7765, 7765, 7765, 7765, + 5797, 674, 674, 7796, 5794, 674, 7943, 724, 2309, 724, + 7766, 7784, 7766, 7767, 7785, 7767, 7767, 7767, 7767, 7767, + 7767, 7932, 674, 674, 5795, 7775, 7781, 7786, 6867, 7782, + 7787, 724, 6867, 674, 674, 674, 674, 674, 7788, 674, + 7790, 7789, 2308, 7791, 8065, 674, 1490, 7783, 1491, 674, + 7793, 674, 674, 7792, 7794, 674, 2363, 5796, 1473, 674, + 674, 674, 674, 674, 7795, 674, 674, 674, 674, 674, + 674, 8066, 674, 7956, 2461, 5797, 7936, 674, 674, 674, + + 674, 674, 724, 674, 7797, 674, 674, 2485, 724, 674, + 7799, 7935, 7798, 674, 674, 674, 674, 674, 724, 674, + 2363, 7804, 7804, 7804, 7804, 7804, 674, 674, 674, 674, + 674, 2363, 674, 2363, 7800, 724, 674, 7801, 7938, 7802, + 674, 674, 674, 2306, 7933, 674, 674, 674, 6938, 7803, + 674, 2532, 7967, 2309, 674, 674, 7806, 724, 674, 674, + 674, 674, 674, 674, 724, 674, 7937, 1473, 674, 674, + 7805, 674, 7807, 724, 674, 2309, 674, 674, 674, 674, + 674, 7809, 674, 724, 7927, 1473, 7092, 7808, 674, 674, + 674, 674, 674, 7951, 674, 674, 674, 2687, 2485, 674, + + 7810, 7813, 724, 674, 674, 7811, 7812, 674, 674, 674, + 674, 674, 674, 724, 674, 674, 674, 674, 674, 674, + 7201, 674, 7814, 674, 674, 7815, 7819, 674, 674, 674, + 674, 674, 674, 7817, 674, 1392, 674, 674, 7701, 7818, + 674, 7952, 674, 674, 674, 674, 674, 724, 674, 7821, + 2308, 7822, 7820, 674, 7823, 7824, 1491, 674, 674, 674, + 674, 674, 674, 7702, 674, 7825, 674, 674, 674, 674, + 7826, 7945, 674, 674, 674, 7827, 7829, 674, 2363, 7828, + 674, 674, 674, 674, 674, 7830, 674, 724, 7840, 2309, + 674, 674, 7113, 7831, 674, 2363, 674, 674, 674, 674, + + 674, 7946, 674, 674, 674, 674, 674, 674, 724, 674, + 7833, 674, 674, 1392, 7832, 674, 724, 8067, 674, 674, + 674, 674, 674, 7949, 674, 7834, 2308, 7835, 7974, 674, + 7839, 7849, 1491, 674, 1325, 7836, 674, 674, 724, 724, + 674, 7957, 2461, 674, 674, 674, 674, 674, 7962, 674, + 6943, 6943, 6943, 6943, 6943, 6943, 724, 7842, 724, 1283, + 674, 674, 674, 674, 674, 7976, 674, 7850, 724, 7948, + 674, 674, 7843, 7844, 674, 7980, 674, 7851, 724, 7848, + 674, 674, 7857, 724, 7845, 674, 7845, 7846, 2309, 7847, + 7847, 7847, 7847, 7847, 7847, 2532, 674, 674, 7852, 7939, + + 674, 724, 2461, 674, 674, 7958, 724, 674, 7853, 7853, + 7853, 7854, 674, 674, 7954, 7969, 674, 7858, 7856, 8068, + 674, 1490, 7859, 1491, 674, 674, 674, 674, 674, 674, + 724, 674, 7860, 724, 2306, 2308, 674, 7866, 674, 1490, + 674, 1491, 674, 674, 674, 7886, 7861, 674, 674, 674, + 7979, 724, 674, 674, 674, 7862, 2305, 674, 7863, 674, + 674, 7865, 7977, 674, 674, 674, 674, 674, 674, 8069, + 674, 7864, 724, 2532, 674, 674, 674, 674, 7879, 724, + 674, 7867, 674, 674, 674, 7881, 674, 7882, 674, 1473, + 8070, 2309, 674, 674, 7880, 7855, 674, 674, 674, 674, + + 674, 674, 7963, 674, 7883, 7885, 7888, 1473, 724, 7884, + 674, 674, 674, 674, 674, 8071, 674, 674, 674, 2306, + 7955, 674, 7890, 1636, 7897, 7889, 7964, 674, 674, 7887, + 7893, 674, 724, 7891, 674, 674, 724, 7966, 674, 724, + 7892, 674, 674, 674, 674, 674, 1558, 674, 7894, 674, + 674, 674, 674, 674, 7978, 674, 2306, 724, 674, 674, + 7947, 7895, 674, 7898, 674, 674, 724, 7896, 674, 674, + 674, 724, 7998, 674, 724, 7899, 674, 674, 674, 674, + 674, 7908, 674, 2309, 7901, 8036, 7900, 674, 7903, 674, + 7902, 674, 7910, 674, 674, 674, 2309, 7905, 674, 674, + + 674, 1473, 7915, 674, 674, 674, 7904, 7906, 674, 7981, + 674, 1490, 724, 1491, 674, 674, 674, 674, 674, 674, + 7911, 674, 2309, 7907, 7909, 2532, 674, 674, 7912, 7029, + 674, 724, 724, 2309, 7960, 674, 674, 2338, 1325, 674, + 2579, 674, 674, 674, 674, 674, 6797, 674, 724, 7914, + 7982, 7913, 724, 7916, 7010, 7010, 7010, 7010, 7010, 7010, + 674, 674, 7919, 1283, 674, 674, 674, 674, 674, 674, + 7701, 674, 7796, 2461, 7013, 7013, 7013, 7013, 7013, 7013, + 7013, 7014, 674, 674, 674, 674, 674, 7920, 2503, 7921, + 7968, 2687, 2666, 7944, 7718, 7702, 724, 7950, 7953, 724, + + 7784, 7961, 7928, 7785, 2532, 1636, 1283, 2532, 2532, 7965, + 724, 6938, 7971, 724, 724, 7786, 7788, 7790, 7787, 7789, + 7791, 724, 6814, 2531, 1636, 724, 8008, 1652, 724, 1653, + 7983, 8072, 2531, 724, 7959, 7986, 1652, 724, 1653, 724, + 724, 724, 7972, 2666, 2687, 2532, 7975, 724, 724, 724, + 724, 724, 1558, 7804, 7804, 7804, 7804, 7804, 2531, 7988, + 7989, 7015, 7987, 7993, 1653, 7015, 1325, 7991, 724, 7984, + 7990, 2532, 724, 724, 724, 724, 2687, 724, 7701, 724, + 724, 724, 1326, 1326, 1326, 1326, 1326, 1326, 2579, 2579, + 2579, 1283, 2579, 7992, 1331, 7994, 724, 724, 724, 1636, + + 724, 7995, 7970, 7702, 724, 2579, 7997, 7996, 1558, 7840, + 8002, 724, 724, 724, 724, 724, 8000, 724, 8003, 724, + 2531, 7849, 7999, 8006, 8001, 1530, 1653, 1531, 724, 724, + 8005, 8007, 8073, 8004, 8010, 724, 724, 8011, 1652, 1533, + 1653, 8012, 1534, 1535, 1325, 5042, 724, 724, 8013, 724, + 724, 7853, 7853, 7853, 7854, 724, 724, 8017, 724, 8018, + 1326, 1326, 1326, 1326, 1326, 1326, 2529, 8009, 8014, 1283, + 8015, 724, 1331, 2532, 724, 724, 724, 724, 724, 724, + 8019, 8016, 724, 8022, 8020, 8021, 724, 8025, 724, 2532, + 8026, 7886, 2666, 724, 8023, 724, 1636, 724, 8029, 724, + + 8027, 8028, 8033, 1530, 8037, 1531, 724, 8032, 724, 8030, + 724, 8024, 724, 8043, 724, 8034, 8031, 1533, 724, 724, + 1534, 1535, 7923, 7844, 724, 724, 8038, 8047, 8035, 2532, + 8075, 7915, 724, 724, 7845, 724, 7845, 7846, 7855, 7847, + 7847, 7847, 7847, 7847, 7847, 8039, 8040, 8042, 8048, 8055, + 724, 8044, 8041, 1636, 724, 1636, 8045, 8049, 2532, 724, + 1652, 8051, 1653, 8050, 724, 724, 2555, 8054, 2532, 724, + 8056, 724, 8046, 8076, 724, 7887, 2532, 724, 724, 8053, + 8052, 724, 724, 724, 1636, 2531, 724, 724, 8058, 1652, + 1636, 1653, 8059, 8077, 2703, 8057, 8060, 724, 724, 8063, + + 724, 724, 2666, 724, 724, 8061, 724, 8062, 8074, 724, + 8078, 724, 8079, 8080, 8081, 724, 8064, 8064, 8064, 8064, + 8064, 8064, 8082, 724, 8083, 8084,11275,11275, 8085, 7223, + 7225, 8086, 8087, 8088, 8089, 5046, 8090, 8091, 7232, 8092, + 8091, 7232, 8093,11275, 8095, 8096,11275, 7236, 7236, 7236, + 7236, 8097, 8098, 895, 8099, 8100, 8091,11275,11275, 8091, + 11275,11275,11275, 8111,11275,11275, 724, 8103, 8091,11275, + 11275, 8091,11275,11275, 8091,11275,11275, 8091,11275,11275, + 11275, 2532, 8114,11275, 8115, 1007, 8121, 724, 8110, 7258, + 7258, 7258, 7258, 8112, 8112, 8112, 8112, 8118, 1007, 8120, + + 8113, 1007, 1007, 8119, 1007, 8122, 1007, 1007, 8124, 1007, + 8123, 8126, 1007, 1007, 7277, 8125, 8131, 7278, 8094, 8102, + 7279, 7280, 8127, 1007, 7281, 8129, 1007, 8132, 1007, 8101, + 8128, 8106, 8136, 6797, 7237, 1007, 6797, 8108, 8137, 1806, + 8133, 8105, 1806, 1007, 8138, 1806, 1806, 8107, 8140, 1806, + 8130, 8104, 1007, 3173, 1007, 7729, 8141, 8139, 1007, 8143, + 8109, 1007, 8142, 7294, 7296, 2865, 8144, 8145, 8147, 1007, + 7301, 8146, 8148, 8151, 2975, 1007, 1007, 1007, 2868, 1007, + 1007, 1007, 8113, 1807, 8135, 7307, 1007, 2866, 1806, 1806, + 7737, 2867, 7719, 2005, 1807, 1806, 8149, 1007, 8134, 1808, + + 1808, 1808, 1808, 1808, 1808, 1007, 1007, 8157, 1806, 6814, + 1806, 1812, 6814, 8150, 1007, 1007, 7295, 7297, 8162, 1806, + 8152, 1007, 1007, 7302, 8154, 2868, 8156, 8153, 2868, 8155, + 8158, 1007, 7283, 1007, 1007, 8160, 1007, 3173, 1007, 8161, + 4584, 8163, 1818, 8165, 1819, 1007, 8164, 1007, 3173, 4584, + 8166, 4584, 1007, 4584, 4584, 8116, 1821, 8172, 1007, 1822, + 1823, 1807, 8173, 8174, 8180, 8175, 8175, 8175, 8176, 7348, + 8181, 1007, 1007, 5263, 5263, 6380, 8182, 1808, 1808, 1808, + 1808, 1808, 1808, 5263, 5263, 5263, 1806, 5263, 8167, 1812, + 7354, 8183, 2863, 7449, 1806, 8184, 5263, 2862, 7343, 8169, + + 5263, 8170, 1007, 1007, 1007, 8186, 8159, 8187, 8188, 8171, + 1007, 8185, 8168, 1007, 8189, 1806, 4593, 1007, 2868, 7412, + 1818, 8191, 1819, 1007, 2868, 4593, 8192, 4593, 8190, 4593, + 4593, 8193, 8211, 8117, 1821, 1007, 2868, 1822, 1823, 8177, + 1007, 1007, 1007, 8195, 8196, 1007, 8212, 1007, 1007, 1007, + 8198, 8216, 8178, 5257, 5257, 5257, 5257, 5257, 5258, 5257, + 5257, 5257, 5259, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5260, 5260, 5260, 5260, 5260, 5260, + 5257, 5257, 5257, 5261, 5257, 5257, 5262, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5257, 5257, 5257, 5257, 5257, 5257, 5263, 5264, 5263, 5265, + 6379, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 8179, + 5263, 5266, 5263, 5263, 5267, 5268, 5263, 5263, 5263, 5263, + 5263, 5263, 5257, 5257, 5257, 5257, 6864, 6864, 6864, 7358, + 8194, 2865, 8197, 7784, 1807, 6883, 8199, 8217, 7376, 8200, + 1007, 1007, 8201, 1007, 8203, 8204, 8204, 8205, 7386, 8214, + 8206, 2866, 8209, 8207, 1806, 2867, 8215, 2005, 2975, 1806, + 1007, 1007, 8208, 1806, 8210, 8213, 7388, 1007, 2865, 7389, + 7390, 8218, 1007, 1806, 8219, 8220, 7397, 8221, 1007, 8222, + + 7399, 8223, 1007, 8226, 1007, 7401, 7402, 8224, 8228, 8225, + 8227, 1806, 8231, 1007, 1806, 1806, 1007, 1007, 8229, 1007, + 8236, 1806, 2868, 2868, 8202, 1806, 7775, 6938, 1007, 3173, + 1806, 1806, 2975, 6867, 1007, 8202, 2865, 2975, 1007, 1007, + 3136, 1007, 8232, 2975, 8237, 1007, 1007, 1007, 1007, 8241, + 8230, 1007, 1007, 7400, 1007, 8235, 8238, 1007, 8255, 7403, + 8233, 8233, 8233, 8233, 8233, 1007, 7416, 7416, 7416, 7416, + 7416, 7416, 7416, 7417, 7419, 7419, 7419, 7419, 2865, 7419, + 7419, 7419, 7420, 8239, 8251, 7445, 8257, 1007, 1007, 1007, + 3173, 8242, 8240, 8245, 1007, 1007, 8243, 1007, 1806, 1007, + + 2865, 8246, 8244, 1007, 8260, 7447, 2865, 1806, 8247, 8234, + 1007, 1007, 2862, 1007, 8248, 1007, 1007, 1007, 1007, 8254, + 8249, 1007, 8250, 7451, 8253, 8258, 1007, 2866, 8261, 8252, + 1806, 8256, 8259, 2005, 1007, 1007, 8262, 1007, 7452, 1007, + 1007, 1007, 8264, 8265, 8266, 8269, 8263, 8129, 1806, 1007, + 1007, 8267, 1007, 7418, 1007, 7464, 8270, 7418, 2975, 8268, + 1007, 7421, 8271, 1806, 7467, 2868, 7421, 1007, 8273, 8272, + 7472, 7473, 8130, 1007, 7474, 8275, 1007, 1007, 1007, 2975, + 1806, 1007, 8274, 8276, 2862, 7478, 7840, 1007, 8282, 1806, + 8278, 1007, 3136, 1007, 8300, 1806, 1806, 1007, 8277, 1806, + + 1007, 8279, 8283, 2866, 1807, 8284, 1007, 8280, 1007, 2005, + 1806, 8289, 8285, 1007, 8296, 1007, 8288, 1007, 8281, 1007, + 7485, 7485, 7485, 7485, 7485, 7485, 8290, 8291, 8292, 1806, + 7500, 8293, 8295, 1007, 8301, 1007, 1007, 1007, 8304, 8297, + 1007, 7853, 7853, 7853, 8294, 2868, 7505, 8299, 1007, 8286, + 1007, 2867, 8298, 2005, 1007, 1806, 8302, 1007, 8306, 8313, + 7845, 8303, 7845, 7846, 2863, 8287, 8287, 8287, 8287, 8287, + 8287, 1806, 8305, 1007, 1007, 8307, 1007, 1007, 8308, 8309, + 8310, 1007, 3136, 1007, 8311, 1007, 8314, 8315, 8318, 8319, + 1007, 8316, 1007, 8320, 8321, 8312, 8317, 8322, 8323, 8324, + + 8325, 8326, 8327, 8329, 1007, 8336, 1007, 8331, 8332, 8330, + 2865, 2866, 8328, 2868, 1007, 2867, 1007, 2005, 8338, 8334, + 1007, 1007, 8335, 1007, 1007, 8333, 1007, 8339, 7855, 8337, + 8340, 1007, 8343, 8344, 1007, 1007, 8348, 1007, 8347, 8349, + 1007, 8341, 1007, 1007, 1007, 8345, 8346, 2868, 8342, 1007, + 8350, 8351, 8353, 8360, 1007, 8355, 8356, 8352, 1007, 8354, + 2865, 8361, 8357, 2868, 1007, 2868, 2867, 2865, 2005, 8362, + 1007, 8363, 1007, 8364, 2926, 8368, 2866, 1007, 8358, 1007, + 2867, 1807, 2005, 1007, 2868, 1007, 8359, 1007, 8365, 7887, + 8366, 1007, 1007, 8369, 2868, 8367, 8370, 7565, 7565, 7565, + + 7565, 7565, 7565, 7573, 8371, 7574, 1806, 1007, 8372, 8373, + 1007, 7013, 7013, 7013, 7571, 8374, 7580, 8375, 3179, 1007, + 8377, 8327, 1007, 2868, 8378, 1007, 3203, 8376, 1806, 1007, + 1806, 2048, 2049, 7585, 7586, 7587, 7585, 2048, 2049, 1806, + 8380, 8380, 8380, 8380, 2048, 2049, 3136, 1007, 1062, 8381, + 8382, 8383, 8381, 1636, 724, 8385, 724, 2057, 8386, 8387, + 8388, 8389, 2062, 2063, 724, 1007, 2062, 2063, 7598, 724, + 2062, 2063, 2062, 2063, 4584, 724, 8397, 8394, 8395, 724, + 8398, 1636, 8396, 724, 8401, 2112, 8402, 8403, 7588, 8400, + 8400, 8400, 8400, 8400, 8400, 5585, 2053, 724, 7015, 8404, + + 8405, 8407, 2121, 2121, 7588, 2058, 2121, 2121, 8384, 8379, + 8408, 2121, 8409, 8418, 2121, 8419, 8091, 7630, 8406, 8091, + 8420, 8103, 7633, 7756, 1118, 1118, 1118, 1118, 1118, 1331, + 8393, 8427, 8428, 8392, 8391, 1331, 1138, 8431, 8432, 8438, + 8390, 8417, 8417, 8417, 8417, 8417, 8417, 8439, 8440, 8443, + 4593, 8399, 8422, 8422, 8422, 8422, 8422, 8422, 8433, 8434, + 8441, 8412, 8435, 8423, 8436, 8444, 2112, 8437, 8442, 8411, + 8410, 8445, 8446, 8424, 8447, 8450, 8427, 8453, 674, 8413, + 8415, 8448, 8452, 8456, 8416, 8414, 7659, 7659, 7659, 7659, + 674, 674, 8458, 8449, 7853, 7853, 7853, 7854, 674, 674, + + 8455, 8457, 8460, 8461, 8464, 8104, 1325, 1490, 2309, 1491, + 674, 8466, 8467, 8463, 2338, 674, 8468, 8469, 8470, 8471, + 8472, 8473, 1326, 1326, 1326, 1326, 1326, 1326, 8462, 674, + 8465, 1283, 8474, 8475, 1331, 8476, 8477, 8478, 8479, 8480, + 8481, 8483, 8487, 8488, 674, 674, 8490, 8482, 674, 7701, + 674, 674, 674, 8518, 8489, 674, 8521, 674, 674, 674, + 674, 674, 674, 8522, 674, 1337, 8425, 1338, 8491, 1339, + 8492, 8523, 8519, 7662, 7702, 1473, 674, 8560, 8561, 2485, + 8524, 8459, 1342, 1343, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8429, + + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8426, 8426, 8428, 8426, 1325, 7659, 7659, + 7659, 7660, 2272, 8520, 1265, 1266, 6797, 6797, 6797, 8563, + 6797, 6797, 6797, 1326, 1326, 1326, 1326, 1326, 1326, 6797, + + 6797, 6797, 1283, 6797, 6797, 1331, 1283, 6797, 6797, 674, + 6797, 8569, 6797, 674, 6797, 8493, 8571, 6797, 2308, 2309, + 674, 674, 1490, 6797, 1491, 8525, 6797, 8562, 8526, 674, + 4584, 8485, 6797, 4584, 674, 8517, 1337, 6797, 1338, 8451, + 1339, 6797, 8497, 6797, 8529, 674, 4584, 4584, 8494, 4584, + 1341, 8505, 4584, 1342, 1343, 4584, 8495, 8496, 8454, 8486, + 8504, 8502, 6814, 6814, 8498, 7662, 6814, 6814, 6814, 8499, + 8507, 8500, 8503, 8508, 8506, 6814, 6814, 6814, 8501, 6814, + 6814, 8509, 8510, 6814, 6814, 8511, 6814, 8512, 6814, 8514, + 6814, 8516, 8513, 6814, 4584, 8530, 8515, 2308, 8527, 6814, + + 674, 1490, 6814, 1491, 8532, 8534, 4593, 8531, 6814, 8535, + 2309, 8533, 4584, 6814, 8528, 4584, 4584, 6814, 8536, 6814, + 4584, 674, 4593, 4593, 674, 4593, 674, 8555, 4593, 8554, + 8568, 4593, 674, 8557, 2306, 7784, 8584, 8564, 7784, 8542, + 8543, 7762, 7762, 7762, 7762, 8566, 8537, 7762, 7762, 7762, + 7762, 674, 8556, 5793, 5793, 5793, 5793, 674, 674, 2363, + 8567, 5794, 8572, 7786, 8570, 674, 7786, 674, 2309, 8541, + 4593, 8538, 8539, 8576, 674, 7784, 8540, 7786, 7785, 7788, + 7787, 5795, 7788, 7788, 7790, 8558, 7789, 7790, 4593, 674, + 8565, 4593, 4593, 8573, 674, 674, 4593, 1473, 8575, 674, + + 674, 7790, 8544, 1283, 7791, 1283, 2503, 8574, 8549, 8559, + 674, 1283, 8577, 674, 5796, 674, 8578, 8579, 8585, 674, + 8545, 8546, 8546, 8546, 8546, 8553, 6855, 7796, 8580, 1283, + 8581, 674, 5797, 6856, 674, 8547, 1325, 8547, 8548, 674, + 8548, 8548, 8548, 8548, 8548, 8548, 8582, 2363, 674, 674, + 674, 674, 1283, 8591, 8588, 674, 8594, 674, 8583, 674, + 8587, 1283, 2308, 8586, 2309, 8589, 1490, 8593, 1491, 674, + 674, 674, 8599, 8592, 674, 674, 2305, 8595, 8597, 8596, + 2308, 8602, 6854, 4725, 1490, 8598, 1491, 3430, 8600, 8601, + 674, 8604, 674, 674, 674, 674, 8609, 8607, 674, 7838, + + 6855, 7765, 7765, 7765, 7765, 8603, 8606, 8610, 8612, 674, + 7849, 6927, 674, 8608, 8605, 8547, 8613, 8547, 8548, 8637, + 8548, 8548, 8548, 8548, 8548, 8548, 2309, 8621, 674, 5795, + 8611, 8614, 7844, 8618, 8623, 1283, 8619, 674, 2309, 674, + 674, 8638, 674, 7845, 8639, 7845, 7846, 8627, 7846, 7846, + 7846, 7846, 7846, 7846, 8626, 8615, 8631, 1283, 674, 674, + 8640, 7846, 6854, 7846, 7846, 7846, 7846, 7846, 7846, 7846, + 8620, 7846, 7846, 7846, 7846, 7846, 7846, 8636, 8641, 8642, + 6855, 5793, 5793, 5793, 5793, 7853, 7853, 7853, 7853, 5794, + 7853, 7853, 7853, 7854, 8624, 674, 8617, 674, 7767, 8625, + + 7767, 7767, 7767, 7767, 7767, 7767, 674, 8629, 8616, 5795, + 7846, 674, 7847, 7847, 7847, 7847, 7847, 7847, 1283, 8630, + 8628, 1283, 674, 8633, 8632, 674, 8643, 674, 8634, 674, + 8644, 8645, 8646, 2485, 674, 2309, 674, 674, 8635, 674, + 8648, 674, 5796, 8651, 8647, 7886, 2309, 8649, 674, 8616, + 8657, 8650, 8652, 2309, 8653, 8653, 8653, 8654, 2309, 8659, + 5797, 8550, 8550, 8550, 8550, 674, 8661, 8671, 8658, 5794, + 1283, 674, 8622, 674, 674, 8681, 674, 8622, 7767, 7917, + 7767, 7767, 7767, 7767, 7767, 7767, 1392, 8660, 8662, 5795, + 674, 8663, 8664, 674, 674, 674, 674, 8667, 674, 1473, + + 8656, 674, 674, 8665, 8675, 674, 674, 674, 674, 8666, + 8655, 8669, 8670, 674, 8668, 674, 8676, 8672, 8673, 674, + 2338, 674, 5796, 2309, 7915, 8674, 8677, 674, 1392, 7887, + 8680, 674, 674, 8682, 8683, 8684, 8678, 8551, 2485, 674, + 5797, 8552, 8679, 674, 674, 8687, 724, 8685, 724, 1283, + 724, 6797, 8517, 8693, 724, 724, 5971, 724, 8694, 8520, + 724, 724, 724, 8695, 8690, 8691, 8686, 1325, 724, 8696, + 724, 2531, 1636, 724, 724, 1652, 8519, 1653, 8697, 724, + 8555, 724, 724, 1326, 1326, 1326, 1326, 1326, 1326, 8698, + 8524, 8699, 1283, 724, 724, 1331, 8701, 8702, 8703, 724, + + 724, 724, 8704, 2532, 2532, 8556, 8557, 8700, 8709, 724, + 8568, 8710, 8692, 8707, 2531, 8706, 8564, 724, 1652, 724, + 1653, 724, 724, 8711, 724, 724, 1530, 6814, 1531, 2532, + 2579, 8708, 8712, 8714, 8723, 724, 1636, 8713, 8688, 724, + 1533, 8718, 724, 1534, 1535, 1325, 724, 724, 8715, 724, + 8716, 724, 8717, 8719, 724, 8720, 724, 8585, 8558, 724, + 724, 1326, 1326, 1326, 1326, 1326, 1326, 8721, 724, 8565, + 1283, 724, 724, 1331, 724, 8724, 724, 724, 724, 8726, + 2579, 8728, 8705, 724, 2531, 2703, 8725, 8593, 1652, 2532, + 1653, 8722, 8730, 8727, 724, 8729, 2529, 724, 8738, 724, + + 724, 4957, 8731, 724, 1530, 3666, 1531, 8689, 8732, 724, + 724, 8734, 8609, 8735, 724, 724, 724, 8740, 1533, 2531, + 8739, 1534, 1535, 1652, 8733, 1653, 724, 8736, 724, 724, + 8737, 8605, 8742, 724, 8741, 8745, 724, 8618, 8747, 8746, + 724, 724, 724, 724, 7117, 2532, 2532, 724, 8743, 724, + 8752, 8748, 724, 724, 8744, 724, 8749, 8751, 8750, 8753, + 724, 8757, 724, 2687, 8636, 724, 8754, 724, 724, 8755, + 8758, 8759, 724, 8756, 724, 724, 8761, 2532, 8760, 724, + 8764, 8767, 2532, 724, 1558, 8762, 8769, 8765, 724, 8763, + 2532, 724, 8771, 2532, 8653, 8653, 8653, 8654, 8766, 724, + + 724, 724, 8770, 8768, 8773, 8774, 724, 724, 724, 724, + 8777, 724, 1636, 724, 724, 8772, 8775, 8781, 724, 724, + 724, 724, 8776, 8779, 8780, 724, 724, 8778, 8784, 8782, + 724, 8783, 724, 8785, 724, 2532, 724, 8787, 2555, 724, + 8791, 2687, 8786, 1558, 724, 724, 8792, 724, 8793, 8790, + 8655, 724, 724, 724, 8788, 8794, 1636, 8789, 724, 724, + 724, 8795, 724, 8797, 8798, 724, 8799, 8686, 8800, 8801, + 8802, 8803, 8804, 8796, 8805, 8806, 8807, 8808, 8809, 8810, + 8812, 8813, 8814, 8815, 8810, 8816, 8817, 8819, 8810, 8091, + 8820, 8821, 8091, 8822, 8823, 8825, 724, 8827, 8828, 8829, + + 5046, 8830, 8831, 8103, 8832, 8833, 8834, 8835, 8836, 8837, + 8838, 8826, 8839, 724, 8112, 8112, 8112, 8112, 8840, 8843, + 8846, 8113, 1007, 1007, 8847, 8848, 8844, 8124, 8851, 8849, + 1007, 8853, 8811, 1007, 1007, 8850, 8129, 8811, 6797, 8818, + 2868, 8811, 8855, 8845, 1007, 1007, 1007, 8824, 1007, 8854, + 2866, 1007, 1806, 8852, 2867, 8859, 2005, 1007, 8860, 1007, + 8861, 8130, 6797, 8519, 8865, 8866, 8864, 8868, 1007, 8858, + 1007, 2862, 8870, 8871, 8872, 1007, 1007, 1007, 1007, 8873, + 8862, 8874, 8524, 8876, 8877, 8869, 1007, 8104, 1007, 8882, + 1007, 8158, 2866, 1007, 2865, 1007, 2867, 8880, 2005, 8875, + + 2868, 1007, 8883, 8113, 1807, 8857, 5263, 4584, 1007, 2868, + 1007, 4584, 1007, 8881, 6814, 4584, 1806, 1007, 8867, 4584, + 1808, 1808, 1808, 1808, 1808, 1808, 8174, 8856, 8903, 1806, + 8918, 2866, 1812, 8863, 8919, 2867, 8884, 2005, 6814, 1007, + 1007, 8890, 2866, 4584, 1007, 1007, 2867, 1007, 2005, 1007, + 2866, 1806, 8896, 2868, 2867, 1007, 2005, 8898, 2866, 8891, + 1007, 1007, 2867, 1818, 2005, 1819, 8878, 1007, 1007, 8901, + 8886, 5263, 1007, 8879, 2868, 5263, 1007, 1821, 8894, 8885, + 1822, 1823, 1007, 4593, 8841, 1807, 8888, 4593, 8893, 1007, + 8897, 8889, 8908, 8899, 5263, 4593, 8175, 8175, 8175, 8175, + + 8904, 1808, 1808, 1808, 1808, 1808, 1808, 8895, 8887, 8922, + 1806, 8905, 1007, 1812, 8175, 8175, 8175, 8176, 8900, 4593, + 8906, 8558, 2975, 8907, 8909, 1007, 8910, 1007, 7784, 8912, + 8911, 8199, 1007, 7786, 8916, 2868, 7786, 1007, 7786, 1007, + 1007, 8913, 1806, 1007, 1818, 8902, 1819, 1007, 1007, 1007, + 8203, 8204, 8204, 8203, 7790, 8915, 1806, 7790, 1821, 2865, + 7790, 1822, 1823, 8914, 8565, 8842, 1806, 8204, 8204, 8204, + 8204, 8214, 8917, 1007, 8215, 8920, 8921, 1007, 8923, 8924, + 3203, 1007, 8925, 8178, 8926, 8927, 8928, 8935, 1806, 8940, + 1007, 1007, 1007, 1007, 1007, 1007, 1806, 8942, 8943, 1806, + + 1007, 8178, 5257, 5257, 5257, 5257, 5257, 5258, 5257, 5257, + 5257, 5259, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5260, 5260, 5260, 5260, 5260, 5260, 5257, + 5257, 5257, 5261, 5257, 5257, 5262, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5257, + 5257, 5257, 5257, 5257, 5257, 5263, 5264, 5263, 5265, 8892, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5266, 5263, 5263, 5267, 5268, 5263, 5263, 5263, 5263, 5263, + 5263, 5257, 5257, 5257, 5257, 7372, 8929, 8930, 7373, 8203, + + 8204, 8204, 8205, 8931, 8932, 2866, 8936, 1807, 1007, 2867, + 1007, 2005, 8937, 1007, 8941, 8939, 8945, 1007, 2868, 2975, + 8934, 8933, 8946, 1007, 1007, 1007, 1007, 1806, 1007, 1007, + 8938, 1007, 1806, 1007, 1007, 8944, 8947, 1007, 8949, 8948, + 8593, 8951, 1007, 8952, 2866, 8955, 2868, 1007, 2867, 2863, + 2005, 8957, 8953, 1007, 1007, 8950, 1007, 8958, 8966, 1007, + 8202, 1007, 1007, 1007, 8956, 5496, 8954, 1007, 1007, 4077, + 8960, 8964, 8959, 8269, 1007, 1007, 2866, 1007, 1007, 8968, + 2867, 8965, 2005, 8969, 2868, 8971, 1007, 1007, 8961, 8961, + 8961, 8962, 1007, 8967, 1007, 8970, 1007, 1007, 1806, 8973, + + 1007, 8974, 1007, 1007, 8972, 1007, 8975, 8977, 8976, 1007, + 1007, 2868, 8980, 8978, 8981, 1007, 1007, 8983, 8982, 1007, + 8985, 8979, 8289, 8286, 2868, 2868, 8988, 8989, 8986, 1007, + 1007, 1007, 1007, 1007, 7845, 8984, 7845, 7846, 1007, 7846, + 7846, 7846, 7846, 7846, 7846, 8992, 8994, 1806, 1806, 7846, + 1007, 8287, 8287, 8287, 8287, 8287, 8287, 8987, 8990, 8995, + 1806, 1007, 8991, 8996, 1007, 7853, 7853, 7853, 8294, 8993, + 1007, 1007, 8997, 8998, 9001, 8963, 9002, 8999, 1007, 2866, + 1007, 1007, 3173, 2867, 7462, 2005, 9000, 1007, 8616, 1007, + 9005, 1007, 9003, 1806, 1007, 9004, 1007, 1007, 9006, 2868, + + 1007, 9007, 1007, 9008, 1007, 9009, 9010, 1007, 9011, 9012, + 9013, 9014, 9015, 9016, 9017, 9018, 9019, 9020, 9021, 9022, + 9023, 9024, 9025, 9026, 9032, 1007, 2868, 1007, 8336, 1007, + 1007, 9027, 9053, 2868, 1007, 1007, 9029, 2868, 9031, 1007, + 2862, 1007, 2868, 1007, 9037, 1007, 8653, 8653, 8653, 9028, + 1007, 9033, 8622, 1806, 9030, 9035, 1007, 9034, 9038, 9036, + 9039, 9040, 1007, 1007, 1007, 1007, 1007, 9041, 1007, 1007, + 1007, 9045, 2865, 1007, 9043, 9044, 1007, 9047, 9046, 1007, + 9048, 9049, 1007, 1007, 2868, 1007, 1007, 9042, 9050, 9052, + 1007, 9051, 1007, 1007, 3173, 2926, 1007, 1007, 9057, 2862, + + 9056, 1007, 8655, 1007, 9059, 9058, 8368, 8369, 1007, 1007, + 1007, 9054, 7887, 9055, 1007, 9060, 1007, 9061, 9062, 9063, + 1007, 1007, 1007, 1007, 9064, 9070, 8686, 2048, 2049, 1007, + 9071, 1806, 1806, 1007, 8380, 8380, 8380, 8380, 2048, 2049, + 1007, 8481, 1062, 8381, 9066, 8383, 8381, 9079, 9069, 2062, + 2063, 2057, 8380, 8380, 8380, 8380, 8381, 8382, 8383, 8381, + 1062, 9068, 2062, 2063, 2057, 2062, 2063, 4584, 9076, 9077, + 724, 2532, 9078, 9080, 9081, 9082, 8810, 9083, 9084, 2532, + 9085, 2112, 2532, 9086, 9087, 9088, 9089, 2121, 2121, 5585, + 2053, 2121, 2121, 2121, 2121, 9095, 9096, 1007, 7588, 2058, + + 9097, 8810, 9065, 9098, 1138, 1331, 8427, 5585, 2053, 1331, + 8428, 7588, 2058, 9067, 9102, 9103, 9104, 9105, 9106, 9108, + 9109, 9110, 9111, 9112, 9072, 9107, 9113, 9114, 9075, 8811, + 9115, 9116, 9117, 9074, 9073, 9118, 9119, 9120, 9121, 9122, + 9125, 9126, 674, 4593, 9128, 9090, 9130, 9091, 674, 9134, + 9100, 9092, 9094, 9099, 8811, 9124, 674, 674, 674, 9133, + 9137, 9138, 2112, 9093, 1325, 9129, 9139, 9140, 9141, 9142, + 9132, 9143, 2485, 9144, 9145, 9146, 9136, 674, 9147, 9148, + 1326, 1326, 1326, 1326, 1326, 1326, 9149, 674, 9150, 1283, + 9151, 9135, 1331, 9152, 9127, 1490, 9153, 1491, 9154, 674, + + 9158, 9159, 674, 8517, 674, 674, 8624, 674, 674, 8520, + 2503, 9131, 674, 674, 674, 9189, 9163, 674, 674, 9162, + 9188, 9160, 2309, 1337, 674, 1338, 674, 1339, 1283, 9207, + 9190, 2309, 9191, 9208, 1283, 9222, 9223, 1341, 674, 9225, + 1342, 9101, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8429, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8426, + + 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8426, 8426, 8428, 8426, 1325, 9155, 9161, 9155, 6797, + 1265, 1266, 6797, 6797, 6797, 6797, 6797, 6797, 674, 8555, + 6797, 1326, 1326, 1326, 1326, 1326, 1326, 6797, 6797, 6797, + 1283, 6797, 6797, 1331, 6797, 6797, 674, 9164, 674, 6797, + 6797, 6797, 9227, 674, 8556, 6797, 674, 9192, 9231, 4584, + 6797, 6797, 2309, 674, 674, 8485, 4584, 8485, 4584, 9200, + 674, 4584, 9218, 9123, 1337, 674, 1338, 9166, 1339, 9156, + + 9157, 6799, 9226, 6797, 9169, 9170, 9167, 9171, 1341, 9165, + 9178, 1342, 1343, 9168, 9172, 6814, 9173, 9164, 6814, 6814, + 6814, 6814, 6814, 6814, 9174, 9176, 6814, 9177, 9175, 9185, + 6804, 6797, 9179, 6814, 6814, 6814, 9180, 6814, 6814, 9181, + 6814, 6814, 9194, 9195, 9196, 6814, 6814, 6814, 9182, 4584, + 674, 6814, 9183, 4584, 2308, 4593, 6814, 6814, 1490, 9184, + 1491, 9198, 4593, 4584, 4593, 9201, 4584, 4593, 4584, 9193, + 4584, 674, 674, 674, 8557, 9206, 9232, 2308, 9224, 6814, + 9186, 9221, 674, 1491, 8564, 2309, 9219, 9219, 9219, 9219, + 9219, 9219, 674, 674, 9230, 674, 9229, 9187, 9250, 1283, + + 674, 9197, 9203, 8585, 9233, 2363, 1392, 6814, 674, 1283, + 9228, 9199, 9234, 674, 9202, 9237, 674, 9238, 9259, 9204, + 7762, 7762, 7762, 7762, 9220, 4593, 8558, 9240, 1283, 4593, + 9235, 8565, 5793, 5793, 5793, 5793, 9205, 8565, 674, 4593, + 5794, 674, 4593, 674, 4593, 674, 4593, 8546, 8546, 8546, + 8546, 674, 2309, 9244, 9241, 7762, 7762, 7762, 7762, 9260, + 5795, 9209, 9239, 9209, 9210, 9254, 9210, 9210, 9210, 9210, + 9210, 9210, 8548, 674, 8548, 8548, 8548, 8548, 8548, 8548, + 674, 6854, 9236, 674, 8550, 8550, 8550, 8550, 674, 9265, + 9242, 9245, 9214, 5796, 2309, 1473, 9243, 674, 9251, 6855, + + 7763, 5793, 5793, 5793, 5793, 674, 674, 9262, 8544, 5794, + 9216, 5797, 5795, 9246, 9247, 674, 6854, 2363, 9256, 9253, + 674, 9267, 5793, 5793, 5793, 5793, 8545, 674, 9255, 5795, + 5794, 9248, 9249, 8615, 6855, 9211, 9211, 9211, 9211, 9252, + 9270, 2306, 8609, 674, 674, 6854, 9257, 2308, 674, 8624, + 5795, 1490, 8548, 1491, 8548, 8548, 8548, 8548, 8548, 8548, + 9212, 9261, 5796, 6855, 9213, 674, 674, 1283, 674, 8617, + 9266, 674, 8618, 8623, 9269, 1473, 674, 9273, 674, 9274, + 5797, 9215, 674, 5796, 674, 9268, 8616, 9217, 9271, 674, + 9272, 9263, 674, 9275, 1283, 9276, 6854, 1283, 674, 674, + + 674, 5797, 674, 2309, 674, 9278, 2308, 674, 8636, 9281, + 1490, 9212, 1491, 9279, 6855, 9213, 9282, 9277, 9280, 9283, + 9284, 9285, 8616, 9286, 9287, 674, 674, 674, 674, 674, + 674, 674, 9296, 1283, 8653, 8653, 8653, 8653, 8625, 9289, + 9290, 9291, 9288, 9293, 674, 9292, 8653, 8653, 8653, 8654, + 674, 1392, 674, 674, 9295, 9298, 1473, 2461, 674, 674, + 9304, 1392, 9300, 674, 674, 2363, 1490, 2305, 1491, 9305, + 9303, 9302, 674, 9297, 1283, 9301, 9299, 674, 2309, 674, + 674, 9311, 9306, 1392, 9307, 674, 674, 674, 9309, 674, + 8655, 674, 9308, 9310, 674, 9320, 674, 9314, 1325, 9316, + + 9315, 9313, 8655, 9318, 9312, 2309, 674, 674, 674, 9321, + 2309, 9319, 9317, 1325, 6797, 1325, 1325, 1325, 1325, 1325, + 1325, 9322, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326, 1326, + 1326, 1326, 1326, 1326, 1325, 1325, 1325, 1283, 1325, 1325, + 1331, 1325, 1325, 1325, 1325, 1325, 1325, 9235, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 9326, 9324, 1325, 1325, 1325, 1325, 1325, 9328, 1325, 9325, + 9329, 1530, 1325, 1531, 1325, 2532, 9330, 1325, 9327, 9340, + 6814, 2532, 9331, 9339, 9333, 1533, 2532, 2531, 1534, 9323, + + 9161, 1652, 1325, 1653, 2532, 9334, 9336, 2531, 9338, 9236, + 9341, 9335, 9332, 1653, 9346, 9342, 1326, 1326, 1326, 1326, + 1326, 1326, 2579, 9343, 9344, 1283, 1558, 9337, 1331, 9347, + 2532, 9349, 9351, 9348, 9350, 9354, 9352, 9345, 2532, 2579, + 1636, 9355, 9353, 9357, 9356, 9359, 9262, 1325, 9362, 2531, + 9358, 9360, 1325, 1652, 1325, 1653, 1325, 1325, 1325, 1530, + 9361, 1531, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 9407, 1533, 1325, 1325, 1534, 1535, 1325, 9408, + 1325, 1325, 1325, 9410, 9411, 9412, 1325, 1325, 9413, 1325, + 1325, 9414, 9415, 1325, 1325, 1325, 1325, 5046, 1325, 1325, + + 1325, 1325, 1325, 1325, 1325, 9416, 1325, 1325, 9417, 9363, + 9418, 1325, 1325, 1325, 1325, 1325, 8811, 9420, 1325, 1636, + 1325, 1325, 9421, 9422, 9365, 9367, 9380, 9364, 1325, 9368, + 9263, 9423, 8818, 2531, 9366, 2532, 9370, 1652, 9269, 1653, + 9371, 9369, 9373, 9372, 9377, 1558, 9374, 9379, 1558, 9375, + 9376, 9381, 9378, 2666, 9382, 1636, 2579, 9384, 9387, 9385, + 9388, 1652, 2529, 1653, 9389, 9393, 2532, 9383, 9386, 9391, + 9390, 9395, 9392, 1558, 9394, 9396, 9398, 9399, 9400, 9402, + 9403, 9404, 9405, 6229, 2532, 9401, 2532, 9425, 9426, 9406, + 1636, 9397, 9427, 9427, 9427, 9427, 8824, 9430, 1325, 9434, + + 9432, 9435, 9436, 9437, 9438, 9439, 1325, 9441, 9442, 9443, + 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, + 9454, 9455, 8858, 2868, 6797, 6797, 2868, 2868, 9458, 9459, + 9460, 8862, 9461, 9464, 8866, 9465, 8868, 9466, 2868, 9467, + 9468, 4205, 8874, 9469, 2868, 9470, 9462, 1806, 9471, 9473, + 2868, 2866, 2868, 8883, 4584, 2867, 1806, 2005, 4584, 1806, + 9431, 1806, 9472, 4584, 4584, 9485, 9474, 1806, 9483, 9481, + 2532, 9432, 9456, 9487, 9479, 9440, 9433, 1807, 1806, 5267, + 9457, 2868, 5267, 9482, 8863, 8899, 5267, 8867, 9488, 9489, + 9491, 9492, 9493, 1808, 1808, 1808, 1808, 1808, 1808, 9463, + + 6814, 6814, 1806, 9484, 8901, 1812, 9476, 8905, 2866, 9494, + 8900, 9495, 2867, 2868, 2005, 8175, 8175, 8175, 8176, 2866, + 9478, 2975, 9496, 9486, 7786, 2005, 9490, 8913, 9477, 1806, + 9475, 9497, 1806, 9498, 4593, 9499, 1818, 9500, 1819, 4593, + 4593, 7790, 9501, 8222, 8914, 9502, 8224, 9503, 9504, 2868, + 1821, 2862, 1806, 1822, 1823, 1807, 8558, 9506, 9507, 9508, + 8565, 2868, 9505, 9509, 9510, 9511, 9512, 8941, 2868, 1806, + 9513, 1808, 1808, 1808, 1808, 1808, 1808, 2868, 9514, 9515, + 1806, 9516, 9517, 1812, 9518, 9520, 9519, 9521, 9522, 8177, + 2865, 9523, 1806, 9524, 2866, 9525, 9529, 9530, 2867, 9236, + + 2005, 9531, 8178, 8961, 8961, 8961, 8961, 2868, 2975, 9533, + 9534, 9535, 9537, 9538, 1818, 2868, 1819, 9539, 9541, 9532, + 9542, 9543, 9544, 9545, 9269, 9546, 2865, 9547, 1821, 9550, + 9551, 1822, 1823, 5257, 5257, 5257, 5257, 5257, 5258, 5257, + 5257, 5257, 5259, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5260, 5260, 5260, 5260, 5260, 5260, + 5257, 5257, 5257, 5261, 5257, 5257, 5262, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5257, 5257, 5257, 5257, 5257, 5257, 5263, 5264, 5263, 5265, + + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5266, 5263, 5263, 9480, 5268, 5263, 5263, 5263, 5263, + 5263, 5263, 5257, 5257, 5257, 5257, 9526, 9526, 9526, 9527, + 8961, 8961, 8961, 8962, 8966, 9540, 8977, 8983, 8984, 8985, + 9548, 9549, 8992, 9552, 9553, 8996, 9554, 9556, 2866, 9005, + 9557, 2868, 2867, 9558, 2005, 9555, 9561, 9562, 1806, 1806, + 9563, 1806, 1806, 1806, 1806, 9559, 9564, 1806, 9565, 9566, + 1806, 9567, 9560, 9568, 1806, 9569, 9570, 9571, 9572, 9573, + 9574, 9575, 8653, 8653, 8653, 9028, 9576, 9577, 3136, 9578, + 9579, 8616, 9580, 2865, 2975, 9582, 2862, 2862, 9585, 2867, + + 9586, 2005, 2863, 2868, 9587, 9581, 9589, 9588, 9590, 9591, + 1806, 9583, 2868, 9528, 9592, 9593, 9584, 9594, 9595, 9263, + 9597, 2862, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9605, + 2868, 9061, 9606, 2868, 9607, 9608, 2048, 2049, 8655, 9596, + 2048, 2049, 8380, 8380, 8380, 8380, 1325, 9611, 9612, 9613, + 1062, 2062, 2063, 2062, 2063, 4584, 1806, 2062, 2063, 1325, + 1325, 9620, 1325, 9621, 9622, 9623, 9624, 9626, 9627, 9628, + 9629, 9630, 9631, 2121, 2121, 2121, 9625, 2121, 9636, 9637, + 5638, 9098, 8430, 1331, 1331, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 9669, 8430, 9609, 5585, 2053, 8430, + + 8430, 8430, 9668, 8430, 1338, 9667, 9616, 9646, 9647, 1338, + 9657, 9614, 8430, 9130, 9645, 9670, 9610, 9640, 9641, 9652, + 9654, 9617, 9643, 9653, 9644, 9650, 9648, 9649, 9632, 9651, + 9618, 4593, 9619, 9633, 9659, 9634, 9615, 8430, 9655, 9658, + 9656, 1338, 1338, 9660, 9635, 1325, 8430, 8430, 1338, 9674, + 9126, 9671, 9134, 9675, 9137, 9127, 2256, 9663, 9672, 9676, + 2485, 1326, 1326, 1326, 1326, 1326, 1326, 9661, 9664, 9677, + 1283, 9678, 9679, 1331, 9662, 1283, 9680, 1283, 9131, 1283, + 9681, 9682, 9683, 9684, 9686, 9665, 9689, 1338, 9694, 9161, + 1338, 1473, 1338, 1473, 1338, 1338, 9721, 1338, 2309, 1338, + + 9722, 9201, 1338, 9127, 1337, 9695, 1338, 9723, 1339, 9724, + 9739, 9642, 1338, 9750, 1283, 9751, 9737, 2309, 1341, 9752, + 1338, 1342, 1343, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8429, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 9643, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8426, 8426, 8428, 8426, 1325, 9155, 1338, 9673, + 1265, 1266, 1338, 9224, 1338, 9754, 1338, 1338, 9761, 2309, + 9776, 1338, 1326, 1326, 1326, 1326, 1326, 1326, 2309, 9725, + 1338, 1283, 2309, 9210, 1331, 9210, 9210, 9210, 9210, 9210, + 9210, 1338, 9219, 9219, 9219, 9219, 9219, 9219, 1338, 1338, + 1338, 9753, 9749, 1338, 1338, 1338, 8485, 1338, 2363, 2363, + 9755, 9687, 1338, 9759, 9766, 1337, 8565, 9666, 9758, 1339, + 1338, 2308, 9688, 9768, 1338, 1490, 9767, 1491, 9259, 1341, + 9220, 1338, 1342, 1343, 9690, 9690, 9690, 9691, 9692, 9690, + + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9690, 9690, 9690, 9690, 9690, 9690, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9690, 9690, 9690, 9690, 6797, 6797, 6797, + 6797, 6797, 6797, 6797, 6797, 6797, 6797, 6797, 6797, 6797, + + 1338, 1338, 6797, 6797, 1338, 6797, 9760, 6797, 9777, 6797, + 1338, 9773, 2309, 6797, 1392, 1338, 9729, 1338, 9774, 9778, + 1338, 6797, 1338, 9265, 6797, 9781, 4584, 4584, 4584, 4584, + 9785, 2309, 9789, 9782, 9790, 6797, 6797, 1338, 6797, 4584, + 9697, 4584, 4584, 4584, 9701, 9792, 9793, 4584, 1338, 9699, + 9795, 9700, 9705, 9712, 9698, 9706, 9710, 9713, 9702, 9714, + 9704, 9703, 9715, 9696, 6814, 6814, 6814, 6814, 6814, 6814, + 6814, 6814, 9707, 6814, 9708, 6814, 9709, 9711, 6814, 6814, + 9716, 6814, 9717, 6814, 9718, 6814, 9719, 9727, 9720, 6814, + 9726, 9728, 9730, 9731, 9733, 9736, 9732, 6814, 9734, 9735, + + 6814, 1338, 4593, 4593, 4593, 4593, 9211, 9211, 9211, 9211, + 9798, 6814, 6814, 1338, 6814, 4593, 9784, 4593, 4593, 4593, + 9799, 1338, 9800, 4593, 9738, 9738, 9738, 9738, 7762, 7762, + 7762, 7762, 9740, 9740, 9740, 9740, 9762, 9797, 9209, 9801, + 9209, 9210, 9802, 9210, 9210, 9210, 9210, 9210, 9210, 9210, + 9769, 9210, 9210, 9210, 9210, 9210, 9210, 7762, 7762, 7762, + 7762, 7762, 7762, 7762, 7762, 9235, 9803, 8544, 5793, 5793, + 9746, 5793, 5793, 5793, 5793, 5793, 5794, 1338, 9779, 9804, + 5794, 9770, 9741, 9805, 9262, 8545, 9742, 1338, 2305, 6854, + 1283, 5793, 5793, 5793, 5793, 1338, 5795, 1338, 1338, 5794, + + 5795, 9763, 9763, 9763, 9764, 2503, 9744, 6855, 9741, 1283, + 9771, 9791, 9742, 9786, 9786, 9786, 9787, 9236, 6854, 5795, + 1338, 1338, 6854, 1338, 1338, 9775, 9745, 1338, 9809, 5796, + 9780, 1338, 9796, 5796, 9772, 9794, 6855, 9743, 2309, 9807, + 6855, 5726, 5726, 5726, 5726, 5726, 5726, 5797, 1338, 1338, + 2305, 5797, 5796, 9747, 9756, 9748, 9756, 9757, 1338, 9757, + 9757, 9757, 9757, 9757, 9757, 1338, 1338, 1338, 9263, 1338, + 5797, 9806, 9810, 1338, 1338, 1338, 1338, 1338, 9808, 9813, + 1338, 2485, 1338, 9811, 1338, 1338, 1338, 9814, 9765, 9816, + 9819, 1338, 9815, 9812, 1338, 2308, 9818, 2309, 1338, 9817, + + 9788, 1491, 1338, 9820, 1338, 9821, 1338, 9823, 1338, 9822, + 1338, 1490, 1338, 1491, 9826, 2309, 9827, 9830, 4768, 9824, + 1338, 9825, 6797, 724, 9835, 9836, 724, 724, 724, 724, + 9838, 724, 9831, 9833, 724, 724, 9837, 724, 2532, 724, + 724, 2532, 9840, 9843, 724, 724, 724, 2532, 9839, 9842, + 724, 724, 9846, 724, 2579, 9844, 9841, 9847, 2579, 724, + 9848, 9762, 724, 2532, 9845, 724, 9775, 724, 9828, 9763, + 9763, 9763, 9764, 9849, 9850, 1338, 724, 1338, 1558, 1338, + 2305, 724, 9852, 9776, 9767, 9834, 724, 9851, 724, 724, + 9784, 724, 724, 9853, 4769, 724, 9854, 9795, 6814, 2532, + + 9829, 1325, 9856, 724, 9855, 9786, 9786, 9786, 9787, 724, + 2703, 724, 724, 2529, 724, 724, 9857, 1326, 1326, 1326, + 1326, 1326, 1326, 724, 9858, 724, 1283, 9859, 724, 1331, + 9860, 9861, 724, 2532, 724, 724, 9806, 724, 2532, 9862, + 724, 724, 724, 9863, 9864, 724, 724, 2529, 724, 724, + 724, 724, 724, 724, 724, 9865, 9765, 724, 9868, 724, + 1530, 9866, 1531, 9832, 2687, 724, 9874, 9869, 724, 9867, + 724, 724, 9871, 2532, 1533, 724, 9870, 1534, 1535, 1325, + 2531, 724, 9873, 9876, 9872, 724, 1653, 9878, 724, 9826, + 724, 1652, 9788, 1653, 9882, 1326, 1326, 1326, 1326, 1326, + + 1326, 724, 9875, 724, 1283, 9877, 724, 1331, 9827, 4768, + 724, 2532, 9410, 9879, 9880, 9883, 9885, 9886, 9887, 9888, + 9889, 9881, 9890, 9891, 9892, 9893, 9427, 9427, 9427, 9427, + 9430, 9894, 724, 9433, 8827, 9896, 5046, 9897, 1530, 9898, + 1531, 1636, 9899, 9900, 724, 9895, 9902, 9906, 9901, 9907, + 9447, 724, 1533, 1007, 1007, 1534, 1535, 9451, 1007, 9908, + 9828, 9452, 9909, 9910, 2865, 9911, 2865, 9884, 1007, 9914, + 724, 2529, 2868, 9915, 9916, 1007, 9917, 1007, 9918, 1007, + 9919, 9920, 1806, 1007, 9921, 4992, 1806, 1007, 9923, 9922, + 9926, 1007, 9829, 1007, 1007, 9925, 9924, 1007, 9935, 2868, + + 5263, 1007, 1007, 1007, 5263, 2868, 5263, 1007, 1007, 9927, + 9937, 9936, 1007, 2868, 5267, 9932, 1007, 3908, 9690, 9690, + 9690, 9691, 9692, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9690, 9690, 9690, 9690, 9690, + 9690, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9690, 9690, 9690, + 9690, 1807, 9462, 1007, 9940, 6797, 1007, 4584, 6797, 4584, + 4584, 9489, 9938, 9941, 9942, 9943, 1007, 1808, 1808, 1808, + 1808, 1808, 1808, 9944, 5263, 9945, 1806, 1806, 5263, 1812, + 5263, 5263, 9946, 9939, 6384, 5263, 1806, 5263, 5267, 9503, + 9934, 9947, 2975, 2975, 9933, 5267, 1007, 1007, 1007, 9949, + 9948, 9951, 3203, 9954, 9950, 9463, 9953, 9929, 1007, 9955, + 1818, 9952, 1819, 1007, 1806, 1007, 9762, 2868, 1007, 9930, + 1007, 9956, 9962, 9959, 1821, 1007, 9904, 1822, 1823, 1807, + 9912, 9913, 9928, 4593, 6814, 4593, 4593, 9958, 1007, 9964, + + 9965, 9236, 1007, 1007, 9960, 1808, 1808, 1808, 1808, 1808, + 1808, 1007, 9767, 9967, 1806, 2862, 9966, 1812, 9968, 9961, + 1007, 9969, 1007, 2868, 9970, 9537, 1007, 9973, 2863, 1007, + 9974, 1007, 1007, 1007, 1007, 9977, 9976, 1007, 3203, 9980, + 9982, 1007, 9983, 1007, 9979, 9984, 9981, 1007, 1818, 1007, + 1819, 9986, 2868, 9987, 2868, 1007, 9988, 1007, 9989, 9990, + 9991, 9992, 1821, 9993, 9905, 1822, 1823, 5257, 5257, 5257, + 5257, 5257, 5258, 5257, 5257, 5257, 5259, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5260, 5260, + 5260, 5260, 5260, 5260, 5257, 5257, 5257, 5261, 5257, 5257, + + 5262, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, 5257, 5257, + 5263, 5264, 5263, 5265, 6381, 5263, 5263, 5263, 6382, 5263, + 6383, 5263, 5263, 5263, 5263, 5266, 5263, 5263, 9931, 5268, + 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, + 9763, 9763, 9763, 9957, 9963, 9526, 9526, 9526, 9526, 9526, + 9526, 9526, 9527, 9971, 9540, 9975, 9786, 9786, 9786, 9978, + 9548, 9795, 9994, 9985, 9995, 9996, 9997, 1007, 1007, 9998, + 1007, 9999, 1007, 1007,10000, 1007, 9806, 1806, 2866, 1806, + + 1007,10002, 2867, 1007, 2005, 1806, 1007, 2863,10003,10001, + 1007, 1007, 3173, 1007, 1007,10005,10008, 1007,10006,10004, + 1007, 1007,10011, 2866, 1007, 9972,10007,10009, 1007, 2005, + 10010, 1007, 1007,10013, 1007,10012, 1007, 1007, 1007, 1007, + 2865, 9597,10014, 1007, 1007,10018, 1007, 9765, 2868,10020, + 1007, 1007, 9528, 1007, 1007,10015, 9528,10016, 9263, 2867, + 1007, 2005,10017, 9788, 1007,10021, 1806, 1007, 1007,10019, + 5571,10022, 724, 1007, 2048, 2049,10024,10025,10026, 2062, + 2063, 724, 4584, 2062, 2063, 724, 724,10031,10032,10033, + 10034,10035,10036,10038,10039,10040,10037,10041,10042,10043, + + 2121, 9828, 2121,10046,10047,10049, 1331,10054,10030, 1118, + 1118, 1118, 1118, 1118,10055,10056,10057,10058,10059,10061, + 1007,10062,10060, 8431, 1007, 8428, 8428,10064, 8428,10065, + 10063, 8428, 2863, 9829,10029, 8438,10023, 8428, 8428, 8428, + 1007,10027, 8428, 8428, 8428, 1007, 5552,10028,10069, 8428, + 674,10071,10076,10077,10080,10050,10081, 674, 4593,10082, + 10044,10079,10083,10084, 8428, 8428, 8428, 2309,10045,10048, + 9690, 9690, 9690, 9691, 9692, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + + 9690, 9690, 9690, 9693,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051, 9690, 9690, 9690, + 9690, 9690, 9690,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051, 9690, + 9690, 9690, 9690, 1325,10066,10068,10070,10072,10067,10073, + 9668,10074,10085,10078, 9673,10086,10087,10088,10089, 1326, + 1326, 1326, 1326, 1326, 1326, 9155, 8428, 9691, 1283, 8428, + 674, 1331, 8428, 674, 8428, 8428, 674, 8428, 674, 1283, + + 9691, 9692,10095,10094,10121, 674, 2363, 674, 9730, 674, + 10135,10120,10136,10137,10123,10149,10119,10150, 674,10122, + 10155, 674, 1337, 9127, 1338, 674, 1339, 1473, 674,10159, + 10153,10157,10152,10160,10162,10052, 1341,10163, 2306, 1342, + 1343, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8429, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8426, 8426, + + 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8426, 8426,10053, 8426, 1325, 9155, 6797, 1265, 1266,10092, + 10092,10092,10092, 6797, 6797, 6797, 6797, 6797, 6797, 6797, + 1326, 1326, 1326, 1326, 1326, 1326, 674, 674,10169, 1283, + 10170, 9780, 1331,10172, 674,10175, 9738, 9738, 9738, 9738, + 9757,10156, 9757, 9757, 9757, 9757, 9757, 9757,10151,10178, + 9209, 9775, 9209, 9210, 8485, 9210, 9210, 9210, 9210, 9210, + 9210, 674,10097, 1337,10098, 1338,10075, 1339,10179,10099, + + 10090,10091,10173, 674,10168,10102, 1283, 1341,10096,10100, + 1342, 1343, 6814,10101,10180,10185,10186,10193,10105, 6814, + 6814, 6814, 6814, 6814, 6814, 6814,10093, 9690, 9690, 9690, + 9691, 9692, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9690, 9690, 9690, 9690, 9690, 9690, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9690, 9690, 9690, 9690, + 6797, 6797, 6797, 6797, 6797, 6797, 6797,10111, 6797, 6797, + 6797,10165, 6797, 9776, 9784, 674, 674, 4584, 4584, 674, + 4584, 6797, 6797, 4584, 4584, 4584,10190,10174,10194,10192, + 4584,10129, 4584, 9740, 9740, 9740, 9740,10191, 1283, 1283, + 10165,10195,10196, 7762, 7762,10138, 7762, 2309,10197,10198, + 10106,10199,10103,10201, 674, 674,10113, 674,10114, 674, + 1473,10115, 7762, 7762, 7762, 7762,10104,10202, 674,10107, + 10108,10109,10128,10216,10132,10204, 6814, 6814, 6814, 6814, + + 6814, 6814,10110,10112, 6814, 6814, 6814,10116,10118,10117, + 10124,10125,10126,10127, 4593,10134, 4593, 6814, 6814, 4593, + 4593, 4593,10130,10133, 6854,10217, 4593,10131, 4593, 9741, + 10218,10166, 674, 9742, 7762, 7762, 7762, 7762, 5793, 5793, + 5793, 5793, 6855, 6854, 5793, 5793, 5793, 5793, 9763, 9763, + 9763, 9763, 5794,10208,10143,10143,10144,10143,10164, 724, + 724, 6855, 5794,10139, 674, 1473, 5795,11275,11275,11275, + 11275, 9757, 5795, 9757, 9757, 9757, 9757, 9757, 9757,10203, + 674,10219,10145,10167, 9763, 9763, 9763, 9764, 2308, 9770, + 2309, 674, 1490, 674, 1491, 6854, 674, 724,10140, 6854, + + 9786, 9786, 9786, 9786,10205, 5796,10207, 1473,10223,10141, + 10146,10154, 1283, 6855,10209,10147, 674, 6855, 9771, 9786, + 9786, 9786, 9787, 5797,10187,10187,10187,10188, 1473,10211, + 674,10206, 674,10148, 674, 9765,10213, 9826, 674,10181, + 10210, 9827, 9772, 6797,10212,10214, 724, 1283,10176, 2485, + 10182,10226,10182,10183,11275,10184,10184,10184,10184,10184, + 10184,10225, 1283, 2579, 724,10227, 1283, 724,10224,10228, + 724, 9765, 724, 1636, 724,10231,10230,10166, 724,10229, + 724, 724, 724,10234, 724,10151,10232, 9788,10235, 674, + 10237,10222, 724, 9828, 724,10233, 724, 724,10239, 724, + + 10236, 674,10238,10240, 724, 724, 9788, 724, 724, 724, + 10241,10189,10243, 724, 2532, 724, 724,10181, 724, 6814, + 10187,10187,10187,10188,10245, 9829, 1325, 724,10182,10167, + 10182,10183, 1636,10184,10184,10184,10184,10184,10184,10244, + 10242, 724, 1326, 1326, 1326, 1326, 1326, 1326, 724, 724, + 2532, 1283, 2531,10246, 1331, 724, 1652, 1636, 1653, 724, + 10248, 724, 724,10247, 724,10249, 724, 724, 1636, 724, + 10252,10253, 724,10254,10250,10251, 724, 724,10255,10258, + 10256, 1636,10260,10262,10261, 1530,10263, 1531, 724, 724, + 724, 2687,10264,10265, 724,10266,10267,10257,10268, 1533, + + 5046,10220, 1534, 1535, 1325, 9894, 724,10189,10269,10270, + 10092,10092,10092,10092, 1007, 1007, 724,10274,10276,10273, + 1326, 1326, 1326, 1326, 1326, 1326, 1007, 1007, 1007, 1283, + 10275, 9884, 1331,10277, 1007,10280,10281,10282,10279,10283, + 10284,10285, 2975,10287, 1007, 9923,10289,10286, 1007, 1007, + 10298,10291,10290, 1007, 1007, 5263, 1007, 9937, 1007, 5263, + 1007, 5263, 1007, 1530, 2865, 1531,10299,10300, 9941, 9942, + 10151, 9944,10302, 1007, 1007,10221,10301, 1533,10303,10304, + 1534, 1535, 1007,10306, 1007,10307,10305,10308,10309, 1007, + 1007, 3908, 1007, 9954, 9955, 1007, 9964,10093, 9690, 9690, + + 9690, 9691, 9692, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9690, 9690, 9690, 9690, 9690, + 9690, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9690, 9690, 9690, + 9690, 1807,10310,10288, 6797, 4584,10311, 4584, 1007, 9962, + + 4584,10313, 1007, 9963,10314,10316, 1007, 1808, 1808, 1808, + 1808, 1808, 1808,10318,10321, 5258, 1806,10315, 9975, 1812, + 9763, 9763, 9763, 9957, 1806,10319,10312, 1007, 1806, 1007, + 10258,10322,10317,10323, 5258, 1007, 1007,10328,10329, 1007, + 5261, 9983, 1007, 1806,11275,11275,11275,11275, 1806, 1007, + 1818,10330, 1819,10331,10332,10292,10333,10334,10294, 5261, + 10335, 2868,10336,10337, 1821, 2868,10271, 1822, 1823, 1807, + 10278, 4593,10293, 4593,10338,10297, 4593, 5263,10167,10339, + 10340, 5263, 9972, 5263,10341, 1808, 1808, 1808, 1808, 1808, + 1808,10342, 1007, 2868, 1806, 2866, 5263, 1812, 1007, 2867, + + 5263, 2005, 5263, 1007, 2865, 1007, 6384, 9765,10344,10345, + 9931,10343, 1007, 2865, 1007,10346, 1007, 2865, 1007,10347, + 10348,10349, 1007, 1007,10352,10324, 1007, 1007, 1818, 2865, + 1819,11275, 1007,10350,10354,10353,10351, 1007, 1007, 1007, + 10356,10272, 1821, 1007,10359, 1822, 1823, 5257, 5257, 5257, + 5257, 5257,10295, 5257, 5257, 5257, 5259, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5260, 5260, + 5260, 5260, 5260, 5260, 5257, 5257, 5257,10296, 5257, 5257, + 5262, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + + 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, 5257, 5257, + 5263, 5264, 5263, 5265, 6381, 5263, 5263, 5263, 6382, 5263, + 6383, 5263, 5263, 5263, 5263, 5266, 5263, 5263, 5267, 5268, + 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, + 9786, 9786, 9786, 9978,10325,10187,10187,10187,10327,10018, + 10020,10021, 2062, 2063,10355,10182,10364,10182,10183,10365, + 10326,10326,10326,10326,10326,10326, 1007, 3173, 1806, 2865, + 10366, 2048, 2049, 4584, 1806, 1806, 1806, 2062, 2063, 1007, + 10367,10368,10369,10370,10371,10357,10372,10373,10374,10375, + 10376,10377, 2121, 2121, 1118, 1118, 1118, 1118, 1118,10381, + + 10382,10385, 9828, 1118, 1118, 1118, 1118, 1118,10092,10092, + 10092,10092,10386,10387,10389,10388, 1007, 8430,10393,10391, + 1007, 8430, 8430,10394,10361,10390, 8430, 9788, 8430, 8430, + 10392,10398,10189,10400, 9829,10358, 8430,10395,10405, 1331, + 10399,10360, 8430,10401,10362,10406, 8430, 8430, 8430, 4593, + 8430,10408,10402, 674,10379,10407, 8430,10403, 674,10409, + 10410,10411,10412,10380,10413,10414,10378,10415, 1265, 1266, + 10418, 674, 674,10112,10434, 674, 674, 674, 674,10445, + 674,10440,10131, 674,10453,10454,10455, 674,10456,10441, + 10469,10159, 674,10162,10474,10093, 9690, 9690, 9690, 9691, + + 9692, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9693, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051, 9690, 9690, 9690, 9690, 9690, 9690,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051, 9690, 9690, 9690, 9690, 1325, + 2308, 9155,10476,10470, 1490, 674, 1491, 674, 674,10166, + + 674,10471, 674, 674,10444, 1326, 1326, 1326, 1326, 1326, + 1326,10172, 2308,10487, 1283, 2308, 1490, 1331, 1491, 1490, + 674, 1491,10178, 674, 1283, 674, 674,10472, 674, 674, + 10473, 674, 674,10490, 674,10491,10477, 674,10477,10478, + 8485,10478,10478,10478,10478,10478,10478,10492, 1337, 674, + 1338,10167, 1339,10416, 674,10479, 674,10480,10493,10495, + 10383, 674, 1341,10499,10500, 1342, 1343, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8429, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + + 8426, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8426, 8426, 8426, 8426, 8426, 8426, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430,10384, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8426, 8426, 8428, 8426, + 10396,10092,10092,10092,10092, 6797, 6797, 6797, 6797, 6797, + 6797, 6797,10481,10426, 6797, 6797, 6797,10484,10501,10502, + 10503, 674,10496, 6797, 6797, 674, 674,10504, 6797,10201, + 674, 674,10497,10505, 4584,10216, 674, 4584, 6797, 4584, + + 6797, 674,10442,10164, 4584, 6797, 674, 6797,10516, 674, + 10485, 2309, 6797, 4584, 674,10468,10423, 4584,10424, 4584, + 10517, 7018,10475, 674,10482, 8430,10429, 674, 674,10420, + 10422,10428, 674,10425,10506,10432,10397, 1325,10430,10421, + 10437,10419, 6814, 6814, 6814, 6814, 6814, 6814,10093,10427, + 6814, 6814,10431, 1326, 1326, 1326, 1326, 1326, 1326, 6814, + 6814,10433, 1283,10435, 6814, 1331,10436,10438,10439,10446, + 10447,10448, 674,10449, 6814,10131, 6814, 674, 4584,10450, + 10451, 6814,10522, 6814,10468, 674,10443, 9772, 6814, 4593, + 674,10520, 674, 4593,10486, 4593, 1337, 674, 1338,10441, + + 1339, 7762, 7762, 7762, 7762,10442, 674, 2363,10483,10523, + 1341, 674,10404, 1342, 1343,10524, 7762, 7762, 7762, 7762, + 10507,10525,10459,10459,10460,10459,10452, 5793, 5793, 5793, + 10464, 5793, 5793, 9746, 5793, 5794,10526,10475,10527, 5794, + 10528,10143,10143,10144,10143,10529,10511, 674,10143,10465, + 10144,10143, 674, 674, 4593, 5795,10530,10531, 674,10145, + 2305,10508, 8544, 5793, 5793, 9746, 5793, 674, 674,10145, + 10483,10509, 674, 674,10514,10533,10145, 6854,10461, 674, + 8545,10457,10512,10462, 674,10510, 2532, 5792, 5796,10443, + 10534,10145,10147, 674, 674, 6855,10507,10461, 674, 674, + + 10535,10463,10462, 8551,10461,10536, 5797, 674,10513,10462, + 10148,10537, 674,10143,10143,10144,10143,10538, 674, 6853, + 10463, 5794, 2529, 674,10462,10518,10539,10463, 5793, 5793, + 9746, 5793, 5793, 5793, 9746, 5793, 5794,10540,10541,10515, + 5794,10145,10463,10488,10488,10488,10488,10183,10542,10183, + 10183,10183,10183,10183,10183, 6797,10145,10258,10260,10545, + 10145,10183,10181,10183,10183,10183,10183,10183,10183,10146, + 10543,10546, 674,10182,10147,10182,10183, 674,10183,10183, + 10183,10183,10183,10183, 5792, 1325,10515, 1283, 5792,10147, + 2531,10547,10148,10147, 1652,10467, 1653,10548,10549,10183, + + 10550,10184,10184,10184,10184,10184,10184,10148,10466,10519, + 1283,10148,10187,10187,10187,10187,10187,10187,10187,10188, + 2308, 2531,10544,10498, 1490, 1652, 1491, 1653, 674,10551, + 10489, 6814, 2531, 674,10552,10521, 1652, 2531, 1653,10553, + 10532, 1652,10556, 1653, 1283, 1007,10557, 1007,10558, 1007, + 10559,10560,10561,10562, 1007, 1007,10563,10564,10565,10441, + 10566, 1007,10567,10288, 1007, 2866,10569, 4584,10571, 2867, + 10295, 2005,10573, 5259, 5259,10575, 2866,10576,10577,10568, + 2867,10578, 2005, 1007, 1007,10579, 1007,10581, 1806,10580, + 10586, 1007, 2866, 1007, 1007,10296, 2867,10582, 2005,10189, + + 1007,10583,10584,10189, 1325,10585,10312,10314,10587, 1007, + 1007, 1007, 1007, 1007, 1007,10570,10588,10590,10589,10591, + 1326, 1326, 1326, 1326, 1326, 1326, 1007,10321, 1007, 1283, + 10595, 1806, 1331,10592,10483,10594,10596,10597,10598,10600, + 10601,10602, 1007, 4593,10572, 1007,10443, 1007,10574,10603, + 10604,10605,10606, 1007, 1007, 1007,10607,10608,10167,10187, + 10187,10187,10327, 1530,10609, 1531, 1007, 1007,10618, 1007, + 1007, 2868, 2866,10507, 1007,10599, 2867, 1533, 2005, 1007, + 1534, 1535, 1325,10613,10615,10593, 2863, 1806, 1007,10610, + 1007, 1007,10515, 1007, 1007,10325, 2048, 2049, 1326, 1326, + + 1326, 1326, 1326, 1326, 1007, 1807,10182, 1283,10182,10183, + 1331,10183,10183,10183,10183,10183,10183,10611,10612,10183, + 1806,10326,10326,10326,10326,10326,10326,10614,10616,10617, + 1806, 1007, 1007, 2062, 2063, 1007, 1007, 2062, 2063, 4584, + 10364, 1530,10620, 1531,10621,10622,10189,10623,10624, 1007, + 10625,10626,10627,10628,10629, 1533,10630,10631, 1534, 1535, + 1807, 2121,10633,10634,10635,10636, 674,10638,10639,10640, + 10641, 674,10643,10644,10646,10647, 1808, 1808, 1808, 1808, + 1808, 1808,10645, 8428,10397, 1806,10648,10434, 1812,10649, + 10650,10653, 8428,10651,10652, 8428, 8428, 8428,10654, 8428, + + 8428,10655,10657, 8428, 8428, 674, 8428, 8428, 674,10656, + 674, 8428,10658, 674,10659,10619,10660, 8428,10661, 1818, + 10632, 1819,10662, 9155,10418,10664,10664,10664,10664, 6797, + 6797, 6797,10554, 1821, 6797,10427, 1822, 1823, 1807,10672, + 6797, 6797,10679,10689,10691,10698,10642,10454,10699,10712, + 10468,10721,10482,10725, 1808, 1808, 1808, 1808, 1808, 1808, + 10475, 2308,10728, 1806,10733, 1490, 1812, 1491,10692, 674, + 10692,10734, 8485,10735, 674, 1283,10687,10713, 2308,10495, + 10740,10741, 1490,10663, 1491, 1283, 674, 674, 674,10742, + 10667, 674, 674, 674,10673,10723,10666, 1818,10668, 1819, + + 10693,10669,10693,10743, 674, 6814, 6814, 6814,10747, 674, + 6814, 1821,10665,10670, 1822, 1823, 6814, 6814,10555, 5257, + 5257, 5257, 5257, 5257, 5258, 5257, 5257, 5257, 5259, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5260, 5260, 5260, 5260, 5260, 5260, 5257, 5257, 5257, 5261, + 5257, 5257, 5262, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, 5257, 5257, + 5257, 5257, 5263, 5264, 5263, 5265, 9933, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5266, 5263, 5263, + + 5267, 5268, 5263, 5263, 5263, 5263, 5263, 5263, 5257, 5257, + 5257, 5257, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8429, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8426, + 8426, 8426, 8426, 8426, 8426, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + + 8430, 8426, 8426,10637, 8426, 6797, 6797, 6797, 6797, 6797, + 10442, 6797,10736, 6797, 6797,10680,10485, 6797, 2308, 4584, + 4584, 4584, 1490,10754, 1491,10217, 674, 674, 674,10726, + 4584, 674, 674, 674,10719, 1283, 674, 7762, 7762, 7762, + 10700, 674,10755, 7762, 7762,10138, 7762,10459,10459,10460, + 10459,10459,10705,10460,10459, 674, 674,10258,10748,10675, + 674, 674,10459,10459,10460,10459,10671,10683,10771,10772, + 10697,10677, 674,11275,10686,10696,10774, 674,10685,10775, + 10776, 6814,10674, 6814,10676, 6814,10681, 6814,10684, 6814, + 6814,10682,10694, 6814,10443,10695, 4593, 4593, 6854, 6853, + + 10486,10738,10777,10702,10462,11275, 4593,10702,10703,10544, + 10778, 2308,10703, 9212,10780, 1490, 6855, 1491,10461, 674, + 674,10781,10463,10462, 674, 674,10704,10737, 2868,10559, + 10704, 7762, 7762,10138, 7762, 7762, 7762,10138, 7762,10784, + 11275,10463, 5793, 5793, 5793,10464,10143,10143,10144,10143, + 10785, 674, 5793, 5793, 9746, 5793, 674, 6797,10744,10478, + 5794,10478,10478,10478,10478,10478,10478,10786,10787,10745, + 5795, 674,11275, 674,10145, 2309, 674,10788, 674,10478, + 10145,10478,10478,10478,10478,10478,10478, 6853, 674,10789, + 10572, 6853,10462, 674,10574,10749,10462,10791,10707, 674, + + 10692,10750,10461, 6854, 674,10575,10792,10462, 5792,10756, + 10463,10706, 674,10711,10463,10751, 724, 674, 9212,10722, + 724, 6855, 724,10793,10794,10463, 7765, 7765,10708, 7765, + 1806,10148,10693, 6814, 5794,10488,10488,10488,10488,10796, + 10709,10800,10709,10710,10714,10710,10710,10710,10710,10710, + 10710, 674,10795, 2309,10145,10715, 674,10715,10716,10729, + 10717,10717,10717,10717,10717,10717, 2868,10586,10801,10718, + 10730,10802,10730,10731,10803,10731,10731,10731,10731,10731, + 10731,11275, 5792,10258,10752,10805,11275,10147, 674,10758, + 2309, 724, 1806, 674,11275, 724, 724, 724,10806,10807, + + 724,10736, 724,10760, 724,10148,10597,10736, 724,10808, + 724,10759,10732,11275, 674,11275,10809,10810,11275, 674, + 10567,10811,10489, 1325,10738, 724,11275,10812,10813, 724, + 4584, 724,10814,10815,10761,10593,11275,10817,10818, 1326, + 1326, 1326, 1326, 1326, 1326, 1806, 724,11275, 1283,11275, + 724, 1331, 724,10819, 2866,10820,11275, 2868, 2867, 724, + 2005,10762,10822, 724,10823, 724, 724, 2866,11275,10783, + 724, 2867, 724, 2005, 2866,10824,11275,10765, 2867,10825, + 2005,11275, 1530,10826, 1531, 2531, 724,10827,11275, 1652, + 724, 1653, 724,11275,10828,10829, 1533,10790,10830, 1534, + + 10757, 1325,10831, 724,10443,10816, 4593,10764,11275, 724, + 10821, 2868,10832, 2532,11275,10833, 2868, 1326, 1326, 1326, + 1326, 1326, 1326,10834, 724,11275, 1283,11275, 724, 1331, + 724,10836,10837,10838,10839,10642,10672, 724,10855,10763, + 11275, 724, 8430, 724, 2121,10842,11275,10841,10843, 8430, + 724, 8430,10857,10692, 724,10845, 724, 8430,10844,11275, + 1530, 8430, 1531, 2531,10851,10766,10846, 1652,10847, 1653, + 8430,10859,11275, 8430, 1533, 8430, 8430, 1534, 1535,10853, + 10852, 8430,10854,10860,10861,10693,10714,10862,10848, 8430, + 10664,10664,10664,10664,10865, 6797,10875,10715,11275,10715, + + 10716,10679,10717,10717,10717,10717,10717,10717, 724,11275, + 11275,10718, 724, 6797, 724,10858,10835, 9155,10767, 724, + 724,10879,10689, 724, 724, 724, 724,10691,10886,11275, + 11275,10768,10888,10890,10721,10725,10914,11275,11275, 724, + 6797,11275,11275,10769,10870, 724,11275, 724, 724, 2532, + 10872, 724, 724, 724, 724, 8430, 724, 2532,10692,10849, + 724,11275, 724, 6797,10850,10869, 8485, 6797, 2866,11275, + 11275,10868, 2867, 6797, 2005, 674,10915,10665,11275, 1807, + 674, 6797, 6797,10729,10863, 6797, 6797, 6797,10867, 6814, + 10693,10883,10797, 4584,10917, 1808, 1808, 1808, 1808, 1808, + + 1808,10894,10918,10715, 1806,10715,10716, 1812,10798,10798, + 10798,10798,10798,10798,10919, 4584, 6814,10799, 4584,10866, + 10871,10740,10876, 674,10924, 674,10873, 2309, 674,10907, + 674,10702,10702,10893,10702,10882,10732,10885, 1818, 6814, + 1819, 674,10878, 6814,10925,10743, 674,10880,10913,10877, + 10738,10921, 1821,10747,10133, 1822, 1823, 6814,10879,10779, + 1807, 6814,10881, 6814,10922,10754,10932,10884,10771, 4593, + 11275,10454,10455,11275, 9741, 1283, 1808, 1808, 1808, 1808, + 1808, 1808,10892,10891,10714, 1806,10258,10702, 1812, 1534, + 10936, 4593, 2532, 1636, 4593,10715,10937,10715,10716,10944, + + 10716,10716,10716,10716,10716,10716,10774, 1534,10716,10718, + 10716,10716,10716,10716,10716,10716,10945, 674, 674, 1818, + 2309, 1819,10929, 674,10923,10716,11275,10716,10716,10716, + 10716,10716,10716, 1821,10941, 1534, 1822, 1823, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8429, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8426, 8426, 8426, 8426, 8426, + + 8426, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 10840, 8430, 8430, 8430, 8430, 8430, 8430, 8426, 8426, 8428, + 8426, 7762, 7762, 7762,10700,10702,10702,10893,10702,11275, + 10454,10455,11275,11275,10454,10455,11275,10459,10459,10460, + 10459, 1007,10912, 7762, 7762,10138, 7762,10948, 1325, 5793, + 5793, 9746, 5793,10950, 6797,10951,10952, 5794,10905,10905, + 10905,10905,10716, 1473,10717,10717,10717,10717,10717,10717, + 674, 674, 2309, 1283,10939, 674, 674,10145,10926, 1534, + 10953,10702, 8544,10943,10909,11275, 674, 1534, 2309,11275, + + 674, 674,10931,10702, 2305, 674,10896, 9741,10703, 6853, + 8545,10938, 674,10954,10900, 5792,10912, 674,10955,10895, + 10147, 2532, 1007, 4584,10793, 1534,10704, 8546, 8546,10897, + 8546,10904,10463,10910,10910,10910,10910,10794,10148,10466, + 10933,10898,10958,10898,10899,10908,10899,10899,10899,10899, + 10899,10899, 674,10927, 1007,10906,10715, 674,10715,10716, + 1007,10716,10716,10716,10716,10716,10716,10940, 2529,10731, + 10908,10731,10731,10731,10731,10731,10731, 2532,10956, 1007, + 10957, 1534, 1534, 6853,10802,10805,10258,10731,10462,10731, + 10731,10731,10731,10731,10731, 2868,10960,10809, 1007, 4593, + + 2532,10962,10963,10928, 1534,10949,10463, 7765, 7765, 7765, + 7765, 674,10909, 2309,10912, 1007, 674,10959,10964,10965, + 10911, 8547, 1806, 8547, 8548, 2865, 8548, 8548, 8548, 8548, + 8548, 8548,10970, 1473, 1636, 5795,10930,10942, 1007, 2868, + 10973, 674, 1007,10961,10797,10974, 674,10975, 1534,10946, + 10946,10946,10946,10946,10946,10715, 1807,10715,10716,10916, + 10716,10716,10716,10716,10716,10716, 2863,10968, 6854,10799, + 10716, 1007,10798,10798,10798,10798,10798,10798,10976, 1007, + 10908, 1806,10972,10977,10978, 1007, 6855, 5793, 5793, 9746, + 5793,10715,10979,10715,10716, 5794,10716,10716,10716,10716, + + 10716,10716,10980,10981,10710,10908,10710,10710,10710,10710, + 10710,10710,10982, 2868,10966,10145, 1007,10967,10967,10967, + 10967,10967,10967,10969, 2868,10909, 2865, 1007,10983,10971, + 10984,10985,10986, 2868,10987,10988, 1007,10989, 8430, 1007, + 10991,10993, 8430, 5792, 8430,10995,10998, 8430,10147, 8430, + 8430,11001,10857,10997,11002, 8430,10415,11008, 9155,10999, + 10865, 6797,10996, 6797,11006, 6797,10148, 8550, 8550,10901, + 8550,10998,10871,10873,11000, 5794,11004,11004,11004,11004, + 10875, 6797, 6797, 6797,10710,10884,10710,10710,10710,10710, + 10710,10710, 8430, 8430,11017,10145,11007,10888, 6797,11016, + + 674,10693,10890, 4584, 4584, 674, 8430, 8485,10894,11036, + 8550, 8550, 8550, 8550,11038,11042,10992,10994,11043,10702, + 11020,10893,10702, 5792,11040,11009,11044,10922,10147,11047, + 11003,11048,11010,11015,11052, 674,11033,11011, 5795, 6814, + 674, 6814,11056,10902,11060, 674,10148,10903, 1325,11012, + 674,11018,11014,10905,10905,10905,10905,11013, 6814, 6814, + 11061,11062,11063,11005, 1326, 1326, 1326, 1326, 1326, 1326, + 11064, 6854, 674, 1283, 6814,10702, 1331, 674,11034, 4593, + 11019, 9741,11275,10454,10455,11275, 9212,11065, 2308, 6855, + 9213, 4584, 1490,11275, 1491, 1007, 674, 7762, 7762,10138, + + 7762, 674,10910,10910,10910,10910, 674, 1530,11041, 1531, + 1007, 674,11049, 1007, 5793, 5793, 9746, 5793, 674,11067, + 2532, 1533, 5794, 674, 1534, 1535, 5793, 5793, 9746, 5793, + 10934, 1325,11050, 2308, 5794,11275,11040, 1490,11275, 1491, + 10906, 674,10145,11025, 1007,11071, 674, 1326, 1326, 1326, + 1326, 1326, 1326, 6853,10145,11072, 1283, 1007,10462, 1331, + 5793, 5793, 9746, 5793,11069,11045,11073,11066, 5794,11029, + 5792,11046,11074, 674,11051,10147,10463,10706, 674,10922, + 11075, 674, 5792, 2309,11076, 1007, 674,10147,10145,10911, + 1530,11032, 1531,10148,11030,11039, 1007,11078,11079, 2868, + + 11050,11275,11080,11081, 1533,10148,11082,10935, 1535, 1807, + 1007,11039,11070,11275,11083,11085, 5792,11086,11087,10992, + 11041,10147,11275,10994,11089, 1808, 1808, 1808, 1808, 1808, + 1808,10908,11090, 8428, 1806,11092,11003, 1812,11031,10148, + 11091,11275,10715,11275,10715,10716,11093,10716,10716,10716, + 10716,10716,10716, 724,11094,11275,10908, 724,11275, 724, + 11095, 8428, 8428, 2532,11275, 724, 6797,11275, 1818, 724, + 1819, 724,11102,11034, 724,11039, 6797, 6797, 724,11275, + 724, 6797, 1821,11275,11115, 1822, 1823, 1807,11054,11036, + 11038,11033,11117, 724,11118,11119,11122, 724,11120, 724, + + 11275,11123,11125, 1808, 1808, 1808, 1808, 1808, 1808,11275, + 724,10922, 1806,11126, 724, 1812, 724, 674,11121, 724, + 2866,11275, 674, 724, 2867, 724, 2005, 1007,10922,11060, + 11061, 724,11050,11034,11130, 724,11097, 724,11096,11131, + 11055,11099,11098, 2866,11064,11132, 1818, 2867, 1819, 2005, + 1007, 1007, 6814, 6814,11128, 1007, 1007, 6814,11133,11134, + 1821,11135,10947, 1822, 1823, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8429, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8430, + + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8426, 8426, 8426, 8426, 8426, 8426, 8430, 8430, + 8430, 8430,10990, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8426, 8426, 8428, 8426, 9738,11021, + 11022, 9738,11275,10946,10946,10946,10946,10946,10946,11136, + 11040,11137,11023,11138,11023,11024, 6797,11024,11024,11024, + 11024,11024,11024,10967,10967,10967,10967,10967,10967, 1118, + 1118, 1118, 1118, 1118,11004,11004,11004,11004,11101, 4584, + + 10702,10702,10893,10702,11275,11129, 674,11078,11139,11140, + 11141, 674, 1007,11142,11275, 8546, 8546, 8546, 8546, 2866, + 11143,11144,11145, 2867,11146, 2005, 1007,11147,11148, 9209, + 11149, 9209, 9210,11057, 9210, 9210, 9210, 9210, 9210, 9210, + 11151, 8428,11150,11100, 9738, 9738, 9738, 9738,11152,11084, + 11153, 8428, 6814,11068,11041,11159,10702,11115, 9209,11167, + 9209, 9210,11103, 9210, 9210, 9210, 9210, 9210, 9210, 9738, + 11021, 9738, 9738,11117, 6797, 4593, 8544,11275,10454,10455, + 11275,11005, 6797, 9209,11168, 9209, 9210,11169, 9210, 9210, + 9210, 9210, 9210, 9210, 8545, 7762, 7762,10138, 7762,11170, + + 11171,11172,11173,11275,10454,10455,11275, 9211, 9211, 9211, + 9211,11125,10899,11275,10899,10899,10899,10899,10899,10899, + 11024,10922,11024,11024,11024,11024,11024,11024, 7762, 7762, + 10138, 7762,11174,11275,11176, 2308,11177, 1007,11178, 1490, + 11180, 1491, 1007, 674, 7762, 7762,10138, 7762, 674,11108, + 11154, 6853,11158,11175,11181,11275,10462,11182,11155,11275, + 7762, 7762,10138, 7762,11183,11127, 6797, 6797, 8544, 724, + 1007, 724,11275,11184,10463, 9211, 9211,11026, 9211,11185, + 11186,11179,11187, 9741, 6853,11188, 8545, 9742,11189,10462, + 11190, 4584,10899,11191,10899,10899,10899,10899,10899,10899, + + 6853, 5793, 5793, 9746, 5793,10462,11192,10463,11109, 5794, + 5793, 5793, 9746, 5793,11275,11156, 6853,11193, 5794,11194, + 11195,10462,11110,10463, 724,11111,11196,11275, 724,10145, + 724, 6853, 5793, 5793, 9746, 5793,10462,11197,10145,10463, + 5794,11199,11157, 6814, 674, 8428,11160,11204,11205, 674, + 6797,11027, 4584,11206,10463,11028, 1325, 5792,11158,11207, + 10145,11208,10147, 1007,11176,11209, 5792, 4593,11178,11275, + 1007,10147, 1326, 1326, 1326, 1326, 1326, 1326,11210, 724, + 10148, 1283,11211, 724, 1331, 724,11212,11213, 5792,10148, + 11214,11112,11215,10147,11216,11217,11113, 9740, 9740, 9740, + + 9740,11158, 9740,11104, 9740, 9740,11218,11275,10454,10455, + 11275,10148,11219,11198,11220, 1530,11221, 1531,11221,11275, + 10454,10455,11275,10415,10133,11053, 6814, 8428, 4593, 1533, + 6797,11223, 1534, 1535, 1325,11204,11275,10454,10455,11275, + 11225,11226,10922,11209,11033,10922,11227,11228,11229,11230, + 1326, 1326, 1326, 1326, 1326, 1326,11231,11232,11233, 1283, + 11234,11237, 1331,11275, 7762, 7762,10138, 7762,11275,10454, + 10455,11275,11239, 9741,11240,11275,11241, 9742, 9741, 6797, + 11242,11243, 9742,11235,11244,11222,11034,11161, 7762, 7762, + 10138, 7762,11275, 1530,11245, 1531, 2531,11162,11246,11247, + + 1652,11163, 1653, 8428, 8428,11249, 6814, 1533,11239,11251, + 1534, 1535, 1807,11250, 7762, 7762,10138, 7762,11252,11253, + 6853,11254, 6797,11255,11275,10462,11256,11257, 1808, 1808, + 1808, 1808, 1808, 1808,11258,11259,11250, 1806,11260,11261, + 1812,11262,11263,10463, 6853,11275,10454,10455,11275,10462, + 11264,11236,11266,11267,11268, 6814, 5793, 5793, 9746, 5793, + 11275,10454,10455,11275, 5794,11266,11269,10463,11270,11164, + 6853, 1818,11271, 1819,11272,10462,11274,11274,11165, 2908, + 11275,10454,10455,11275,10145, 1821, 2906,11058, 1822, 1823, + 1807, 1098, 1098,10463,10702,10702,10893,10702,11248,10916, + + 2905,11275, 1100, 1100, 1098, 1098, 1808, 1808, 1808, 1808, + 1808, 1808, 5792, 847, 2904, 1806,11275,10147, 1812, 847, + 847,11166,10916, 850,11201, 921,11200, 925, 2903, 850, + 850, 921, 921, 925, 925,10148,11275, 929, 1100, 1100, + 939, 2769, 2769, 929, 929,11224, 939, 939, 991, 1818, + 10702, 1819, 2899, 2766, 991, 991, 2769, 2769, 772,11059, + 2766, 2766, 2898, 1821, 772, 772, 1822, 1823, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8429, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + + 8426, 8426, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8426, 8426, 8426, 8426, 8426, + 8426, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8426, 8426,11088, + 8426, 9740,11104,11105, 9740,10143,10143,10144,10143, 7762, + 7762,10138, 7762, 5794,10690,10690, 2897,10690,11024, 2896, + 11024,11024,11024,11024,11024,11024,10459,10459,10460,10459, + 2890, 2889, 2888,10145, 5793, 5793, 9746,10464, 7762, 7762, + + 10138,10700, 5794, 847,11275,10454,10455,10894, 850, 847, + 847, 2887, 921, 2886, 850, 850, 2766,11275, 921, 921, + 2885,10146,10145, 2766, 2766, 6853,10147, 2882, 2881, 925, + 10462, 2880, 929, 2879,11202, 925, 925,11106, 929, 929, + 2878,11107,10461, 2877,10148, 939, 2876,10462,10463, 2875, + 5792, 939, 939, 2874, 6853,10147, 991, 2873, 2868,10462, + 11275, 2136, 991, 991, 2865,10463, 2864, 2136, 2136, 847, + 10902, 2863, 925,10148,11027, 847, 847,10463, 925, 925, + 11106, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + + 182, 182, 182, 182, 182, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + + 225, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 256, 256, 256, + + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 273, 273, 273, 273, 273, 273, 273, + + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, 283, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + + 326, 326, 326, 326, 326, 326, 326, 326, 326, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + + 352, 352, 352, 352, 352, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, 358, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + + 368, 370, 370, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 370, 370, 370, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 372, 380, + 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 389, 389, 389, + + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 410, 410, 410, 410, 410, 410, 410, + + 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, + 410, 410, 410, 410, 410, 410, 410, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 497, + 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, + + 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 518, 518, 518, 518, 518, + 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, + + 518, 518, 518, 518, 518, 518, 518, 518, 518, 521, + 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, + 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, + 521, 521, 521, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 543, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + + 545, 545, 545, 545, 545, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 564, 564, 564, + 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, + 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, + + 564, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 567, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, + 577, 577, 577, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 583, 583, 583, + + 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 584, 584, 584, 584, 584, 584, 584, 584, 584, + 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + 584, 584, 584, 584, 584, 589, 589, 589, 589, 589, + 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, + 589, 589, 589, 589, 589, 589, 589, 589, 589, 590, + 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, + 590, 590, 590, 600, 600, 600, 600, 600, 600, 600, + + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 605, 605, 605, 605, 605, 605, 605, 605, 605, + 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, + 605, 605, 605, 605, 605, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 614, + 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, + + 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 616, 616, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 644, 644, 646, 646, 646, 646, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, + + 646, 646, 646, 646, 646, 646, 646, 646, 646, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 772, 2862, 929, 2861, 2136, 2860, 2859, + 772, 929, 929, 2136, 2136, 2856, 772, 772, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 778, 778, 2855, 778, 778, 778, 778, 778, + 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, + 778, 778, 778, 778, 778, 778, 790, 790, 2854, 790, + + 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, + 803, 803, 2853, 803, 2848,10690,10690, 847,10690, 803, + 803, 2847, 803, 847, 847, 2846, 803, 803, 810, 810, + 810, 810, 810, 810, 810, 2845, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 833, 833, 2838, 2837, + 2836, 925, 2829, 833, 833, 834, 834, 925, 925, 2827, + + 929, 2826, 834, 834, 836, 836, 929, 929, 2825, 847, + 2818, 836, 836, 864, 864, 847, 847, 925, 2817, 929, + 864, 864, 869, 925, 925, 929, 929, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 882, 882, 2816, 2815, + 5727, 2813, 847, 882, 882, 893, 5727, 5727, 847, 847, + 925, 893, 893, 2812, 2811, 2810, 925, 925, 893, 893, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 2809, 894, 904, 904, 904, 904, 904, 904, + + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 913, 913, + 913, 913, 2808, 2807, 929, 2802, 913, 913, 2792, 913, + 929, 929, 2791, 913, 913, 918, 918, 918, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 927, + 2783, 2782, 2781, 2780, 2779, 927, 927, 2778, 927, 644, + 644, 644, 644, 644, 644, 2777, 644, 644, 644, 644, + 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 947, 947, 2776, 2775, 2774, 847, 2773, + + 947, 947, 959, 959, 847, 847, 2772, 925, 2771, 959, + 959, 965, 965, 925, 925, 2770, 2768, 2767, 965, 965, + 985, 985, 985, 985, 2763, 985, 2762, 2761, 847, 2760, + 985, 925, 2759, 985, 847, 847, 2758, 925, 925, 985, + 985, 646, 646, 646, 646, 646, 646, 646, 646, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, + 646, 646, 646, 646, 646, 1066, 1066, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 1102, 2757, 2756, 2755, 9419, 2754, 2753, 1102, 2752, + 1102, 9419, 9419, 9424, 1102, 1102, 1102, 1102, 1106, 9424, + 9424, 2751, 9428, 2750, 2749, 1106, 2748, 1106, 9428, 9428, + 2747, 1106, 1106, 1106, 1106, 1111, 1111, 1111, 1111, 1111, + + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1114, + 1114, 2746, 2745, 9638, 2744, 9419, 1114, 1114, 1121, 9638, + 9638, 9419, 9419, 2743, 9424, 2742, 2741, 1121, 2740, 1121, + 9424, 9424, 9428, 1121, 1121, 1124, 1124, 2739, 9428, 9428, + 2738, 2737, 1124, 1124, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1137, 2736, + 2735, 2734, 1137, 1137, 2733, 2731, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 2728, 1137, 1137, 1137, 1137, 1137, + + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 1237, 1237, + 2727, 2725, 2724, 2723, 2720, 1237, 1237, 1249, 1249, 2611, + 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, + 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, + 1249, 1261, 1261, 2717, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + + 1261, 1261, 1261, 1261, 1261, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 644, + 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 644, 1272, 1272, 1272, 1272, 1272, 1272, 2715, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 646, 646, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, + + 646, 1326, 2713, 2705, 2700, 2699, 9638, 2698, 1326, 1326, + 2697, 1326, 9638, 9638, 2693, 2691, 2690, 1326, 1326, 1331, + 1331, 2689, 2681, 2680, 2679, 2672, 1331, 1331, 674, 2671, + 2667, 2666, 2663, 2662, 2651, 674, 674, 674, 674, 2650, + 2649, 2648, 2643, 2636, 674, 674, 724, 2635, 2634, 2628, + 2618, 2611, 2610, 724, 724, 724, 724, 2609, 2606, 2605, + 2600, 2599, 724, 724, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 790, 790, + 2598, 790, 790, 790, 790, 790, 790, 790, 790, 790, + + 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 1692, 1692, 2597, 2596, + 2593, 2591, 2590, 1692, 1692, 1708, 1708, 2589, 2587, 2585, + 2584, 2583, 1708, 1708, 803, 803, 2582, 2576, 2569, 2568, + 2567, 803, 803, 810, 810, 810, 810, 810, 810, 810, + 2566, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + + 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, + 824, 833, 833, 2565, 2564, 2561, 2558, 2556, 833, 833, + 834, 834, 2555, 2554, 2552, 2551, 2548, 834, 834, 836, + 836, 2330, 2547, 2546, 2545, 2544, 836, 836, 864, 864, + 2543, 2542, 2541, 2540, 2539, 864, 864, 869, 2538, 2537, + 2536, 2532, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 882, 882, 1636, 2530, 2529, 1558, 2438, 882, 882, + 893, 2329, 2328, 2327, 2320, 2304, 2303, 2302, 893, 893, + 893, 1330, 2299, 2298, 1321, 2289, 893, 893, 894, 894, + + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 2288, 894, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 913, 913, 2287, 2286, 2285, 2284, 2283, 913, 913, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, + + 918, 918, 918, 927, 2282, 2281, 2280, 2278, 1269, 927, + 927, 2271, 927, 724, 2270, 2269, 2268, 1262, 1257, 2265, + 724, 724, 724, 724, 2264, 2263, 2262, 2259, 1247, 724, + 724, 947, 947, 2257, 2254, 2253, 2252, 2251, 947, 947, + 959, 959, 2249, 2248, 2247, 2246, 2245, 959, 959, 965, + 965, 2236, 2235, 2234, 2233, 1223, 965, 965, 985, 985, + 985, 985, 1222, 1221, 2232, 2231, 1216, 1215, 985, 2230, + 2222, 985, 1138, 1330, 1321, 1138, 2134, 985, 985, 1808, + 1138, 1138, 1138, 1138, 1138, 1138, 1808, 1808, 1138, 1808, + 1138, 1138, 1138, 1138, 1138, 1808, 1808, 1812, 1812, 1138, + + 1138, 1138, 1138, 1138, 1812, 1812, 1007, 1138, 1138, 1133, + 2131, 2128, 2127, 1007, 1007, 1007, 1007, 2126, 2125, 2124, + 2123, 2121, 1007, 1007, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2051, 2051, + 2051, 2051, 2051, 2051, 2120, 2051, 2051, 2051, 2051, 2051, + 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, + 2051, 2051, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 2061, 2061, 2061, 2061, + + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1102, 2119, 1112, 2118, 2078, 2044, + 2043, 1102, 986, 1802, 1793, 1792, 1791, 1102, 1102, 1790, + 1102, 1106, 1789, 1788, 1787, 1786, 1785, 1784, 1106, 1783, + 1782, 1106, 1781, 1780, 1106, 1106, 1111, 1111, 1111, 1111, + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, + + 1114, 1114, 1779, 1778, 1777, 1776, 1773, 1114, 1114, 1121, + 1770, 1767, 938, 1766, 1765, 1764, 928, 1761, 1121, 919, + 895, 895, 895, 1752, 1121, 1121, 1124, 1124, 1751, 1750, + 1749, 1748, 1746, 1124, 1124, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1137, + 876, 1745, 1744, 1137, 1137, 866, 1743, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 866, 1137, 1137, 1137, 1137, + 1137, 2132, 866, 866, 867, 2132, 2132, 866, 866, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 1742, 2132, 2132, + + 2132, 2132, 2132, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 2170, 1741, 1740, + 1739, 1738, 1737, 1736, 2170, 2170, 1735, 2170, 1734, 1733, + 1732, 1731, 1730, 2170, 2170, 2173, 2173, 825, 1729, 1728, + 1727, 1726, 2173, 2173, 674, 1725, 1719, 1718, 1715, 1714, + 1713, 674, 674, 674, 674, 1712, 1711, 1707, 1706, 1705, + 674, 674, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2250, 1237, 1237, 1701, 1700, + + 1698, 1697, 1694, 1237, 1237, 2258, 2258, 1693, 776, 769, + 1691, 1690, 2258, 2258, 1261, 1261, 1686, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 2276, 1330, 1321, 1281, + 1273, 1271, 1270, 1262, 1262, 1262, 2276, 2276, 2276, 2276, + + 2276, 2276, 2276, 2276, 2276, 2279, 1247, 2279, 1245, 1244, + 1241, 2279, 2279, 1326, 1238, 1235, 1234, 1233, 1230, 1223, + 1326, 1326, 1222, 1326, 1221, 1216, 1215, 1138, 1138, 1326, + 1326, 1331, 1331, 1138, 1138, 1138, 1159, 1138, 1331, 1331, + 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, + 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, + 2326, 2326, 2326, 2326, 724, 1136, 1123, 1116, 1115, 1110, + 1108, 724, 724, 724, 724, 767, 1065, 717, 650, 649, + 724, 724, 1692, 1692, 643, 1055, 761, 1054, 717, 1692, + 1692, 1708, 1708, 1053, 990, 988, 650, 982, 1708, 1708, + + 803, 803, 958, 946, 928, 920, 926, 803, 803, 2765, + 920, 919, 2765, 914, 911, 895, 892, 891, 889, 888, + 875, 2765, 2765, 817, 871, 868, 866, 866, 2765, 2765, + 836, 836, 866, 867, 866, 866, 865, 836, 836, 864, + 864, 848, 767, 844, 832, 827, 864, 864, 882, 882, + 817, 817, 817, 797, 797, 882, 882, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + + 894, 894, 894, 792, 894, 2795, 2795, 2795, 2795, 2795, + 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, + 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 947, + 947, 791, 771, 767, 717, 650, 947, 947, 959, 959, + 649, 645, 643,11275, 544, 959, 959, 965, 965, 544, + 544, 544, 542, 542, 965, 965, 1808, 369, 369, 212, + 212, 276, 276, 1808, 1808, 274, 1808, 274,11275,11275, + 11275,11275, 1808, 1808, 1812, 1812,11275,11275,11275,11275, + 11275, 1812, 1812, 1007,11275,11275,11275,11275,11275,11275, + 1007, 1007, 1007, 1007,11275,11275,11275,11275,11275, 1007, + + 1007, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, + 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, + 2907, 2907, 2907, 2907, 2907, 2276,11275,11275,11275,11275, + 11275,11275,11275,11275,11275, 2276, 2276, 2276, 2276, 2276, + 2276, 2276, 2276, 2276, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2051, 2051, + 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, + 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, + 2051, 2051, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 1102,11275,11275,11275, + 11275,11275,11275, 1102,11275,11275,11275,11275,11275, 1102, + 1102,11275, 1102, 1106,11275,11275,11275,11275,11275,11275, + 1106,11275,11275, 1106,11275,11275, 1106, 1106, 1114, 1114, + 11275,11275,11275,11275,11275, 1114, 1114, 1121,11275,11275, + 11275,11275,11275,11275,11275,11275, 1121,11275,11275,11275, + 11275,11275, 1121, 1121, 1124, 1124,11275,11275,11275,11275, + 11275, 1124, 1124, 2132,11275,11275,11275, 2132, 2132,11275, + 11275, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,11275, + + 2132, 2132, 2132, 2132, 2132, 1137,11275,11275,11275, 1137, + 1137,11275,11275, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137,11275, 1137, 1137, 1137, 1137, 1137, 2170,11275,11275, + 11275,11275,11275,11275, 2170, 2170,11275, 2170,11275,11275, + 11275,11275,11275, 2170, 2170, 2173, 2173,11275,11275,11275, + 11275,11275, 2173, 2173, 674,11275,11275,11275,11275,11275, + 11275, 674, 674, 674, 674,11275,11275,11275,11275,11275, + 674, 674, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2250, 1237, 1237,11275,11275, + + 11275,11275,11275, 1237, 1237, 2258, 2258,11275,11275,11275, + 11275,11275, 2258, 2258, 1261, 1261,11275, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1326,11275,11275,11275, + 11275,11275,11275, 1326, 1326,11275, 1326,11275,11275,11275, + + 11275,11275, 1326, 1326, 1331, 1331,11275,11275,11275,11275, + 11275, 1331, 1331, 2326, 2326, 2326, 2326, 2326, 2326, 2326, + 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, + 2326, 2326, 2326, 2326, 2326, 2326, 2326, 724,11275,11275, + 11275,11275,11275,11275, 724, 724, 724, 724,11275,11275, + 11275,11275,11275, 724, 724, 1692, 1692,11275,11275,11275, + 11275,11275, 1692, 1692, 1708, 1708,11275,11275,11275,11275, + 11275, 1708, 1708, 803, 803,11275,11275,11275,11275,11275, + 803, 803, 2765, 2765,11275,11275,11275,11275,11275, 2765, + 2765, 836, 836,11275,11275,11275,11275,11275, 836, 836, + + 864, 864,11275,11275,11275,11275, 864, 864, 864, 882, + 882,11275,11275,11275,11275,11275, 882, 882, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, + 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, + 2795, 2795, 2795, 2795, 2795, 2795, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 3903, 3903, 3903, 3903, 3903, 3903, + 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, + 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 947, 947, + 11275,11275,11275,11275,11275, 947, 947, 959, 959,11275, + 11275,11275,11275,11275, 959, 959, 965, 965,11275,11275, + 11275,11275,11275, 965, 965, 1808,11275,11275,11275,11275, + 11275,11275, 1808, 1808,11275, 1808,11275,11275,11275,11275, + 11275, 1808, 1808, 1812, 1812,11275,11275,11275,11275,11275, + 1812, 1812, 1007,11275,11275,11275,11275,11275,11275, 1007, + + 1007, 1007, 1007,11275,11275,11275,11275,11275, 1007, 1007, + 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, + 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, + 2907, 2907, 2907, 2907, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 1102,11275,11275,11275,11275,11275,11275, 1102, + 11275,11275,11275,11275,11275, 1102, 1102,11275, 1102, 1106, + + 11275,11275,11275,11275,11275,11275, 1106,11275,11275, 1106, + 11275,11275, 1106, 1106, 1114, 1114,11275,11275,11275,11275, + 11275, 1114, 1114, 1121,11275,11275,11275,11275,11275,11275, + 11275,11275, 1121,11275,11275,11275,11275, 1121, 1121, 1121, + 1124, 1124,11275,11275,11275,11275,11275, 1124, 1124, 4454, + 11275,11275,11275, 4454, 4454,11275,11275, 4454, 4454, 4454, + 4454, 4454, 4454, 4454, 4454,11275, 4454, 4454, 4454, 4454, + 4454, 1137,11275,11275,11275, 1137, 1137,11275,11275, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137,11275, 1137, 1137, + 1137, 1137, 1137, 2170,11275,11275,11275,11275,11275,11275, + + 2170, 2170,11275, 2170,11275,11275,11275,11275,11275, 2170, + 2170, 2173, 2173,11275,11275,11275,11275,11275, 2173, 2173, + 674,11275,11275,11275,11275,11275,11275, 674, 674, 674, + 674,11275,11275,11275,11275,11275, 674, 674, 1237, 1237, + 11275,11275,11275,11275,11275, 1237, 1237, 2258, 2258,11275, + 11275,11275,11275,11275, 2258, 2258, 1261, 1261,11275, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + + 1272, 1272, 1272, 1272, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1326,11275, + 11275,11275,11275,11275,11275, 1326, 1326,11275, 1326,11275, + 11275,11275,11275,11275, 1326, 1326, 1331, 1331,11275,11275, + 11275,11275,11275, 1331, 1331, 4585,11275,11275,11275,11275, + 4585,11275,11275,11275,11275,11275, 4585, 4585,11275, 4585, + 724,11275,11275,11275,11275,11275,11275, 724, 724, 724, + 724,11275,11275,11275,11275,11275, 724, 724, 724, 1692, + 1692,11275,11275,11275,11275,11275, 1692, 1692, 1708, 1708, + + 11275,11275,11275,11275,11275, 1708, 1708, 5044,11275,11275, + 11275,11275,11275, 5044, 5044,11275, 5044, 803, 803,11275, + 11275,11275,11275,11275, 803, 803, 836, 836,11275,11275, + 11275,11275,11275, 836, 836, 864, 864,11275,11275,11275, + 11275,11275, 864, 864, 882,11275,11275, 882,11275,11275, + 11275,11275,11275,11275,11275,11275, 882, 882,11275,11275, + 11275,11275,11275, 882, 882, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 3903, + 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, + + 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, + 3903, 3903, 3903, 3906, 3906, 3906, 3906, 3906, 3906, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 947, 947,11275, + 11275,11275,11275,11275, 947, 947, 959,11275,11275, 959, + 11275,11275,11275,11275,11275,11275,11275,11275, 959, 959, + 11275,11275,11275,11275,11275, 959, 959, 965,11275,11275, + 965,11275,11275,11275,11275,11275,11275,11275,11275, 965, + 965,11275,11275,11275,11275,11275, 965, 965, 1808,11275, + 11275,11275,11275,11275,11275, 1808, 1808,11275, 1808,11275, + + 11275,11275,11275,11275, 1808, 1808, 1812, 1812,11275,11275, + 11275,11275,11275, 1812, 1812, 1007,11275,11275,11275,11275, + 11275,11275, 1007, 1007, 1007, 1007,11275,11275,11275,11275, + 11275, 1007, 1007, 1007, 5179, 5179,11275, 5179, 5179, 5179, + 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, + 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 4585,11275, + 11275,11275,11275, 4585,11275,11275,11275,11275,11275, 4585, + 4585,11275, 4585, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2061, 2061, 2061, + + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 1102,11275,11275, 1102,11275,11275, 1102,11275,11275, + 11275,11275,11275,11275, 1102,11275,11275,11275,11275,11275, + 1102, 1102,11275, 1102, 1106,11275,11275, 1106,11275,11275, + 1106,11275,11275,11275,11275,11275,11275, 1106,11275,11275, + 1106,11275,11275, 1106, 1106, 1114, 1114,11275,11275,11275, + 11275,11275, 1114, 1114, 1121,11275,11275,11275,11275,11275, + 11275,11275,11275, 1121,11275,11275,11275,11275,11275, 1121, + 1121, 1124, 1124,11275,11275,11275,11275,11275, 1124, 1124, + + 5648, 5648,11275,11275,11275,11275,11275, 5648, 5648, 4454, + 11275,11275,11275, 4454, 4454,11275,11275, 4454, 4454, 4454, + 4454, 4454, 4454, 4454, 4454,11275, 4454, 4454, 4454, 4454, + 4454, 1137,11275,11275,11275, 1137, 1137,11275,11275, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137,11275, 1137, 1137, + 1137, 1137, 1137, 2170,11275,11275,11275,11275,11275,11275, + 2170, 2170,11275, 2170,11275,11275,11275,11275,11275, 2170, + 2170, 2173, 2173,11275,11275,11275,11275,11275, 2173, 2173, + 674,11275,11275,11275,11275,11275,11275, 674, 674, 674, + 674,11275,11275,11275,11275,11275, 674, 674, 1237, 1237, + + 11275,11275,11275,11275,11275, 1237, 1237, 2258, 2258,11275, + 11275,11275,11275,11275, 2258, 2258, 1261, 1261,11275, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1326,11275, + 11275,11275,11275,11275,11275, 1326, 1326,11275, 1326,11275, + + 11275,11275,11275,11275, 1326, 1326, 1331, 1331,11275,11275, + 11275,11275,11275, 1331, 1331, 5758, 5758,11275, 5758, 5758, + 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, + 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5761, + 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, + 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, + 5761,11275, 5761, 5763, 5763, 5763, 5763, 5763, 5763, 5763, + 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, + 5763, 5763, 5763, 5763, 5763, 5763, 5763, 4585,11275,11275, + 11275,11275, 4585,11275,11275,11275,11275,11275, 4585, 4585, + + 11275, 4585, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5883, 5883, 5883, 5883, + 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, + 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, + 4770,11275,11275, 4770, 4770, 4770, 4770, 4770, 4770, 4770, + 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4770, 4770, + 11275, 4770, 4770, 4770, 724,11275,11275,11275,11275,11275, + 11275, 724, 724, 724, 724,11275,11275,11275,11275,11275, + 724, 724, 1692, 1692,11275,11275,11275,11275,11275, 1692, + + 1692, 1708, 1708,11275,11275,11275,11275,11275, 1708, 1708, + 5044,11275,11275,11275,11275,11275, 5044, 5044,11275, 5044, + 803, 803,11275,11275,11275,11275,11275, 803, 803, 836, + 836,11275,11275,11275,11275,11275, 836, 836, 864, 864, + 11275,11275,11275,11275,11275, 864, 864, 882, 882,11275, + 11275,11275,11275,11275, 882, 882, 6239, 6239, 6239, 6239, + 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, + 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + + 894, 894, 894, 894, 947,11275,11275,11275,11275,11275, + 11275,11275,11275, 947, 947,11275,11275,11275,11275,11275, + 947, 947, 947, 959, 959,11275,11275,11275,11275,11275, + 959, 959, 965, 965,11275,11275,11275,11275,11275, 965, + 965, 1808,11275,11275,11275,11275,11275,11275, 1808, 1808, + 11275, 1808,11275,11275,11275,11275,11275, 1808, 1808, 1812, + 1812,11275,11275,11275,11275,11275, 1812, 1812, 1007,11275, + 11275,11275,11275,11275,11275, 1007, 1007, 1007, 1007,11275, + 11275,11275,11275,11275, 1007, 1007, 4585,11275,11275,11275, + 11275, 4585,11275,11275,11275,11275,11275, 4585, 4585,11275, + + 4585, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 5601, + 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, + 5601, 5601, 5601, 5601,11275, 5601, 5601, 5601, 5601, 5601, + 5601, 5601, 5601, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 1326,11275,11275, + + 11275,11275,11275,11275, 1326, 1326,11275, 1326,11275,11275, + 11275,11275,11275, 1326, 1326, 1331, 1331,11275,11275,11275, + 11275,11275, 1331, 1331, 1102,11275,11275,11275,11275,11275, + 11275, 1102,11275,11275,11275,11275,11275, 1102, 1102,11275, + 1102, 1114, 1114,11275,11275,11275,11275,11275, 1114, 1114, + 1121,11275,11275,11275,11275,11275,11275,11275,11275, 1121, + 11275,11275,11275,11275,11275, 1121, 1121, 1124, 1124,11275, + 11275,11275,11275,11275, 1124, 1124, 5648, 5648,11275,11275, + 11275,11275,11275, 5648, 5648, 6719,11275,11275,11275, 6719, + 6719,11275,11275, 6719, 6719, 6719, 6719, 6719, 6719, 6719, + + 6719,11275, 6719, 6719, 6719, 6719, 6719, 1137,11275,11275, + 11275, 1137, 1137,11275,11275, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137,11275, 1137, 1137, 1137, 1137, 1137, 2170, + 11275,11275,11275,11275,11275,11275, 2170, 2170,11275, 2170, + 11275,11275,11275,11275,11275, 2170, 2170, 2173, 2173,11275, + 11275,11275,11275,11275, 2173, 2173, 674, 674, 674, 674, + 11275,11275,11275,11275,11275,11275, 674, 674, 674, 674, + 11275,11275,11275,11275,11275, 674, 674, 674, 1237, 1237, + 11275,11275,11275,11275,11275, 1237, 1237, 2258, 2258,11275, + 11275,11275,11275,11275, 2258, 2258, 1261, 1261,11275, 1261, + + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 5727,11275, + 11275,11275,11275,11275, 5727, 5727,11275, 5727, 6789, 6789, + 11275, 6789, 6789, 6789, 6789, 6789, 6789, 6789, 6789, 6789, + 6789, 6789, 6789, 6789, 6789, 6789, 6789, 6789, 6789, 6789, + + 6789, 6789, 6798,11275,11275,11275,11275, 6798,11275,11275, + 11275,11275,11275, 6798, 6798,11275, 6798, 5758, 5758,11275, + 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, + 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, + 5758, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, + 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, + 5761, 5761, 5761,11275, 5761, 5763, 5763, 5763, 5763, 5763, + 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, + 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 4585, + 11275,11275,11275,11275, 4585,11275,11275,11275,11275,11275, + + 4585, 4585,11275, 4585, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 6853, 6853, + 6853, 6853, 6853, 6853, 6853,11275, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, + 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, + 5883, 5883, 5883, 5883, 5883, 5883, 7016,11275,11275,11275, + 11275,11275, 7016, 7016,11275, 7016, 724,11275,11275,11275, + 11275,11275,11275, 724, 724, 724, 724,11275,11275,11275, + + 11275,11275, 724, 724, 1692, 1692,11275,11275,11275,11275, + 11275, 1692, 1692, 1708, 1708,11275,11275,11275,11275,11275, + 1708, 1708, 5044,11275,11275,11275,11275,11275, 5044, 5044, + 11275, 5044, 803, 803,11275,11275,11275,11275,11275, 803, + 803, 836,11275,11275,11275,11275,11275,11275,11275,11275, + 836, 836,11275,11275,11275,11275,11275, 836, 836, 7224, + 11275,11275,11275,11275,11275, 7224, 7224,11275, 7224, 864, + 864,11275,11275,11275,11275,11275, 864, 864, 882, 882, + 11275,11275,11275,11275,11275, 882, 882, 6239, 6239, 6239, + 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, + + 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, + 6239, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 3906, 3906, 3906, 3906, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 947, + 947,11275,11275,11275,11275,11275, 947, 947, 959, 959, + 11275,11275,11275,11275,11275, 959, 959, 965, 965,11275, + 11275,11275,11275,11275, 965, 965, 7259, 7259, 7259, 7259, + 11275,11275,11275,11275,11275,11275, 7259,11275,11275, 7259, + + 11275,11275,11275,11275,11275, 7259, 7259, 1808,11275,11275, + 11275,11275,11275,11275, 1808, 1808,11275, 1808,11275,11275, + 11275,11275,11275, 1808, 1808, 1812, 1812,11275,11275,11275, + 11275,11275, 1812, 1812, 1007,11275,11275,11275,11275,11275, + 11275, 1007, 1007, 1007, 1007,11275,11275,11275,11275,11275, + 1007, 1007, 6798,11275,11275,11275,11275, 6798,11275,11275, + 11275,11275,11275, 6798, 6798,11275, 6798, 4585,11275,11275, + 11275,11275, 4585,11275,11275,11275,11275,11275, 4585, 4585, + 11275, 4585, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + + 2047, 2047, 2047, 2047, 2047, 2047, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 1102,11275,11275,11275,11275,11275,11275, 1102,11275,11275, + 11275,11275,11275, 1102, 1102,11275, 1102, 1114, 1114,11275, + 11275,11275,11275,11275, 1114, 1114, 1121,11275,11275,11275, + 11275,11275,11275,11275,11275, 1121,11275,11275,11275,11275, + 11275, 1121, 1121, 1124, 1124,11275,11275,11275,11275,11275, + 1124, 1124, 6719,11275,11275,11275, 6719, 6719,11275,11275, + 6719, 6719, 6719, 6719, 6719, 6719, 6719, 6719,11275, 6719, + + 6719, 6719, 6719, 6719, 1137,11275,11275,11275, 1137, 1137, + 11275,11275, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 11275, 1137, 1137, 1137, 1137, 1137, 2170,11275,11275,11275, + 11275,11275,11275, 2170, 2170,11275, 2170,11275,11275,11275, + 11275,11275, 2170, 2170, 2173, 2173,11275,11275,11275,11275, + 11275, 2173, 2173, 674,11275,11275,11275,11275,11275,11275, + 674, 674, 674, 674,11275,11275,11275,11275,11275, 674, + 674, 1237, 1237, 1237, 1237,11275,11275,11275,11275,11275, + 11275,11275,11275, 1237, 1237,11275, 1237,11275,11275,11275, + 1237, 1237, 2258, 2258,11275,11275,11275,11275,11275, 2258, + + 2258, 1261, 1261,11275, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1261, 1261, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, + 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1331, 1331,11275,11275,11275,11275,11275, + 1331, 1331, 6798,11275,11275,11275,11275, 6798,11275,11275, + 11275,11275,11275, 6798, 6798,11275, 6798, 1326,11275,11275, + + 11275,11275,11275,11275, 1326, 1326,11275, 1326,11275,11275, + 11275,11275,11275, 1326, 1326, 6853, 6853, 6853, 6853, 6853, + 6853, 6853,11275, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 7837, 7837, 7837, 7837, 7837, 7837, 7837, + 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, + 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7016,11275,11275, + 11275,11275,11275, 7016, 7016,11275, 7016, 724,11275,11275, + + 11275,11275,11275,11275, 724, 724, 724, 724,11275,11275, + 11275,11275,11275, 724, 724, 1692, 1692,11275,11275,11275, + 11275,11275, 1692, 1692, 1708, 1708,11275,11275,11275,11275, + 11275, 1708, 1708, 5044,11275,11275,11275,11275,11275, 5044, + 5044,11275, 5044, 803, 803,11275,11275,11275,11275,11275, + 803, 803, 803, 7224,11275,11275,11275,11275,11275, 7224, + 7224,11275, 7224, 864, 864,11275,11275,11275,11275,11275, + 864, 864, 882,11275,11275, 882,11275,11275,11275,11275, + 11275,11275,11275,11275, 882, 882,11275,11275,11275,11275, + 11275, 882, 882, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, + 1757, 1757, 1757, 1757, 1757, 1757, 1757, 947,11275,11275, + 947,11275,11275,11275,11275,11275,11275,11275,11275, 947, + 947,11275,11275,11275,11275,11275, 947, 947, 959,11275, + 11275, 959,11275,11275,11275,11275,11275,11275,11275,11275, + 959, 959,11275,11275,11275,11275,11275, 959, 959, 965, + 11275,11275, 965,11275,11275,11275,11275,11275,11275,11275, + 11275, 965, 965,11275,11275,11275,11275,11275, 965, 965, + 7259, 7259, 7259, 7259,11275,11275,11275,11275,11275,11275, + 7259,11275,11275, 7259,11275,11275,11275,11275,11275, 7259, + + 7259, 1812, 1812,11275,11275,11275,11275,11275, 1812, 1812, + 1007,11275,11275,11275,11275,11275,11275, 1007, 1007, 1007, + 1007,11275,11275,11275,11275,11275, 1007, 1007, 1808,11275, + 11275,11275,11275,11275,11275, 1808, 1808,11275, 1808,11275, + 11275,11275,11275,11275, 1808, 1808, 4585,11275,11275,11275, + 11275, 4585,11275,11275,11275,11275,11275, 4585, 4585,11275, + 4585, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 1102, + 11275,11275,11275,11275,11275,11275, 1102,11275,11275,11275, + 11275,11275, 1102, 1102,11275, 1102, 1114, 1114,11275,11275, + 11275,11275,11275, 1114, 1114, 1121,11275,11275,11275,11275, + 11275,11275,11275,11275, 1121,11275,11275,11275,11275,11275, + 1121, 1121, 1124, 1124,11275,11275,11275,11275,11275, 1124, + 1124, 8421,11275,11275,11275, 8421, 8421,11275,11275, 8421, + 8421, 8421, 8421, 8421, 8421, 8421, 8421,11275, 8421, 8421, + 8421, 8421, 8421, 1137,11275,11275,11275, 1137, 1137,11275, + 11275, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,11275, + + 1137, 1137, 1137, 1137, 1137, 2173, 2173,11275,11275,11275, + 11275,11275, 2173, 2173, 674,11275,11275,11275,11275,11275, + 11275, 674, 674, 674, 674,11275,11275,11275,11275,11275, + 674, 674, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 2258, 2258,11275,11275, + 11275,11275,11275, 2258, 2258, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1331, 1331,11275,11275,11275,11275,11275, + 1331, 1331, 6798,11275,11275,11275,11275, 6798,11275,11275, + 11275,11275,11275, 6798, 6798,11275, 6798, 6853, 6853, 6853, + 6853, 6853, 6853, 6853,11275, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 1326,11275,11275,11275,11275, + 11275,11275, 1326, 1326,11275, 1326,11275,11275,11275,11275, + + 11275, 1326, 1326, 8590, 8590,11275,11275,11275,11275,11275, + 8590, 8590, 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, + 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, 7837, + 7837, 7837, 7837, 7837, 7837, 7837, 724,11275,11275,11275, + 11275,11275,11275, 724, 724, 724, 724,11275,11275,11275, + 11275,11275, 724, 724, 1692, 1692,11275,11275,11275,11275, + 11275, 1692, 1692, 1708, 1708,11275,11275,11275,11275,11275, + 1708, 1708, 5044,11275,11275,11275,11275,11275, 5044, 5044, + 11275, 5044, 803, 803,11275,11275,11275,11275,11275, 803, + 803, 847,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275, 847,11275, 847,11275,11275,11275, 847, 847, 864, + 11275,11275,11275,11275,11275,11275,11275,11275, 864, 864, + 11275, 864,11275,11275,11275, 864, 864, 882, 882,11275, + 11275,11275,11275,11275, 882, 882, 925,11275,11275,11275, + 11275,11275,11275,11275,11275,11275, 925,11275, 925,11275, + 11275,11275, 925, 925, 947, 947,11275,11275,11275,11275, + 11275, 947, 947, 959, 959,11275,11275,11275,11275,11275, + 959, 959, 965, 965,11275,11275,11275,11275,11275, 965, + 965, 1812, 1812,11275,11275,11275,11275,11275, 1812, 1812, + 1007,11275,11275,11275,11275,11275,11275, 1007, 1007, 1007, + + 1007,11275,11275,11275,11275,11275, 1007, 1007, 4585,11275, + 11275,11275,11275, 4585,11275,11275,11275,11275,11275, 4585, + 4585,11275, 4585, 1808,11275,11275,11275,11275,11275,11275, + 1808, 1808,11275, 1808,11275,11275,11275,11275,11275, 1808, + 1808, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 1102, + 11275,11275, 1102,11275,11275,11275,11275,11275,11275, 1102, + + 11275, 1102,11275,11275,11275, 1102, 1102,11275, 1102, 1121, + 11275,11275,11275,11275,11275,11275,11275,11275, 1121,11275, + 11275,11275,11275,11275, 1121, 1121, 1124, 1124,11275,11275, + 11275,11275,11275, 1124, 1124, 8421,11275,11275,11275, 8421, + 8421,11275,11275, 8421, 8421, 8421, 8421, 8421, 8421, 8421, + 8421,11275, 8421, 8421, 8421, 8421, 8421, 1137,11275,11275, + 11275, 1137, 1137,11275,11275, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137,11275, 1137, 1137, 1137, 1137, 1137, 2173, + 2173,11275,11275,11275,11275,11275, 2173, 2173, 674,11275, + 11275,11275,11275,11275,11275, 674, 674, 674, 674,11275, + + 11275,11275,11275,11275, 674, 674, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 2258, 2258,11275,11275,11275,11275,11275, 2258, 2258, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1331, 1331,11275, + 11275,11275,11275,11275, 1331, 1331, 6798,11275,11275,11275, + + 11275, 6798,11275,11275,11275,11275,11275, 6798, 6798,11275, + 6798, 6853, 6853, 6853, 6853, 6853, 6853, 6853,11275, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 8590, + 8590,11275,11275,11275,11275,11275, 8590, 8590, 9258, 9258, + 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, + 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, + 9258, 9258, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, + + 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, + 9264, 9264, 9264, 9264, 9264, 9264, 9294, 9294,11275,11275, + 11275,11275,11275, 9294, 9294, 724,11275,11275,11275,11275, + 11275,11275, 724, 724, 724, 724,11275,11275,11275,11275, + 11275, 724, 724, 1692, 1692,11275,11275,11275,11275,11275, + 1692, 1692, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, + 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, + 9409, 9409, 9409, 9409, 9409, 9409, 1708, 1708,11275,11275, + 11275,11275,11275, 1708, 1708, 5044,11275,11275,11275,11275, + 11275, 5044, 5044,11275, 5044, 803, 803,11275,11275,11275, + + 11275,11275, 803, 803, 882, 882, 882, 882,11275,11275, + 11275,11275,11275,11275,11275,11275, 882, 882,11275,11275, + 11275,11275,11275, 882, 882, 9429,11275,11275,11275,11275, + 11275, 9429, 9429,11275, 9429, 947, 947,11275,11275,11275, + 11275,11275, 947, 947, 959, 959,11275,11275,11275,11275, + 11275, 959, 959, 965, 965,11275,11275,11275,11275,11275, + 965, 965, 1812, 1812,11275,11275,11275,11275,11275, 1812, + 1812, 1007,11275,11275,11275,11275,11275,11275, 1007, 1007, + 1007, 1007,11275,11275,11275,11275,11275, 1007, 1007, 4585, + 11275,11275,11275,11275, 4585,11275,11275,11275,11275,11275, + + 4585, 4585,11275, 4585, 9536, 9536, 9536, 9536, 9536, 9536, + 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, + 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 1121,11275,11275,11275, + 11275,11275,11275,11275,11275, 1121,11275,11275,11275,11275, + 11275, 1121, 1121, 1124, 1124,11275,11275,11275,11275,11275, + + 1124, 1124, 9639,11275,11275,11275, 9639, 9639,11275,11275, + 9639, 9639, 9639, 9639, 9639, 9639, 9639, 9639,11275, 9639, + 9639, 9639, 9639, 9639, 2173, 2173,11275,11275,11275,11275, + 11275, 2173, 2173, 674,11275,11275,11275,11275,11275,11275, + 674, 674, 674, 674,11275,11275,11275,11275,11275, 674, + 674, 2258, 2258,11275,11275,11275,11275,11275, 2258, 2258, + 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, + 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, + 9685, 9685, 9685, 9685, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1331, 1331,11275,11275,11275,11275,11275, 1331, + 1331, 6798,11275,11275,11275,11275, 6798,11275,11275,11275, + 11275,11275, 6798, 6798,11275, 6798, 6853, 6853, 6853, 6853, + 6853, 6853, 6853,11275, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + + 5792, 5792, 5792, 5792, 9258, 9258, 9258, 9258, 9258, 9258, + 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, + 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9258, 9783, 9783, + 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, + 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, 9783, + 9783, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, + 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, 9264, + 9264, 9264, 9264, 9264, 9264, 9294, 9294,11275,11275,11275, + 11275,11275, 9294, 9294, 724,11275,11275,11275,11275,11275, + 11275, 724, 724, 724, 724,11275,11275,11275,11275,11275, + + 724, 724, 1692, 1692,11275,11275,11275,11275,11275, 1692, + 1692, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, + 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, 9409, + 9409, 9409, 9409, 9409, 9409, 1708, 1708,11275,11275,11275, + 11275,11275, 1708, 1708, 5044,11275,11275,11275,11275,11275, + 5044, 5044,11275, 5044, 803, 803,11275,11275,11275,11275, + 11275, 803, 803, 9429,11275,11275,11275,11275,11275, 9429, + 9429,11275, 9429, 947, 947,11275,11275,11275,11275,11275, + 947, 947, 959, 959,11275,11275,11275,11275,11275, 959, + 959, 965, 965,11275,11275,11275,11275,11275, 965, 965, + + 1812, 1812,11275,11275,11275,11275,11275, 1812, 1812, 1007, + 11275,11275,11275,11275,11275,11275, 1007, 1007, 1007, 1007, + 11275,11275,11275,11275,11275, 1007, 1007, 4585,11275,11275, + 11275,11275, 4585,11275,11275,11275,11275,11275, 4585, 4585, + 11275, 4585, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, + 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, 9536, + 9536, 9536, 9536, 9536, 9536, 9536, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 1121,11275,11275,11275,11275,11275, + 11275,11275,11275, 1121,11275,11275,11275,11275,11275, 1121, + 1121, 9639,11275,11275,11275,11275, 9639,11275,11275, 9639, + 9639, 9639, 9639, 9639, 9639, 9639, 9639,11275, 9639, 9639, + 9639, 9639, 9639, 2173, 2173,11275,11275,11275,11275,11275, + 2173, 2173, 674,11275,11275,11275,11275,11275,11275, 674, + 674, 674, 674,11275,11275,11275,11275,11275, 674, 674, + 2258, 2258,11275,11275,11275,11275,11275, 2258, 2258, 9685, + 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, + + 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, 9685, + 9685, 9685, 9685, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1331, 1331, 1331, 1331,11275,11275,11275,11275,11275, + 11275,11275,11275, 1331, 1331,11275,11275,11275,11275,11275, + 1331, 1331, 1331, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, 9690, + + 9690, 9690, 9690, 9690, 9690, 9690, 9690, 6798,11275,11275, + 11275,11275, 6798,11275,11275,11275,11275,11275, 6798, 6798, + 11275, 6798, 6853, 6853, 6853, 6853, 6853, 6853, 6853,11275, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10158,10158,11275,11275,11275,11275, + + 11275,10158,10158,11275,10158,10161,10161,10161,10161,10161, + 10161,10161,10161,10161,10161,10161,10161,10161,10161,10161, + 10161,10161,10161,10161,10161,10161,10161,10161,10161,10171, + 10171,10171,10171,10171,10171,10171,10171,10171,10171,10171, + 10171,10171,10171,10171,10171,10171,10171,10171,10171,10171, + 10171,10171,10171,10177,11275,11275,11275,11275,11275,10177, + 10177,11275,10177,10200,10200,10200,10200,10200,10200,10200, + 10200,10200,10200,10200,10200,10200,10200,10200,10200,10200, + 10200,10200,10200,10200,10200,10200,10200,10215,10215,10215, + 10215,10215,10215,10215,10215,10215,10215,10215,10215,10215, + + 10215,10215,10215,10215,10215,10215,10215,10215,10215,11275, + 10215, 724,11275,11275,11275,11275,11275,11275, 724, 724, + 724, 724,11275,11275,11275,11275,11275, 724, 724, 1692, + 1692,11275,11275,11275,11275,11275, 1692, 1692,10259,10259, + 10259,10259,10259,10259,10259,10259,10259,10259,10259,10259, + 10259,10259,10259,10259,10259,10259,10259,10259,10259,10259, + 10259,10259, 5044,11275,11275,11275,11275,11275, 5044, 5044, + 11275, 5044, 947, 947,11275,11275,11275,11275,11275, 947, + 947, 959, 959,11275,11275,11275,11275,11275, 959, 959, + 965, 965,11275,11275,11275,11275,11275, 965, 965, 1812, + + 1812, 1812, 1812,11275,11275,11275,11275,11275,11275,11275, + 11275, 1812, 1812,11275,11275,11275,11275,11275, 1812, 1812, + 1812, 1007,11275,11275,11275,11275,11275,11275, 1007, 1007, + 1007, 1007,11275,11275,11275,11275,11275, 1007, 1007, 4585, + 11275,11275,11275,11275, 4585,11275,11275,11275,11275,11275, + 4585, 4585,11275, 4585,10320,10320,10320,10320,10320,10320, + 10320,10320,10320,10320,10320,10320,10320,10320,10320,10320, + 10320,10320,10320,10320,10320,10320,10320,10320, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + + 2047, 2047, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061,10363,10363,10363,10363, + 10363,10363,10363,10363,10363,10363,10363,10363,10363,10363, + 10363,10363,10363,10363,10363,10363,10363,10363,10363,10363, + 1121,11275,11275,11275,11275,11275,11275,11275,11275, 1121, + 11275,11275,11275,11275,11275, 1121, 1121, 2173, 2173, 2173, + 2173,11275,11275,11275,11275,11275,11275,11275,11275, 2173, + 2173,11275,11275,11275,11275,11275, 2173, 2173, 2173, 674, + 11275,11275,11275,11275,11275,11275, 674, 674, 674, 674, + + 11275,11275,11275,11275,11275, 674, 674, 2258, 2258,11275, + 11275,11275,11275,11275, 2258, 2258, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, + 1264, 1264, 1264, 1264,10417,11275,11275,11275,11275,11275, + 10417,10417,11275,10417, 6853, 6853, 6853, 6853, 6853, 6853, + 6853,11275, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853,10458,10458, + + 10458,10458,10458,10458,10458,11275,10458,10458,10458,10458, + 10458,10458,10458,10458,10458,10458,10458,10458,10458,10458, + 10458,10458, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, + 5792, 5792, 5792, 5792, 5792, 5792,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10158,10158,11275,11275,11275,11275,11275,10158,10158,11275, + 10158,10161,10161,10161,10161,10161,10161,10161,10161,10161, + 10161,10161,10161,10161,10161,10161,10161,10161,10161,10161, + + 10161,10161,10161,10161,10161,10171,10171,10171,10171,10171, + 10171,10171,10171,10171,10171,10171,10171,10171,10171,10171, + 10171,10171,10171,10171,10171,10171,10171,10171,10171, 1331, + 1331,11275,11275,11275,11275,11275, 1331, 1331,10177,11275, + 11275,11275,11275,11275,10177,10177,11275,10177, 1326,11275, + 11275,11275,11275,11275, 1326, 1326, 1326,11275, 1326,11275, + 11275,11275,11275,11275, 1326, 1326,10494,11275,11275,11275, + 11275,11275,10494,10494,11275,10494,10200,10200,10200,10200, + 10200,10200,10200,10200,10200,10200,10200,10200,10200,10200, + 10200,10200,10200,10200,10200,10200,10200,10200,10200,10200, + + 10215,10215,10215,10215,10215,10215,10215,10215,10215,10215, + 10215,10215,10215,10215,10215,10215,10215,10215,10215,10215, + 10215,10215,11275,10215, 724,11275,11275,11275,11275,11275, + 11275, 724, 724, 724, 724,11275,11275,11275,11275,11275, + 724, 724,10259,10259,10259,10259,10259,10259,10259,10259, + 10259,10259,10259,10259,10259,10259,10259,10259,10259,10259, + 10259,10259,10259,10259,10259,10259, 5044,11275,11275,11275, + 11275,11275, 5044, 5044,11275, 5044, 965, 965,11275,11275, + 11275,11275,11275, 965, 965, 1007,11275,11275,11275,11275, + 11275,11275, 1007, 1007, 1007, 1007,11275,11275,11275,11275, + + 11275, 1007, 1007, 4585,11275,11275,11275,11275, 4585,11275, + 11275,11275,11275,11275, 4585, 4585,11275, 4585, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, + 5257, 5257,10320,10320,10320,10320,10320,10320,10320,10320, + 10320,10320,10320,10320,10320,10320,10320,10320,10320,10320, + 10320,10320,10320,10320,10320,10320, 1812, 1812,11275,11275, + 11275,11275,11275, 1812, 1812, 1808,11275,11275,11275,11275, + 11275, 1808, 1808, 1808,11275, 1808,11275,11275,11275,11275, + 11275, 1808, 1808, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, + 2061,10363,10363,10363,10363,10363,10363,10363,10363,10363, + 10363,10363,10363,10363,10363,10363,10363,10363,10363,10363, + 10363,10363,10363,10363,10363, 1121,11275,11275,11275,11275, + 11275,11275,11275,11275, 1121,11275,11275,11275,11275,11275, + 1121, 1121, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + + 8426, 8426, 8426, 8426, 8426, 8426, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 10417,11275,11275,11275,11275,11275,10417,10417,11275,10417, + 6798,11275,11275,11275,11275, 6798,11275,11275,11275,11275, + 11275, 6798, 6798,11275, 6798,10678,10678,10678,10678,10678, + 10678,10678,10678,10678,10678,10678,10678,10678,10678,10678, + 10678,10678,10678,10678,10678,10678,10678,10678,10678,10688, + 10688,10688,10688,10688,10688,10688,10688,10688,10688,10688, + 10688,10688,10688,10688,10688,10688,10688,10688,10688,10688, + + 10688,10688,10688, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 11275, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853,10458,10458,10458, + 10458,10458,10458,10458,11275,10458,10458,10458,10458,10458, + 10458,10458,10458,10458,10458,10458,10458,10458,10458,10458, + 10458,10701,10701,10701,10701,10701,10701,10701,11275,10701, + 10701,10701,10701,10701,10701,10701,10701,10701,10701,10701, + 10701,10701,10701,10701,10701,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10720, + + 10720,10720,10720,10720,10720,10720,10720,10720,10720,10720, + 10720,10720,10720,10720,10720,10720,10720,10720,10720,10720, + 10720,10720,10720,10724,10724,10724,10724,10724,10724,10724, + 10724,10724,10724,10724,10724,10724,10724,10724,10724,10724, + 10724,10724,10724,10724,10724,10724,10724,10727,10727,10727, + 10727,10727,10727,10727,10727,10727,10727,10727,10727,10727, + 10727,10727,10727,10727,10727,10727,10727,10727,10727,10727, + 1331, 1331,11275,11275,11275,11275,11275, 1331, 1331,10494, + 11275,11275,11275,11275,11275,10494,10494,11275,10494,10739, + 10739,10739,10739,10739,10739,10739,10739,10739,10739,10739, + + 10739,10739,10739,10739,10739,10739,10739,10739,10739,10739, + 10739,10739,10739,10746,10746,10746,10746,10746,10746,10746, + 10746,10746,10746,10746,10746,10746,10746,10746,10746,10746, + 10746,10746,10746,10746,10746,10746,10746,10753,10753,10753, + 10753,10753,10753,10753,10753,10753,10753,10753,10753,10753, + 10753,10753,10753,10753,10753,10753,10753,10753,10753,10753, + 10753, 724,11275,11275,11275,11275,11275,11275, 724, 724, + 724, 724,11275,11275,11275,11275,11275, 724, 724,10770, + 10770,10770,10770,10770,10770,10770,10770,10770,10770,10770, + 10770,10770,10770,10770,10770,10770,10770,10770,10770,10770, + + 10770,10770,10770,10773,10773,10773,10773,10773,10773,10773, + 10773,10773,10773,10773,10773,10773,10773,10773,10773,10773, + 10773,10773,10773,10773,10773,10773,10773, 965, 965,11275, + 11275,11275,11275,11275, 965, 965, 965, 1007,11275,11275, + 11275,11275,11275,11275, 1007, 1007, 1007, 1007,11275,11275, + 11275,11275,11275, 1007, 1007,10782,10782,11275,10782,10782, + 10782,10782,10782,10782,10782,10782,10782,10782,10782,10782, + 10782,10782,10782,10782,10782,10782,10782,10782,10782, 4585, + 11275,11275,11275,11275, 4585,11275,11275,11275,11275,11275, + 4585, 4585,11275, 4585,10804,10804,10804,10804,10804,10804, + + 10804,10804,10804,10804,10804,10804,10804,10804,10804,10804, + 10804,10804,10804,10804,10804,10804,10804,10804, 1812, 1812, + 11275,11275,11275,11275,11275, 1812, 1812, 1121,11275,11275, + 11275,11275,11275,11275,11275,11275, 1121,11275,11275,11275, + 11275,11275, 1121, 1121, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426,10856,10856, + 10856,10856,10856,10856,10856,10856,10856,10856,10856,10856, + 10856,10856,10856,10856,10856,10856,10856,10856,10856,10856, + 10856, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484,10864,11275,11275,11275,11275, + 11275,10864,10864,11275,10864,10874,10874,10874,10874,10874, + 10874,10874,10874,10874,10874,10874,10874,10874,10874,10874, + 10874,10874,10874,10874,10874,10874,10874,10874,10874,10678, + 10678,10678,10678,10678,10678,10678,10678,10678,10678,10678, + 10678,10678,10678,10678,10678,10678,10678,10678,10678,10678, + 10678,10678,10678,10688,10688,10688,10688,10688,10688,10688, + 10688,10688,10688,10688,10688,10688,10688,10688,10688,10688, + 10688,10688,10688,10688,10688,10688,10688,10887,10887,10887, + + 10887,10887,10887,10887,10887,10887,10887,10887,10887,10887, + 10887,10887,10887,10887,10887,10887,10887,10887,10887,10887, + 10887,10889,10889,10889,10889,10889,10889,10889,10889,10889, + 10889,10889,10889,10889,10889,10889,10889,10889,10889,10889, + 10889,10889,10889,10889,10889,10701,10701,10701,10701,10701, + 10701,10701,11275,10701,10701,10701,10701,10701,10701,10701, + 10701,10701,10701,10701,10701,10701,10701,10701,10701,10458, + 10458,10458,10458,10458,10458,10458,11275,10458,10458,10458, + 10458,10458,10458,10458,10458,10458,10458,10458,10458,10458, + 10458,10458,10458, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + + 11275, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142, 1326,11275,11275,11275,11275,11275, 1326, 1326, 1326, + 11275, 1326,11275,11275,11275,11275,11275, 1326, 1326,10720, + 10720,10720,10720,10720,10720,10720,10720,10720,10720,10720, + 10720,10720,10720,10720,10720,10720,10720,10720,10720,10720, + 10720,10720,10720,10724,10724,10724,10724,10724,10724,10724, + 10724,10724,10724,10724,10724,10724,10724,10724,10724,10724, + + 10724,10724,10724,10724,10724,10724,10724, 1331, 1331,11275, + 11275,11275,11275,11275, 1331, 1331,10920,10920,10920,10920, + 10920,10920,10920,10920,10920,10920,10920,10920,10920,10920, + 10920,10920,10920,10920,10920,10920,10920,10920,10920,10920, + 10739,10739,10739,10739,10739,10739,10739,10739,10739,10739, + 10739,10739,10739,10739,10739,10739,10739,10739,10739,10739, + 10739,10739,10739,10739,10746,10746,10746,10746,10746,10746, + 10746,10746,10746,10746,10746,10746,10746,10746,10746,10746, + 10746,10746,10746,10746,10746,10746,10746,10746,10753,10753, + 10753,10753,10753,10753,10753,10753,10753,10753,10753,10753, + + 10753,10753,10753,10753,10753,10753,10753,10753,10753,10753, + 10753,10753, 724,11275,11275,11275,11275,11275,11275, 724, + 724, 724, 724,11275,11275,11275,11275,11275, 724, 724, + 10770,10770,10770,10770,10770,10770,10770,10770,10770,10770, + 10770,10770,10770,10770,10770,10770,10770,10770,10770,10770, + 10770,10770,10770,10770,10773,10773,10773,10773,10773,10773, + 10773,10773,10773,10773,10773,10773,10773,10773,10773,10773, + 10773,10773,10773,10773,10773,10773,10773,10773, 1007,11275, + 11275,11275,11275,11275,11275, 1007, 1007, 1007, 1007,11275, + 11275,11275,11275,11275, 1007, 1007, 1808,11275,11275,11275, + + 11275,11275, 1808, 1808, 1808,11275, 1808,11275,11275,11275, + 11275,11275, 1808, 1808,10804,10804,10804,10804,10804,10804, + 10804,10804,10804,10804,10804,10804,10804,10804,10804,10804, + 10804,10804,10804,10804,10804,10804,10804,10804, 1812, 1812, + 11275,11275,11275,11275,11275, 1812, 1812, 1121,11275,11275, + 11275,11275,11275,11275,11275,11275, 1121,11275,11275,11275, + 11275,11275, 1121, 1121, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426,10856,10856, + 10856,10856,10856,10856,10856,10856,10856,10856,10856,10856, + + 10856,10856,10856,10856,10856,10856,10856,10856,10856,10856, + 10856, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, 8484, + 8484, 8484, 8484, 8484, 8484,10864,11275,11275,11275,11275, + 11275,10864,10864,11275,10864,10874,10874,10874,10874,10874, + 10874,10874,10874,10874,10874,10874,10874,10874,10874,10874, + 10874,10874,10874,10874,10874,10874,10874,10874,10874,10887, + 10887,10887,10887,10887,10887,10887,10887,10887,10887,10887, + 10887,10887,10887,10887,10887,10887,10887,10887,10887,10887, + 10887,10887,10887,10889,10889,10889,10889,10889,10889,10889, + + 10889,10889,10889,10889,10889,10889,10889,10889,10889,10889, + 10889,10889,10889,10889,10889,10889,10889,10701,10701,10701, + 10701,10701,10701,10701,11275,10701,10701,10701,10701,10701, + 10701,10701,10701,10701,10701,10701,10701,10701,10701,10701, + 10701,10458,10458,10458,10458,10458,10458,10458,11275,10458, + 10458,10458,10458,10458,10458,10458,10458,10458,10458,10458, + 10458,10458,10458,10458,10458, 6853, 6853, 6853, 6853, 6853, + 6853, 6853,11275, 6853, 6853, 6853, 6853, 6853, 6853, 6853, + 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853, 6853,10142, + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + + 10142,10142,10142,10142,10142,10142,10142,10142,10142,10142, + 10142,10142,10142,11035,11035,11035,11035,11035,11035,11035, + 11035,11035,11035,11035,11035,11035,11035,11035,11035,11035, + 11035,11035,11035,11035,11035,11035,11035,11037,11037,11037, + 11037,11037,11037,11037,11037,11037,11037,11037,11037,11037, + 11037,11037,11037,11037,11037,11037,11037,11037,11037,11037, + 11037, 1331,11275,11275,11275,11275,11275,11275,11275,11275, + 1331, 1331,11275,11275,11275,11275,11275, 1331, 1331, 1331, + 10920,10920,10920,10920,10920,10920,10920,10920,10920,10920, + 10920,10920,10920,10920,10920,10920,10920,10920,10920,10920, + + 10920,10920,10920,10920, 724,11275,11275,11275,11275,11275, + 11275, 724, 724, 724, 724,11275,11275,11275,11275,11275, + 724, 724, 1007,11275,11275,11275,11275,11275,11275, 1007, + 1007, 1007, 1007,11275,11275,11275,11275,11275, 1007, 1007, + 1812,11275,11275,11275,11275,11275,11275,11275,11275, 1812, + 1812,11275,11275,11275,11275,11275, 1812, 1812, 1812,11077, + 11077,11275,11275,11275,11275,11275,11077,11077,11275,11077, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, 8426, + 8426, 8426, 8426, 8426, 6798,11275,11275,11275,11275, 6798, + + 11275,11275,11275,11275,11275, 6798, 6798,11275, 6798,11114, + 11114,11114,11114,11114,11114,11114,11114,11114,11114,11114, + 11114,11114,11114,11114,11114,11114,11114,11114,11114,11114, + 11114,11114,11114,11116,11116,11116,11116,11116,11116,11116, + 11116,11116,11116,11116,11116,11116,11116,11116,11116,11116, + 11116,11116,11116,11116,11116,11116,11116,11124,11124,11124, + 11124,11124,11124,11124,11124,11124,11124,11124,11124,11124, + 11124,11124,11124,11124,11124,11124,11124,11124,11124,11124, + 11124,11203,11203,11203,11203,11203,11203,11203,11203,11203, + 11203,11203,11203,11203,11203,11203,11203,11203,11203,11203, + + 11203,11203,11203,11203,11203,11238,11275,11275,11275,11275, + 11275,11238,11238,11275,11238,11265,11265,11265,11265,11265, + 11265,11265,11265,11265,11265,11265,11265,11265,11265,11265, + 11265,11265,11265,11265,11265,11265,11265,11265,11265,11273, + 11273,11273,11273,11273,11273,11273,11273,11273,11273,11273, + 11273,11273,11273,11273,11273,11273,11273,11273,11273,11273, + 11273,11273,11273, 181,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275 + } ; + +static yyconst flex_int16_t yy_chk[45258] = + { 0, + 0, 0, 1, 1, 1, 1, 73, 1, 1, 1, + 1, 1, 1, 19, 19, 20, 20, 91, 1, 3, + 3, 3, 4, 4, 4, 11, 5, 5, 92, 1, + 59, 1, 5, 6, 6, 25, 189, 189, 26, 6, + 35, 7, 7, 7, 7, 35, 36, 7, 903, 7, + 12, 36, 9, 9, 9, 9, 1860, 74, 1, 60, + 9, 73, 1, 8, 8, 8, 8, 91, 93, 8, + 93, 8, 15, 15, 3, 16, 16, 4, 92, 0, + 11, 5, 25, 25, 25, 26, 26, 26, 6, 1, + 1, 1, 1, 2, 2, 2, 2, 7, 2, 2, + + 2, 2, 2, 2, 77, 12, 69, 3, 9, 2, + 4, 11, 74, 10, 10, 10, 10, 93, 59, 8, + 2, 10, 2, 13, 13, 13, 13, 15, 7, 903, + 16, 13, 14, 14, 14, 14, 12, 23, 69, 9, + 14, 302, 70, 78, 17, 17, 17, 60, 24, 2, + 8, 302, 17, 2, 27, 27, 28, 28, 15, 77, + 15, 16, 247, 16, 247, 18, 18, 18, 259, 10, + 17, 259, 17, 18, 70, 214, 214, 29, 29, 13, + 2, 2, 2, 2, 29, 23, 21, 21, 14, 22, + 22, 18, 21, 18, 21, 22, 24, 22, 78, 17, + + 10, 30, 30, 147, 147, 1862, 31, 31, 30, 27, + 13, 28, 21, 31, 21, 22, 23, 22, 23, 14, + 18, 32, 32, 49, 49, 49, 49, 24, 32, 24, + 33, 33, 29, 34, 34, 33, 127, 33, 34, 538, + 34, 21, 51, 51, 22, 45, 97, 45, 45, 51, + 45, 45, 45, 45, 45, 45, 30, 46, 147, 46, + 46, 31, 46, 46, 46, 46, 46, 46, 50, 50, + 50, 50, 52, 52, 219, 219, 32, 98, 1298, 52, + 53, 53, 53, 53, 127, 33, 620, 45, 34, 41, + 41, 41, 41, 229, 229, 97, 538, 51, 620, 46, + + 54, 54, 54, 54, 242, 125, 67, 67, 41, 41, + 41, 41, 41, 41, 107, 108, 41, 41, 41, 242, + 173, 55, 55, 55, 55, 908, 98, 52, 51, 94, + 51, 94, 56, 56, 56, 56, 53, 126, 148, 148, + 308, 63, 63, 63, 63, 41, 42, 42, 42, 42, + 128, 57, 57, 57, 57, 125, 54, 308, 52, 57, + 52, 67, 1298, 107, 108, 42, 42, 42, 42, 42, + 42, 248, 248, 42, 42, 42, 908, 55, 94, 55, + 55, 58, 58, 58, 58, 145, 125, 126, 56, 58, + 56, 56, 67, 148, 67, 146, 530, 63, 128, 173, + + 1874, 173, 42, 43, 43, 43, 43, 57, 174, 43, + 55, 64, 64, 64, 64, 262, 262, 43, 126, 43, + 43, 56, 43, 43, 43, 43, 43, 43, 63, 264, + 264, 43, 795, 145, 795, 68, 68, 58, 57, 61, + 61, 61, 61, 146, 265, 61, 1878, 61, 62, 62, + 62, 62, 123, 123, 62, 284, 62, 123, 284, 43, + 44, 44, 44, 44, 269, 269, 44, 64, 58, 119, + 119, 119, 119, 530, 44, 304, 44, 44, 429, 44, + 44, 44, 44, 44, 44, 429, 304, 174, 44, 174, + 68, 1879, 81, 312, 61, 61, 312, 81, 64, 81, + + 81, 82, 265, 62, 62, 265, 82, 123, 82, 82, + 249, 115, 1882, 115, 317, 317, 44, 47, 47, 47, + 47, 68, 533, 68, 119, 119, 61, 318, 116, 533, + 116, 47, 79, 47, 47, 62, 47, 47, 47, 47, + 47, 47, 417, 79, 417, 79, 79, 81, 79, 79, + 79, 79, 79, 79, 325, 782, 82, 79, 249, 417, + 325, 115, 129, 129, 129, 129, 782, 85, 85, 85, + 85, 1889, 325, 47, 325, 85, 338, 338, 116, 47, + 47, 47, 47, 47, 335, 79, 47, 335, 415, 249, + 47, 249, 115, 47, 115, 1890, 47, 47, 75, 75, + + 75, 75, 86, 86, 86, 86, 318, 415, 318, 116, + 86, 116, 75, 80, 75, 75, 79, 75, 75, 75, + 75, 75, 75, 85, 80, 383, 80, 80, 386, 80, + 80, 80, 80, 80, 80, 392, 392, 1537, 80, 87, + 87, 87, 87, 88, 88, 88, 88, 87, 151, 151, + 383, 88, 405, 386, 75, 405, 85, 1537, 86, 362, + 75, 89, 89, 89, 89, 1896, 80, 401, 401, 89, + 90, 90, 90, 90, 101, 101, 101, 101, 90, 408, + 408, 101, 101, 412, 412, 75, 76, 76, 76, 76, + 362, 86, 362, 427, 427, 87, 151, 80, 502, 88, + + 76, 502, 76, 76, 539, 76, 76, 76, 76, 76, + 76, 102, 102, 102, 102, 124, 124, 89, 102, 102, + 124, 130, 130, 130, 130, 1897, 90, 151, 381, 151, + 101, 103, 103, 103, 103, 454, 454, 381, 103, 103, + 113, 113, 76, 104, 104, 104, 104, 113, 76, 381, + 104, 104, 105, 105, 105, 105, 117, 539, 117, 105, + 105, 106, 106, 106, 106, 114, 114, 102, 106, 106, + 124, 652, 114, 76, 83, 83, 83, 83, 761, 83, + 83, 83, 83, 83, 83, 761, 118, 103, 118, 484, + 83, 120, 120, 120, 120, 113, 652, 152, 152, 104, + + 235, 83, 235, 83, 484, 117, 117, 117, 105, 139, + 139, 139, 139, 121, 121, 121, 121, 106, 470, 470, + 114, 121, 140, 140, 140, 140, 113, 171, 113, 171, + 83, 534, 254, 1898, 83, 118, 118, 118, 475, 475, + 122, 122, 122, 122, 534, 152, 120, 120, 122, 566, + 235, 114, 566, 114, 141, 141, 141, 141, 810, 235, + 810, 83, 83, 83, 83, 84, 84, 84, 84, 121, + 84, 84, 84, 84, 84, 84, 152, 171, 152, 906, + 254, 84, 139, 263, 906, 139, 167, 167, 167, 167, + 486, 486, 84, 471, 84, 140, 122, 471, 140, 814, + + 121, 814, 121, 168, 168, 168, 168, 471, 171, 209, + 171, 254, 209, 254, 843, 209, 209, 843, 141, 860, + 209, 84, 141, 209, 808, 84, 209, 122, 808, 122, + 280, 280, 280, 280, 280, 280, 860, 141, 490, 490, + 263, 263, 1572, 289, 263, 289, 289, 289, 289, 289, + 289, 1572, 84, 84, 84, 84, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 99, + 99, 99, 99, 99, 856, 99, 99, 99, 99, 99, + 99, 179, 179, 179, 179, 856, 99, 157, 157, 157, + 157, 327, 327, 327, 327, 505, 505, 99, 854, 99, + 158, 158, 158, 158, 328, 328, 328, 328, 854, 142, + 142, 142, 142, 329, 329, 329, 329, 519, 519, 159, + + 159, 159, 159, 149, 150, 143, 99, 845, 144, 845, + 99, 149, 150, 578, 578, 143, 143, 179, 144, 144, + 513, 143, 143, 157, 144, 144, 160, 160, 160, 160, + 580, 580, 870, 149, 150, 870, 158, 99, 99, 99, + 99, 100, 100, 100, 100, 100, 1617, 100, 100, 100, + 100, 100, 100, 142, 157, 159, 1617, 142, 100, 143, + 143, 143, 144, 144, 144, 149, 150, 158, 893, 100, + 513, 100, 142, 1262, 149, 150, 606, 606, 149, 150, + 149, 150, 160, 609, 609, 1262, 159, 172, 220, 172, + 149, 150, 143, 893, 513, 144, 348, 348, 100, 613, + + 613, 348, 100, 163, 163, 163, 163, 169, 169, 169, + 169, 623, 623, 160, 1201, 169, 163, 170, 170, 170, + 170, 180, 180, 180, 180, 170, 270, 646, 646, 100, + 100, 100, 100, 109, 163, 890, 624, 172, 890, 109, + 624, 109, 220, 220, 624, 220, 220, 670, 220, 373, + 373, 373, 373, 220, 220, 670, 768, 768, 220, 163, + 220, 220, 220, 169, 775, 775, 163, 1201, 172, 670, + 172, 476, 720, 170, 476, 163, 720, 180, 476, 163, + 720, 163, 348, 270, 270, 785, 785, 270, 476, 476, + 109, 163, 923, 270, 923, 109, 109, 109, 109, 109, + + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 1905, 109, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 131, 131, 131, + 131, 1102, 131, 131, 131, 131, 131, 131, 183, 183, + 183, 183, 1907, 131, 805, 805, 183, 184, 184, 184, + 184, 824, 824, 664, 131, 184, 131, 185, 185, 185, + 185, 374, 374, 374, 374, 185, 164, 164, 164, 164, + 434, 434, 434, 434, 201, 201, 201, 201, 879, 164, + 413, 413, 201, 131, 413, 664, 664, 131, 413, 1606, + 202, 202, 202, 202, 183, 413, 879, 164, 202, 203, + 203, 203, 203, 184, 949, 1606, 949, 203, 218, 218, + + 218, 218, 1102, 185, 131, 131, 131, 131, 132, 132, + 132, 132, 164, 132, 132, 132, 132, 132, 132, 164, + 201, 409, 409, 957, 132, 409, 957, 788, 164, 409, + 788, 409, 164, 1909, 164, 132, 202, 132, 206, 206, + 206, 206, 788, 349, 164, 203, 206, 207, 207, 207, + 207, 246, 1484, 282, 246, 207, 246, 349, 349, 349, + 349, 349, 282, 282, 132, 460, 1912, 933, 132, 282, + 288, 282, 288, 288, 282, 288, 288, 288, 288, 288, + 288, 1484, 934, 686, 292, 218, 292, 292, 292, 292, + 292, 292, 933, 686, 206, 132, 132, 132, 132, 186, + + 1644, 942, 972, 207, 246, 330, 330, 934, 809, 330, + 246, 809, 330, 246, 942, 972, 186, 246, 186, 460, + 330, 186, 460, 809, 1536, 186, 246, 246, 246, 186, + 935, 992, 935, 186, 460, 686, 1913, 293, 186, 293, + 293, 293, 293, 293, 293, 426, 426, 426, 426, 186, + 186, 1130, 426, 1536, 186, 1106, 992, 1130, 186, 441, + 441, 441, 441, 1644, 186, 978, 441, 978, 186, 978, + 186, 1914, 935, 978, 186, 1062, 1062, 186, 195, 978, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 1066, + 1066, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 1106, 195, 195, 1915, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 1917, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 1575, 195, 195, 204, 1575, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 1073, + 1073, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 1109, 204, 204, 1109, 204, 204, + + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 1918, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 1527, 204, 204, 230, 230, + 230, 1527, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 295, 295, 295, 295, 298, 1104, 298, 298, 298, + 298, 298, 298, 347, 347, 347, 347, 347, 347, 296, + 296, 296, 296, 299, 1919, 299, 299, 299, 299, 299, + 299, 1122, 394, 1103, 394, 394, 1560, 297, 297, 297, + 297, 344, 344, 344, 344, 1920, 1002, 344, 1263, 345, + + 345, 345, 345, 1263, 1002, 345, 346, 346, 346, 346, + 1076, 1076, 346, 295, 295, 295, 295, 295, 1002, 1202, + 295, 1063, 1111, 1111, 295, 1063, 1202, 295, 1104, 1063, + 295, 296, 296, 296, 296, 296, 1202, 1104, 296, 394, + 1132, 1132, 296, 1585, 394, 296, 344, 1103, 296, 297, + 297, 297, 297, 297, 345, 1122, 297, 1585, 394, 1638, + 297, 346, 1560, 297, 1103, 1638, 297, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 1564, 350, 350, 350, + 356, 356, 356, 356, 375, 1252, 375, 375, 1564, 375, + 375, 375, 375, 375, 375, 376, 1252, 376, 376, 376, + 376, 376, 376, 384, 1164, 384, 384, 1924, 384, 384, + 384, 384, 384, 384, 385, 1324, 385, 385, 385, 385, + + 385, 385, 402, 1272, 402, 402, 1925, 402, 402, 1164, + 356, 1161, 402, 402, 402, 602, 602, 602, 602, 402, + 880, 880, 880, 880, 1161, 384, 396, 1324, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 1264, 1264, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 1272, 396, 396, 1927, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 1157, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 396, 1176, 396, 396, 419, 419, 419, 419, + 420, 420, 420, 420, 419, 487, 1273, 1105, 420, 421, + 421, 421, 421, 422, 422, 422, 422, 421, 610, 1928, + 610, 422, 1279, 1279, 419, 1176, 1176, 1933, 420, 432, + 432, 432, 432, 432, 432, 1280, 1280, 421, 1282, 1157, + 1284, 422, 449, 449, 449, 449, 450, 450, 450, 450, + 449, 1824, 419, 487, 450, 1273, 420, 479, 466, 466, + 466, 466, 479, 1282, 1105, 421, 466, 1273, 610, 422, + 424, 467, 467, 467, 467, 468, 468, 468, 468, 467, + + 1824, 1023, 1359, 468, 487, 1184, 487, 424, 1105, 424, + 1243, 1023, 424, 1284, 1325, 1184, 424, 1243, 449, 610, + 424, 610, 450, 1280, 424, 472, 472, 472, 472, 424, + 479, 674, 479, 472, 466, 678, 1589, 479, 1826, 1325, + 424, 424, 1534, 1360, 1284, 424, 1534, 467, 1534, 424, + 1589, 468, 479, 1023, 1359, 424, 678, 1184, 1826, 424, + 674, 424, 479, 674, 678, 424, 674, 678, 424, 437, + 678, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 472, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 1360, 437, 437, 1935, 437, + + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 473, + 473, 473, 473, 474, 474, 474, 474, 473, 1571, 512, + 1571, 474, 1571, 1591, 495, 607, 1591, 491, 520, 520, + 520, 520, 1326, 512, 512, 512, 512, 512, 516, 1328, + 516, 516, 676, 516, 516, 881, 881, 881, 881, 516, + + 1936, 527, 527, 527, 527, 516, 1556, 1326, 1938, 527, + 528, 528, 528, 528, 1328, 473, 1329, 1556, 528, 474, + 477, 676, 495, 1676, 676, 491, 1676, 676, 520, 1576, + 607, 495, 607, 676, 491, 607, 1576, 477, 1583, 477, + 607, 1329, 477, 512, 1466, 1940, 477, 607, 607, 491, + 477, 491, 1844, 495, 477, 495, 491, 527, 491, 477, + 586, 586, 586, 586, 1328, 1941, 528, 1592, 1592, 1466, + 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, + 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, + 477, 477, 477, 477, 477, 477, 477, 561, 477, 529, + + 547, 547, 547, 547, 1327, 1844, 529, 561, 542, 1577, + 542, 1583, 1942, 561, 673, 1602, 586, 561, 588, 588, + 588, 588, 561, 529, 561, 529, 1577, 1602, 529, 1327, + 1182, 542, 529, 1663, 675, 679, 529, 542, 542, 1663, + 529, 542, 1686, 673, 542, 529, 673, 542, 542, 673, + 835, 835, 835, 835, 835, 835, 529, 529, 1686, 673, + 1182, 529, 1327, 675, 679, 529, 675, 679, 1182, 675, + 679, 529, 675, 547, 588, 529, 547, 529, 1225, 1225, + 1225, 529, 1182, 1225, 529, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 537, 551, 551, + 551, 551, 621, 621, 621, 621, 680, 1598, 681, 1598, + 621, 622, 622, 622, 622, 625, 625, 625, 625, 622, + + 1943, 1552, 1552, 625, 647, 647, 647, 647, 648, 648, + 648, 648, 647, 681, 666, 680, 648, 681, 680, 1552, + 681, 680, 846, 681, 846, 846, 846, 846, 846, 846, + 666, 666, 666, 666, 666, 666, 1599, 667, 621, 666, + 682, 677, 551, 1619, 696, 1946, 551, 622, 1619, 677, + 1599, 625, 1107, 667, 667, 667, 667, 667, 667, 1621, + 647, 551, 667, 1621, 648, 654, 904, 904, 696, 682, + 677, 904, 682, 696, 1756, 682, 696, 666, 677, 696, + 683, 677, 696, 1796, 677, 718, 718, 718, 718, 1629, + 1629, 666, 1796, 718, 654, 1658, 677, 684, 654, 1074, + + 667, 1107, 654, 1074, 699, 1658, 654, 1074, 683, 683, + 1753, 654, 683, 700, 667, 683, 1107, 1074, 654, 1226, + 1226, 1226, 684, 654, 1226, 1756, 684, 654, 1654, 684, + 690, 654, 684, 699, 1562, 1753, 699, 654, 700, 699, + 724, 718, 700, 654, 1755, 700, 1509, 654, 700, 654, + 659, 690, 904, 690, 690, 690, 1635, 703, 1562, 690, + 700, 1949, 690, 1562, 690, 690, 690, 1635, 690, 724, + 704, 1509, 724, 1450, 1622, 724, 1630, 1450, 703, 659, + 1630, 659, 703, 659, 1901, 712, 703, 659, 1622, 703, + 659, 659, 703, 1950, 659, 713, 659, 1623, 703, 1901, + + 659, 659, 1450, 659, 1654, 1613, 1450, 704, 659, 712, + 659, 1623, 659, 1642, 712, 1642, 659, 712, 1509, 713, + 712, 659, 659, 1805, 713, 1755, 659, 713, 659, 704, + 713, 704, 659, 659, 659, 671, 704, 687, 1952, 704, + 1631, 1631, 704, 704, 1648, 704, 1612, 1612, 1805, 704, + 695, 671, 671, 671, 671, 671, 671, 723, 1648, 1612, + 671, 1649, 1649, 671, 671, 1656, 687, 1613, 671, 1656, + 687, 695, 695, 695, 687, 1674, 1664, 1613, 687, 695, + 1664, 1613, 695, 687, 1757, 695, 723, 1674, 695, 723, + 687, 729, 723, 1857, 671, 687, 671, 1728, 671, 687, + + 1728, 1573, 723, 687, 671, 1573, 1858, 1573, 671, 687, + 1573, 671, 671, 672, 692, 687, 773, 773, 773, 773, + 729, 687, 689, 729, 1870, 706, 729, 1650, 1870, 672, + 672, 672, 672, 672, 672, 692, 1650, 1689, 672, 692, + 1650, 672, 692, 692, 1650, 1857, 692, 1668, 1689, 692, + 672, 689, 692, 692, 706, 689, 1672, 706, 1858, 689, + 706, 1668, 706, 689, 1618, 1757, 706, 1607, 689, 1618, + 1672, 1607, 672, 1607, 672, 689, 672, 1953, 1607, 672, + 689, 1607, 672, 1618, 689, 672, 672, 691, 689, 672, + 672, 691, 691, 691, 689, 691, 693, 1772, 691, 691, + + 689, 691, 1782, 773, 691, 702, 689, 1782, 1772, 694, + 719, 719, 719, 719, 1881, 1958, 1749, 693, 719, 1749, + 693, 693, 1807, 698, 1881, 693, 702, 702, 693, 702, + 702, 693, 693, 694, 702, 701, 694, 702, 694, 694, + 702, 694, 694, 694, 694, 694, 1964, 1807, 1872, 698, + 698, 694, 698, 694, 697, 698, 701, 698, 698, 701, + 701, 1872, 1776, 698, 701, 1776, 719, 701, 730, 725, + 701, 922, 922, 922, 922, 697, 697, 697, 1847, 697, + 697, 697, 701, 697, 705, 707, 697, 1784, 1789, 697, + 1784, 1789, 697, 697, 697, 697, 1970, 730, 725, 697, + + 730, 725, 710, 730, 725, 705, 707, 725, 1866, 705, + 707, 1866, 1798, 705, 707, 1861, 705, 707, 707, 705, + 707, 1670, 705, 705, 1798, 1670, 707, 1670, 728, 1861, + 1798, 710, 707, 708, 710, 1971, 710, 710, 710, 1847, + 710, 710, 895, 895, 895, 895, 895, 895, 726, 728, + 709, 1884, 716, 1884, 708, 708, 708, 728, 708, 708, + 728, 1976, 708, 728, 708, 708, 708, 732, 708, 708, + 1977, 709, 708, 708, 708, 709, 727, 726, 709, 709, + 726, 716, 709, 726, 727, 709, 731, 1808, 709, 726, + 709, 711, 716, 716, 1639, 1639, 732, 733, 1639, 732, + + 1639, 1900, 732, 1980, 1930, 727, 741, 1643, 734, 1643, + 716, 731, 1808, 727, 1643, 731, 727, 1811, 731, 727, + 1930, 731, 1945, 716, 716, 733, 733, 744, 711, 733, + 741, 727, 733, 734, 1687, 741, 716, 734, 741, 1945, + 734, 741, 1811, 734, 741, 1657, 745, 1005, 1683, 711, + 711, 711, 1981, 711, 711, 1825, 744, 711, 1873, 744, + 711, 1885, 744, 711, 711, 1837, 711, 711, 711, 721, + 1837, 745, 1683, 1885, 1900, 745, 1005, 1683, 745, 1005, + 735, 745, 1005, 1926, 1825, 721, 721, 721, 721, 721, + 721, 1007, 1005, 745, 721, 1926, 1687, 721, 721, 1983, + + 738, 735, 721, 735, 735, 735, 1687, 1657, 1006, 735, + 1687, 1657, 735, 1657, 735, 735, 735, 1876, 735, 1910, + 1007, 738, 1910, 1007, 738, 738, 1007, 1986, 721, 738, + 721, 1876, 738, 1006, 1873, 738, 738, 1006, 721, 1987, + 1006, 1012, 721, 1006, 736, 721, 721, 722, 736, 736, + 736, 1988, 736, 737, 1010, 736, 736, 1902, 736, 1863, + 1863, 736, 1012, 722, 722, 722, 722, 722, 722, 1991, + 1012, 1902, 722, 1012, 737, 722, 1012, 1863, 737, 900, + 740, 737, 737, 1010, 722, 737, 1010, 1010, 737, 1010, + 1993, 737, 737, 900, 900, 900, 900, 900, 739, 1759, + + 1759, 740, 740, 740, 1759, 1868, 722, 1868, 722, 740, + 1994, 1868, 740, 722, 1810, 740, 722, 751, 740, 722, + 722, 743, 739, 722, 722, 739, 1921, 739, 739, 1921, + 739, 739, 739, 739, 739, 896, 896, 896, 896, 1810, + 739, 896, 739, 742, 1899, 1960, 751, 743, 743, 751, + 743, 1899, 751, 743, 751, 743, 743, 1667, 751, 1667, + 1904, 743, 757, 1667, 742, 742, 742, 1995, 742, 742, + 742, 746, 742, 1908, 1904, 742, 749, 1667, 742, 1009, + 747, 742, 742, 742, 742, 1759, 757, 1908, 742, 1810, + 896, 757, 746, 1875, 757, 746, 746, 757, 748, 1013, + + 746, 747, 747, 746, 747, 747, 746, 1960, 1009, 747, + 1865, 1009, 747, 749, 1009, 747, 1809, 1875, 746, 748, + 1009, 1865, 1875, 748, 1016, 750, 1997, 748, 1013, 1906, + 748, 1013, 1013, 748, 1013, 749, 1906, 749, 1923, 748, + 752, 1809, 749, 1871, 1871, 749, 750, 758, 749, 749, + 750, 749, 1923, 1016, 750, 749, 1016, 750, 1871, 1016, + 750, 752, 1961, 750, 750, 752, 1867, 1978, 754, 752, + 764, 758, 752, 752, 1809, 752, 758, 1867, 1978, 758, + 1998, 752, 758, 977, 977, 977, 977, 752, 753, 754, + 1883, 764, 764, 754, 764, 764, 754, 754, 1883, 764, + + 754, 755, 764, 754, 1883, 764, 754, 2003, 754, 753, + 753, 753, 1822, 753, 753, 1929, 1822, 753, 1822, 753, + 753, 753, 1929, 753, 753, 1021, 1877, 753, 753, 753, + 755, 1961, 1877, 755, 1877, 755, 755, 755, 1877, 755, + 755, 756, 759, 759, 759, 759, 1947, 760, 763, 2005, + 759, 760, 760, 760, 1021, 760, 1947, 1021, 760, 760, + 1021, 760, 1990, 849, 760, 849, 849, 849, 849, 849, + 849, 1944, 1944, 1018, 763, 763, 1944, 763, 756, 1990, + 763, 1962, 763, 763, 851, 851, 851, 851, 763, 863, + 765, 863, 863, 863, 863, 863, 863, 1962, 759, 756, + + 756, 756, 1018, 756, 756, 1018, 1975, 756, 1018, 1018, + 756, 765, 1975, 756, 756, 765, 756, 756, 756, 765, + 1845, 1984, 765, 1014, 1845, 765, 1845, 1984, 765, 765, + 852, 852, 852, 852, 897, 897, 897, 897, 1972, 1894, + 897, 981, 981, 981, 981, 1972, 851, 851, 851, 851, + 851, 1014, 1014, 851, 2007, 1014, 1894, 851, 1014, 1894, + 851, 1014, 1014, 851, 862, 862, 862, 862, 898, 898, + 898, 898, 1017, 1019, 898, 899, 899, 899, 899, 899, + 899, 901, 901, 901, 901, 1951, 1951, 901, 2009, 897, + 2014, 1951, 852, 852, 852, 852, 852, 2015, 1019, 852, + + 1017, 1017, 1019, 852, 1017, 1019, 852, 1017, 1019, 852, + 902, 902, 902, 902, 2018, 924, 902, 924, 924, 924, + 924, 924, 924, 898, 2022, 1956, 862, 862, 862, 862, + 862, 907, 907, 862, 1957, 2030, 901, 862, 1852, 1956, + 862, 1852, 1852, 862, 983, 983, 983, 983, 1957, 907, + 907, 907, 907, 907, 907, 936, 1852, 936, 936, 936, + 936, 936, 936, 1969, 1969, 902, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 2032, 910, 910, 910, 928, + 928, 928, 928, 973, 1891, 974, 1996, 973, 1891, 974, + 973, 973, 974, 974, 973, 2001, 2001, 973, 1891, 974, + 973, 973, 974, 974, 974, 975, 975, 975, 975, 976, + 976, 976, 976, 975, 2034, 2006, 1903, 976, 979, 979, + + 979, 979, 980, 980, 980, 980, 979, 1880, 1968, 1903, + 980, 1880, 1968, 975, 1880, 1880, 1903, 976, 985, 985, + 985, 985, 989, 989, 989, 989, 979, 1967, 2000, 1996, + 980, 987, 987, 987, 987, 987, 987, 1212, 1212, 1212, + 1212, 975, 2000, 2026, 2036, 976, 928, 944, 1246, 1246, + 1246, 1246, 1967, 1015, 979, 1979, 1008, 2026, 980, 1979, + 2037, 1015, 999, 944, 944, 944, 944, 944, 944, 1020, + 1022, 2006, 944, 2031, 985, 944, 2031, 1008, 999, 999, + 999, 999, 999, 999, 2039, 1008, 1015, 999, 1008, 2040, + 1015, 1008, 2041, 1015, 1008, 1022, 1015, 1020, 1020, 1022, + + 2029, 1020, 1022, 1999, 1020, 1022, 944, 1999, 944, 2038, + 1212, 944, 2029, 1212, 944, 1000, 944, 944, 944, 1922, + 944, 1922, 1011, 944, 944, 999, 944, 1922, 944, 945, + 1011, 1000, 1000, 1000, 1000, 1000, 1000, 1049, 1869, 999, + 1000, 1034, 1869, 2043, 1869, 945, 945, 945, 945, 945, + 945, 1011, 1678, 1869, 945, 1011, 1678, 945, 1678, 1011, + 2044, 1049, 1011, 1678, 1035, 1011, 1049, 1034, 1034, 1049, + 1034, 2038, 1049, 1034, 1034, 1034, 1034, 1011, 1000, 1042, + 2025, 1034, 1762, 1762, 1762, 1762, 2025, 945, 945, 2042, + 945, 945, 1000, 1035, 1911, 1911, 1035, 1035, 1911, 1035, + + 1893, 945, 945, 1959, 945, 945, 945, 1003, 1042, 2047, + 2047, 1042, 1893, 1959, 1042, 2051, 1042, 1042, 1893, 1959, + 1042, 1893, 2053, 1003, 1003, 1003, 1003, 1003, 1003, 1050, + 1036, 1750, 1003, 1027, 1750, 1003, 1003, 1027, 1027, 1027, + 1003, 1027, 1750, 1750, 1027, 1027, 1029, 1027, 1750, 2060, + 1027, 1036, 1750, 1027, 1050, 1036, 2008, 2064, 1050, 1036, + 2008, 1050, 1036, 1048, 1050, 1036, 1003, 1029, 1003, 1762, + 1029, 1029, 2066, 2042, 2075, 1029, 1003, 1036, 1029, 1966, + 1003, 1029, 1029, 1003, 1003, 1004, 2011, 1048, 1048, 2017, + 2011, 1028, 1048, 2017, 2045, 1048, 1039, 2078, 1048, 1048, + + 2011, 1004, 1004, 1004, 1004, 1004, 1004, 1982, 2045, 2088, + 1004, 2091, 1028, 1004, 2027, 1028, 1028, 1039, 1031, 1028, + 1028, 1039, 1004, 1028, 2027, 1039, 1028, 2093, 1039, 1028, + 1028, 1039, 1028, 1239, 1239, 1239, 1239, 1039, 1939, 1031, + 1031, 1031, 2068, 1032, 1004, 1916, 1004, 1031, 1966, 1966, + 1031, 1004, 2068, 1031, 1004, 2096, 1031, 1004, 1004, 2057, + 2057, 1004, 1004, 1026, 1032, 1982, 1032, 1032, 1032, 1886, + 1032, 1886, 1032, 1886, 2050, 1032, 1886, 1886, 1032, 1982, + 2050, 1032, 2114, 1032, 1026, 1026, 1026, 1026, 1026, 1239, + 2023, 1038, 1026, 2118, 2023, 1026, 2023, 1026, 1026, 1026, + + 1939, 1026, 1026, 1026, 1030, 1242, 1242, 1242, 1242, 2028, + 1939, 2028, 1038, 1038, 1939, 1038, 1038, 2061, 2061, 1916, + 1038, 1916, 1916, 1038, 2028, 2119, 1038, 1038, 1030, 2065, + 1037, 1030, 1038, 1030, 1030, 2065, 1030, 1030, 1030, 1030, + 1030, 1030, 2114, 1989, 1030, 1989, 1030, 2120, 1030, 1033, + 1989, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 2123, 1037, + 2124, 1242, 1037, 2114, 1037, 1037, 1992, 1046, 1992, 2012, + 1033, 1033, 1033, 1992, 1033, 1033, 1033, 1037, 1033, 1041, + 2012, 1033, 2125, 2012, 1033, 2012, 2127, 1033, 1033, 1033, + 1033, 2072, 2072, 2129, 1033, 1040, 1046, 2013, 1043, 1046, + + 1041, 1046, 1046, 1046, 1041, 1046, 1046, 1041, 1041, 2013, + 2130, 1041, 1041, 2024, 1041, 1045, 2013, 1041, 1041, 1043, + 1043, 1043, 1052, 1043, 1043, 2132, 1043, 1043, 1892, 1892, + 1043, 1043, 1040, 1043, 1892, 1892, 1045, 2135, 2024, 1043, + 1045, 2149, 1892, 1045, 1045, 1043, 2020, 1045, 2020, 2152, + 1045, 1052, 2020, 1045, 1040, 1045, 1040, 1801, 1801, 1801, + 1801, 1040, 1052, 1052, 1040, 1040, 2020, 1040, 1040, 2133, + 1040, 1040, 1040, 1069, 1040, 1040, 1044, 1069, 1069, 1069, + 1052, 1056, 1056, 1056, 1056, 2024, 1069, 1069, 2154, 1056, + 1069, 1069, 1069, 1052, 1052, 2122, 2157, 1044, 1044, 1044, + + 2159, 1044, 1044, 1954, 2162, 1044, 1052, 1044, 1044, 1044, + 1954, 1044, 1044, 1044, 1954, 1044, 1044, 1044, 1047, 1954, + 2164, 1058, 1058, 1058, 2167, 1058, 1058, 1058, 1060, 1060, + 1060, 1060, 1058, 2168, 2133, 1058, 1060, 1056, 1058, 1058, + 1058, 1058, 1059, 2131, 2059, 1058, 1059, 2169, 2131, 1059, + 1059, 1217, 1217, 1217, 1217, 2126, 1059, 2122, 2126, 1059, + 1059, 1059, 1061, 1061, 1061, 1061, 1064, 1064, 1064, 1064, + 1061, 2173, 2076, 2076, 1064, 2219, 1047, 1047, 1047, 1047, + 1047, 1047, 1985, 1985, 1060, 2076, 1985, 1047, 1985, 1047, + 1047, 1047, 2220, 1047, 1047, 1047, 1067, 1067, 1067, 1067, + + 1068, 1068, 1068, 1068, 1067, 1335, 2059, 2221, 1068, 1420, + 1420, 1420, 1420, 1420, 1420, 1217, 2059, 1963, 1061, 1217, + 2059, 2074, 1064, 1071, 1071, 1071, 1071, 1072, 1072, 1072, + 1072, 1071, 2231, 2117, 1217, 1072, 1075, 1075, 1075, 1075, + 1077, 1077, 1077, 1077, 1075, 2074, 2175, 1974, 1077, 2232, + 2074, 1974, 1067, 1974, 1974, 1420, 1068, 1070, 1070, 1070, + 2176, 1070, 1070, 2233, 1335, 1070, 1335, 1070, 1070, 1070, + 2174, 1070, 1070, 1079, 1070, 1070, 1070, 1070, 1335, 1071, + 1335, 1963, 2117, 1072, 1335, 1078, 1078, 1078, 1078, 2175, + 2234, 1963, 1075, 1078, 1079, 2200, 1077, 1963, 1079, 1079, + + 1079, 1937, 1079, 2174, 2117, 2200, 1079, 2176, 1079, 1081, + 2235, 1079, 1079, 1081, 1081, 1081, 2199, 1083, 1666, 2058, + 2058, 1083, 1081, 1081, 1083, 1083, 1081, 1081, 1081, 2199, + 2201, 1083, 2201, 1931, 1083, 1083, 1083, 1931, 1094, 1931, + 2208, 1078, 1080, 1797, 1931, 1080, 1080, 1931, 1080, 2236, + 2237, 1080, 2208, 1080, 1080, 1080, 1080, 1080, 2238, 1080, + 1080, 1937, 1937, 1080, 1937, 1080, 1092, 1094, 1095, 2203, + 2223, 1094, 1095, 2207, 1937, 1094, 1095, 2207, 1937, 1094, + 1095, 1666, 2203, 1666, 1094, 1095, 2207, 2058, 1666, 2224, + 1666, 1094, 1095, 2224, 2239, 1092, 1094, 1095, 2223, 1092, + + 1094, 1095, 2222, 1092, 1094, 1095, 1797, 1092, 1797, 2222, + 1094, 1095, 1092, 1797, 1336, 1797, 1094, 1095, 2240, 1092, + 1094, 2241, 2073, 2073, 1092, 1092, 1092, 1092, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, + 1092, 1093, 1096, 2227, 1320, 2242, 1096, 2227, 2243, 1096, + 1096, 2021, 2244, 1320, 2021, 2021, 1096, 1320, 1955, 1096, + 1096, 1096, 1955, 1336, 1320, 1336, 1320, 1955, 2113, 2021, + 1093, 1955, 1093, 1320, 1093, 1955, 2245, 1336, 1093, 1336, + 2073, 1093, 1093, 1336, 1320, 1093, 2205, 1093, 2209, 1320, + + 2073, 1093, 1093, 2205, 1093, 2246, 1320, 2205, 2209, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1097, 2210, 1099, 2247, + 1097, 2077, 1099, 2210, 1097, 1099, 1099, 1097, 1097, 2113, + 2248, 1778, 1099, 1097, 1778, 1099, 1099, 1099, 2230, 2113, + 1097, 2249, 1778, 1778, 2250, 1097, 2252, 2115, 1778, 1097, + 1178, 2230, 1778, 1097, 1139, 1139, 1139, 1139, 1097, 1097, + 1179, 1199, 1139, 1185, 2254, 1097, 1178, 1178, 1178, 1178, + 1178, 1178, 2255, 2256, 2257, 1178, 1179, 1179, 1179, 1179, + + 1179, 1179, 2002, 2077, 2259, 1179, 1265, 1265, 1265, 1265, + 1199, 2002, 1185, 2077, 1265, 2002, 1185, 2077, 2019, 2002, + 1185, 1199, 1199, 1785, 1185, 2253, 1785, 2260, 2261, 1185, + 1139, 1166, 2262, 1178, 1785, 1785, 1185, 2115, 2253, 1199, + 1785, 1185, 1187, 1179, 1785, 1185, 1187, 1178, 2115, 1185, + 1187, 2263, 1199, 1199, 1187, 1185, 2264, 1179, 2265, 1187, + 1166, 1185, 1265, 2004, 1166, 1199, 1187, 1185, 1166, 2004, + 2004, 1187, 1166, 2202, 2268, 1187, 2269, 1166, 2270, 1187, + 2266, 2019, 2004, 2019, 1166, 1187, 2202, 2202, 2019, 1166, + 2019, 1187, 1192, 1166, 1192, 1192, 2266, 1166, 1192, 2271, + + 1192, 1192, 1192, 1166, 1192, 2272, 2277, 2278, 1192, 1166, + 1192, 1338, 1192, 1166, 1193, 1166, 1171, 2010, 1193, 1195, + 2279, 1193, 1193, 1195, 2280, 1193, 1195, 1195, 1193, 2285, + 1195, 1193, 1193, 1195, 2290, 2291, 1195, 1195, 1195, 2292, + 1266, 1266, 1266, 1266, 1888, 1171, 1888, 1171, 1266, 1171, + 1888, 2293, 1888, 1171, 2294, 1888, 1171, 1171, 2275, 2275, + 1171, 1628, 1171, 2295, 1628, 2296, 1171, 1171, 1628, 1171, + 1338, 1628, 1338, 1338, 1171, 1628, 1171, 1628, 1171, 2010, + 2206, 2297, 1171, 2010, 1338, 2010, 1338, 1171, 1171, 2206, + 1338, 2206, 1171, 2206, 1171, 2302, 1266, 2206, 1171, 1171, + + 1171, 1188, 2016, 2016, 2016, 1274, 1274, 1274, 1274, 2301, + 2016, 1204, 2303, 1274, 2304, 2306, 2212, 1188, 1188, 1188, + 1188, 1188, 1188, 2305, 2305, 2212, 1188, 2212, 1196, 1188, + 2212, 2275, 1196, 2313, 2301, 1196, 1196, 2310, 1188, 1196, + 1204, 1196, 1196, 1196, 1204, 1196, 1196, 1204, 1204, 2310, + 2308, 1204, 2308, 2315, 1204, 1337, 2326, 1204, 1204, 1188, + 1188, 1274, 1188, 1188, 1188, 1188, 1204, 1188, 2273, 2314, + 2314, 1188, 2229, 1188, 1188, 2328, 1188, 1188, 1188, 1189, + 1276, 1276, 1276, 1276, 2309, 2329, 2309, 2301, 1276, 1419, + 1419, 1419, 1419, 1419, 1419, 1189, 1189, 1189, 1189, 1189, + + 1189, 1203, 2312, 2319, 1189, 1203, 2353, 1189, 1203, 1203, + 2319, 2312, 1203, 1337, 1337, 1203, 1337, 2273, 1203, 1203, + 2337, 1203, 2273, 1277, 1277, 1277, 1277, 2211, 1337, 2211, + 1337, 1277, 2337, 2211, 1337, 2229, 1276, 1189, 1189, 2211, + 1189, 1189, 1189, 2229, 1189, 1189, 2228, 2211, 1189, 1419, + 2228, 1189, 1189, 2360, 1189, 1189, 1189, 1190, 2316, 2228, + 1190, 1190, 2311, 1190, 1190, 1190, 1190, 2316, 1190, 1190, + 1190, 1190, 1190, 2311, 1190, 1190, 2318, 2300, 1190, 1277, + 1190, 1191, 1191, 1191, 2317, 1191, 1191, 1191, 1191, 1191, + 2324, 2323, 1191, 2317, 2307, 1191, 2324, 2307, 1191, 1191, + + 1191, 1191, 2300, 2307, 2323, 1191, 1194, 1194, 1194, 1205, + 1194, 1194, 2318, 1194, 1194, 2330, 1194, 1194, 1194, 2333, + 1194, 1194, 2321, 1194, 1194, 1194, 1194, 1209, 1207, 2357, + 1205, 2321, 2333, 2357, 1205, 1205, 1205, 1205, 1205, 2033, + 2330, 1205, 1205, 2033, 1205, 2033, 2300, 1205, 1205, 1207, + 2033, 2322, 2375, 1207, 1207, 1207, 2325, 1207, 2325, 2331, + 2322, 1207, 1207, 1207, 2393, 2331, 1207, 1208, 1207, 1339, + 1208, 1208, 1340, 2334, 1208, 1208, 2334, 1341, 1208, 2369, + 2335, 1208, 2334, 2225, 1208, 1208, 1209, 2339, 1209, 2335, + 2369, 1209, 2339, 1208, 1209, 2346, 1209, 1209, 1209, 1342, + + 1209, 1790, 1209, 1210, 1790, 2346, 1209, 1210, 1209, 1343, + 1210, 1210, 1790, 1790, 1210, 1210, 2380, 1210, 1790, 2380, + 1210, 1210, 1790, 1210, 1278, 1278, 1278, 1278, 1339, 1210, + 1339, 1340, 1278, 1340, 1344, 2398, 1341, 2336, 1341, 1341, + 2338, 1339, 1339, 1345, 1339, 1340, 2336, 1340, 1339, 2338, + 1341, 1340, 1341, 1346, 2225, 2225, 1341, 2345, 1342, 2225, + 1342, 1342, 2340, 2345, 1347, 1342, 2377, 1342, 1343, 1344, + 1343, 2377, 1342, 2348, 1342, 2342, 2342, 1348, 1342, 2344, + 1278, 1343, 1343, 2350, 1343, 1349, 2348, 2340, 1343, 2350, + 1350, 2344, 2379, 1344, 2379, 1344, 2344, 2356, 1344, 2341, + + 1352, 1345, 1345, 2341, 1345, 2341, 2356, 1344, 2341, 1344, + 2378, 1355, 1346, 1344, 1346, 2371, 1345, 2356, 1345, 1351, + 2378, 1345, 1345, 1347, 1354, 1347, 1346, 2351, 1346, 2351, + 2416, 2351, 1346, 1347, 1346, 1348, 1348, 1347, 1348, 1347, + 2371, 1356, 2355, 1347, 1349, 2358, 1349, 1349, 2355, 1350, + 1348, 1350, 1348, 2358, 1350, 2359, 1348, 2425, 1349, 1352, + 1349, 1352, 1351, 1350, 1349, 1350, 1357, 1358, 2359, 1350, + 1355, 2426, 1355, 1352, 1384, 1352, 2354, 2354, 1351, 1352, + 1351, 2362, 2362, 1354, 1355, 1354, 1355, 2382, 1354, 1385, + 1355, 2427, 1351, 2382, 1351, 2383, 1386, 1354, 1351, 1354, + + 1356, 2383, 1356, 1354, 1387, 1515, 1515, 1515, 1515, 1515, + 1515, 1356, 2349, 1388, 1356, 2361, 1356, 2368, 2368, 2387, + 1356, 1389, 2361, 2349, 2349, 1357, 1358, 1357, 1358, 2387, + 2364, 2381, 1357, 1384, 2381, 1384, 1358, 2364, 1392, 1357, + 1358, 1357, 1358, 1390, 2386, 1357, 1358, 1384, 1385, 1384, + 1385, 1391, 2363, 1384, 1515, 1386, 2386, 1386, 1386, 2381, + 1394, 2363, 1385, 1387, 1385, 1387, 2390, 1385, 1385, 1386, + 1393, 1386, 1388, 2390, 1388, 1386, 2388, 1387, 2332, 1387, + 1389, 1395, 1389, 1387, 2388, 2046, 1388, 2332, 1388, 1948, + 2384, 2384, 1388, 2332, 1389, 2332, 1389, 1392, 2372, 1392, + + 1389, 2372, 1390, 1396, 1390, 1390, 2395, 2372, 2395, 1391, + 1391, 1392, 1391, 1392, 1397, 2389, 1390, 1392, 1390, 1394, + 2389, 1394, 1390, 2402, 1391, 1398, 1391, 2079, 2402, 1393, + 1391, 1393, 1394, 1394, 1393, 1394, 1394, 2397, 1396, 1394, + 1395, 2396, 1395, 1393, 2397, 1393, 1399, 1948, 2046, 1393, + 2046, 1400, 1948, 2396, 1395, 2046, 1395, 2046, 2392, 2428, + 1395, 1401, 1396, 1948, 1396, 1948, 1948, 1396, 2392, 2391, + 1403, 2394, 1397, 1397, 2429, 1397, 1396, 2449, 1396, 2391, + 1402, 2394, 1396, 2391, 1398, 1404, 1398, 1397, 2367, 1397, + 2079, 2413, 2079, 1397, 1398, 2367, 2367, 2079, 1398, 2079, + + 1398, 2413, 1405, 2400, 1398, 1399, 1398, 1399, 1399, 1406, + 1400, 2400, 1400, 1887, 1887, 1887, 1887, 2410, 2410, 1399, + 1401, 1399, 1401, 2421, 1400, 1399, 1400, 2457, 1400, 1403, + 1400, 1403, 1401, 1407, 1401, 2107, 1401, 2439, 1402, 1402, + 1401, 1402, 2439, 1403, 1404, 1403, 1404, 1403, 2421, 1403, + 1408, 1404, 2401, 1402, 2401, 1402, 2431, 1409, 1404, 1402, + 1404, 1405, 2431, 1405, 1404, 1410, 2411, 2411, 1406, 1406, + 1406, 1405, 2385, 1405, 2462, 1405, 1887, 1405, 1406, 2385, + 2385, 1405, 1406, 2412, 1406, 1887, 1411, 2406, 1406, 2406, + 2412, 2418, 1407, 2418, 1407, 1407, 1413, 2463, 2107, 1407, + + 2107, 1407, 1887, 1414, 1407, 2107, 1407, 2107, 1407, 1408, + 2128, 1408, 1407, 2128, 1408, 1409, 1409, 2477, 1409, 1409, + 2478, 2128, 2128, 1408, 1410, 1408, 1410, 2128, 1410, 1408, + 1409, 2128, 1409, 1412, 2399, 1410, 1409, 2453, 1410, 2453, + 1410, 1415, 2399, 2399, 1410, 1411, 1411, 1411, 1416, 1412, + 1412, 1412, 1412, 1412, 1412, 1413, 1417, 1413, 1413, 1411, + 2408, 1411, 1414, 1411, 1414, 1411, 2376, 1418, 2403, 1413, + 2376, 1413, 2403, 2408, 2528, 1413, 1414, 1421, 1414, 2376, + 1422, 2403, 1414, 1506, 1506, 1506, 1506, 1506, 1506, 2415, + 2415, 2489, 1412, 2489, 1412, 1412, 2365, 2365, 2424, 1423, + + 1415, 2365, 1415, 1415, 1424, 2409, 1412, 1416, 1412, 1416, + 2111, 2424, 1412, 2586, 1415, 1417, 1415, 1417, 2409, 2409, + 1415, 1416, 1425, 1416, 1416, 1425, 1418, 1416, 1418, 1417, + 1426, 1417, 2417, 2417, 2572, 1417, 1421, 2430, 1421, 1422, + 1418, 1422, 1418, 1506, 2430, 2204, 1418, 2422, 2422, 1422, + 1421, 2572, 1421, 1422, 1427, 1422, 1421, 1423, 1423, 1422, + 1423, 1428, 2432, 1424, 2445, 1424, 2434, 2434, 2445, 1429, + 2432, 1423, 1423, 2111, 1423, 2111, 1424, 1424, 1423, 1424, + 2111, 2370, 2111, 1424, 1425, 2370, 1425, 2370, 1430, 1426, + 2370, 1426, 2618, 1431, 1803, 1803, 1803, 1803, 1425, 2419, + + 1425, 1426, 1426, 1426, 1425, 1426, 2450, 2204, 2419, 1426, + 1432, 2450, 1427, 1427, 2441, 1427, 2204, 2204, 2687, 1433, + 1428, 2204, 1428, 1428, 2441, 2452, 2452, 1427, 1429, 1427, + 1429, 2414, 2414, 1427, 1428, 2414, 1428, 2414, 1434, 2468, + 1428, 1429, 1429, 1435, 1429, 2734, 2468, 1430, 1429, 1430, + 1803, 1431, 1431, 1436, 1431, 2121, 2121, 2121, 2121, 2121, + 1430, 1430, 2473, 1430, 2433, 2433, 1431, 1430, 1431, 1432, + 2433, 1432, 1431, 2407, 1437, 1438, 2407, 1433, 1433, 1432, + 1433, 1432, 2407, 1432, 2404, 1432, 2435, 2473, 2404, 1432, + 2404, 1433, 1433, 2404, 1433, 2435, 1439, 1434, 1433, 1434, + + 1434, 1435, 1435, 1440, 1435, 1519, 1519, 1519, 1519, 1519, + 1519, 1434, 1436, 1434, 1436, 2464, 1435, 1434, 1435, 1436, + 2437, 2464, 1435, 2464, 1441, 1436, 1436, 2343, 1436, 2437, + 2343, 1436, 1436, 1437, 1438, 1437, 1438, 1443, 2343, 2469, + 2343, 1438, 2735, 1437, 2469, 2343, 2448, 1437, 1438, 1437, + 1438, 1519, 1445, 1437, 1438, 1439, 2448, 1439, 2420, 1439, + 1446, 2454, 1440, 1448, 1440, 1440, 2352, 2420, 2440, 1439, + 2352, 1439, 2736, 2454, 2420, 1439, 1440, 2440, 1440, 2352, + 2352, 1440, 1440, 1441, 1449, 1441, 1441, 2737, 2461, 2465, + 1441, 2455, 1441, 1447, 2465, 2465, 1443, 1441, 1443, 1441, + + 1441, 2461, 2455, 1441, 1442, 1442, 1442, 1442, 1442, 1442, + 1443, 1445, 1443, 1445, 1451, 2447, 1443, 2738, 2739, 1446, + 1446, 1446, 1448, 1445, 1448, 1445, 2458, 1445, 2447, 1452, + 2458, 1445, 2447, 1446, 2740, 1446, 1448, 1453, 1448, 1446, + 2374, 2374, 1448, 1449, 2374, 1449, 2374, 2436, 2741, 2374, + 1442, 2436, 1447, 2436, 1447, 1447, 2436, 1449, 1442, 1449, + 1442, 1444, 2436, 1449, 2532, 1447, 1447, 2532, 1447, 1447, + 2451, 2532, 1447, 1451, 2451, 1451, 1454, 1520, 1520, 1520, + 1520, 1520, 1520, 2451, 1455, 2456, 2742, 1451, 1452, 1451, + 1452, 1452, 2466, 1451, 2456, 1453, 1453, 1457, 1453, 2456, + + 1453, 1452, 1452, 2743, 1452, 2466, 2460, 2744, 1452, 2442, + 1453, 2460, 1453, 2442, 1453, 2442, 1453, 2460, 2442, 1458, + 1444, 1444, 1444, 1520, 1444, 2226, 1444, 1459, 2470, 2745, + 2459, 1444, 1444, 1444, 1444, 1454, 1444, 1454, 1444, 2459, + 1444, 2470, 1444, 1455, 2746, 1455, 1460, 1454, 2747, 1454, + 2467, 1454, 1454, 1461, 1462, 1454, 1457, 1455, 1457, 1455, + 2467, 1457, 2471, 1455, 1455, 1457, 2048, 2048, 2048, 2048, + 1457, 2471, 1457, 2483, 2048, 1463, 1457, 1458, 1458, 2483, + 1458, 2444, 2475, 1464, 2476, 2444, 1459, 2226, 1459, 1459, + 2444, 1458, 1458, 2476, 1458, 2475, 2226, 2226, 1458, 2479, + + 1459, 2226, 1459, 1459, 1465, 1460, 1459, 1460, 2479, 1467, + 2474, 2481, 1461, 1462, 1461, 1462, 2481, 2748, 2749, 1460, + 2493, 1460, 2048, 2474, 2474, 1460, 1461, 1462, 1461, 1462, + 1468, 2493, 1461, 1462, 1463, 1469, 1463, 2472, 2750, 2751, + 1470, 2472, 1464, 2472, 1464, 1464, 2472, 2480, 1463, 1464, + 1463, 2484, 1464, 2752, 1463, 1463, 1464, 2480, 1464, 1471, + 2484, 2490, 1464, 1465, 1472, 1465, 2485, 1467, 1467, 2488, + 1467, 1467, 1474, 1465, 1465, 2485, 2494, 1465, 2488, 1465, + 2523, 1473, 1467, 1465, 1467, 2523, 2490, 2494, 1467, 1468, + 2443, 1468, 1468, 2443, 1469, 2500, 1469, 1469, 1475, 1470, + + 2501, 1470, 2443, 1468, 2495, 1468, 1476, 2443, 1469, 1468, + 1469, 2501, 2753, 1470, 1469, 1470, 2754, 1477, 1471, 1470, + 1471, 1471, 2487, 1472, 2496, 1472, 2496, 2755, 1472, 2495, + 1478, 1474, 1471, 1474, 1471, 2487, 2487, 1472, 1471, 1472, + 1473, 1481, 1473, 1472, 2756, 1474, 2492, 1474, 2492, 1479, + 1474, 1474, 1473, 2492, 1473, 2499, 1473, 1475, 1480, 1475, + 1473, 2499, 2506, 2757, 1475, 1476, 2500, 1476, 1476, 1476, + 1475, 1475, 1476, 1475, 1476, 2503, 1477, 1475, 1477, 1476, + 1482, 1476, 2758, 1483, 2503, 1476, 2498, 2506, 1478, 1478, + 1477, 1478, 1477, 2759, 2497, 1477, 1477, 2498, 2535, 2498, + + 1481, 2535, 1481, 1478, 1481, 1478, 1485, 2497, 1479, 1478, + 1479, 1486, 2497, 1479, 1481, 1479, 1481, 1480, 2761, 1480, + 1481, 1487, 1479, 2502, 1479, 2502, 2502, 1480, 1479, 1480, + 2509, 1480, 1488, 1480, 1480, 2507, 2505, 1480, 2762, 1482, + 2509, 1482, 1483, 1489, 1483, 2505, 2763, 2509, 2507, 2507, + 1482, 1490, 1483, 1482, 2767, 1482, 1483, 2531, 1483, 1482, + 2531, 2518, 1483, 2510, 2511, 1485, 1491, 1485, 2531, 1486, + 1486, 2518, 1486, 2511, 1492, 2536, 2510, 2510, 2536, 1485, + 1487, 1485, 1487, 1486, 1486, 1485, 1486, 2512, 2512, 2768, + 1486, 1488, 1488, 1488, 1487, 2770, 1487, 1487, 1493, 2512, + + 1487, 1488, 1489, 1494, 1489, 1488, 1489, 1488, 2519, 1488, + 1490, 1488, 1490, 1495, 2772, 1489, 1489, 2515, 1489, 2520, + 2519, 2520, 1489, 2773, 1490, 1491, 1490, 1491, 1496, 2515, + 1490, 2515, 1491, 1492, 1490, 1492, 1497, 1498, 2521, 1491, + 2774, 1491, 2486, 2486, 2522, 1491, 2522, 1492, 2775, 1492, + 1492, 2521, 2486, 1492, 2486, 2486, 1493, 1493, 1499, 1493, + 2486, 1494, 1494, 1500, 1494, 1494, 2525, 2776, 2525, 2777, + 2525, 1493, 1495, 1493, 1495, 1495, 1494, 1493, 1494, 1495, + 2539, 1495, 1494, 2539, 1501, 1502, 1495, 1496, 1495, 1496, + 1496, 2540, 1495, 2780, 2540, 1497, 1498, 1497, 1498, 2533, + + 1496, 1496, 2533, 1496, 2781, 2533, 1503, 1496, 2517, 1497, + 1498, 1497, 1498, 2517, 2782, 1497, 1498, 1499, 2783, 1499, + 2517, 2534, 1500, 2534, 1500, 1500, 2534, 1504, 1505, 2543, + 2785, 1499, 2543, 1499, 2590, 1507, 1500, 1499, 1500, 1499, + 2527, 2590, 1500, 1501, 1502, 1501, 1502, 2527, 2527, 2524, + 1508, 2704, 2704, 2524, 1502, 1501, 2704, 1501, 1502, 1501, + 1502, 1501, 2524, 1501, 1502, 1503, 2786, 1503, 2615, 1510, + 2049, 2049, 2049, 2049, 1511, 2615, 2656, 2544, 2049, 1503, + 2544, 1503, 1512, 2656, 1503, 1503, 1504, 1505, 1504, 1505, + 1504, 2722, 1504, 1505, 1507, 1514, 1507, 1504, 2722, 1504, + + 1504, 1505, 1504, 1505, 1507, 1513, 1504, 1505, 1507, 1508, + 1507, 1508, 1508, 2504, 1507, 2787, 1508, 2504, 1508, 2788, + 1516, 2504, 2504, 1508, 2537, 1508, 2049, 2537, 1510, 1508, + 1510, 2760, 1511, 1511, 2537, 1511, 2760, 2542, 1510, 2542, + 2542, 1512, 1510, 1512, 1510, 1517, 1511, 1511, 1510, 1511, + 2631, 2791, 2802, 1511, 1514, 1512, 1514, 1512, 1514, 2552, + 1518, 1512, 2552, 2631, 1513, 2545, 1513, 2806, 1514, 2545, + 1514, 1513, 2545, 2538, 1514, 2808, 2538, 1513, 1513, 1516, + 1513, 1516, 2538, 1513, 1513, 1578, 1578, 1578, 1578, 1578, + 1578, 1610, 2809, 1516, 1610, 1516, 1610, 2553, 1516, 1516, + + 2553, 1610, 1610, 1610, 1517, 2810, 1517, 1517, 1610, 2812, + 1610, 1517, 1610, 1517, 2555, 2792, 2815, 2555, 1517, 1518, + 1517, 1518, 2541, 2555, 1517, 1608, 1608, 1608, 1608, 1608, + 1608, 1578, 1518, 1518, 2556, 1518, 2792, 2556, 2556, 1518, + 1528, 1680, 1680, 1680, 1680, 1680, 1680, 2546, 2547, 2541, + 2546, 2547, 2541, 2798, 2798, 2547, 1528, 1528, 1528, 1528, + 1528, 1528, 2546, 2548, 2558, 1528, 2548, 2558, 1528, 1760, + 1760, 1760, 1760, 2569, 2558, 1760, 2569, 1763, 2548, 1608, + 2423, 1608, 2569, 2423, 2423, 2813, 2423, 1680, 1763, 2423, + 1763, 1763, 2813, 1763, 1763, 1763, 1763, 1763, 1763, 1528, + + 2816, 1528, 1895, 1895, 1895, 1895, 1895, 1895, 2549, 2554, + 2803, 2549, 2554, 1528, 2817, 2554, 1528, 1528, 1529, 2052, + 2052, 2052, 2052, 2549, 1760, 2549, 2561, 2052, 2576, 2561, + 1763, 2576, 2818, 2819, 1529, 1529, 1529, 1529, 1529, 1529, + 2550, 2561, 2578, 1529, 2550, 2578, 1529, 2550, 1895, 1932, + 1932, 1932, 1932, 1932, 1932, 1934, 1760, 2564, 1934, 2579, + 1934, 2564, 2579, 2803, 2564, 1934, 1934, 1934, 2570, 2562, + 2562, 2570, 1934, 2562, 1934, 2052, 1934, 1529, 2570, 1529, + 2035, 2035, 2035, 2035, 2035, 2035, 2789, 2778, 2789, 1965, + 1965, 1529, 2778, 1965, 1529, 1529, 1816, 1965, 2567, 2796, + + 1965, 2567, 1965, 1932, 1965, 1932, 1965, 2573, 1965, 2567, + 2573, 2567, 1816, 1816, 1816, 1816, 1816, 1816, 2820, 2557, + 2573, 1816, 2557, 2557, 1816, 2557, 2035, 2054, 2054, 2054, + 2054, 2055, 2055, 2055, 2055, 2054, 2821, 2822, 2825, 2055, + 2056, 2056, 2056, 2056, 2062, 2062, 2062, 2062, 2056, 2584, + 2560, 2584, 2062, 2560, 2584, 1816, 2560, 1816, 2063, 2063, + 2063, 2063, 2067, 2067, 2067, 2067, 2063, 2560, 2593, 1816, + 2067, 2593, 1816, 1816, 1817, 2593, 2069, 2069, 2069, 2069, + 2796, 2826, 2566, 2054, 2069, 2566, 2571, 2055, 2827, 2571, + 1817, 1817, 1817, 1817, 1817, 1817, 2056, 2566, 2828, 1817, + + 2062, 2571, 1817, 2070, 2070, 2070, 2070, 2071, 2071, 2071, + 2071, 2070, 2829, 2482, 2063, 2071, 2482, 2482, 2067, 2482, + 2170, 2577, 2482, 2577, 2577, 2830, 2267, 2267, 2267, 2267, + 2831, 2832, 2069, 1817, 2267, 1817, 2170, 2170, 2170, 2170, + 2170, 2170, 2833, 2836, 2565, 2170, 2565, 1817, 2171, 2565, + 1817, 1817, 2274, 2274, 2274, 2274, 2565, 2837, 2172, 2070, + 2274, 2838, 2839, 2071, 2171, 2171, 2171, 2171, 2171, 2171, + 2823, 2840, 2823, 2171, 2172, 2172, 2172, 2172, 2172, 2172, + 2366, 2841, 2267, 2172, 2347, 2347, 2347, 2347, 2347, 2347, + 2842, 2373, 2373, 2373, 2373, 2405, 2366, 2366, 2366, 2366, + + 2366, 2366, 2834, 2568, 2834, 2366, 2171, 2568, 2274, 2845, + 2568, 2405, 2405, 2405, 2405, 2405, 2405, 2568, 2446, 2446, + 2405, 2446, 2843, 2491, 2843, 2446, 2491, 2491, 2446, 2491, + 2446, 2575, 2491, 2172, 2197, 2575, 2446, 2513, 2575, 2347, + 2513, 2513, 2846, 2513, 2574, 2574, 2513, 2574, 2847, 2851, + 2197, 2197, 2197, 2197, 2197, 2197, 2373, 2852, 2373, 2197, + 2373, 2580, 2197, 2526, 2580, 2373, 2853, 2854, 2563, 2563, + 2563, 2563, 2563, 2563, 2855, 2856, 2855, 2580, 2373, 2526, + 2526, 2526, 2526, 2526, 2526, 2859, 2581, 2591, 2526, 2581, + 2591, 2582, 2582, 2197, 2582, 2197, 2581, 2197, 2197, 2582, + + 2581, 2591, 2559, 2860, 2861, 2559, 2559, 2197, 2872, 2559, + 2197, 2197, 2198, 2559, 2563, 2583, 2872, 2563, 2583, 2594, + 2559, 2595, 2594, 2601, 2595, 2583, 2601, 2601, 2198, 2198, + 2198, 2198, 2198, 2198, 2594, 2585, 2595, 2198, 2585, 2585, + 2198, 2585, 2588, 2588, 2589, 2588, 2588, 2589, 2588, 2592, + 2873, 2596, 2592, 2589, 2596, 2597, 2597, 2600, 2597, 2596, + 2600, 2598, 2871, 2597, 2598, 2599, 2599, 2598, 2592, 2599, + 2878, 2198, 2871, 2198, 2600, 2198, 2602, 2605, 2602, 2602, + 2605, 2604, 2896, 2198, 2604, 2198, 2605, 2896, 2198, 2198, + 2508, 2865, 2865, 2508, 2508, 2508, 2508, 2508, 2508, 2508, + + 2604, 2607, 2619, 2508, 2607, 2508, 2619, 2508, 2607, 2619, + 2508, 2508, 2508, 2508, 2514, 2514, 2868, 2868, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, 2514, + + 2514, 2514, 2514, 2898, 2514, 2514, 2514, 2529, 2603, 2603, + 2606, 2606, 2603, 2608, 2606, 2609, 2608, 2614, 2609, 2907, + 2614, 2614, 2603, 2529, 2529, 2529, 2529, 2529, 2529, 2876, + 2610, 2609, 2529, 2610, 2608, 2529, 2876, 2611, 2611, 2610, + 2611, 2612, 2612, 2627, 2612, 2972, 2627, 2587, 2587, 2587, + 2587, 2613, 2628, 2616, 2613, 2628, 2616, 2616, 2613, 2616, + 2617, 2630, 2628, 2617, 2630, 2620, 2529, 2617, 2529, 2620, + 2621, 2622, 2620, 2621, 2622, 2867, 2977, 2529, 2621, 2622, + 2529, 2875, 2875, 2529, 2529, 2530, 2624, 2624, 2867, 2626, + 2624, 2623, 2626, 2629, 2623, 2641, 2629, 2626, 2641, 2952, + + 2629, 2530, 2530, 2530, 2530, 2530, 2530, 2623, 2625, 2952, + 2530, 2625, 2587, 2530, 2587, 2587, 2587, 2632, 2625, 2897, + 2632, 2625, 2634, 2625, 2633, 2632, 2634, 2633, 2633, 2634, + 2633, 2897, 2869, 2635, 2587, 2634, 2635, 2636, 2637, 2636, + 2636, 2637, 2635, 2869, 2530, 2985, 2530, 2530, 2638, 2639, + 2530, 2638, 2639, 2637, 2643, 3009, 2640, 2643, 2530, 2640, + 2644, 2530, 2530, 2644, 2639, 2638, 2640, 2642, 3010, 2644, + 2642, 2642, 2645, 2642, 2644, 2645, 2646, 2647, 2879, 2646, + 2647, 2647, 2642, 2647, 2648, 2649, 2879, 2648, 2649, 2649, + 2648, 2650, 2877, 2877, 2650, 2646, 2651, 2651, 2874, 2651, + + 2874, 2648, 2651, 2651, 2650, 2652, 2651, 2653, 2654, 2652, + 2653, 2654, 2652, 2657, 2651, 2655, 2657, 2654, 2655, 2655, + 2658, 2657, 2652, 2658, 3012, 2659, 2653, 2658, 2659, 2660, + 2661, 2659, 2660, 2661, 2662, 2663, 2664, 2662, 2663, 2664, + 2906, 2906, 2665, 2662, 2661, 2665, 2665, 2666, 2663, 2660, + 2667, 2666, 2668, 2667, 2666, 2668, 2883, 2665, 3045, 2667, + 2669, 2668, 2670, 2669, 2671, 2670, 2670, 2883, 2671, 2672, + 2672, 2671, 3046, 2672, 2880, 2669, 2673, 2669, 2673, 2673, + 2674, 2675, 2880, 2674, 2676, 2675, 2677, 2676, 2675, 2677, + 2677, 2678, 2677, 2679, 2674, 2678, 2680, 2679, 2678, 2680, + + 2679, 2681, 2682, 2683, 2681, 2682, 2683, 2683, 2684, 3050, + 2685, 2684, 2684, 2685, 2684, 2686, 2688, 2688, 2686, 2688, + 2689, 2682, 2688, 2700, 2689, 2685, 2688, 2689, 2690, 2688, + 2691, 2690, 2692, 2691, 2688, 2692, 2692, 2693, 2692, 2696, + 2693, 2691, 2696, 2694, 2693, 2694, 2887, 2695, 2694, 2695, + 2696, 2693, 2695, 2697, 2887, 2698, 2882, 2697, 2695, 2698, + 2697, 2699, 2698, 2884, 2699, 2702, 2698, 2701, 2702, 2884, + 2701, 2697, 2702, 2885, 2703, 2702, 2699, 2703, 2705, 2706, + 2885, 2705, 3051, 2706, 2886, 2700, 2706, 2701, 2700, 2707, + 2886, 2882, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2708, + + 2708, 2709, 2707, 2708, 2710, 2709, 2707, 2710, 2709, 2707, + 2707, 2707, 2707, 2917, 2917, 2709, 2708, 2711, 2711, 2718, + 2711, 2712, 2718, 2711, 2712, 2712, 2718, 2712, 2713, 2713, + 2942, 2942, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, + 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2888, 2713, 2713, + 2713, 2714, 2715, 2888, 2714, 2715, 2715, 2714, 2716, 2764, + 2717, 2716, 2764, 2717, 3062, 2714, 2717, 2719, 2715, 2720, + 2784, 2719, 2720, 2784, 2719, 2721, 2720, 2716, 2721, 2721, + 2723, 2724, 2724, 2723, 2724, 2866, 3119, 2723, 2866, 2724, + 2725, 2723, 2726, 2725, 2725, 2726, 2727, 2857, 2726, 2727, + 2728, 2728, 2728, 2728, 2729, 2730, 2727, 2729, 2730, 2726, + 2800, 2729, 2731, 2730, 2733, 2731, 2732, 2733, 2731, 2732, + 2732, 2733, 2857, 2889, 2892, 2925, 2892, 2925, 2733, 2731, + + 2893, 2732, 2779, 2779, 2779, 2779, 2794, 2794, 2794, 2794, + 2795, 2795, 2794, 2797, 2849, 2795, 2899, 2849, 2797, 2799, + 2799, 2799, 2799, 2899, 2858, 2799, 2814, 2849, 2928, 2814, + 2814, 2800, 2928, 2881, 2890, 2728, 2857, 2728, 2728, 2728, + 2804, 2814, 2804, 2804, 2804, 2804, 2804, 2804, 2805, 2858, + 2805, 2805, 2805, 2805, 2805, 2805, 3131, 2728, 2881, 2890, + 2891, 2800, 2894, 2889, 2779, 2779, 2779, 2779, 2779, 2864, + 2893, 2779, 2864, 2905, 2799, 2779, 2895, 2864, 2779, 3176, + 2901, 2779, 2903, 2893, 2895, 2891, 2900, 2894, 2901, 2903, + 2901, 2900, 2909, 2794, 2954, 2954, 2795, 2902, 2905, 2797, + + 3235, 2902, 2858, 2902, 2904, 2902, 2799, 2870, 2870, 2870, + 2870, 2904, 2911, 2891, 2910, 2914, 2921, 2909, 2914, 2911, + 2805, 2850, 2919, 2910, 2850, 2850, 2850, 2850, 2850, 2850, + 2850, 2912, 2916, 2919, 2850, 2913, 3238, 2922, 2850, 2912, + 2916, 2850, 2850, 2850, 2850, 2862, 2912, 2913, 2912, 2915, + 2923, 2923, 2915, 2932, 2923, 2932, 3239, 2915, 2930, 2918, + 2939, 2862, 2862, 2862, 2862, 2862, 2862, 2918, 2926, 2870, + 2862, 2920, 2918, 2862, 2870, 2935, 2926, 2926, 2929, 2870, + 2870, 2920, 2935, 2930, 2947, 2870, 2921, 2920, 2920, 2924, + 2929, 2947, 2929, 2924, 2936, 2924, 2937, 2924, 2927, 2927, + + 2927, 2927, 2938, 2936, 2862, 2937, 2862, 2922, 2931, 2922, + 2944, 2938, 2931, 2941, 2931, 3243, 2931, 2933, 2862, 2950, + 2933, 2862, 2862, 2863, 2943, 2941, 2946, 2948, 2933, 2933, + 2939, 2951, 2939, 2951, 2948, 2933, 2946, 2966, 2946, 2863, + 2863, 2863, 2863, 2863, 2863, 2956, 2997, 2956, 2863, 2959, + 2997, 2863, 2940, 2940, 2940, 2940, 2940, 2940, 2945, 2955, + 2949, 2943, 2945, 2949, 2945, 2949, 2945, 2943, 2958, 2953, + 2955, 2927, 2944, 2953, 2960, 2967, 2958, 2973, 2968, 2976, + 2944, 2953, 2863, 2953, 2863, 2927, 2963, 2967, 2958, 2950, + 2964, 2963, 2957, 2863, 2943, 2978, 2863, 2964, 2957, 2863, + + 2863, 2934, 2934, 2934, 2934, 2957, 2940, 2966, 2943, 3022, + 2969, 2959, 2970, 3022, 2959, 2959, 2969, 2959, 2970, 2959, + 2961, 2961, 2961, 2961, 2962, 2962, 2962, 2962, 2971, 2974, + 2975, 2980, 2976, 2981, 2988, 2971, 2974, 2990, 2975, 2960, + 2968, 2981, 2983, 2983, 2960, 3249, 2960, 2973, 2968, 2976, + 2979, 2976, 2962, 2986, 2979, 2986, 2979, 2987, 2979, 2995, + 2995, 2979, 2990, 2934, 2934, 2978, 2998, 2987, 2934, 2982, + 2982, 2982, 2982, 2934, 2934, 2984, 2934, 2999, 2999, 2934, + 2934, 2989, 2993, 2934, 2934, 2989, 2993, 2989, 2993, 2989, + 2993, 2984, 2984, 2984, 2984, 2984, 2984, 3001, 2993, 2991, + + 2984, 2980, 2991, 2996, 2988, 2996, 3000, 2991, 3011, 2961, + 3003, 3014, 3000, 2962, 2991, 2992, 2992, 2992, 2992, 2994, + 2994, 3003, 3002, 2994, 3006, 2994, 3007, 2994, 3002, 3004, + 3004, 3006, 3005, 3007, 3008, 3005, 2998, 3013, 3017, 3015, + 3019, 3018, 2982, 3015, 2982, 3015, 3008, 3015, 2982, 3019, + 3034, 3016, 3018, 3016, 3054, 3001, 2982, 3016, 3026, 3001, + 3005, 3011, 3013, 3017, 3020, 3021, 3023, 3001, 3250, 3026, + 3011, 3021, 3023, 3020, 3024, 3024, 3024, 3024, 3011, 3054, + 2992, 3014, 2992, 3025, 2992, 3027, 3027, 3028, 2992, 3029, + 3029, 3030, 3025, 3032, 3032, 3031, 3028, 3025, 3033, 3035, + + 3251, 3028, 2992, 3031, 3030, 3033, 3035, 3036, 3036, 3037, + 3038, 3039, 3040, 3037, 3038, 3039, 3048, 3039, 3042, 3039, + 3034, 3042, 3038, 3041, 3041, 3048, 3042, 3043, 3040, 3040, + 3040, 3040, 3040, 3040, 3044, 3047, 3052, 3040, 3052, 3043, + 3055, 3055, 3057, 3047, 3053, 3059, 3044, 3024, 3049, 3024, + 3049, 3053, 3056, 3049, 3058, 3049, 3061, 3060, 3064, 3067, + 3056, 3024, 3058, 3072, 3077, 3064, 3066, 3072, 3068, 3060, + 3058, 3060, 3063, 3065, 3066, 3063, 3063, 3066, 3063, 3068, + 3063, 3061, 3070, 3073, 3069, 3065, 3065, 3069, 3070, 3071, + 3073, 3074, 3076, 3069, 3075, 3057, 3078, 3081, 3059, 3076, + + 3078, 3071, 3078, 3075, 3078, 3079, 3080, 3079, 3080, 3082, + 3078, 3085, 3057, 3083, 3086, 3059, 3074, 3059, 3087, 3057, + 3084, 3083, 3081, 3089, 3084, 3088, 3084, 3095, 3084, 3067, + 3067, 3088, 3090, 3092, 3077, 3084, 3085, 3091, 3091, 3086, + 3090, 3092, 3093, 3091, 3094, 3099, 3096, 3100, 3101, 3094, + 3093, 3094, 3102, 3103, 3094, 3097, 3093, 3096, 3105, 3097, + 3104, 3097, 3082, 3097, 3107, 3098, 3106, 3104, 3098, 3105, + 3105, 3106, 3108, 3109, 3111, 3082, 3098, 3102, 3103, 3082, + 3095, 3142, 3098, 3112, 3112, 3082, 3115, 3115, 3087, 3107, + 3142, 3110, 3110, 3089, 3110, 3114, 3113, 3095, 3110, 3111, + + 3100, 3110, 3110, 3120, 3117, 3121, 3114, 3099, 3113, 3110, + 3116, 3099, 3117, 3113, 3116, 3099, 3123, 3100, 3101, 3118, + 3101, 3122, 3122, 3118, 3124, 3125, 3127, 3123, 3120, 3138, + 3121, 3118, 3127, 3125, 3126, 3130, 3124, 3128, 3128, 3125, + 3129, 3126, 3108, 3109, 3132, 3133, 3134, 3130, 3129, 3132, + 3136, 3133, 3135, 3139, 3134, 3137, 3120, 3140, 3137, 3141, + 3135, 3146, 3136, 3147, 3135, 3146, 3141, 3143, 3143, 3120, + 3150, 3135, 3145, 3120, 3148, 3120, 3144, 3144, 3139, 3150, + 3160, 3145, 3140, 3149, 3145, 3149, 3148, 3151, 3145, 3152, + 3145, 3154, 3153, 3151, 3156, 3152, 3155, 3149, 3153, 3138, + + 3155, 3157, 3162, 3154, 3158, 3159, 3156, 3159, 3158, 3157, + 3158, 3161, 3158, 3163, 3164, 3165, 3161, 3166, 3168, 3171, + 3167, 3177, 3178, 3165, 3181, 3163, 3164, 3162, 3167, 3168, + 3169, 3166, 3170, 3147, 3169, 3170, 3170, 3172, 3170, 3173, + 3170, 3174, 3174, 3175, 3191, 3172, 3147, 3173, 3179, 3181, + 3160, 3174, 3174, 3192, 3174, 3175, 3179, 3180, 3182, 3174, + 3180, 3182, 3182, 3187, 3182, 3185, 3182, 3183, 3183, 3184, + 3184, 3186, 3195, 3196, 3183, 3185, 3185, 3193, 3186, 3184, + 3188, 3189, 3190, 3177, 3189, 3198, 3193, 3178, 3187, 3171, + 3188, 3177, 3178, 3194, 3190, 3188, 3171, 3191, 3199, 3201, + + 3190, 3197, 3200, 3204, 3194, 3194, 3192, 3199, 3197, 3206, + 3200, 3201, 3203, 3205, 3191, 3192, 3202, 3202, 3207, 3202, + 3203, 3205, 3209, 3192, 3210, 3211, 3252, 3213, 3269, 3192, + 3207, 3209, 3213, 3211, 3206, 3217, 3210, 3195, 3210, 3209, + 3212, 3212, 3195, 3196, 3214, 3259, 3217, 3220, 3259, 3217, + 3270, 3212, 3214, 3215, 3214, 3198, 3215, 3215, 3220, 3215, + 3218, 3215, 3198, 3221, 3218, 3204, 3225, 3225, 3233, 3204, + 3221, 3271, 3218, 3204, 3208, 3224, 3233, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3227, 3227, 3224, 3208, 3208, 3226, + 3273, 3208, 3274, 3224, 3208, 3208, 3208, 3208, 3216, 3216, + + 3275, 3226, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3216, + 3216, 3216, 3216, 3216, 3216, 3216, 3216, 3219, 3216, 3216, + 3216, 3222, 3222, 3222, 3222, 3219, 3223, 3234, 3219, 3228, + + 3219, 3219, 3219, 3228, 3229, 3230, 3230, 3231, 3229, 3230, + 3232, 3236, 3232, 3241, 3253, 3263, 3229, 3237, 3232, 3241, + 3253, 3263, 3234, 3231, 3231, 3231, 3231, 3231, 3231, 3237, + 3240, 3237, 3231, 3240, 3245, 3245, 3236, 3242, 3242, 3242, + 3242, 3255, 3255, 3256, 3256, 3242, 3265, 3276, 3266, 3240, + 3244, 3244, 3244, 3244, 3246, 3267, 3262, 3246, 3244, 3262, + 3277, 3247, 3246, 3278, 3222, 3247, 3223, 3279, 3247, 3247, + 3264, 3280, 3248, 3248, 3248, 3248, 3264, 3268, 3222, 3247, + 3248, 3254, 3254, 3254, 3254, 3272, 3281, 3257, 3281, 3254, + 3257, 3257, 3283, 3242, 3257, 3257, 3284, 3286, 3257, 3258, + + 3258, 3258, 3258, 3265, 3266, 3257, 3244, 3245, 3260, 3267, + 3285, 3260, 3287, 3245, 3255, 3285, 3260, 3261, 3288, 3291, + 3255, 3261, 3293, 3256, 3261, 3261, 3268, 3265, 3248, 3266, + 3304, 3298, 3307, 3292, 3268, 3261, 3267, 3254, 3272, 3296, + 3322, 3296, 3298, 3296, 3272, 3300, 3297, 3297, 3297, 3297, + 3299, 3272, 3291, 3272, 3299, 3272, 3289, 3272, 3301, 3303, + 3293, 3300, 3313, 3324, 3258, 3301, 3258, 3258, 3258, 3302, + 3303, 3290, 3289, 3289, 3289, 3289, 3289, 3289, 3292, 3288, + 3325, 3289, 3305, 3306, 3302, 3309, 3258, 3290, 3290, 3290, + 3290, 3290, 3290, 3305, 3310, 3308, 3290, 3312, 3308, 3305, + + 3309, 3306, 3306, 3308, 3313, 3314, 3315, 3316, 3317, 3310, + 3319, 3297, 3312, 3297, 3318, 3297, 3321, 3326, 3314, 3318, + 3320, 3317, 3327, 3321, 3321, 3289, 3297, 3328, 3329, 3330, + 3331, 3315, 3316, 3297, 3320, 3319, 3332, 3333, 3334, 3320, + 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3337, 3342, 3290, + 3294, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, + 3352, 3353, 3354, 3355, 3357, 3358, 3294, 3294, 3294, 3294, + 3294, 3294, 3359, 3361, 3363, 3294, 3355, 3353, 3294, 3362, + 3362, 3365, 3366, 3375, 3377, 3378, 3379, 3380, 3381, 3376, + 3383, 3382, 3384, 3386, 3388, 3381, 3382, 3387, 3385, 3383, + + 3385, 3391, 3390, 3387, 3395, 3393, 3389, 3391, 3375, 3294, + 3382, 3294, 3392, 3294, 3376, 3393, 3294, 3390, 3392, 3394, + 3393, 3396, 3361, 3294, 3394, 3397, 3294, 3294, 3295, 3398, + 3399, 3399, 3415, 3400, 3398, 3397, 3420, 3401, 3361, 3400, + 3397, 3415, 3362, 3401, 3295, 3295, 3295, 3295, 3295, 3295, + 3389, 3376, 3404, 3295, 3402, 3403, 3295, 3418, 3404, 3375, + 3407, 3405, 3402, 3405, 3407, 3405, 3408, 3365, 3406, 3406, + 3403, 3388, 3418, 3402, 3412, 3410, 3426, 3408, 3409, 3407, + 3410, 3412, 3409, 3416, 3409, 3427, 3412, 3295, 3416, 3295, + 3427, 3295, 3410, 3409, 3410, 3413, 3411, 3414, 3429, 3435, + + 3411, 3295, 3411, 3413, 3295, 3295, 3422, 3433, 3437, 3417, + 3413, 3411, 3433, 3414, 3414, 3414, 3414, 3414, 3414, 3417, + 3436, 3422, 3414, 3436, 3417, 3419, 3419, 3419, 3419, 3421, + 3421, 3421, 3421, 3423, 3428, 3423, 3430, 3440, 3430, 3440, + 3424, 3428, 3434, 3434, 3419, 3419, 3419, 3419, 3419, 3419, + 3424, 3438, 3438, 3438, 3438, 3424, 3425, 3425, 3425, 3425, + 3425, 3425, 3431, 3447, 3432, 3444, 3444, 3442, 3432, 3431, + 3432, 3439, 3439, 3439, 3439, 3441, 3443, 3449, 3452, 3432, + 3443, 3441, 3445, 3443, 3421, 3419, 3446, 3451, 3445, 3443, + 3446, 3455, 3446, 3448, 3443, 3454, 3436, 3452, 3448, 3439, + + 3436, 3446, 3451, 3453, 3455, 3419, 3453, 3457, 3458, 3421, + 3454, 3459, 3470, 3484, 3456, 3425, 3421, 3425, 3442, 3442, + 3442, 3453, 3456, 3442, 3470, 3450, 3442, 3442, 3461, 3450, + 3449, 3450, 3450, 3456, 3442, 3463, 3461, 3450, 3438, 3462, + 3488, 3460, 3464, 3442, 3460, 3462, 3467, 3465, 3460, 3449, + 3463, 3465, 3465, 3469, 3449, 3460, 3460, 3464, 3439, 3466, + 3471, 3467, 3468, 3473, 3466, 3485, 3468, 3472, 3472, 3474, + 3469, 3473, 3475, 3476, 3474, 3471, 3485, 3475, 3477, 3477, + 3476, 3478, 3478, 3479, 3480, 3458, 3482, 3482, 3479, 3480, + 3479, 3481, 3486, 3481, 3477, 3479, 3483, 3483, 3487, 3493, + + 3494, 3495, 3496, 3483, 3495, 3497, 3498, 3483, 3498, 3495, + 3497, 3486, 3499, 3502, 3493, 3494, 3520, 3487, 3500, 3501, + 3496, 3504, 3500, 3499, 3500, 3503, 3501, 3503, 3505, 3503, + 3506, 3508, 3505, 3500, 3505, 3511, 3506, 3501, 3504, 3507, + 3504, 3509, 3508, 3505, 3507, 3510, 3509, 3512, 3513, 3511, + 3508, 3510, 3514, 3515, 3516, 3513, 3517, 3515, 3512, 3518, + 3513, 3519, 3517, 3522, 3521, 3525, 3524, 3514, 3521, 3523, + 3516, 3522, 3518, 3523, 3528, 3523, 3526, 3531, 3530, 3525, + 3519, 3527, 3526, 3521, 3523, 3524, 3524, 3527, 3529, 3532, + 3533, 3535, 3534, 3526, 3530, 3536, 3529, 3537, 3544, 3532, + + 3540, 3533, 3538, 3540, 3532, 3534, 3538, 3535, 3538, 3539, + 3536, 3542, 3537, 3539, 3541, 3543, 3547, 3538, 3542, 3548, + 3541, 3543, 3551, 3549, 3550, 3552, 3548, 3549, 3551, 3558, + 3553, 3555, 3554, 3551, 3547, 3559, 3528, 3554, 3556, 3563, + 3557, 3528, 3552, 3550, 3553, 3560, 3555, 3557, 3562, 3553, + 3563, 3566, 3556, 3560, 3559, 3561, 3567, 3556, 3561, 3561, + 3564, 3561, 3564, 3562, 3568, 3565, 3566, 3569, 3570, 3565, + 3561, 3565, 3571, 3572, 3571, 3573, 3580, 3564, 3600, 3574, + 3565, 3565, 3580, 3570, 3567, 3567, 3574, 3580, 3619, 3568, + 3567, 3567, 3572, 3576, 3581, 3567, 3567, 3567, 3581, 3576, + + 3567, 3567, 3567, 3575, 3588, 3567, 3575, 3575, 3591, 3575, + 3577, 3578, 3576, 3576, 3583, 3578, 3591, 3577, 3595, 3588, + 3575, 3575, 3575, 3575, 3577, 3582, 3578, 3578, 3579, 3577, + 3584, 3579, 3579, 3583, 3584, 3586, 3589, 3595, 3582, 3597, + 3585, 3582, 3585, 3582, 3569, 3586, 3585, 3601, 3585, 3584, + 3586, 3589, 3589, 3585, 3590, 3587, 3593, 3585, 3585, 3587, + 3590, 3587, 3592, 3594, 3597, 3602, 3601, 3592, 3594, 3592, + 3593, 3603, 3604, 3605, 3610, 3593, 3603, 3605, 3606, 3605, + 3602, 3607, 3608, 3606, 3609, 3611, 3608, 3604, 3605, 3610, + 3613, 3615, 3616, 3614, 3617, 3607, 3616, 3609, 3613, 3614, + + 3607, 3608, 3622, 3623, 3624, 3625, 3615, 3622, 3623, 3624, + 3625, 3617, 3622, 3626, 3628, 3629, 3647, 3630, 3626, 3629, + 3629, 3624, 3630, 3631, 3633, 3822, 3626, 3632, 3631, 3633, + 3630, 3632, 3632, 3840, 3639, 3635, 3631, 3639, 3633, 3628, + 3635, 3632, 3634, 3849, 3628, 3637, 3634, 3634, 3636, 3635, + 3637, 3850, 3638, 3636, 3851, 3640, 3634, 3638, 3637, 3640, + 3640, 3611, 3611, 3612, 3612, 3638, 3636, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, + 3612, 3612, 3612, 3612, 3612, 3612, 3618, 3627, 3641, 3642, + 3643, 3853, 3644, 3641, 3642, 3643, 3644, 3644, 3658, 3857, + 3645, 3641, 3658, 3658, 3642, 3645, 3642, 3646, 3645, 3858, + 3643, 3646, 3646, 3860, 3648, 3646, 3649, 3646, 3648, 3648, + 3652, 3649, 3648, 3649, 3648, 3652, 3646, 3650, 3651, 3861, + + 3649, 3650, 3650, 3651, 3652, 3662, 3862, 3653, 3651, 3650, + 3662, 3653, 3653, 3750, 3750, 3627, 3863, 3656, 3618, 3654, + 3627, 3653, 3656, 3654, 3654, 3655, 3655, 3655, 3655, 3864, + 3663, 3733, 3618, 3618, 3620, 3663, 3656, 3865, 3654, 3657, + 3657, 3657, 3657, 3733, 3655, 3655, 3655, 3655, 3655, 3655, + 3620, 3620, 3620, 3620, 3620, 3620, 3659, 3871, 3665, 3620, + 3660, 3659, 3620, 3665, 3660, 3660, 3661, 3661, 3661, 3661, + 3661, 3661, 3664, 3659, 3660, 3666, 3667, 3664, 3669, 3872, + 3666, 3667, 3670, 3669, 3664, 3655, 3655, 3670, 3667, 3780, + 3868, 3655, 3666, 3620, 3657, 3620, 3671, 3868, 3780, 3673, + + 3657, 3671, 3670, 3672, 3673, 3657, 3672, 3620, 3661, 3677, + 3620, 3620, 3668, 3661, 3677, 3671, 3668, 3668, 3620, 3621, + 3668, 3874, 3668, 3680, 3674, 3661, 3657, 3677, 3680, 3674, + 3682, 3866, 3876, 3818, 3866, 3621, 3621, 3621, 3621, 3621, + 3621, 3674, 3818, 3675, 3621, 3676, 3676, 3621, 3675, 3678, + 3676, 3867, 3681, 3676, 3678, 3679, 3675, 3681, 3691, 3679, + 3679, 3867, 3678, 3679, 3672, 3679, 3681, 3684, 3685, 3672, + 3687, 3684, 3684, 3685, 3687, 3687, 3689, 3621, 3621, 3672, + 3621, 3689, 3621, 3682, 3689, 3686, 3686, 3877, 3682, 3686, + 3686, 3737, 3621, 3682, 3683, 3621, 3621, 3737, 3878, 3683, + + 3880, 3683, 3682, 3621, 3688, 3683, 3690, 3683, 3683, 3688, + 3688, 3690, 3692, 3694, 3882, 3693, 3691, 3692, 3694, 3693, + 3693, 3691, 3693, 3695, 3694, 3696, 3693, 3883, 3695, 3696, + 3696, 3692, 3697, 3693, 3698, 3699, 3697, 3697, 3700, 3698, + 3699, 3701, 3700, 3700, 3703, 3702, 3701, 3702, 3695, 3703, + 3702, 3703, 3698, 3704, 3705, 3706, 3701, 3704, 3704, 3705, + 3706, 3884, 3707, 3708, 3827, 3711, 3706, 3707, 3708, 3709, + 3711, 3885, 3705, 3827, 3709, 3710, 3707, 3708, 3710, 3710, + 3710, 3709, 3712, 3713, 3886, 3711, 3714, 3712, 3713, 3712, + 3715, 3714, 3887, 3716, 3712, 3715, 3712, 3713, 3716, 3717, + + 3869, 3869, 3888, 3714, 3717, 3716, 3716, 3718, 3719, 3720, + 3715, 3889, 3718, 3719, 3720, 3718, 3716, 3721, 3717, 3722, + 3891, 3723, 3721, 3722, 3722, 3723, 3723, 3724, 3725, 3725, + 3726, 3727, 3724, 3725, 3728, 3726, 3727, 3892, 3724, 3728, + 3892, 3724, 3728, 3900, 3726, 3729, 3730, 3730, 3727, 3729, + 3729, 3730, 3731, 3729, 3730, 3729, 3732, 3731, 3734, 3906, + 3907, 3732, 3734, 3734, 3729, 3730, 3734, 3735, 3734, 3736, + 3738, 3732, 3735, 3732, 3736, 3738, 3739, 3740, 3909, 3910, + 3735, 3739, 3740, 3736, 3738, 3741, 3846, 3742, 3757, 3739, + 3741, 3743, 3742, 3741, 3742, 3743, 3743, 3744, 3846, 3912, + + 3745, 3742, 3744, 3745, 3746, 3745, 3748, 3913, 3747, 3746, + 3749, 3748, 3744, 3747, 3747, 3749, 3751, 3746, 3752, 3753, + 3754, 3751, 3752, 3752, 3753, 3754, 3752, 3751, 3752, 3755, + 3756, 3755, 3915, 3758, 3755, 3756, 3757, 3755, 3758, 3753, + 3918, 3757, 3759, 3756, 3758, 3759, 3760, 3759, 3761, 3762, + 3757, 3760, 3761, 3761, 3762, 3763, 3919, 3762, 3917, 3768, + 3763, 3763, 3761, 3764, 3768, 3760, 3764, 3765, 3764, 3766, + 3920, 3765, 3765, 3766, 3766, 3767, 3769, 3917, 3921, 3767, + 3767, 3769, 3768, 3767, 3770, 3767, 3773, 3771, 3772, 3770, + 3922, 3773, 3771, 3772, 3923, 3774, 3774, 3775, 3769, 3771, + + 3774, 3772, 3775, 3776, 3925, 3777, 3778, 3781, 3776, 3770, + 3777, 3778, 3781, 3795, 3778, 3926, 3928, 3779, 3776, 3779, + 3778, 3781, 3779, 3775, 3782, 3783, 3784, 3785, 3782, 3782, + 3783, 3784, 3785, 3947, 3950, 3786, 3787, 3790, 3784, 3783, + 3786, 3787, 3790, 3916, 3788, 3790, 3916, 3787, 3788, 3788, + 3798, 3788, 3788, 3789, 3788, 3798, 3951, 3789, 3789, 3791, + 3797, 3791, 3792, 3791, 3791, 3797, 3792, 3792, 3952, 3793, + 3792, 3795, 3792, 3793, 3793, 3796, 3795, 3797, 3953, 3796, + 3796, 3799, 3792, 3794, 3800, 3802, 3799, 3801, 3801, 3800, + 3802, 3901, 3802, 3803, 3901, 3805, 3800, 3803, 3803, 3802, + + 3805, 3803, 3801, 3805, 3806, 3854, 3854, 3854, 3854, 3806, + 3794, 3794, 3794, 3803, 3954, 3794, 3804, 3794, 3794, 3806, + 3955, 3804, 3794, 3794, 3794, 3807, 3807, 3794, 3794, 3794, + 3807, 3804, 3794, 3808, 3804, 3958, 3809, 3959, 3808, 3807, + 3809, 3809, 3807, 3810, 3812, 3810, 3960, 3810, 3810, 3812, + 3811, 3810, 3984, 3810, 3811, 3811, 3901, 3812, 3810, 3831, + 3985, 3812, 3813, 3810, 3811, 3814, 3813, 3813, 3815, 3814, + 3814, 3816, 3817, 3815, 3819, 3820, 3816, 3817, 3821, 3819, + 3820, 3815, 3816, 3821, 3817, 3814, 3823, 4027, 3819, 3817, + 3823, 3823, 3824, 4168, 3825, 3826, 3824, 3824, 3825, 3825, + + 3826, 3828, 3825, 3845, 3825, 3828, 3828, 3829, 3845, 3826, + 3830, 3845, 3829, 3829, 3830, 3830, 3833, 3831, 3834, 4058, + 3835, 3833, 3831, 3834, 3835, 3835, 3929, 3833, 3837, 3929, + 3837, 3834, 4058, 3837, 3844, 3831, 3832, 3832, 3844, 3844, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3836, + 3838, 3841, 3839, 3842, 3836, 3841, 3841, 3839, 3842, 3841, + 3890, 3841, 3843, 3924, 3836, 3839, 3847, 3843, 3924, 4237, + 3847, 3847, 3848, 3842, 3847, 3893, 3847, 3848, 3893, 3843, + 4319, 3856, 3856, 3848, 3855, 3855, 3855, 3855, 3856, 3859, + 3894, 3903, 3983, 3894, 3875, 3875, 3859, 3856, 3856, 3856, + 3859, 3859, 3873, 3875, 4368, 3859, 3859, 3859, 3838, 3873, + 3914, 3948, 3838, 3838, 3873, 3914, 3948, 3983, 3873, 3873, + + 3873, 3895, 3896, 3914, 3895, 3896, 3838, 3897, 3898, 3899, + 3897, 3898, 3899, 3977, 3986, 3977, 3890, 3890, 3902, 3902, + 3902, 3902, 3903, 4295, 3902, 3904, 3904, 3904, 3904, 3904, + 3904, 4079, 4295, 4079, 3893, 3905, 3905, 3905, 3905, 3986, + 3930, 3905, 3894, 3930, 3931, 3932, 3933, 3931, 3932, 3933, + 3934, 3936, 3903, 3934, 3936, 3935, 3937, 3938, 3935, 3937, + 3938, 3939, 3940, 3904, 3939, 3940, 3896, 3943, 3941, 3942, + 3943, 3941, 3942, 3956, 3895, 3945, 3898, 3944, 3945, 3946, + 3944, 3898, 3946, 4007, 3957, 3949, 4007, 4399, 3897, 3899, + 3949, 3963, 3963, 3963, 3963, 4400, 3967, 3968, 3956, 3970, + + 3949, 3967, 3968, 3949, 3970, 3902, 3967, 4011, 3949, 3957, + 3933, 3964, 3964, 3964, 3964, 4121, 3931, 4121, 3932, 3930, + 3936, 3975, 3905, 3935, 3965, 3965, 3965, 3965, 3935, 4403, + 3969, 3934, 4011, 3942, 3940, 3969, 3976, 3971, 3972, 3964, + 3939, 3941, 3971, 3972, 3945, 3944, 3957, 3969, 3943, 3956, + 3944, 3971, 3946, 3961, 3966, 3966, 3966, 3966, 3973, 4358, + 3978, 3976, 3974, 3973, 3978, 3978, 3976, 3974, 4358, 3961, + 3961, 3961, 3961, 3961, 3961, 3974, 3994, 3979, 3961, 3975, + 4044, 3961, 3979, 4222, 3975, 3965, 4044, 3980, 3981, 4222, + 3965, 3979, 3980, 3981, 3979, 3982, 3965, 3965, 3980, 4409, + + 3982, 3981, 3965, 3987, 3980, 3988, 3989, 4164, 3987, 4164, + 3988, 3989, 3961, 4210, 3961, 3966, 4003, 4410, 3988, 3990, + 3966, 4003, 3987, 3991, 3990, 4210, 3961, 3992, 3991, 3961, + 3961, 4411, 3992, 3990, 3994, 4373, 3993, 3961, 3962, 3994, + 3991, 3993, 4003, 4177, 4373, 4177, 3995, 3993, 3994, 3992, + 3995, 3995, 4241, 4241, 3962, 3962, 3962, 3962, 3962, 3962, + 3995, 3993, 3996, 3962, 3997, 4413, 3962, 3996, 3997, 3997, + 3998, 4431, 3999, 4000, 3998, 3998, 3996, 3999, 4000, 4430, + 4001, 4012, 4430, 4002, 3998, 4001, 3999, 4002, 4002, 4015, + 4002, 4000, 4021, 4001, 4015, 4005, 3962, 3962, 4004, 3962, + + 4005, 3962, 4004, 4004, 4006, 4008, 4012, 4015, 4005, 4006, + 4008, 3962, 4020, 4432, 3962, 3962, 4009, 4020, 4006, 4008, + 4009, 4009, 3962, 4010, 4009, 4020, 4009, 4439, 4010, 4013, + 4013, 4013, 4013, 4014, 4442, 4443, 4016, 4010, 4014, 4014, + 4016, 4016, 4017, 4017, 4017, 4017, 4018, 4018, 4018, 4018, + 4021, 4022, 4023, 4034, 4037, 4021, 4022, 4023, 4014, 4024, + 4028, 4444, 4025, 4024, 4024, 4028, 4022, 4025, 4022, 4445, + 4025, 4031, 4023, 4026, 4018, 4031, 4031, 4026, 4026, 4037, + 4028, 4026, 4029, 4026, 4032, 4048, 4033, 4029, 4032, 4032, + 4013, 4033, 4026, 4033, 4013, 4013, 4446, 4029, 4030, 4042, + + 4033, 4029, 4030, 4030, 4042, 4035, 4030, 4447, 4030, 4035, + 4035, 4034, 4038, 4041, 4036, 4034, 4034, 4035, 4036, 4036, + 4040, 4043, 4045, 4035, 4040, 4040, 4043, 4052, 4038, 4038, + 4038, 4038, 4038, 4038, 4039, 4047, 4046, 4038, 4041, 4039, + 4047, 4046, 4054, 4048, 4039, 4060, 4064, 4045, 4048, 4047, + 4041, 4046, 4052, 4449, 4046, 4049, 4041, 4048, 4050, 4049, + 4049, 4048, 4050, 4050, 4051, 4051, 4051, 4051, 4063, 4049, + 4057, 4053, 4450, 4055, 4057, 4057, 4053, 4050, 4055, 4056, + 4056, 4056, 4056, 4051, 4051, 4051, 4051, 4051, 4051, 4053, + 4059, 4068, 4055, 4063, 4065, 4059, 4068, 4041, 4066, 4191, + + 4054, 4191, 4453, 4060, 4064, 4054, 4061, 4059, 4060, 4064, + 4061, 4061, 4062, 4062, 4062, 4062, 4062, 4062, 4069, 4065, + 4061, 4071, 4454, 4459, 4051, 4051, 4067, 4067, 4067, 4067, + 4051, 4072, 4070, 4073, 4056, 4072, 4072, 4070, 4073, 4073, + 4056, 4485, 4075, 4069, 4070, 4056, 4071, 4074, 4074, 4074, + 4074, 4078, 4238, 4077, 4062, 4076, 4066, 4081, 4077, 4062, + 4076, 4066, 4238, 4080, 4083, 4093, 4056, 4075, 4080, 4076, + 4077, 4062, 4452, 4459, 4082, 4089, 4078, 4080, 4082, 4082, + 4089, 4084, 4081, 4090, 4452, 4082, 4084, 4067, 4090, 4083, + 4093, 4486, 4067, 4084, 4085, 4085, 4085, 4085, 4091, 4086, + + 4086, 4086, 4086, 4091, 4078, 4092, 4094, 4095, 4074, 4094, + 4092, 4096, 4095, 4074, 4098, 4067, 4096, 4487, 4091, 4098, + 4435, 4207, 4074, 4207, 4092, 4096, 4074, 4086, 4087, 4087, + 4087, 4098, 4087, 4087, 4074, 4096, 4087, 4100, 4087, 4099, + 4097, 4097, 4097, 4097, 4099, 4101, 4102, 4102, 4103, 4107, + 4101, 4102, 4099, 4103, 4102, 4104, 4106, 4488, 4458, 4103, + 4104, 4106, 4101, 4104, 4114, 4108, 4110, 4094, 4097, 4114, + 4108, 4489, 4094, 4103, 4107, 4435, 4109, 4106, 4114, 4490, + 4109, 4109, 4094, 4108, 4109, 4100, 4109, 4111, 4100, 4100, + 4100, 4110, 4111, 4100, 4119, 4109, 4100, 4100, 4112, 4119, + + 4111, 4122, 4112, 4112, 4100, 4116, 4112, 4458, 4112, 4117, + 4116, 4470, 4116, 4100, 4117, 4470, 4116, 4118, 4116, 4116, + 4117, 4118, 4118, 4215, 4491, 4215, 4122, 4097, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4113, 4113, 4113, 4113, 4115, 4120, 4123, 4125, 4455, + 4124, 4128, 4123, 4125, 4124, 4124, 4128, 4128, 4124, 4123, + 4124, 4126, 4126, 4127, 4434, 4126, 4126, 4127, 4127, 4129, + 4133, 4120, 4123, 4441, 4129, 4133, 4441, 4129, 4130, 4130, + 4130, 4130, 4131, 4131, 4131, 4131, 4134, 4134, 4134, 4134, + 4135, 4321, 4140, 4321, 4412, 4135, 4140, 4140, 4115, 4120, + 4137, 4138, 4113, 4115, 4412, 4137, 4138, 4113, 4115, 4135, + 4131, 4136, 4138, 4143, 4492, 4136, 4136, 4115, 4136, 4137, + + 4139, 4142, 4136, 4141, 4455, 4139, 4142, 4141, 4141, 4136, + 4144, 4493, 4145, 4460, 4436, 4144, 4145, 4145, 4143, 4142, + 4494, 4146, 4434, 4496, 4148, 4139, 4146, 4134, 4147, 4148, + 4147, 4148, 4134, 4147, 4149, 4150, 4146, 4151, 4149, 4149, + 4150, 4152, 4151, 4169, 4153, 4154, 4152, 4156, 4151, 4153, + 4154, 4163, 4156, 4150, 4438, 4152, 4155, 4154, 4153, 4155, + 4155, 4155, 4460, 4157, 4158, 4167, 4159, 4156, 4157, 4158, + 4157, 4159, 4178, 4436, 4160, 4157, 4163, 4157, 4158, 4160, + 4161, 4160, 4162, 4159, 4165, 4161, 4175, 4162, 4160, 4165, + 4167, 4166, 4171, 4469, 4162, 4162, 4166, 4171, 4165, 4497, + + 4161, 4169, 4498, 4186, 4163, 4162, 4169, 4170, 4165, 4172, + 4166, 4175, 4170, 4438, 4172, 4170, 4172, 4173, 4167, 4474, + 4174, 4176, 4173, 4172, 4174, 4174, 4176, 4179, 4186, 4474, + 4178, 4499, 4179, 4500, 4178, 4178, 4180, 4181, 4179, 4181, + 4180, 4180, 4181, 4182, 4183, 4469, 4184, 4187, 4182, 4183, + 4184, 4184, 4187, 4190, 4182, 4196, 4189, 4198, 4183, 4187, + 4501, 4189, 4183, 4185, 4185, 4185, 4185, 4503, 4504, 4188, + 4189, 4192, 4187, 4188, 4188, 4478, 4192, 4188, 4190, 4188, + 4196, 4193, 4198, 4199, 4192, 4193, 4193, 4188, 4199, 4193, + 4192, 4193, 4194, 4194, 4195, 4206, 4505, 4194, 4197, 4195, + + 4199, 4193, 4212, 4197, 4478, 4507, 4190, 4509, 4195, 4197, + 4197, 4200, 4216, 4201, 4478, 4197, 4200, 4201, 4201, 4200, + 4206, 4201, 4510, 4201, 4185, 4202, 4202, 4212, 4185, 4185, + 4202, 4205, 4201, 4202, 4512, 4185, 4205, 4216, 4185, 4205, + 4213, 4185, 4203, 4513, 4202, 4213, 4203, 4203, 4206, 4506, + 4203, 4214, 4203, 4213, 4204, 4204, 4204, 4404, 4404, 4204, + 4506, 4203, 4204, 4208, 4208, 4208, 4208, 4220, 4204, 4209, + 4221, 4204, 4204, 4204, 4209, 4211, 4214, 4514, 4517, 4211, + 4211, 4479, 4217, 4211, 4209, 4211, 4209, 4217, 4218, 4219, + 4217, 4479, 4220, 4218, 4219, 4221, 4217, 4223, 4480, 4518, + + 4224, 4225, 4223, 4219, 4214, 4224, 4225, 4226, 4480, 4227, + 4236, 4223, 4226, 4224, 4227, 4226, 4227, 4228, 4244, 4524, + 4404, 4525, 4228, 4227, 4208, 4228, 4229, 4230, 4526, 4208, + 4229, 4229, 4230, 4231, 4232, 4236, 4231, 4559, 4231, 4232, + 4233, 4235, 4230, 4234, 4251, 4233, 4235, 4232, 4234, 4234, + 4239, 4240, 4233, 4242, 4245, 4239, 4240, 4243, 4242, 4245, + 4255, 4243, 4243, 4239, 4242, 4243, 4257, 4243, 4246, 4247, + 4563, 4244, 4254, 4246, 4247, 4248, 4244, 4254, 4249, 4258, + 4248, 4244, 4249, 4249, 4252, 4254, 4252, 4247, 4246, 4252, + 4244, 4264, 4252, 4248, 4250, 4250, 4250, 4250, 4253, 4567, + + 4256, 4568, 4251, 4253, 4258, 4256, 4251, 4251, 4255, 4253, + 4251, 4256, 4251, 4255, 4269, 4260, 4255, 4529, 4259, 4260, + 4260, 4262, 4255, 4259, 4257, 4262, 4262, 4529, 4257, 4257, + 4551, 4261, 4259, 4263, 4261, 4259, 4261, 4578, 4263, 4269, + 4267, 4464, 4265, 4464, 4264, 4267, 4265, 4265, 4267, 4264, + 4551, 4464, 4263, 4264, 4264, 4250, 4250, 4584, 4613, 4266, + 4250, 4265, 4268, 4266, 4266, 4272, 4250, 4268, 4268, 4272, + 4272, 4270, 4250, 4266, 4270, 4273, 4270, 4274, 4275, 4273, + 4273, 4274, 4274, 4275, 4282, 4274, 4276, 4274, 4276, 4275, + 4277, 4276, 4278, 4280, 4279, 4277, 4639, 4278, 4280, 4279, + + 4281, 4277, 4283, 4292, 4305, 4281, 4285, 4283, 4284, 4282, + 4302, 4285, 4286, 4284, 4281, 4278, 4279, 4286, 4280, 4285, + 4284, 4283, 4288, 4288, 4289, 4290, 4291, 4288, 4292, 4289, + 4290, 4291, 4294, 4293, 4294, 4302, 4304, 4294, 4293, 4296, + 4290, 4293, 4579, 4301, 4296, 4579, 4315, 4293, 4301, 4298, + 4289, 4297, 4318, 4296, 4298, 4297, 4297, 4298, 4299, 4300, + 4303, 4304, 4305, 4299, 4300, 4303, 4650, 4305, 4306, 4307, + 4308, 4300, 4299, 4306, 4307, 4308, 4303, 4318, 4309, 4323, + 4326, 4308, 4309, 4309, 4465, 4309, 4309, 4310, 4309, 4311, + 4312, 4310, 4310, 4311, 4311, 4312, 4693, 4320, 4312, 4313, + + 4313, 4313, 4313, 4314, 4315, 4318, 4333, 4325, 4314, 4315, + 4316, 4727, 4316, 4314, 4316, 4316, 4317, 4728, 4731, 4327, + 4317, 4317, 4320, 4322, 4317, 4324, 4317, 4322, 4322, 4324, + 4324, 4322, 4325, 4322, 4329, 4330, 4317, 4323, 4326, 4734, + 4330, 4323, 4323, 4326, 4327, 4336, 4465, 4331, 4332, 4330, + 4320, 4331, 4331, 4332, 4405, 4405, 4465, 4334, 4783, 4329, + 4313, 4334, 4334, 4335, 4333, 4313, 4332, 4337, 4335, 4333, + 4336, 4338, 4337, 4339, 4313, 4328, 4338, 4789, 4339, 4342, + 4335, 4341, 4341, 4344, 4342, 4339, 4342, 4348, 4344, 4345, + 4414, 4414, 4348, 4342, 4345, 4344, 4341, 4345, 4344, 4794, + + 4355, 4344, 4328, 4328, 4328, 4355, 4362, 4328, 4795, 4328, + 4328, 4362, 4346, 4355, 4328, 4328, 4328, 4346, 4405, 4328, + 4328, 4328, 4340, 4340, 4328, 4340, 4340, 4346, 4340, 4796, + 4732, 4349, 4340, 4340, 4340, 4349, 4349, 4732, 4340, 4340, + 4340, 4340, 4340, 4343, 4347, 4347, 4798, 4343, 4343, 4347, + 4359, 4343, 4350, 4414, 4350, 4359, 4350, 4350, 4347, 4720, + 4350, 4347, 4350, 4343, 4359, 4351, 4364, 4350, 4350, 4351, + 4351, 4352, 4350, 4353, 4720, 4360, 4352, 4353, 4353, 4351, + 4360, 4354, 4356, 4802, 4352, 4354, 4354, 4356, 4352, 4361, + 4357, 4364, 4360, 4356, 4361, 4357, 4804, 4805, 4363, 4367, + + 4375, 4354, 4357, 4363, 4367, 4375, 4375, 4357, 4369, 4363, + 4370, 4361, 4369, 4369, 4370, 4370, 4371, 4372, 4807, 4808, + 4371, 4371, 4372, 4363, 4371, 4374, 4371, 4389, 4376, 4374, + 4374, 4372, 4376, 4376, 4377, 4521, 4378, 4390, 4809, 4377, + 4378, 4378, 4390, 4378, 4378, 4379, 4416, 4416, 4390, 4377, + 4379, 4380, 4379, 4381, 4395, 4380, 4380, 4387, 4381, 4380, + 4381, 4380, 4382, 4382, 4382, 4382, 4383, 4381, 4398, 4401, + 4810, 4383, 4384, 4384, 4384, 4384, 4385, 4385, 4385, 4385, + 4383, 4391, 4387, 4392, 4383, 4389, 4391, 4392, 4392, 4803, + 4389, 4393, 4803, 4394, 4391, 4394, 4393, 4396, 4394, 4389, + + 4407, 4396, 4396, 4397, 4385, 4407, 4393, 4416, 4397, 4812, + 4397, 4523, 4395, 4448, 4440, 4397, 4395, 4395, 4448, 4407, + 4417, 4521, 4397, 4382, 4515, 4417, 4398, 4401, 4382, 4440, + 4395, 4398, 4401, 4440, 4467, 4515, 4523, 4813, 4467, 4417, + 4815, 4382, 4388, 4388, 4467, 4817, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, + 4388, 4388, 4388, 4388, 4388, 4402, 4415, 4415, 4402, 4402, + 4437, 4402, 4406, 4406, 4406, 4406, 4419, 4530, 4520, 4520, + 4818, 4419, 4402, 4402, 4402, 4402, 4408, 4530, 4419, 4419, + 4408, 4408, 4421, 4418, 4408, 4729, 4408, 4421, 4533, 4419, + 4422, 4729, 4822, 4564, 4422, 4422, 4408, 4564, 4422, 4429, + 4422, 4421, 4429, 4423, 4423, 4722, 4423, 4429, 4653, 4463, + 4422, 4531, 4653, 4533, 4823, 4437, 4476, 4406, 4423, 4463, + + 4415, 4531, 4437, 4406, 4463, 4476, 4476, 4824, 4406, 4476, + 4722, 4406, 4520, 4437, 4418, 4418, 4418, 4466, 4825, 4418, + 4466, 4406, 4418, 4418, 4466, 4471, 4468, 4466, 4468, 4471, + 4418, 4466, 4468, 4681, 4826, 4471, 4429, 4681, 4468, 4418, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4827, 4420, 4420, + + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, 4420, + 4420, 4420, 4420, 4424, 4821, 4532, 4424, 4424, 4425, 4424, + 4426, 4425, 4425, 4426, 4425, 4532, 4427, 4828, 4426, 4427, + 4424, 4424, 4424, 4424, 4427, 4425, 4425, 4425, 4425, 4428, + 4433, 4481, 4428, 4733, 4456, 4733, 4433, 4428, 4481, 4477, + 4585, 4481, 4433, 4433, 4457, 4433, 4537, 4550, 4433, 4433, + 4456, 4456, 4456, 4456, 4456, 4456, 4537, 4550, 4473, 4456, + 4457, 4457, 4457, 4457, 4457, 4457, 4472, 4475, 4552, 4457, + + 4472, 4482, 4472, 4829, 4830, 4475, 4472, 4475, 4552, 4482, + 4475, 4482, 4472, 4519, 4483, 4427, 4473, 4473, 4821, 4473, + 4833, 4483, 4473, 4473, 4483, 4534, 4522, 4473, 4473, 4426, + 4535, 4477, 4473, 4473, 4473, 4427, 4457, 4473, 4511, 4511, + 4456, 4477, 4516, 4516, 4835, 4511, 4585, 4516, 4428, 4461, + 4516, 4522, 4836, 4541, 4511, 4511, 4511, 4541, 4516, 4541, + 4587, 4536, 4519, 4541, 4541, 4461, 4461, 4461, 4461, 4461, + 4461, 4536, 4837, 4771, 4461, 4519, 4536, 4461, 4527, 4527, + 4527, 4527, 4527, 4527, 4540, 4538, 4540, 4534, 4522, 4539, + 4547, 4838, 4535, 4540, 4547, 4538, 4540, 4534, 4771, 4542, + + 4547, 4542, 4535, 4538, 4544, 4545, 4544, 4839, 4461, 4588, + 4461, 4542, 4461, 4554, 4543, 4545, 4544, 4543, 4543, 4545, + 4461, 4587, 4461, 4554, 4527, 4461, 4461, 4462, 4543, 4548, + 4546, 4546, 4546, 4546, 4831, 4580, 4587, 4831, 4580, 4548, + 4548, 4840, 4539, 4462, 4462, 4462, 4462, 4462, 4462, 4549, + 4553, 4539, 4462, 4555, 4553, 4462, 4556, 4555, 4841, 4549, + 4553, 4539, 4558, 4580, 4549, 4588, 4556, 4555, 4557, 4557, + 4832, 4569, 4558, 4539, 4570, 4558, 4590, 4570, 4589, 4557, + 4565, 4565, 4565, 4565, 4832, 4588, 4462, 4570, 4462, 4462, + 4462, 4560, 4560, 4560, 4560, 4546, 4820, 4546, 4571, 4462, + + 4462, 4844, 4820, 4462, 4462, 4546, 4562, 4571, 4571, 4546, + 4560, 4560, 4560, 4560, 4560, 4560, 4845, 4546, 4561, 4561, + 4561, 4561, 4562, 4562, 4562, 4562, 4562, 4562, 4586, 4846, + 4591, 4562, 4590, 4569, 4600, 4565, 4847, 4561, 4561, 4561, + 4561, 4561, 4561, 4569, 4572, 4589, 4561, 4566, 4566, 4566, + 4566, 4849, 4590, 4592, 4589, 4569, 4856, 4857, 4574, 4600, + 4572, 4572, 4572, 4572, 4572, 4572, 4573, 4565, 4574, 4572, + 4573, 4576, 4582, 4575, 4577, 4566, 4573, 4575, 4583, 4858, + 4586, 4576, 4582, 4575, 4577, 4577, 4591, 4600, 4583, 4583, + 4586, 4594, 4583, 4595, 4859, 4594, 4612, 4595, 4597, 4597, + + 4602, 4592, 4566, 4595, 4586, 4594, 4591, 4596, 4592, 4597, + 4602, 4596, 4598, 4596, 4599, 4603, 4604, 4596, 4616, 4603, + 4592, 4612, 4598, 4598, 4599, 4603, 4604, 4599, 4616, 4592, + 4601, 4601, 4601, 4601, 4566, 4608, 4605, 4617, 4601, 4605, + 4606, 4606, 4607, 4609, 4860, 4608, 4607, 4617, 4606, 4605, + 4862, 4606, 4609, 4609, 4610, 4610, 4607, 4608, 4601, 4607, + 4611, 4614, 4615, 4863, 4610, 4614, 4615, 4618, 4615, 4611, + 4611, 4614, 4615, 4612, 4621, 4621, 4864, 4618, 4619, 4619, + 4619, 4619, 4620, 4622, 4621, 4623, 4620, 4624, 4620, 4625, + 4626, 4601, 4620, 4622, 4626, 4623, 4626, 4624, 4625, 4625, + + 4626, 4627, 4628, 4628, 4630, 4629, 4629, 4631, 4632, 4601, + 4643, 4627, 4866, 4628, 4630, 4627, 4629, 4631, 4632, 4633, + 4634, 4634, 4633, 4635, 4636, 4636, 4637, 4867, 4638, 4640, + 4648, 4634, 4869, 4635, 4619, 4636, 4637, 4641, 4638, 4640, + 4648, 4637, 4638, 4619, 4640, 4773, 4642, 4641, 4641, 4644, + 4662, 4645, 4644, 4619, 4642, 4645, 4642, 4649, 4649, 4644, + 4646, 4645, 4800, 4655, 4646, 4870, 4644, 4649, 4647, 4647, + 4773, 4800, 4643, 4655, 4646, 4647, 4651, 4646, 4647, 4652, + 4651, 4654, 4643, 4656, 4633, 4654, 4657, 4656, 4652, 4652, + 4651, 4654, 4658, 4656, 4633, 4659, 4657, 4664, 4660, 4661, + + 4657, 4868, 4658, 4662, 4868, 4659, 4660, 4664, 4660, 4661, + 4658, 4663, 4662, 4665, 4660, 4666, 4661, 4665, 4667, 4666, + 4663, 4663, 4662, 4668, 4669, 4670, 4671, 4665, 4667, 4666, + 4675, 4871, 4670, 4668, 4669, 4670, 4671, 4672, 4674, 4671, + 4675, 4672, 4673, 4673, 4676, 4679, 4675, 4672, 4674, 4674, + 4677, 4677, 4680, 4673, 4676, 4679, 4682, 4684, 4682, 4872, + 4679, 4677, 4680, 4685, 4673, 4688, 4680, 4684, 4682, 4683, + 4683, 4686, 4686, 4685, 4687, 4688, 4690, 4687, 4704, 4689, + 4683, 4689, 4686, 4694, 4843, 4691, 4690, 4687, 4687, 4691, + 4692, 4689, 4695, 4694, 4692, 4691, 4696, 4697, 4694, 4698, + + 4699, 4843, 4695, 4695, 4692, 4700, 4696, 4697, 4701, 4698, + 4699, 4701, 4697, 4702, 4700, 4700, 4699, 4702, 4698, 4703, + 4873, 4701, 4705, 4702, 4706, 4706, 4708, 4707, 4711, 4703, + 4703, 4707, 4705, 4709, 4706, 4709, 4708, 4704, 4711, 4710, + 4704, 4707, 4710, 4712, 4713, 4709, 4709, 4714, 4713, 4713, + 4704, 4715, 4710, 4712, 4704, 4717, 4842, 4714, 4713, 4716, + 4716, 4715, 4874, 4718, 4842, 4717, 4715, 4723, 4735, 4875, + 4716, 4718, 4719, 4718, 4719, 4719, 4876, 4723, 4719, 4721, + 4719, 4719, 4724, 4721, 4719, 4725, 4724, 4726, 4877, 4721, + 4736, 4726, 4730, 4730, 4736, 4725, 4724, 4726, 4725, 4735, + + 4736, 4737, 4738, 4739, 4878, 4880, 4738, 4740, 4884, 4735, + 4730, 4737, 4737, 4739, 4741, 4740, 4738, 4740, 4742, 4739, + 4882, 4743, 4741, 4743, 4741, 4799, 4882, 4743, 4742, 4743, + 4744, 4745, 4742, 4743, 4746, 4745, 4746, 4744, 4746, 4747, + 4744, 4745, 4887, 4748, 4749, 4750, 4755, 4750, 4746, 4747, + 4751, 4888, 4747, 4748, 4749, 4750, 4755, 4888, 4750, 4749, + 4751, 4753, 4752, 4751, 4752, 4755, 4754, 4756, 4753, 4754, + 4889, 4753, 4758, 4756, 4752, 4752, 4757, 4756, 4799, 4754, + 4759, 4759, 4758, 4757, 4760, 4758, 4757, 4760, 4761, 4762, + 4768, 4759, 4763, 4890, 4760, 4764, 4881, 4760, 4761, 4762, + + 4762, 4766, 4763, 4763, 4765, 4764, 4765, 4761, 4891, 4799, + 4766, 4766, 4776, 4881, 4764, 4768, 4765, 4767, 4767, 4767, + 4767, 4769, 4776, 4777, 4777, 4769, 4778, 4769, 4779, 4892, + 4778, 4769, 4769, 4780, 4777, 4781, 4893, 4784, 4779, 4777, + 4778, 4785, 4782, 4780, 4786, 4781, 4782, 4784, 4782, 4787, + 4788, 4785, 4782, 4894, 4786, 4811, 4785, 4801, 4896, 4787, + 4788, 4801, 4897, 4801, 4819, 4811, 4848, 4768, 4801, 4806, + 4806, 4806, 4806, 4834, 4819, 4898, 4848, 4834, 4899, 4834, + 4850, 4900, 4767, 4885, 4850, 4879, 4850, 4854, 4854, 4854, + 4854, 4855, 4767, 4885, 4861, 4855, 4886, 4855, 4861, 4879, + + 4861, 4895, 4901, 4902, 4767, 4790, 4901, 4903, 4904, 4895, + 4886, 4905, 4906, 4907, 4909, 4897, 4908, 4910, 4911, 4912, + 4913, 4790, 4790, 4790, 4790, 4790, 4790, 4914, 4915, 4916, + 4790, 4917, 4919, 4790, 4915, 4920, 4806, 4921, 4908, 4924, + 4923, 4914, 4923, 4854, 4925, 4926, 4927, 4928, 4806, 4929, + 4930, 4921, 4931, 4932, 4933, 4934, 4806, 4935, 4936, 4926, + 4937, 4927, 4939, 4940, 4790, 4941, 4790, 4942, 4943, 4944, + 4945, 4946, 4947, 4948, 4949, 4950, 4946, 4951, 4790, 4954, + 4942, 4790, 4790, 4791, 4952, 4956, 4952, 4952, 4957, 4953, + 4952, 4958, 4952, 4952, 4953, 4959, 4960, 4961, 4962, 4791, + + 4791, 4791, 4791, 4791, 4791, 4963, 4964, 4965, 4791, 4966, + 4967, 4791, 4967, 4968, 4971, 4972, 4967, 4969, 4967, 4937, + 4970, 4969, 4970, 4966, 4973, 4975, 4974, 4976, 4977, 4978, + 4979, 4980, 4981, 4982, 4983, 4977, 4937, 4974, 4984, 4985, + 4976, 4986, 4791, 4987, 4791, 4988, 4989, 4990, 4984, 4991, + 4991, 4991, 4991, 4994, 4995, 4996, 4791, 4992, 4997, 4791, + 4791, 4992, 4999, 4992, 5001, 5003, 4998, 5004, 4992, 4994, + 4998, 5006, 4998, 5005, 5005, 5005, 5005, 5007, 5008, 5009, + 5010, 5011, 5012, 5013, 5015, 5014, 5016, 5017, 5018, 5019, + 5019, 5019, 5019, 5020, 5020, 5020, 5020, 5021, 5022, 5023, + + 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, + 5034, 5035, 5036, 5034, 5037, 5038, 5039, 5040, 5041, 5034, + 5042, 5041, 5043, 5044, 5037, 5045, 5047, 5048, 5049, 5050, + 5051, 5052, 5053, 5054, 5055, 5056, 4991, 5055, 5057, 5058, + 5005, 5059, 5060, 5055, 5014, 5061, 5062, 5063, 5064, 5045, + 5066, 5067, 5005, 5065, 5065, 5065, 5065, 5068, 5069, 5070, + 5005, 5014, 5071, 5072, 5073, 5076, 5077, 5078, 5079, 5077, + 5080, 5081, 5079, 5020, 5082, 5082, 5082, 5082, 5083, 5083, + 5083, 5083, 5085, 5086, 5083, 5089, 5090, 5091, 5092, 5093, + 5093, 5093, 5093, 5094, 5096, 5095, 5097, 5098, 5099, 5101, + + 5103, 5099, 5102, 5104, 5107, 5108, 5100, 5109, 5108, 5110, + 5111, 5114, 5115, 5116, 5117, 5115, 5118, 5119, 5121, 5122, + 5123, 5125, 5081, 5109, 5126, 5124, 5127, 5128, 5139, 5116, + 5130, 5130, 5130, 5130, 5131, 5131, 5131, 5131, 5149, 5150, + 5065, 5133, 5133, 5133, 5133, 5093, 5125, 5179, 5157, 5181, + 5124, 5204, 5081, 5139, 5205, 5094, 5233, 5234, 5257, 5098, + 5259, 5082, 5131, 5101, 5196, 5083, 5100, 5261, 5264, 5265, + 5090, 5095, 5102, 5157, 5181, 5266, 5093, 5094, 5096, 5095, + 5097, 5098, 5100, 5101, 5268, 5099, 5102, 5124, 5208, 5196, + 5100, 5129, 5134, 5134, 5134, 5134, 5135, 5135, 5135, 5135, + + 5136, 5136, 5136, 5136, 5283, 5284, 5321, 5129, 5129, 5129, + 5129, 5129, 5129, 5208, 5322, 5325, 5129, 5349, 5350, 5129, + 5137, 5137, 5137, 5137, 5138, 5138, 5138, 5138, 5140, 5140, + 5140, 5140, 5374, 5141, 5141, 5141, 5141, 5142, 5142, 5142, + 5142, 5143, 5143, 5143, 5143, 5144, 5144, 5144, 5144, 5375, + 5129, 5380, 5129, 5145, 5145, 5145, 5145, 5146, 5146, 5146, + 5146, 5381, 5215, 5399, 5129, 5400, 5401, 5129, 5129, 5132, + 5132, 5132, 5132, 5147, 5147, 5147, 5147, 5407, 5136, 5148, + 5148, 5148, 5148, 5151, 5151, 5151, 5151, 5215, 5132, 5132, + 5132, 5132, 5132, 5132, 5141, 5429, 5473, 5132, 5141, 5221, + + 5132, 5152, 5152, 5152, 5152, 5153, 5153, 5153, 5153, 5154, + 5154, 5154, 5154, 5474, 5144, 5475, 5501, 5225, 5145, 5143, + 5155, 5155, 5155, 5155, 5221, 5226, 5146, 5156, 5156, 5156, + 5156, 5132, 5503, 5132, 5158, 5158, 5158, 5158, 5159, 5159, + 5159, 5159, 5225, 5504, 5151, 5132, 5576, 5577, 5132, 5132, + 5226, 5588, 5590, 5147, 5160, 5160, 5160, 5160, 5151, 5161, + 5161, 5161, 5161, 5162, 5162, 5162, 5162, 5163, 5163, 5163, + 5163, 5164, 5164, 5164, 5164, 5165, 5165, 5165, 5165, 5166, + 5166, 5166, 5166, 5591, 5154, 5167, 5167, 5167, 5167, 5168, + 5168, 5168, 5168, 5502, 5155, 5169, 5169, 5169, 5169, 5498, + + 5502, 5498, 5156, 5170, 5170, 5170, 5170, 5171, 5171, 5171, + 5171, 5172, 5172, 5172, 5172, 5161, 5173, 5173, 5173, 5173, + 5505, 5159, 5174, 5174, 5174, 5174, 5162, 5175, 5175, 5175, + 5175, 5505, 5163, 5592, 5164, 5162, 5163, 5587, 5163, 5176, + 5176, 5176, 5176, 5163, 5499, 5267, 5161, 5587, 5499, 5267, + 5168, 5267, 5593, 5168, 5499, 5175, 5177, 5177, 5177, 5177, + 5178, 5178, 5178, 5178, 5326, 5594, 5170, 5180, 5180, 5180, + 5180, 5182, 5182, 5182, 5182, 5183, 5183, 5183, 5183, 5169, + 5184, 5184, 5184, 5184, 5244, 5172, 5171, 5244, 5600, 5326, + 5173, 5185, 5185, 5185, 5185, 5333, 5607, 5172, 5186, 5186, + + 5186, 5186, 5187, 5187, 5187, 5187, 5188, 5188, 5188, 5188, + 5608, 5609, 5244, 5176, 5189, 5189, 5189, 5189, 5586, 5610, + 5333, 5177, 5586, 5248, 5586, 5177, 5612, 5177, 5177, 5190, + 5190, 5190, 5190, 5614, 5180, 5191, 5191, 5191, 5191, 5178, + 5182, 5615, 5192, 5192, 5192, 5192, 5180, 5193, 5193, 5193, + 5193, 5183, 5616, 5616, 5180, 5194, 5194, 5194, 5194, 5506, + 5184, 5195, 5195, 5195, 5195, 5506, 5185, 5187, 5197, 5197, + 5197, 5197, 5506, 5186, 5198, 5198, 5198, 5198, 5199, 5199, + 5199, 5199, 5188, 5186, 5200, 5200, 5200, 5200, 5248, 5620, + 5189, 5621, 5417, 5276, 5190, 5201, 5201, 5201, 5201, 5248, + + 5622, 5190, 5251, 5423, 5191, 5206, 5206, 5206, 5206, 5459, + 5191, 5192, 5193, 5207, 5207, 5207, 5207, 5417, 5276, 5194, + 5209, 5209, 5209, 5209, 5210, 5210, 5210, 5210, 5423, 5197, + 5211, 5211, 5211, 5211, 5459, 5214, 5214, 5214, 5214, 5198, + 5623, 5500, 5500, 5198, 5500, 5198, 5276, 5469, 5213, 5624, + 5251, 5199, 5216, 5216, 5216, 5216, 5199, 5625, 5251, 5198, + 5212, 5212, 5212, 5212, 5213, 5213, 5213, 5213, 5213, 5213, + 5206, 5626, 5469, 5213, 5206, 5201, 5206, 5207, 5251, 5212, + 5212, 5212, 5212, 5212, 5212, 5209, 5611, 5627, 5212, 5209, + 5611, 5209, 5611, 5598, 5628, 5211, 5217, 5217, 5217, 5217, + + 5214, 5477, 5210, 5598, 5214, 5211, 5214, 5218, 5218, 5218, + 5218, 5219, 5219, 5219, 5219, 5220, 5220, 5220, 5220, 5223, + 5632, 5216, 5613, 5629, 5217, 5406, 5477, 5216, 5222, 5222, + 5222, 5222, 5613, 5617, 5617, 5223, 5223, 5223, 5223, 5223, + 5223, 5582, 5582, 5636, 5223, 5224, 5224, 5224, 5224, 5637, + 5406, 5217, 5227, 5227, 5227, 5227, 5228, 5228, 5228, 5228, + 5229, 5229, 5229, 5229, 5230, 5230, 5230, 5230, 5231, 5231, + 5231, 5231, 5232, 5232, 5232, 5232, 5219, 5220, 5406, 5640, + 5219, 5632, 5219, 5217, 5235, 5235, 5235, 5235, 5236, 5236, + 5236, 5236, 5219, 5629, 5218, 5237, 5237, 5237, 5237, 5479, + + 5631, 5493, 5222, 5238, 5238, 5238, 5238, 5239, 5239, 5239, + 5239, 5641, 5250, 5582, 5224, 5554, 5644, 5227, 5240, 5240, + 5240, 5240, 5249, 5258, 5479, 5229, 5493, 5258, 5633, 5230, + 5646, 5596, 5596, 5230, 5228, 5230, 5241, 5241, 5241, 5241, + 5554, 5232, 5242, 5242, 5242, 5242, 5647, 5649, 5258, 5236, + 5243, 5243, 5243, 5243, 5245, 5245, 5245, 5245, 5235, 5650, + 5237, 5555, 5428, 5651, 5238, 5246, 5246, 5246, 5246, 5247, + 5247, 5247, 5247, 5250, 5249, 5630, 5250, 5631, 5249, 5252, + 5252, 5252, 5252, 5633, 5249, 5670, 5555, 5428, 5250, 5253, + 5253, 5253, 5253, 5254, 5254, 5254, 5254, 5652, 5249, 5255, + + 5255, 5255, 5255, 5596, 5240, 5256, 5256, 5256, 5256, 5269, + 5269, 5269, 5269, 5565, 5241, 5428, 5575, 5579, 5242, 5274, + 5274, 5274, 5274, 5579, 5602, 5243, 5282, 5282, 5282, 5282, + 5579, 5630, 5680, 5245, 5285, 5285, 5285, 5285, 5565, 5645, + 5246, 5575, 5645, 5681, 5252, 5247, 5603, 5274, 5247, 5602, + 5253, 5297, 5297, 5297, 5297, 5298, 5298, 5298, 5298, 5661, + 5660, 5684, 5254, 5661, 5253, 5299, 5299, 5299, 5299, 5652, + 5660, 5603, 5256, 5660, 5255, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, + 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, + 5262, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, + 5263, 5263, 5263, 5263, 5270, 5270, 5270, 5270, 5271, 5271, + 5271, 5271, 5272, 5272, 5272, 5272, 5273, 5273, 5273, 5273, + 5275, 5275, 5275, 5275, 5277, 5277, 5277, 5277, 5278, 5278, + 5278, 5278, 5279, 5279, 5279, 5279, 5280, 5280, 5280, 5280, + 5281, 5281, 5281, 5281, 5655, 5286, 5286, 5286, 5286, 5287, + + 5287, 5287, 5287, 5288, 5288, 5288, 5288, 5289, 5289, 5289, + 5289, 5663, 5290, 5290, 5290, 5290, 5581, 5581, 5666, 5270, + 5663, 5656, 5685, 5270, 5668, 5270, 5272, 5291, 5291, 5291, + 5291, 5595, 5595, 5271, 5657, 5666, 5634, 5271, 5655, 5277, + 5668, 5673, 5273, 5292, 5292, 5292, 5292, 5278, 5275, 5688, + 5672, 5690, 5281, 5293, 5293, 5293, 5293, 5279, 5280, 5286, + 5287, 5294, 5294, 5294, 5294, 5672, 5673, 5286, 5657, 5635, + 5656, 5292, 5295, 5295, 5295, 5295, 5664, 5287, 5290, 5664, + 5581, 5289, 5296, 5296, 5296, 5296, 5300, 5300, 5300, 5300, + 5288, 5301, 5301, 5301, 5301, 5595, 5634, 5302, 5302, 5302, + + 5302, 5291, 5303, 5303, 5303, 5303, 5304, 5304, 5304, 5304, + 5305, 5305, 5305, 5305, 5306, 5306, 5306, 5306, 5293, 5308, + 5308, 5308, 5308, 5292, 5307, 5307, 5307, 5307, 5293, 5635, + 5294, 5677, 5309, 5309, 5309, 5309, 5665, 5295, 5691, 5665, + 5677, 5295, 5300, 5295, 5310, 5310, 5310, 5310, 5311, 5311, + 5311, 5311, 5312, 5312, 5312, 5312, 5301, 5296, 5692, 5667, + 5301, 5296, 5301, 5302, 5674, 5675, 5693, 5303, 5694, 5571, + 5695, 5304, 5667, 5696, 5667, 5305, 5313, 5313, 5313, 5313, + 5314, 5314, 5314, 5314, 5315, 5315, 5315, 5315, 5306, 5307, + 5697, 5682, 5698, 5307, 5571, 5307, 5309, 5682, 5308, 5316, + + 5316, 5316, 5316, 5317, 5317, 5317, 5317, 5699, 5310, 5318, + 5318, 5318, 5318, 5319, 5319, 5319, 5319, 5312, 5320, 5320, + 5320, 5320, 5323, 5323, 5323, 5323, 5324, 5324, 5324, 5324, + 5327, 5327, 5327, 5327, 5700, 5328, 5328, 5328, 5328, 5674, + 5675, 5313, 5329, 5329, 5329, 5329, 5571, 5701, 5315, 5330, + 5330, 5330, 5330, 5331, 5331, 5331, 5331, 5676, 5332, 5332, + 5332, 5332, 5703, 5618, 5316, 5334, 5334, 5334, 5334, 5335, + 5335, 5335, 5335, 5318, 5336, 5336, 5336, 5336, 5337, 5337, + 5337, 5337, 5338, 5338, 5338, 5338, 5339, 5339, 5339, 5339, + 5678, 5704, 5686, 5319, 5705, 5706, 5707, 5320, 5686, 5678, + + 5708, 5324, 5340, 5340, 5340, 5340, 5341, 5341, 5341, 5341, + 5327, 5328, 5342, 5342, 5342, 5342, 5709, 5710, 5702, 5332, + 5713, 5711, 5330, 5332, 5343, 5343, 5343, 5343, 5618, 5714, + 5334, 5711, 5676, 5715, 5341, 5344, 5344, 5344, 5344, 5336, + 5345, 5345, 5345, 5345, 5618, 5336, 5716, 5338, 5717, 5712, + 5718, 5338, 5719, 5338, 5339, 5346, 5346, 5346, 5346, 5347, + 5347, 5347, 5347, 5348, 5348, 5348, 5348, 5712, 5339, 5351, + 5351, 5351, 5351, 5352, 5352, 5352, 5352, 5353, 5353, 5353, + 5353, 5354, 5354, 5354, 5354, 5355, 5355, 5355, 5355, 5723, + 5342, 5356, 5356, 5356, 5356, 5702, 5725, 5357, 5357, 5357, + + 5357, 5343, 5578, 5727, 5344, 5358, 5358, 5358, 5358, 5345, + 5359, 5359, 5359, 5359, 5360, 5360, 5360, 5360, 5361, 5361, + 5361, 5361, 5731, 5733, 5347, 5721, 5721, 5578, 5347, 5722, + 5347, 5362, 5362, 5362, 5362, 5351, 5363, 5363, 5363, 5363, + 5742, 5348, 5354, 5364, 5364, 5364, 5364, 5662, 5352, 5597, + 5597, 5355, 5352, 5353, 5722, 5755, 5356, 5355, 5357, 5354, + 5365, 5365, 5365, 5365, 5366, 5366, 5366, 5366, 5367, 5367, + 5367, 5367, 5662, 5761, 5358, 5368, 5368, 5368, 5368, 5578, + 5360, 5737, 5728, 5361, 5369, 5369, 5369, 5369, 5370, 5370, + 5370, 5370, 5362, 5361, 5737, 5671, 5745, 5371, 5371, 5371, + + 5371, 5372, 5372, 5372, 5372, 5671, 5362, 5728, 5721, 5745, + 5363, 5671, 5364, 5373, 5373, 5373, 5373, 5597, 5364, 5376, + 5376, 5376, 5376, 5762, 5662, 5366, 5720, 5597, 5679, 5367, + 5366, 5377, 5377, 5377, 5377, 5365, 5378, 5378, 5378, 5378, + 5379, 5379, 5379, 5379, 5382, 5382, 5382, 5382, 5383, 5383, + 5383, 5383, 5746, 5763, 5770, 5368, 5384, 5384, 5384, 5384, + 5369, 5370, 5371, 5371, 5735, 5746, 5371, 5735, 5371, 5385, + 5385, 5385, 5385, 5807, 5808, 5720, 5372, 5386, 5386, 5386, + 5386, 5372, 5387, 5387, 5387, 5387, 5720, 5679, 5376, 5388, + 5388, 5388, 5388, 5729, 5813, 5748, 5377, 5373, 5389, 5389, + + 5389, 5389, 5855, 5679, 5679, 5378, 5748, 5382, 5390, 5390, + 5390, 5390, 5391, 5391, 5391, 5391, 5749, 5772, 5729, 5379, + 5750, 5772, 5749, 5382, 5392, 5392, 5392, 5392, 5393, 5393, + 5393, 5393, 5394, 5394, 5394, 5394, 5751, 5750, 5751, 5384, + 5395, 5395, 5395, 5395, 5385, 5388, 5396, 5396, 5396, 5396, + 5386, 5397, 5397, 5397, 5397, 5752, 5753, 5752, 5386, 5398, + 5398, 5398, 5398, 5834, 5387, 5402, 5402, 5402, 5402, 5753, + 5883, 5773, 5389, 5390, 5403, 5403, 5403, 5403, 5730, 5391, + 5404, 5404, 5404, 5404, 5773, 5392, 5589, 5589, 5834, 5393, + 5747, 5589, 5730, 5393, 5589, 5730, 5884, 5394, 5405, 5405, + + 5405, 5405, 5589, 5760, 5747, 5395, 5760, 5747, 5396, 5408, + 5408, 5408, 5408, 5768, 5791, 5768, 5397, 5409, 5409, 5409, + 5409, 5410, 5410, 5410, 5410, 5765, 5411, 5411, 5411, 5411, + 5791, 5398, 5412, 5412, 5412, 5412, 5781, 5413, 5413, 5413, + 5413, 5414, 5414, 5414, 5414, 5415, 5415, 5415, 5415, 5404, + 5765, 5771, 5403, 5771, 5416, 5416, 5416, 5416, 5418, 5418, + 5418, 5418, 5405, 5419, 5419, 5419, 5419, 5420, 5420, 5420, + 5420, 5421, 5421, 5421, 5421, 5422, 5422, 5422, 5422, 5424, + 5424, 5424, 5424, 5732, 5405, 5769, 5410, 5800, 5781, 5800, + 5410, 5411, 5410, 5409, 5411, 5411, 5769, 5411, 5413, 5425, + + 5425, 5425, 5425, 5426, 5426, 5426, 5426, 5787, 5732, 5765, + 5415, 5412, 5781, 5787, 5415, 5413, 5427, 5427, 5427, 5427, + 5798, 5895, 5414, 5416, 5430, 5430, 5430, 5430, 5817, 5798, + 5736, 5420, 5421, 5418, 5736, 5419, 5732, 5431, 5431, 5431, + 5431, 5432, 5432, 5432, 5432, 5817, 5895, 5736, 5424, 5433, + 5433, 5433, 5433, 5827, 5827, 5422, 5434, 5434, 5434, 5434, + 5435, 5435, 5435, 5435, 5425, 5436, 5436, 5436, 5436, 5437, + 5437, 5437, 5437, 5438, 5438, 5438, 5438, 5788, 5425, 5439, + 5439, 5439, 5439, 5788, 5803, 5427, 5440, 5440, 5440, 5440, + 5910, 5427, 5441, 5441, 5441, 5441, 5802, 5803, 5911, 5430, + + 5431, 5442, 5442, 5442, 5442, 5432, 5443, 5443, 5443, 5443, + 5444, 5444, 5444, 5444, 5445, 5445, 5445, 5445, 5802, 5738, + 5818, 5434, 5774, 5738, 5435, 5774, 5780, 5436, 5446, 5446, + 5446, 5446, 5738, 5784, 5437, 5799, 5743, 5818, 5438, 5799, + 5743, 5436, 5743, 5816, 5438, 5447, 5447, 5447, 5447, 5743, + 5448, 5448, 5448, 5448, 5912, 5441, 5779, 5441, 5449, 5449, + 5449, 5449, 5450, 5450, 5450, 5450, 5442, 5451, 5451, 5451, + 5451, 5444, 5452, 5452, 5452, 5452, 5453, 5453, 5453, 5453, + 5780, 5842, 5784, 5445, 5443, 5444, 5810, 5842, 5810, 5446, + 5454, 5454, 5454, 5454, 5455, 5455, 5455, 5455, 5456, 5456, + + 5456, 5456, 5780, 5446, 5457, 5457, 5457, 5457, 5816, 5784, + 5447, 5458, 5458, 5458, 5458, 5460, 5460, 5460, 5460, 5461, + 5461, 5461, 5461, 5914, 5779, 5447, 5448, 5462, 5462, 5462, + 5462, 5861, 5779, 5449, 5463, 5463, 5463, 5463, 5464, 5464, + 5464, 5464, 5450, 5465, 5465, 5465, 5465, 5861, 5739, 5767, + 5453, 5451, 5739, 5452, 5739, 5920, 5455, 5466, 5466, 5466, + 5466, 5739, 5739, 5767, 5454, 5850, 5767, 5456, 5467, 5467, + 5467, 5467, 5468, 5468, 5468, 5468, 5470, 5470, 5470, 5470, + 5850, 5461, 5471, 5471, 5471, 5471, 5472, 5472, 5472, 5472, + 5921, 5460, 5476, 5476, 5476, 5476, 5467, 5776, 5461, 5846, + + 5463, 5776, 5786, 5776, 5465, 5478, 5478, 5478, 5478, 5783, + 5776, 5464, 5480, 5480, 5480, 5480, 5846, 5464, 5481, 5481, + 5481, 5481, 5482, 5482, 5482, 5482, 5483, 5483, 5483, 5483, + 5484, 5484, 5484, 5484, 5485, 5485, 5485, 5485, 5486, 5486, + 5486, 5486, 5858, 5775, 5777, 5471, 5778, 5789, 5472, 5858, + 5468, 5470, 5487, 5487, 5487, 5487, 5775, 5786, 5471, 5775, + 5922, 5789, 5471, 5488, 5488, 5488, 5488, 5806, 5476, 5789, + 5783, 5868, 5476, 5489, 5489, 5489, 5489, 5868, 5786, 5481, + 5478, 5806, 5754, 5754, 5481, 5783, 5754, 5480, 5490, 5490, + 5490, 5490, 5754, 5819, 5484, 5819, 5778, 5482, 5491, 5491, + + 5491, 5491, 5494, 5494, 5494, 5494, 5483, 5923, 5835, 5485, + 5777, 5486, 5785, 5835, 5836, 5487, 5801, 5487, 5487, 5836, + 5777, 5487, 5778, 5487, 5487, 5492, 5492, 5492, 5492, 5841, + 5801, 5841, 5487, 5801, 5495, 5495, 5495, 5495, 5488, 5844, + 5924, 5844, 5489, 5488, 5496, 5496, 5496, 5496, 5497, 5497, + 5497, 5497, 5507, 5507, 5507, 5507, 5508, 5508, 5508, 5508, + 5509, 5509, 5509, 5509, 5785, 5510, 5510, 5510, 5510, 5891, + 5925, 5491, 5511, 5511, 5511, 5511, 5512, 5512, 5512, 5512, + 5891, 5513, 5513, 5513, 5513, 5491, 5507, 5809, 5785, 5824, + 5492, 5809, 5824, 5782, 5492, 5495, 5492, 5514, 5514, 5514, + + 5514, 5515, 5515, 5515, 5515, 5516, 5516, 5516, 5516, 5517, + 5517, 5517, 5517, 5520, 5520, 5520, 5520, 5497, 5518, 5518, + 5518, 5518, 5496, 5903, 5926, 5508, 5510, 5519, 5519, 5519, + 5519, 5521, 5521, 5521, 5521, 5903, 5509, 5522, 5522, 5522, + 5522, 5523, 5523, 5523, 5523, 5524, 5524, 5524, 5524, 5512, + 5927, 5821, 5822, 5511, 5513, 5525, 5525, 5525, 5525, 5782, + 5526, 5526, 5526, 5526, 5821, 5822, 5515, 5790, 5516, 5782, + 5516, 5790, 5805, 5815, 5516, 5805, 5516, 5805, 5514, 5815, + 5515, 5517, 5815, 5518, 5790, 5928, 5829, 5518, 5519, 5829, + 5519, 5520, 5527, 5527, 5527, 5527, 5521, 5528, 5528, 5528, + + 5528, 5529, 5529, 5529, 5529, 5854, 5929, 5843, 5523, 5530, + 5530, 5530, 5530, 5532, 5532, 5532, 5532, 5522, 5525, 5523, + 5814, 5843, 5814, 5524, 5814, 5526, 5531, 5531, 5531, 5531, + 5854, 5525, 5526, 5533, 5533, 5533, 5533, 5534, 5534, 5534, + 5534, 5535, 5535, 5535, 5535, 5536, 5536, 5536, 5536, 5537, + 5537, 5537, 5537, 5538, 5538, 5538, 5538, 5918, 5854, 5528, + 5539, 5539, 5539, 5539, 5540, 5540, 5540, 5540, 5918, 5930, + 5527, 5541, 5541, 5541, 5541, 5529, 5543, 5543, 5543, 5543, + 5530, 5542, 5542, 5542, 5542, 5529, 5544, 5544, 5544, 5544, + 5869, 5532, 5545, 5545, 5545, 5545, 5869, 5533, 5531, 5534, + + 5546, 5546, 5546, 5546, 5547, 5547, 5547, 5547, 5931, 5534, + 5548, 5548, 5548, 5548, 5549, 5549, 5549, 5549, 5837, 5932, + 5823, 5536, 5837, 5823, 5537, 5535, 5946, 5538, 5550, 5550, + 5550, 5550, 5551, 5551, 5551, 5551, 5539, 5957, 5946, 5540, + 5552, 5552, 5552, 5552, 5542, 5558, 5558, 5558, 5558, 5965, + 5543, 5559, 5559, 5559, 5559, 5541, 5916, 5545, 5599, 5826, + 5551, 5553, 5553, 5553, 5553, 5564, 5564, 5564, 5564, 5546, + 5916, 5545, 5826, 5544, 5560, 5560, 5560, 5560, 5820, 5828, + 5825, 5549, 5820, 5825, 5820, 5548, 5561, 5561, 5561, 5561, + 5853, 5820, 5828, 5550, 5562, 5562, 5562, 5562, 5823, 5853, + + 5549, 5563, 5563, 5563, 5563, 5552, 5599, 5857, 5825, 5552, + 5857, 5552, 5551, 5599, 5832, 5559, 5552, 5566, 5566, 5566, + 5566, 5567, 5567, 5567, 5567, 5599, 5553, 5832, 5851, 5864, + 5553, 5559, 5553, 5851, 5599, 5560, 5568, 5568, 5568, 5568, + 5564, 5569, 5569, 5569, 5569, 5570, 5570, 5570, 5570, 5905, + 5905, 5561, 5572, 5572, 5572, 5572, 5833, 5970, 5831, 5562, + 5573, 5573, 5573, 5573, 5905, 5847, 5563, 5847, 5831, 5833, + 5563, 5831, 5563, 5574, 5574, 5574, 5574, 5580, 5580, 5580, + 5580, 5583, 5583, 5583, 5583, 5584, 5584, 5584, 5584, 5740, + 5740, 5740, 5740, 5874, 5669, 5874, 5669, 5669, 5653, 5838, + + 5669, 5567, 5669, 5669, 5864, 5881, 5569, 5845, 5654, 5669, + 5570, 5881, 5838, 5584, 5653, 5653, 5653, 5653, 5653, 5653, + 5845, 5573, 5849, 5653, 5654, 5654, 5654, 5654, 5654, 5654, + 5945, 5880, 5580, 5654, 5726, 5849, 5583, 5852, 5971, 5945, + 5584, 5852, 5574, 5741, 5741, 5741, 5741, 5880, 5574, 5950, + 5726, 5726, 5726, 5726, 5726, 5726, 5580, 5975, 5950, 5726, + 5653, 5658, 5658, 5658, 5658, 5756, 5756, 5756, 5756, 5756, + 5756, 5741, 5976, 5811, 5811, 5811, 5811, 5757, 5856, 5953, + 5658, 5658, 5658, 5658, 5658, 5658, 5859, 5863, 5953, 5658, + 5859, 5856, 5658, 5757, 5757, 5757, 5757, 5757, 5757, 5863, + + 5863, 5840, 5757, 5792, 5792, 5792, 5792, 5840, 5860, 5860, + 5840, 5792, 5979, 5860, 5793, 5793, 5793, 5793, 5794, 5794, + 5794, 5794, 5975, 5658, 5882, 5658, 5794, 5658, 5658, 5811, + 5882, 5792, 5866, 5795, 5795, 5795, 5795, 5658, 5893, 5862, + 5658, 5658, 5793, 5862, 5893, 5866, 5794, 5867, 5658, 5659, + 5659, 5659, 5659, 5839, 5981, 5796, 5796, 5796, 5796, 5896, + 5867, 5795, 5839, 5796, 5792, 5839, 5984, 5839, 5659, 5659, + 5659, 5659, 5659, 5659, 5865, 5793, 5896, 5659, 5865, 5794, + 5659, 5966, 5792, 5796, 5804, 5804, 5804, 5804, 5966, 5812, + 5812, 5812, 5812, 5793, 5795, 5870, 5899, 5794, 5797, 5797, + + 5797, 5797, 5899, 5987, 5871, 5873, 5797, 5871, 5870, 5873, + 5872, 5659, 5795, 5659, 5871, 5659, 5796, 5812, 5848, 5875, + 5878, 5961, 5848, 5878, 5848, 5659, 5797, 5659, 5659, 5659, + 5961, 5848, 5875, 5876, 5796, 5796, 5659, 5744, 5830, 5877, + 5876, 5988, 5830, 5879, 5830, 5812, 5876, 5879, 5901, 5830, + 5901, 5830, 5886, 5877, 5885, 5894, 5877, 5885, 5885, 5797, + 5989, 5797, 5804, 5744, 5804, 5886, 5887, 5888, 5894, 5890, + 5887, 5804, 5872, 5890, 5989, 5990, 5872, 5797, 5872, 5889, + 5889, 5889, 5889, 5889, 5889, 5872, 5991, 5744, 5744, 5744, + 5744, 5892, 5744, 5744, 5992, 5993, 5744, 5744, 5744, 5897, + + 5744, 5744, 5744, 5897, 5744, 5897, 5744, 5898, 5892, 5892, + 5902, 5888, 5897, 5744, 5888, 5900, 5904, 5906, 5900, 5907, + 5906, 5898, 5904, 5908, 5898, 5907, 5908, 5902, 5902, 5909, + 5913, 5915, 5917, 5913, 5915, 5919, 5917, 5933, 5889, 5934, + 5933, 5919, 5909, 5935, 5936, 5934, 5936, 5937, 5938, 5942, + 5939, 5937, 5939, 5940, 5940, 5941, 5935, 5940, 5935, 5940, + 5943, 5938, 5942, 5944, 5943, 5947, 5940, 5948, 5952, 5944, + 5949, 5951, 5941, 5951, 5949, 5947, 5954, 5956, 5947, 5952, + 5948, 5956, 5955, 5952, 5955, 5958, 5963, 5949, 5994, 5949, + 5960, 5954, 5959, 5954, 5954, 5967, 5967, 5967, 5967, 5963, + + 5959, 5958, 5964, 5958, 5995, 5959, 5963, 5960, 5962, 5962, + 5962, 5962, 5962, 5962, 5972, 5964, 5968, 5968, 5968, 5968, + 5969, 5969, 5969, 5969, 5973, 5974, 5997, 5972, 5974, 5998, + 5973, 5980, 5982, 5973, 5985, 5980, 5982, 5983, 5985, 5999, + 5985, 5983, 6000, 5983, 6001, 5996, 5996, 6003, 5969, 5996, + 6004, 5983, 6005, 5999, 6006, 6007, 6008, 6009, 6010, 6011, + 6008, 6012, 6008, 6013, 6014, 6012, 6015, 5962, 6016, 6017, + 6018, 6007, 6019, 5967, 6020, 6020, 6020, 6020, 6021, 6022, + 6023, 6011, 5967, 6017, 6024, 6025, 6026, 6027, 6028, 6029, + 6026, 6030, 6031, 6032, 6033, 6034, 6036, 6032, 6035, 6032, + + 6037, 6035, 6038, 5968, 6039, 6040, 6042, 5969, 5977, 6040, + 6041, 6040, 6043, 6044, 6045, 6046, 6040, 6047, 6048, 6049, + 6041, 6050, 6051, 6052, 5977, 5977, 5977, 5977, 5977, 5977, + 6053, 6054, 6048, 5977, 6055, 6056, 5977, 6057, 6058, 6059, + 6060, 6057, 6061, 6057, 6062, 6063, 6064, 6065, 6066, 6067, + 6067, 6068, 6069, 6071, 6020, 6070, 6072, 6073, 6074, 6075, + 6076, 6020, 6077, 6078, 6079, 6080, 5977, 5977, 6070, 5977, + 6081, 6082, 6083, 6078, 6084, 6085, 6086, 6087, 6088, 6083, + 5977, 5977, 6089, 6090, 5977, 5977, 5978, 6090, 6084, 6091, + 6092, 6093, 6094, 6094, 6094, 6094, 6094, 6094, 6095, 6096, + + 6097, 6098, 5978, 5978, 5978, 5978, 5978, 5978, 6099, 6101, + 6100, 5978, 6102, 6101, 5978, 6101, 6103, 6104, 6097, 6105, + 6106, 6107, 6108, 6109, 6109, 6111, 6079, 6100, 6112, 6113, + 6079, 6114, 6079, 6119, 6120, 6093, 6121, 6122, 6106, 6123, + 6124, 6125, 6126, 6127, 6128, 5978, 6129, 5978, 6130, 6131, + 6131, 6132, 6133, 6131, 6134, 6131, 6135, 6126, 6136, 5978, + 6137, 6138, 5978, 5978, 5986, 6139, 6140, 6141, 6142, 6143, + 6140, 6138, 6144, 6145, 6146, 6147, 6149, 6151, 6150, 6152, + 6143, 6154, 6155, 6157, 6161, 6140, 6150, 6162, 6145, 6163, + 5986, 6145, 6164, 6159, 6149, 6153, 6153, 6153, 6153, 6153, + + 6153, 6154, 6158, 6158, 6158, 6158, 6159, 6160, 6165, 6166, + 6168, 6167, 6169, 6160, 5986, 5986, 5986, 5986, 6170, 5986, + 5986, 6167, 6172, 5986, 5986, 5986, 6171, 5986, 5986, 5986, + 6171, 5986, 6171, 5986, 6173, 6170, 6175, 6176, 6178, 6183, + 5986, 6184, 6188, 6194, 6195, 6196, 6198, 6200, 6201, 6202, + 6203, 6204, 6205, 6206, 6209, 6215, 6216, 6217, 6218, 6219, + 6202, 6220, 6221, 6222, 6223, 6223, 6223, 6223, 6224, 6225, + 6226, 6227, 6228, 6230, 6232, 6233, 6234, 6236, 6233, 6234, + 6237, 6238, 6239, 6241, 6240, 6240, 6240, 6240, 6243, 6158, + 6240, 6242, 6242, 6242, 6242, 6244, 6245, 6246, 6248, 6249, + + 6245, 6250, 6250, 6250, 6250, 6251, 6253, 6254, 6255, 6256, + 6254, 6257, 6258, 6260, 6261, 6262, 6263, 6261, 6265, 6266, + 6267, 6268, 6266, 6269, 6270, 6271, 6272, 6273, 6273, 6273, + 6273, 6274, 6275, 6239, 6277, 6278, 6280, 6281, 6284, 6283, + 6285, 6286, 6287, 6289, 6288, 6290, 6291, 6292, 6293, 6294, + 6295, 6223, 6296, 6299, 6301, 6298, 6274, 6250, 6288, 6302, + 6278, 6280, 6281, 6239, 6283, 6300, 6303, 6304, 6289, 6300, + 6305, 6240, 6292, 6293, 6305, 6306, 6307, 6308, 6242, 6309, + 6298, 6246, 6279, 6310, 6302, 6311, 6314, 6314, 6314, 6314, + 6312, 6303, 6304, 6316, 6312, 6319, 6312, 6320, 6279, 6279, + + 6279, 6279, 6279, 6279, 6312, 6322, 6321, 6279, 6298, 6323, + 6279, 6315, 6315, 6315, 6315, 6317, 6324, 6327, 6328, 6317, + 6321, 6317, 6325, 6329, 6331, 6332, 6331, 6333, 6334, 6326, + 6330, 6335, 6336, 6338, 6338, 6339, 6337, 6338, 6307, 6315, + 6342, 6279, 6307, 6279, 6307, 6343, 6340, 6341, 6341, 6341, + 6341, 6344, 6346, 6347, 6345, 6279, 6350, 6279, 6279, 6279, + 6282, 6337, 6340, 6340, 6340, 6340, 6340, 6340, 6345, 6351, + 6343, 6340, 6352, 6314, 6353, 6325, 6282, 6282, 6282, 6282, + 6282, 6282, 6326, 6330, 6325, 6282, 6354, 6355, 6282, 6356, + 6357, 6326, 6358, 6359, 6351, 6360, 6362, 6352, 6315, 6361, + + 6363, 6364, 6365, 6335, 6367, 6364, 6366, 6364, 6367, 6368, + 6367, 6369, 6372, 6373, 6374, 6375, 6371, 6376, 6359, 6282, + 6360, 6282, 6366, 6341, 6361, 6379, 6382, 6381, 6385, 6343, + 6380, 6388, 6386, 6282, 6379, 6388, 6282, 6282, 6318, 6381, + 6380, 6383, 6384, 6370, 6387, 6389, 6383, 6390, 6382, 6391, + 6384, 6392, 6393, 6385, 6386, 6394, 6395, 6396, 6397, 6398, + 6399, 6400, 6402, 6403, 6318, 6404, 6405, 6406, 6407, 6394, + 6411, 6410, 6412, 6413, 6368, 6410, 6414, 6369, 6415, 6418, + 6422, 6395, 6424, 6371, 6398, 6368, 6318, 6369, 6318, 6318, + 6318, 6318, 6371, 6318, 6318, 6425, 6427, 6318, 6318, 6318, + + 6428, 6318, 6318, 6318, 6370, 6318, 6387, 6318, 6430, 6416, + 6387, 6370, 6387, 6416, 6318, 6416, 6432, 6434, 6437, 6370, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + + 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, + 6378, 6378, 6378, 6401, 6401, 6401, 6401, 6408, 6423, 6417, + 6429, 6408, 6417, 6408, 6409, 6409, 6409, 6409, 6419, 6420, + 6431, 6419, 6420, 6408, 6421, 6426, 6433, 6421, 6435, 6426, + 6431, 6426, 6436, 6423, 6438, 6429, 6426, 6439, 6440, 6441, + 6442, 6443, 6409, 6444, 6445, 6446, 6447, 6420, 6448, 6450, + 6449, 6433, 6451, 6435, 6452, 6453, 6454, 6455, 6456, 6438, + 6458, 6459, 6457, 6460, 6441, 6442, 6461, 6462, 6463, 6464, + 6409, 6465, 6466, 6468, 6417, 6449, 6457, 6469, 6470, 6470, + 6470, 6470, 6473, 6401, 6474, 6474, 6474, 6474, 6475, 6421, + + 6401, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6480, + 6484, 6480, 6485, 6486, 6484, 6487, 6484, 6436, 6453, 6488, + 6455, 6484, 6489, 6490, 6491, 6492, 6493, 6494, 6454, 6455, + 6495, 6496, 6454, 6498, 6454, 6497, 6497, 6485, 6499, 6500, + 6502, 6501, 6499, 6503, 6504, 6505, 6506, 6507, 6508, 6491, + 6510, 6509, 6512, 6470, 6501, 6511, 6513, 6514, 6515, 6516, + 6517, 6518, 6519, 6520, 6521, 6522, 6524, 6525, 6523, 6504, + 6526, 6527, 6528, 6529, 6530, 6470, 6509, 6491, 6523, 6531, + 6511, 6474, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6532, + 6539, 6540, 6541, 6544, 6545, 6526, 6546, 6533, 6542, 6542, + + 6542, 6542, 6543, 6543, 6543, 6543, 6547, 6548, 6549, 6550, + 6547, 6552, 6537, 6553, 6554, 6556, 6555, 6559, 6513, 6557, + 6558, 6560, 6513, 6563, 6513, 6565, 6561, 6566, 6567, 6525, + 6543, 6568, 6569, 6525, 6555, 6525, 6551, 6551, 6551, 6551, + 6551, 6551, 6529, 6561, 6557, 6558, 6560, 6570, 6562, 6571, + 6572, 6564, 6562, 6550, 6562, 6564, 6573, 6564, 6574, 6575, + 6576, 6577, 6577, 6579, 6580, 6570, 6581, 6564, 6582, 6587, + 6588, 6589, 6590, 6591, 6591, 6591, 6591, 6594, 6595, 6587, + 6592, 6592, 6592, 6592, 6596, 6597, 6598, 6599, 6601, 6602, + 6603, 6604, 6605, 6606, 6569, 6602, 6607, 6590, 6608, 6609, + + 6604, 6610, 6594, 6611, 6569, 6613, 6612, 6614, 6592, 6615, + 6616, 6617, 6618, 6618, 6619, 6620, 6618, 6621, 6618, 6622, + 6574, 6612, 6623, 6624, 6625, 6626, 6628, 6627, 6629, 6630, + 6574, 6627, 6631, 6632, 6625, 6633, 6634, 6635, 6636, 6638, + 6630, 6639, 6640, 6641, 6644, 6645, 6627, 6643, 6646, 6639, + 6633, 6647, 6649, 6633, 6653, 6655, 6654, 6638, 6656, 6640, + 6642, 6642, 6642, 6642, 6642, 6642, 6657, 6643, 6650, 6650, + 6650, 6650, 6651, 6651, 6651, 6651, 6652, 6658, 6659, 6660, + 6652, 6654, 6652, 6661, 6662, 6660, 6663, 6664, 6665, 6666, + 6658, 6667, 6668, 6669, 6670, 6670, 6671, 6671, 6671, 6671, + + 6651, 6672, 6673, 6659, 6674, 6675, 6676, 6677, 6678, 6679, + 6680, 6663, 6674, 6681, 6681, 6682, 6682, 6682, 6683, 6683, + 6684, 6684, 6674, 6685, 6687, 6688, 6686, 6691, 6687, 6689, + 6687, 6690, 6692, 6693, 6694, 6687, 6695, 6689, 6696, 6690, + 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6689, 6704, 6705, + 6706, 6671, 6707, 6708, 6709, 6650, 6710, 6711, 6713, 6651, + 6714, 6715, 6716, 6714, 6717, 6718, 6719, 6720, 6721, 6723, + 6722, 6724, 6728, 6728, 6730, 6671, 6728, 6670, 6686, 6732, + 6732, 6746, 6728, 6732, 6721, 6721, 6721, 6721, 6721, 6721, + 6693, 6734, 6734, 6721, 6753, 6734, 6681, 6683, 6740, 6754, + + 6684, 6703, 6686, 6741, 6737, 6737, 6724, 6704, 6737, 6706, + 6729, 6729, 6729, 6729, 6693, 6705, 6708, 6722, 6731, 6731, + 6707, 6755, 6731, 6740, 6731, 6733, 6733, 6736, 6741, 6733, + 6742, 6733, 6735, 6735, 6736, 6736, 6735, 6758, 6736, 6738, + 6720, 6725, 6760, 6745, 6735, 6736, 6738, 6738, 6743, 6743, + 6738, 6761, 6743, 6763, 6743, 6742, 6739, 6725, 6725, 6725, + 6725, 6725, 6725, 6739, 6739, 6765, 6725, 6739, 6745, 6725, + 6744, 6744, 6770, 6772, 6744, 6773, 6774, 6775, 6729, 6729, + 6776, 6777, 6729, 6778, 6779, 6780, 6784, 6785, 6789, 6797, + 6729, 6781, 6781, 6781, 6781, 6781, 6781, 6729, 6862, 6862, + + 6725, 6874, 6725, 6725, 6725, 6883, 6912, 6725, 6883, 6725, + 6938, 6787, 6787, 6942, 6725, 6787, 6965, 6725, 6725, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + + 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, 6726, + 6726, 6726, 6727, 6756, 6756, 6756, 6756, 6782, 6757, 6757, + 6757, 6757, 6783, 6783, 6967, 6794, 6798, 6799, 6727, 6727, + 6727, 6727, 6727, 6727, 6790, 6790, 6791, 6727, 6790, 6968, + 6727, 6791, 6791, 6800, 6969, 6791, 6802, 6790, 6792, 6792, + 6794, 6804, 6792, 6801, 6793, 6793, 6795, 6795, 6793, 6796, + 6795, 6803, 6799, 6795, 6796, 6796, 6782, 6805, 6796, 6756, + 6793, 6727, 6796, 6727, 6757, 6727, 6806, 6727, 6727, 6808, + 6807, 6727, 6809, 6810, 6782, 6727, 6828, 6794, 6727, 6727, + 6794, 6794, 6811, 6794, 6794, 6800, 6813, 6838, 6812, 6970, + + 6783, 6921, 6798, 6799, 6971, 6801, 6802, 6802, 6928, 6801, + 6802, 6828, 6815, 6815, 6972, 6801, 6815, 6803, 6804, 6800, + 6803, 6884, 6802, 6815, 6884, 6973, 6921, 6804, 6807, 6801, + 6974, 6843, 6806, 6928, 6805, 6975, 6807, 6803, 6809, 6976, + 6811, 6808, 6977, 6805, 7016, 7023, 6812, 6838, 6813, 6884, + 7027, 6810, 6806, 6812, 6840, 6808, 6807, 7018, 6809, 6810, + 6816, 6816, 6826, 7030, 6816, 6812, 6817, 6817, 6811, 7030, + 6817, 6842, 6813, 6838, 6812, 7026, 6817, 6818, 7054, 6816, + 6818, 6818, 6819, 6819, 6818, 6819, 6819, 6820, 6821, 6821, + 6820, 6820, 6821, 7026, 6820, 6821, 6822, 6822, 6843, 6823, + + 6822, 6822, 6823, 6823, 6824, 6824, 6823, 6843, 6824, 6839, + 6824, 6825, 6825, 6841, 6840, 6825, 6844, 6826, 6826, 7044, + 6845, 6826, 6827, 6827, 6827, 6827, 6827, 6827, 6829, 6829, + 6840, 6842, 6829, 7018, 6829, 6830, 6830, 6831, 6831, 6830, + 7067, 6831, 6832, 6832, 6831, 6846, 6832, 6842, 6831, 6833, + 6833, 6830, 6847, 6833, 6834, 6834, 6833, 7033, 6834, 7033, + 6833, 6835, 6835, 6836, 6836, 6835, 6834, 6836, 7083, 6835, + 6837, 6837, 6844, 7028, 6837, 6836, 7028, 6839, 6837, 6845, + 6837, 6841, 6848, 6848, 7034, 6839, 6848, 7044, 6845, 6841, + 7034, 7095, 6844, 7095, 6846, 6849, 6845, 6863, 6849, 6849, + + 6847, 6846, 6849, 6850, 6863, 6863, 6850, 6850, 6863, 6851, + 6850, 6851, 6851, 7050, 7050, 6851, 6852, 6853, 6853, 6853, + 6853, 6846, 6859, 6852, 6852, 6859, 6859, 6852, 6847, 6859, + 6852, 6854, 6854, 6854, 6854, 7104, 6855, 6855, 6855, 6855, + 7048, 6857, 6857, 6857, 6857, 6858, 6858, 6858, 6860, 6857, + 6858, 6860, 6860, 7048, 7109, 6860, 6861, 6861, 6860, 7036, + 6861, 6864, 6864, 6864, 6864, 6865, 6865, 6865, 6865, 6857, + 6866, 6866, 6861, 7038, 6866, 7036, 6868, 6866, 6853, 6868, + 6868, 6869, 7051, 6868, 6869, 6869, 6868, 7051, 6869, 7038, + 6871, 6871, 6854, 6865, 6871, 7035, 6853, 6855, 7035, 6855, + + 6872, 7164, 6857, 6872, 6872, 6873, 7040, 6872, 6873, 6873, + 6854, 6854, 6873, 7041, 7040, 6855, 6856, 6856, 6856, 6856, + 6857, 6875, 6875, 6890, 6856, 6875, 7052, 7052, 6875, 7041, + 6856, 6880, 6856, 6856, 6880, 6856, 6856, 6856, 6856, 6856, + 6856, 7037, 6876, 6876, 6856, 6865, 6876, 6881, 6864, 6878, + 6881, 7037, 6865, 6878, 6878, 6879, 6879, 6878, 6882, 6879, + 6885, 6882, 6886, 6885, 7197, 6886, 6886, 6879, 6886, 6886, + 6887, 6887, 6887, 6886, 6888, 6887, 6887, 6856, 6888, 6889, + 6889, 6888, 6888, 6889, 6889, 6888, 6891, 6891, 6890, 6890, + 6891, 7198, 6890, 7071, 6890, 6856, 7043, 6892, 6892, 6880, + + 6880, 6892, 7071, 6880, 6892, 6893, 6893, 6880, 7043, 6893, + 6894, 7042, 6893, 6894, 6894, 6881, 6881, 6894, 7042, 6881, + 6881, 6899, 6899, 6899, 6899, 6899, 6882, 6882, 6885, 6885, + 6882, 6882, 6885, 6885, 6895, 7046, 6896, 6896, 7046, 6897, + 6896, 6895, 6895, 6896, 7039, 6895, 6897, 6897, 6900, 6898, + 6897, 7039, 7088, 6897, 6898, 6898, 6901, 7039, 6898, 6901, + 6901, 6900, 6900, 6901, 7088, 6900, 7045, 6899, 6902, 6902, + 6899, 6899, 6902, 7045, 6899, 6902, 6903, 6903, 6904, 6904, + 6903, 6904, 6904, 7062, 7031, 6905, 7062, 6903, 6905, 6905, + 6906, 6906, 6905, 7063, 6906, 6907, 6907, 7031, 6906, 6907, + + 6906, 6909, 7031, 6908, 6908, 6907, 6908, 6908, 6909, 6909, + 6910, 6910, 6909, 7063, 6910, 6911, 6911, 6913, 6913, 6911, + 7201, 6913, 6910, 6914, 6914, 6911, 6916, 6914, 6915, 6915, + 6916, 6916, 6915, 6914, 6916, 6917, 6918, 6918, 6927, 6915, + 6918, 7064, 6917, 6917, 6919, 6919, 6917, 7064, 6919, 6918, + 6920, 6919, 6917, 6920, 6920, 6922, 6920, 6920, 6922, 6922, + 6923, 6923, 6922, 6927, 6923, 6923, 6924, 6924, 6925, 6925, + 6924, 7055, 6925, 6926, 6926, 6925, 6929, 6926, 6926, 6926, + 6929, 6929, 6930, 6930, 6929, 6931, 6930, 7055, 6941, 6930, + 6931, 6931, 7056, 6932, 6931, 6931, 6932, 6932, 6933, 6933, + + 6932, 7057, 6933, 6927, 6927, 6934, 6934, 6927, 7056, 6934, + 6934, 6935, 6935, 6936, 6933, 6935, 7057, 7202, 6937, 6937, + 6936, 6936, 6937, 7060, 6936, 6935, 6939, 6936, 7096, 6939, + 6939, 6948, 6939, 6939, 6943, 6937, 6940, 6940, 7096, 7060, + 6940, 7072, 6940, 6941, 6941, 6944, 6944, 6941, 7081, 6944, + 6943, 6943, 6943, 6943, 6943, 6943, 7081, 6944, 7072, 6943, + 6945, 6945, 6947, 6947, 6945, 7099, 6947, 6949, 7099, 7059, + 6949, 6949, 6945, 6946, 6949, 7103, 6950, 6950, 7103, 6947, + 6950, 6954, 6954, 7059, 6946, 6954, 6946, 6946, 6954, 6946, + 6946, 6946, 6946, 6946, 6946, 7047, 6948, 6948, 6951, 7047, + + 6948, 7047, 6948, 6951, 6951, 7073, 7073, 6951, 6952, 6952, + 6952, 6952, 6953, 6953, 7066, 7090, 6953, 6955, 6953, 7203, + 6955, 6955, 6956, 6955, 6955, 6957, 6957, 6956, 6956, 6957, + 7066, 6956, 6957, 7090, 6956, 6946, 6963, 6963, 6946, 6946, + 6963, 6946, 6946, 6958, 6958, 6984, 6958, 6958, 6959, 6959, + 7102, 7102, 6959, 6960, 6960, 6959, 6961, 6960, 6960, 6961, + 6961, 6962, 7100, 6961, 6964, 6964, 6962, 6962, 6964, 7204, + 6962, 6961, 7100, 7070, 6978, 6978, 6952, 6952, 6978, 7070, + 6952, 6964, 6979, 6979, 6980, 6980, 6979, 6981, 6980, 6981, + 7205, 6980, 6981, 6981, 6979, 6952, 6981, 6982, 6982, 6983, + + 6983, 6982, 7084, 6983, 6981, 6983, 6985, 6984, 7084, 6982, + 6984, 6984, 6985, 6985, 6984, 7206, 6985, 6986, 6986, 6985, + 7068, 6986, 6987, 7069, 6993, 6986, 7085, 6987, 6987, 6984, + 6988, 6987, 7085, 6987, 6988, 6988, 7068, 7087, 6988, 7069, + 6987, 6989, 6989, 6990, 6990, 6989, 7058, 6990, 6989, 6991, + 6991, 6992, 6992, 6991, 7101, 6992, 6991, 7087, 6993, 6993, + 7058, 6990, 6993, 6994, 6994, 6994, 7058, 6992, 6994, 6995, + 6995, 7124, 7124, 6995, 7101, 6995, 6996, 6996, 6997, 6997, + 6996, 7003, 6997, 6996, 6998, 7166, 6997, 6999, 6999, 6998, + 6998, 6999, 7005, 6998, 7000, 7000, 6998, 7001, 7000, 7005, + + 7005, 7001, 7011, 7005, 7001, 7001, 7000, 7002, 7001, 7105, + 7002, 7002, 7105, 7002, 7002, 7003, 7003, 7004, 7004, 7003, + 7006, 7004, 7003, 7002, 7004, 7049, 7006, 7006, 7007, 7049, + 7006, 7049, 7166, 7006, 7079, 7007, 7007, 7008, 7010, 7007, + 7079, 7008, 7008, 7009, 7009, 7008, 7032, 7009, 7079, 7009, + 7106, 7008, 7106, 7012, 7010, 7010, 7010, 7010, 7010, 7010, + 7012, 7012, 7019, 7010, 7012, 7019, 7019, 7011, 7011, 7019, + 7029, 7011, 7082, 7011, 7013, 7013, 7013, 7013, 7014, 7014, + 7014, 7014, 7020, 7020, 7021, 7021, 7020, 7020, 7021, 7021, + 7089, 7053, 7128, 7053, 7032, 7029, 7053, 7061, 7065, 7128, + + 7074, 7080, 7032, 7074, 7089, 7080, 7014, 7061, 7065, 7086, + 7089, 7092, 7093, 7061, 7065, 7075, 7076, 7077, 7075, 7076, + 7077, 7080, 7032, 7078, 7097, 7086, 7139, 7078, 7093, 7078, + 7107, 7207, 7029, 7139, 7078, 7110, 7029, 7092, 7029, 7078, + 7097, 7110, 7094, 7082, 7098, 7094, 7098, 7107, 7029, 7098, + 7082, 7094, 7108, 7091, 7091, 7091, 7091, 7091, 7111, 7112, + 7113, 7013, 7111, 7118, 7111, 7014, 7024, 7115, 7113, 7108, + 7114, 7119, 7108, 7115, 7111, 7112, 7074, 7119, 7117, 7114, + 7118, 7074, 7024, 7024, 7024, 7024, 7024, 7024, 7075, 7076, + 7077, 7024, 7116, 7116, 7024, 7120, 7075, 7076, 7077, 7091, + + 7116, 7121, 7091, 7117, 7122, 7120, 7123, 7122, 7125, 7129, + 7130, 7130, 7126, 7120, 7123, 7091, 7126, 7121, 7131, 7131, + 7127, 7134, 7125, 7136, 7127, 7024, 7127, 7024, 7125, 7133, + 7135, 7137, 7208, 7133, 7141, 7136, 7127, 7142, 7141, 7024, + 7141, 7143, 7024, 7024, 7025, 7209, 7135, 7143, 7144, 7137, + 7141, 7138, 7138, 7138, 7138, 7142, 7117, 7148, 7144, 7149, + 7025, 7025, 7025, 7025, 7025, 7025, 7147, 7140, 7145, 7025, + 7146, 7149, 7025, 7140, 7145, 7148, 7150, 7129, 7146, 7140, + 7150, 7147, 7147, 7153, 7151, 7152, 7152, 7155, 7155, 7153, + 7156, 7157, 7134, 7151, 7154, 7153, 7154, 7156, 7160, 7134, + + 7158, 7159, 7162, 7025, 7167, 7025, 7159, 7161, 7162, 7160, + 7163, 7154, 7154, 7173, 7173, 7163, 7160, 7025, 7167, 7158, + 7025, 7025, 7025, 7132, 7161, 7165, 7168, 7176, 7165, 7169, + 7211, 7183, 7138, 7168, 7132, 7169, 7132, 7132, 7138, 7132, + 7132, 7132, 7132, 7132, 7132, 7170, 7171, 7172, 7177, 7185, + 7170, 7174, 7171, 7157, 7177, 7174, 7175, 7178, 7171, 7172, + 7175, 7180, 7175, 7179, 7171, 7185, 7181, 7184, 7176, 7157, + 7186, 7174, 7175, 7212, 7176, 7157, 7179, 7178, 7186, 7182, + 7181, 7180, 7179, 7181, 7189, 7132, 7182, 7184, 7188, 7132, + 7193, 7132, 7190, 7213, 7187, 7187, 7191, 7190, 7188, 7195, + + 7189, 7132, 7183, 7187, 7191, 7192, 7193, 7194, 7210, 7183, + 7214, 7195, 7215, 7217, 7218, 7192, 7196, 7196, 7196, 7196, + 7196, 7196, 7219, 7194, 7220, 7221, 7215, 7218, 7222, 7223, + 7224, 7226, 7227, 7228, 7229, 7210, 7230, 7231, 7232, 7233, + 7231, 7232, 7234, 7235, 7238, 7239, 7235, 7236, 7236, 7236, + 7236, 7240, 7241, 7236, 7242, 7243, 7244, 7245, 7246, 7244, + 7245, 7246, 7247, 7257, 7248, 7247, 7240, 7248, 7249, 7250, + 7251, 7249, 7250, 7251, 7252, 7253, 7254, 7252, 7253, 7254, + 7255, 7256, 7260, 7255, 7261, 7267, 7268, 7256, 7256, 7258, + 7258, 7258, 7258, 7259, 7259, 7259, 7259, 7264, 7265, 7266, + + 7259, 7270, 7269, 7265, 7264, 7269, 7266, 7271, 7272, 7273, + 7271, 7274, 7275, 7276, 7277, 7273, 7284, 7278, 7235, 7246, + 7279, 7280, 7276, 7274, 7281, 7283, 7282, 7285, 7289, 7245, + 7282, 7251, 7289, 7287, 7236, 7291, 7288, 7254, 7291, 7277, + 7286, 7250, 7278, 7290, 7292, 7279, 7280, 7253, 7295, 7281, + 7283, 7248, 7286, 7286, 7292, 7290, 7297, 7293, 7298, 7299, + 7255, 7293, 7298, 7294, 7296, 7300, 7302, 7303, 7305, 7299, + 7301, 7304, 7306, 7311, 7308, 7300, 7308, 7303, 7304, 7311, + 7272, 7305, 7259, 7262, 7288, 7307, 7306, 7283, 7294, 7296, + 7312, 7283, 7288, 7283, 7313, 7301, 7309, 7283, 7287, 7262, + + 7262, 7262, 7262, 7262, 7262, 7319, 7309, 7321, 7262, 7287, + 7307, 7262, 7288, 7310, 7310, 7316, 7294, 7296, 7325, 7313, + 7314, 7314, 7315, 7301, 7316, 7317, 7318, 7315, 7320, 7317, + 7322, 7323, 7320, 7318, 7324, 7323, 7326, 7326, 7328, 7324, + 7330, 7326, 7262, 7328, 7262, 7327, 7327, 7329, 7329, 7331, + 7329, 7332, 7312, 7333, 7334, 7262, 7262, 7335, 7336, 7262, + 7262, 7263, 7337, 7338, 7341, 7339, 7339, 7339, 7339, 7348, + 7342, 7335, 7337, 7341, 7342, 7343, 7344, 7263, 7263, 7263, + 7263, 7263, 7263, 7342, 7343, 7344, 7263, 7345, 7330, 7263, + 7354, 7346, 7322, 7347, 7348, 7349, 7345, 7350, 7345, 7332, + + 7346, 7333, 7322, 7347, 7349, 7351, 7322, 7352, 7353, 7334, + 7355, 7350, 7331, 7351, 7356, 7354, 7330, 7352, 7353, 7355, + 7263, 7359, 7263, 7363, 7367, 7331, 7360, 7332, 7357, 7333, + 7334, 7361, 7381, 7263, 7263, 7338, 7360, 7263, 7263, 7339, + 7339, 7361, 7357, 7366, 7368, 7370, 7382, 7368, 7385, 7366, + 7370, 7391, 7339, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, 7340, + 7340, 7340, 7340, 7340, 7340, 7340, 7358, 7358, 7358, 7358, + 7364, 7365, 7369, 7371, 7373, 7376, 7371, 7392, 7376, 7374, + 7364, 7365, 7374, 7369, 7375, 7375, 7375, 7375, 7386, 7384, + 7377, 7378, 7379, 7377, 7358, 7378, 7387, 7378, 7379, 7373, + 7379, 7378, 7378, 7376, 7380, 7383, 7388, 7383, 7380, 7389, + 7390, 7393, 7394, 7386, 7395, 7396, 7397, 7398, 7380, 7400, + + 7399, 7400, 7396, 7404, 7395, 7401, 7402, 7403, 7406, 7403, + 7405, 7388, 7409, 7407, 7389, 7390, 7405, 7404, 7407, 7409, + 7414, 7397, 7406, 7414, 7374, 7399, 7358, 7412, 7371, 7371, + 7401, 7402, 7374, 7358, 7374, 7377, 7408, 7375, 7415, 7375, + 7384, 7384, 7410, 7377, 7422, 7377, 7408, 7412, 7387, 7427, + 7408, 7435, 7423, 7399, 7410, 7413, 7423, 7437, 7443, 7402, + 7411, 7411, 7411, 7411, 7411, 7413, 7416, 7416, 7416, 7416, + 7417, 7417, 7417, 7417, 7419, 7419, 7419, 7419, 7425, 7420, + 7420, 7420, 7420, 7424, 7439, 7445, 7446, 7424, 7425, 7426, + 7426, 7428, 7426, 7431, 7428, 7439, 7429, 7431, 7417, 7430, + + 7429, 7432, 7430, 7433, 7450, 7447, 7411, 7420, 7433, 7411, + 7429, 7434, 7440, 7442, 7434, 7432, 7411, 7436, 7438, 7442, + 7436, 7441, 7438, 7451, 7441, 7448, 7440, 7444, 7453, 7440, + 7447, 7444, 7449, 7444, 7449, 7448, 7454, 7444, 7452, 7454, + 7453, 7455, 7456, 7457, 7458, 7461, 7455, 7462, 7451, 7463, + 7457, 7459, 7456, 7416, 7459, 7464, 7465, 7417, 7460, 7460, + 7460, 7419, 7466, 7452, 7467, 7468, 7420, 7465, 7470, 7469, + 7472, 7473, 7462, 7471, 7474, 7475, 7476, 7475, 7470, 7469, + 7464, 7469, 7471, 7476, 7477, 7478, 7483, 7479, 7484, 7467, + 7479, 7480, 7482, 7482, 7503, 7472, 7473, 7486, 7477, 7474, + + 7487, 7480, 7486, 7481, 7485, 7487, 7490, 7481, 7488, 7481, + 7478, 7491, 7488, 7481, 7498, 7498, 7490, 7461, 7481, 7462, + 7485, 7485, 7485, 7485, 7485, 7485, 7492, 7493, 7494, 7485, + 7500, 7495, 7497, 7493, 7504, 7497, 7492, 7495, 7508, 7499, + 7494, 7496, 7496, 7496, 7496, 7499, 7505, 7502, 7483, 7489, + 7501, 7502, 7501, 7502, 7506, 7500, 7506, 7502, 7510, 7517, + 7489, 7507, 7489, 7489, 7513, 7489, 7489, 7489, 7489, 7489, + 7489, 7505, 7509, 7507, 7513, 7511, 7509, 7511, 7512, 7513, + 7514, 7512, 7491, 7491, 7515, 7516, 7518, 7519, 7520, 7521, + 7515, 7519, 7514, 7522, 7523, 7516, 7519, 7524, 7525, 7526, + + 7527, 7528, 7529, 7530, 7531, 7536, 7530, 7532, 7533, 7531, + 7533, 7489, 7529, 7532, 7534, 7489, 7496, 7489, 7538, 7534, + 7533, 7489, 7535, 7535, 7537, 7533, 7539, 7539, 7496, 7537, + 7540, 7538, 7541, 7542, 7543, 7544, 7547, 7545, 7546, 7548, + 7548, 7540, 7540, 7541, 7547, 7543, 7545, 7549, 7540, 7550, + 7550, 7551, 7552, 7558, 7553, 7554, 7555, 7551, 7552, 7553, + 7555, 7559, 7556, 7551, 7566, 7554, 7556, 7536, 7556, 7560, + 7555, 7561, 7556, 7562, 7563, 7568, 7557, 7536, 7556, 7546, + 7557, 7565, 7557, 7560, 7561, 7563, 7557, 7562, 7563, 7536, + 7564, 7564, 7567, 7569, 7558, 7567, 7570, 7565, 7565, 7565, + + 7565, 7565, 7565, 7573, 7572, 7574, 7565, 7572, 7575, 7576, + 7570, 7571, 7571, 7571, 7571, 7577, 7580, 7578, 7572, 7578, + 7581, 7582, 7575, 7576, 7583, 7577, 7579, 7579, 7573, 7579, + 7574, 7584, 7584, 7585, 7585, 7585, 7585, 7588, 7588, 7571, + 7586, 7586, 7586, 7586, 7589, 7589, 7568, 7568, 7586, 7587, + 7587, 7587, 7587, 7590, 7591, 7592, 7592, 7587, 7593, 7594, + 7595, 7596, 7597, 7597, 7601, 7569, 7598, 7598, 7598, 7590, + 7599, 7599, 7600, 7600, 7602, 7604, 7607, 7603, 7605, 7605, + 7608, 7603, 7606, 7606, 7612, 7609, 7613, 7614, 7585, 7611, + 7611, 7611, 7611, 7611, 7611, 7586, 7586, 7603, 7571, 7615, + + 7616, 7617, 7619, 7620, 7587, 7587, 7621, 7622, 7589, 7584, + 7618, 7623, 7618, 7627, 7624, 7629, 7628, 7630, 7616, 7628, + 7631, 7632, 7633, 7602, 7625, 7625, 7625, 7625, 7625, 7635, + 7602, 7638, 7639, 7600, 7599, 7636, 7634, 7641, 7642, 7645, + 7597, 7626, 7626, 7626, 7626, 7626, 7626, 7646, 7647, 7649, + 7602, 7609, 7634, 7634, 7634, 7634, 7634, 7634, 7643, 7643, + 7648, 7621, 7643, 7635, 7644, 7650, 7609, 7644, 7648, 7620, + 7619, 7651, 7652, 7636, 7653, 7654, 7655, 7658, 7657, 7622, + 7624, 7653, 7657, 7664, 7625, 7623, 7659, 7659, 7659, 7659, + 7661, 7665, 7666, 7653, 7667, 7667, 7667, 7667, 7668, 7671, + + 7661, 7665, 7668, 7669, 7672, 7632, 7637, 7669, 7668, 7669, + 7673, 7674, 7675, 7671, 7670, 7670, 7676, 7677, 7678, 7679, + 7680, 7681, 7637, 7637, 7637, 7637, 7637, 7637, 7670, 7658, + 7673, 7637, 7683, 7684, 7637, 7685, 7686, 7687, 7688, 7689, + 7690, 7691, 7695, 7696, 7666, 7698, 7699, 7690, 7700, 7701, + 7731, 7732, 7703, 7730, 7698, 7704, 7734, 7730, 7739, 7667, + 7734, 7735, 7736, 7735, 7740, 7637, 7637, 7637, 7703, 7637, + 7704, 7736, 7731, 7659, 7701, 7744, 7759, 7772, 7773, 7637, + 7739, 7667, 7637, 7637, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7640, + 7640, 7640, 7640, 7640, 7640, 7640, 7640, 7656, 7660, 7660, + 7660, 7660, 7693, 7733, 7694, 7694, 7705, 7706, 7710, 7775, + 7707, 7708, 7709, 7656, 7656, 7656, 7656, 7656, 7656, 7716, + + 7715, 7711, 7656, 7718, 7714, 7656, 7660, 7713, 7717, 7745, + 7712, 7780, 7719, 7742, 7720, 7705, 7782, 7723, 7741, 7745, + 7795, 7774, 7741, 7722, 7741, 7741, 7727, 7774, 7742, 7746, + 7747, 7693, 7721, 7752, 7799, 7728, 7656, 7725, 7656, 7656, + 7656, 7726, 7709, 7724, 7746, 7733, 7750, 7748, 7706, 7751, + 7656, 7716, 7749, 7656, 7656, 7753, 7707, 7708, 7660, 7694, + 7715, 7713, 7705, 7706, 7710, 7660, 7707, 7708, 7709, 7711, + 7718, 7712, 7714, 7719, 7717, 7716, 7715, 7711, 7712, 7718, + 7714, 7720, 7721, 7713, 7717, 7722, 7712, 7723, 7719, 7725, + 7720, 7727, 7724, 7723, 7754, 7747, 7726, 7728, 7743, 7722, + + 7743, 7728, 7727, 7728, 7749, 7751, 7747, 7748, 7721, 7752, + 7743, 7750, 7755, 7725, 7743, 7757, 7756, 7726, 7753, 7724, + 7758, 7761, 7750, 7748, 7760, 7751, 7769, 7770, 7749, 7769, + 7779, 7753, 7777, 7771, 7760, 7784, 7807, 7776, 7784, 7760, + 7761, 7762, 7762, 7762, 7762, 7777, 7754, 7764, 7764, 7764, + 7764, 7778, 7770, 7768, 7768, 7768, 7768, 7781, 7783, 7778, + 7778, 7768, 7783, 7786, 7781, 7809, 7786, 7779, 7783, 7758, + 7754, 7755, 7756, 7797, 7797, 7785, 7757, 7787, 7785, 7788, + 7787, 7768, 7788, 7789, 7790, 7771, 7789, 7790, 7755, 7770, + 7776, 7757, 7756, 7792, 7793, 7771, 7758, 7792, 7794, 7776, + + 7794, 7791, 7762, 7785, 7791, 7787, 7776, 7793, 7764, 7771, + 7800, 7789, 7798, 7798, 7768, 7801, 7800, 7801, 7808, 7811, + 7762, 7763, 7763, 7763, 7763, 7768, 7764, 7796, 7802, 7791, + 7803, 7802, 7768, 7768, 7803, 7763, 7804, 7763, 7763, 7806, + 7763, 7763, 7763, 7763, 7763, 7763, 7805, 7806, 7810, 7812, + 7805, 7813, 7796, 7817, 7814, 7815, 7820, 7823, 7806, 7826, + 7813, 7804, 7818, 7810, 7814, 7815, 7818, 7819, 7818, 7821, + 7822, 7824, 7826, 7818, 7828, 7827, 7819, 7821, 7823, 7822, + 7808, 7829, 7763, 7825, 7808, 7824, 7808, 7825, 7827, 7828, + 7831, 7831, 7832, 7834, 7835, 7830, 7836, 7834, 7833, 7837, + + 7763, 7765, 7765, 7765, 7765, 7830, 7833, 7838, 7841, 7839, + 7849, 7865, 7852, 7835, 7832, 7765, 7842, 7765, 7765, 7868, + 7765, 7765, 7765, 7765, 7765, 7765, 7842, 7852, 7843, 7765, + 7839, 7843, 7844, 7848, 7855, 7849, 7850, 7857, 7843, 7856, + 7850, 7869, 7861, 7844, 7870, 7844, 7844, 7857, 7844, 7844, + 7844, 7844, 7844, 7844, 7856, 7846, 7861, 7844, 7836, 7851, + 7872, 7845, 7765, 7845, 7845, 7845, 7845, 7845, 7845, 7846, + 7851, 7846, 7846, 7846, 7846, 7846, 7846, 7867, 7873, 7874, + 7765, 7766, 7766, 7766, 7766, 7853, 7853, 7853, 7853, 7766, + 7854, 7854, 7854, 7854, 7855, 7848, 7847, 7859, 7766, 7855, + + 7766, 7766, 7766, 7766, 7766, 7766, 7860, 7859, 7846, 7766, + 7847, 7862, 7847, 7847, 7847, 7847, 7847, 7847, 7854, 7860, + 7858, 7847, 7858, 7863, 7862, 7864, 7875, 7863, 7864, 7866, + 7876, 7877, 7878, 7858, 7879, 7864, 7880, 7881, 7866, 7867, + 7880, 7882, 7766, 7883, 7879, 7886, 7880, 7881, 7884, 7847, + 7889, 7882, 7884, 7883, 7885, 7885, 7885, 7885, 7884, 7891, + 7766, 7767, 7767, 7767, 7767, 7890, 7893, 7903, 7890, 7767, + 7886, 7903, 7853, 7913, 7894, 7914, 7892, 7854, 7767, 7917, + 7767, 7767, 7767, 7767, 7767, 7767, 7888, 7892, 7894, 7767, + 7888, 7895, 7896, 7897, 7895, 7896, 7898, 7899, 7899, 7900, + + 7888, 7901, 7902, 7897, 7907, 7905, 7908, 7907, 7909, 7898, + 7885, 7901, 7902, 7904, 7900, 7912, 7908, 7904, 7905, 7885, + 7910, 7910, 7767, 7904, 7915, 7906, 7909, 7906, 7911, 7886, + 7912, 7916, 7911, 7916, 7918, 7919, 7910, 7767, 7906, 7919, + 7767, 7767, 7911, 7920, 7921, 7922, 7925, 7920, 7926, 7915, + 7927, 7928, 7929, 7930, 7931, 7932, 7917, 7930, 7934, 7933, + 7936, 7935, 7934, 7935, 7926, 7927, 7921, 7923, 7937, 7936, + 7938, 7939, 7942, 7945, 7940, 7939, 7931, 7939, 7939, 7947, + 7949, 7944, 7946, 7923, 7923, 7923, 7923, 7923, 7923, 7940, + 7937, 7941, 7923, 7941, 7943, 7923, 7944, 7946, 7947, 7948, + + 7953, 7956, 7948, 7941, 7943, 7949, 7950, 7941, 7956, 7951, + 7955, 7957, 7928, 7953, 7929, 7951, 7952, 7962, 7929, 7958, + 7929, 7933, 7954, 7958, 7960, 7965, 7923, 7928, 7923, 7958, + 7954, 7954, 7959, 7961, 7972, 7961, 7959, 7960, 7923, 7967, + 7923, 7967, 7949, 7923, 7923, 7924, 7966, 7955, 7963, 7963, + 7964, 7964, 7966, 7968, 7974, 7969, 7968, 7973, 7950, 7969, + 7975, 7924, 7924, 7924, 7924, 7924, 7924, 7970, 7950, 7952, + 7924, 7970, 7971, 7924, 7976, 7975, 7977, 7978, 7952, 7979, + 7971, 7981, 7950, 7980, 7982, 7952, 7978, 7983, 7982, 7979, + 7982, 7971, 7984, 7980, 7985, 7982, 7983, 7988, 7993, 7986, + + 7990, 7989, 7985, 7987, 7924, 7989, 7924, 7924, 7986, 7996, + 7994, 7988, 8000, 7990, 7991, 7992, 7995, 7995, 7924, 7973, + 7994, 7924, 7924, 7973, 7987, 7973, 7997, 7991, 7998, 7999, + 7992, 7996, 7998, 8001, 7997, 8002, 8003, 8004, 8005, 8003, + 8006, 8007, 8005, 8008, 8017, 8002, 8003, 8009, 7999, 8011, + 8010, 8006, 8010, 8012, 8001, 8013, 8007, 8009, 8008, 8011, + 8014, 8015, 8018, 8010, 8019, 8015, 8012, 8016, 8020, 8013, + 8016, 8018, 8021, 8014, 8000, 8022, 8021, 8016, 8020, 8023, + 8024, 8028, 8021, 8025, 8027, 8022, 8030, 8025, 8027, 8023, + 8024, 8031, 8032, 8025, 8026, 8026, 8026, 8026, 8027, 8004, + + 8029, 8033, 8031, 8029, 8034, 8035, 8036, 8034, 8035, 8037, + 8038, 8038, 8039, 8040, 8041, 8033, 8036, 8042, 8044, 8048, + 8052, 8042, 8037, 8040, 8041, 8043, 8019, 8039, 8045, 8043, + 8045, 8044, 8047, 8046, 8051, 8043, 8046, 8048, 8049, 8049, + 8053, 8045, 8047, 8050, 8054, 8057, 8054, 8050, 8055, 8051, + 8026, 8056, 8055, 8058, 8049, 8056, 8059, 8050, 8060, 8026, + 8061, 8062, 8063, 8065, 8066, 8062, 8067, 8057, 8068, 8071, + 8072, 8073, 8074, 8063, 8075, 8076, 8077, 8079, 8080, 8081, + 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, + 8092, 8093, 8091, 8094, 8095, 8096, 8097, 8098, 8099, 8100, + + 8074, 8101, 8102, 8103, 8105, 8106, 8107, 8108, 8109, 8110, + 8111, 8097, 8114, 8110, 8112, 8112, 8112, 8112, 8115, 8118, + 8120, 8112, 8118, 8120, 8121, 8122, 8119, 8124, 8126, 8123, + 8127, 8131, 8081, 8122, 8123, 8125, 8129, 8086, 8135, 8088, + 8119, 8090, 8133, 8119, 8125, 8133, 8126, 8095, 8119, 8132, + 8128, 8132, 8124, 8128, 8128, 8137, 8128, 8139, 8140, 8138, + 8141, 8129, 8134, 8138, 8144, 8145, 8143, 8146, 8128, 8136, + 8143, 8147, 8148, 8149, 8150, 8148, 8154, 8137, 8152, 8151, + 8142, 8153, 8152, 8156, 8157, 8147, 8156, 8103, 8151, 8162, + 8150, 8158, 8155, 8147, 8164, 8149, 8155, 8161, 8155, 8155, + + 8165, 8173, 8163, 8112, 8116, 8135, 8182, 8167, 8165, 8161, + 8155, 8168, 8164, 8161, 8135, 8171, 8158, 8161, 8145, 8170, + 8116, 8116, 8116, 8116, 8116, 8116, 8174, 8134, 8189, 8116, + 8211, 8136, 8116, 8142, 8212, 8136, 8166, 8136, 8134, 8166, + 8213, 8172, 8142, 8169, 8172, 8145, 8142, 8146, 8142, 8136, + 8159, 8174, 8184, 8153, 8159, 8184, 8159, 8186, 8160, 8177, + 8142, 8153, 8160, 8116, 8160, 8116, 8159, 8177, 8159, 8188, + 8168, 8181, 8186, 8160, 8163, 8180, 8160, 8116, 8181, 8167, + 8116, 8116, 8163, 8167, 8116, 8117, 8170, 8168, 8180, 8185, + 8185, 8171, 8194, 8187, 8183, 8170, 8175, 8175, 8175, 8175, + + 8190, 8117, 8117, 8117, 8117, 8117, 8117, 8183, 8169, 8218, + 8117, 8191, 8190, 8117, 8176, 8176, 8176, 8176, 8187, 8169, + 8192, 8188, 8193, 8193, 8195, 8192, 8196, 8195, 8199, 8198, + 8197, 8199, 8193, 8200, 8209, 8198, 8200, 8196, 8201, 8209, + 8219, 8201, 8176, 8198, 8117, 8188, 8117, 8194, 8197, 8188, + 8203, 8203, 8203, 8203, 8206, 8208, 8199, 8206, 8117, 8208, + 8207, 8117, 8117, 8207, 8191, 8117, 8201, 8204, 8204, 8204, + 8204, 8214, 8210, 8187, 8215, 8216, 8217, 8208, 8220, 8221, + 8191, 8220, 8222, 8175, 8223, 8224, 8225, 8231, 8207, 8237, + 8231, 8191, 8210, 8239, 8216, 8217, 8214, 8240, 8241, 8215, + + 8240, 8176, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, 8179, + 8179, 8179, 8179, 8179, 8179, 8202, 8226, 8227, 8202, 8205, + + 8205, 8205, 8205, 8228, 8229, 8230, 8232, 8233, 8226, 8230, + 8244, 8230, 8234, 8227, 8238, 8236, 8243, 8245, 8229, 8235, + 8230, 8229, 8246, 8230, 8228, 8243, 8229, 8205, 8232, 8235, + 8235, 8246, 8233, 8236, 8234, 8242, 8247, 8242, 8249, 8248, + 8251, 8252, 8253, 8254, 8250, 8257, 8247, 8248, 8250, 8251, + 8250, 8260, 8255, 8254, 8247, 8250, 8249, 8261, 8267, 8252, + 8202, 8255, 8250, 8256, 8258, 8259, 8256, 8251, 8258, 8259, + 8263, 8265, 8262, 8269, 8265, 8261, 8238, 8262, 8202, 8270, + 8238, 8266, 8238, 8271, 8263, 8273, 8266, 8259, 8264, 8264, + 8264, 8264, 8263, 8268, 8238, 8272, 8268, 8270, 8269, 8275, + + 8274, 8276, 8273, 8272, 8274, 8277, 8277, 8279, 8278, 8275, + 8280, 8281, 8282, 8280, 8283, 8276, 8278, 8285, 8284, 8281, + 8288, 8281, 8289, 8286, 8283, 8284, 8292, 8293, 8290, 8292, + 8293, 8295, 8283, 8284, 8286, 8287, 8286, 8286, 8267, 8286, + 8286, 8286, 8286, 8286, 8286, 8298, 8300, 8289, 8286, 8287, + 8290, 8287, 8287, 8287, 8287, 8287, 8287, 8291, 8296, 8301, + 8287, 8296, 8297, 8302, 8291, 8294, 8294, 8294, 8294, 8299, + 8297, 8264, 8303, 8304, 8307, 8264, 8308, 8305, 8304, 8285, + 8303, 8305, 8299, 8285, 8310, 8285, 8306, 8279, 8287, 8299, + 8312, 8306, 8309, 8294, 8308, 8311, 8307, 8285, 8313, 8309, + + 8288, 8314, 8310, 8315, 8311, 8316, 8317, 8309, 8318, 8319, + 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8326, 8327, 8329, + 8330, 8331, 8332, 8333, 8340, 8298, 8330, 8329, 8336, 8331, + 8332, 8334, 8361, 8333, 8330, 8365, 8337, 8334, 8339, 8340, + 8338, 8333, 8337, 8302, 8345, 8334, 8335, 8335, 8335, 8335, + 8337, 8341, 8294, 8336, 8338, 8343, 8339, 8342, 8346, 8344, + 8347, 8348, 8338, 8344, 8342, 8345, 8348, 8349, 8347, 8341, + 8312, 8353, 8350, 8343, 8351, 8352, 8355, 8355, 8354, 8346, + 8356, 8357, 8351, 8352, 8354, 8356, 8349, 8350, 8358, 8360, + 8350, 8359, 8354, 8353, 8357, 8362, 8359, 8360, 8366, 8363, + + 8364, 8357, 8335, 8364, 8370, 8367, 8368, 8369, 8372, 8358, + 8367, 8362, 8336, 8363, 8362, 8371, 8366, 8373, 8374, 8375, + 8370, 8363, 8376, 8371, 8377, 8387, 8376, 8379, 8379, 8335, + 8389, 8368, 8369, 8375, 8380, 8380, 8380, 8380, 8384, 8384, + 8374, 8386, 8380, 8381, 8381, 8381, 8381, 8397, 8386, 8390, + 8390, 8381, 8382, 8382, 8382, 8382, 8383, 8383, 8383, 8383, + 8382, 8385, 8391, 8391, 8383, 8392, 8392, 8393, 8394, 8395, + 8394, 8385, 8396, 8398, 8401, 8402, 8399, 8403, 8404, 8395, + 8405, 8399, 8396, 8406, 8407, 8408, 8409, 8410, 8411, 8380, + 8380, 8412, 8413, 8415, 8414, 8416, 8418, 8373, 8381, 8381, + + 8419, 8420, 8379, 8421, 8422, 8423, 8426, 8382, 8382, 8424, + 8429, 8383, 8383, 8384, 8431, 8432, 8433, 8434, 8435, 8436, + 8437, 8438, 8439, 8440, 8390, 8435, 8441, 8442, 8393, 8399, + 8443, 8444, 8445, 8392, 8391, 8446, 8447, 8448, 8449, 8450, + 8454, 8455, 8452, 8393, 8456, 8410, 8459, 8412, 8457, 8462, + 8424, 8413, 8415, 8423, 8420, 8452, 8460, 8461, 8464, 8461, + 8465, 8466, 8399, 8414, 8425, 8457, 8467, 8468, 8469, 8470, + 8460, 8471, 8461, 8472, 8473, 8474, 8464, 8456, 8476, 8477, + 8425, 8425, 8425, 8425, 8425, 8425, 8478, 8463, 8479, 8425, + 8480, 8463, 8425, 8481, 8455, 8463, 8482, 8463, 8483, 8455, + + 8487, 8488, 8489, 8517, 8491, 8518, 8459, 8462, 8492, 8520, + 8455, 8459, 8521, 8522, 8543, 8521, 8492, 8526, 8465, 8491, + 8518, 8489, 8492, 8425, 8525, 8425, 8523, 8425, 8517, 8544, + 8523, 8526, 8525, 8545, 8520, 8560, 8561, 8425, 8562, 8565, + 8425, 8425, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, 8430, + 8430, 8430, 8430, 8430, 8430, 8451, 8484, 8490, 8485, 8493, + 8486, 8486, 8494, 8496, 8499, 8497, 8502, 8495, 8566, 8555, + 8503, 8451, 8451, 8451, 8451, 8451, 8451, 8500, 8504, 8501, + 8451, 8506, 8509, 8451, 8505, 8510, 8527, 8493, 8529, 8511, + 8507, 8508, 8569, 8554, 8555, 8512, 8570, 8527, 8574, 8532, + 8513, 8515, 8529, 8567, 8583, 8484, 8530, 8485, 8534, 8537, + 8584, 8531, 8554, 8451, 8451, 8490, 8451, 8495, 8451, 8485, + + 8486, 8512, 8567, 8514, 8499, 8500, 8496, 8501, 8451, 8494, + 8509, 8451, 8451, 8497, 8502, 8493, 8503, 8504, 8494, 8496, + 8499, 8497, 8502, 8495, 8505, 8507, 8503, 8508, 8506, 8515, + 8512, 8516, 8510, 8500, 8504, 8501, 8511, 8506, 8509, 8513, + 8505, 8510, 8530, 8531, 8532, 8511, 8507, 8508, 8513, 8533, + 8528, 8512, 8514, 8539, 8528, 8532, 8513, 8515, 8528, 8514, + 8528, 8534, 8530, 8536, 8534, 8537, 8538, 8531, 8540, 8528, + 8541, 8542, 8575, 8559, 8557, 8542, 8575, 8559, 8563, 8514, + 8516, 8559, 8572, 8559, 8564, 8542, 8558, 8558, 8558, 8558, + 8558, 8558, 8573, 8571, 8573, 8579, 8572, 8516, 8594, 8557, + + 8576, 8533, 8539, 8585, 8576, 8571, 8580, 8516, 8577, 8564, + 8571, 8536, 8577, 8600, 8538, 8579, 8582, 8580, 8605, 8540, + 8549, 8549, 8549, 8549, 8558, 8533, 8557, 8582, 8585, 8539, + 8578, 8563, 8552, 8552, 8552, 8552, 8541, 8564, 8586, 8536, + 8552, 8591, 8538, 8581, 8540, 8599, 8541, 8546, 8546, 8546, + 8546, 8587, 8586, 8591, 8587, 8547, 8547, 8547, 8547, 8606, + 8552, 8546, 8581, 8546, 8546, 8599, 8546, 8546, 8546, 8546, + 8546, 8546, 8547, 8588, 8547, 8547, 8547, 8547, 8547, 8547, + 8601, 8549, 8578, 8589, 8550, 8550, 8550, 8550, 8578, 8610, + 8588, 8592, 8549, 8552, 8601, 8592, 8589, 8595, 8595, 8549, + + 8549, 8551, 8551, 8551, 8551, 8602, 8603, 8608, 8546, 8551, + 8552, 8552, 8550, 8593, 8593, 8597, 8547, 8602, 8603, 8597, + 8596, 8612, 8553, 8553, 8553, 8553, 8546, 8604, 8602, 8551, + 8553, 8593, 8593, 8615, 8547, 8548, 8548, 8548, 8548, 8596, + 8616, 8604, 8609, 8598, 8607, 8550, 8604, 8598, 8614, 8622, + 8553, 8598, 8548, 8598, 8548, 8548, 8548, 8548, 8548, 8548, + 8550, 8607, 8551, 8550, 8550, 8608, 8611, 8609, 8613, 8617, + 8611, 8620, 8618, 8623, 8614, 8620, 8621, 8624, 8619, 8625, + 8551, 8551, 8627, 8553, 8630, 8613, 8615, 8553, 8619, 8626, + 8621, 8608, 8629, 8626, 8617, 8627, 8548, 8618, 8628, 8632, + + 8634, 8553, 8631, 8626, 8635, 8629, 8631, 8633, 8636, 8637, + 8631, 8548, 8631, 8631, 8548, 8548, 8638, 8628, 8633, 8641, + 8642, 8644, 8617, 8645, 8646, 8647, 8648, 8649, 8651, 8650, + 8652, 8656, 8658, 8636, 8653, 8653, 8653, 8653, 8623, 8648, + 8649, 8650, 8647, 8652, 8657, 8651, 8654, 8654, 8654, 8654, + 8659, 8664, 8660, 8661, 8656, 8660, 8660, 8657, 8662, 8665, + 8666, 8663, 8662, 8667, 8668, 8661, 8662, 8667, 8662, 8667, + 8665, 8664, 8669, 8659, 8654, 8663, 8661, 8671, 8668, 8670, + 8672, 8673, 8668, 8675, 8669, 8674, 8676, 8677, 8671, 8679, + 8653, 8678, 8670, 8672, 8681, 8683, 8680, 8676, 8690, 8678, + + 8677, 8675, 8654, 8680, 8674, 8678, 8684, 8682, 8685, 8684, + 8680, 8682, 8679, 8691, 8692, 8693, 8694, 8695, 8696, 8698, + 8697, 8685, 8688, 8699, 8701, 8703, 8706, 8707, 8704, 8708, + 8709, 8713, 8702, 8712, 8722, 8700, 8711, 8720, 8688, 8688, + 8688, 8688, 8688, 8688, 8723, 8705, 8718, 8688, 8714, 8736, + 8688, 8754, 8710, 8715, 8756, 8758, 8726, 8717, 8724, 8759, + 8721, 8716, 8728, 8727, 8732, 8735, 8737, 8791, 8719, 8738, + 8692, 8690, 8725, 8742, 8740, 8739, 8731, 8694, 8729, 8691, + 8696, 8688, 8733, 8688, 8730, 8691, 8697, 8734, 8693, 8713, + 8692, 8698, 8699, 8712, 8702, 8688, 8701, 8700, 8688, 8688, + + 8689, 8700, 8741, 8700, 8702, 8704, 8708, 8705, 8711, 8717, + 8714, 8705, 8700, 8705, 8720, 8715, 8689, 8689, 8689, 8689, + 8689, 8689, 8710, 8716, 8718, 8689, 8719, 8710, 8689, 8721, + 8724, 8726, 8728, 8725, 8727, 8731, 8729, 8719, 8737, 8738, + 8729, 8732, 8730, 8735, 8733, 8739, 8743, 8744, 8742, 8734, + 8738, 8740, 8745, 8734, 8746, 8734, 8747, 8748, 8751, 8689, + 8741, 8689, 8749, 8750, 8752, 8753, 8766, 8760, 8768, 8764, + 8769, 8755, 8797, 8689, 8757, 8761, 8689, 8689, 8762, 8798, + 8763, 8765, 8767, 8799, 8800, 8802, 8771, 8773, 8804, 8775, + 8774, 8805, 8806, 8770, 8778, 8772, 8781, 8804, 8784, 8779, + + 8777, 8780, 8776, 8782, 8789, 8807, 8787, 8786, 8808, 8744, + 8809, 8794, 8788, 8783, 8790, 8785, 8810, 8812, 8792, 8748, + 8793, 8795, 8813, 8814, 8747, 8750, 8768, 8745, 8796, 8751, + 8743, 8815, 8817, 8755, 8749, 8750, 8753, 8755, 8746, 8755, + 8755, 8752, 8760, 8757, 8764, 8773, 8761, 8766, 8774, 8762, + 8763, 8769, 8765, 8767, 8770, 8770, 8771, 8772, 8775, 8773, + 8776, 8772, 8777, 8772, 8777, 8781, 8778, 8771, 8774, 8779, + 8778, 8783, 8780, 8785, 8782, 8784, 8786, 8787, 8788, 8790, + 8792, 8793, 8794, 8819, 8788, 8789, 8790, 8820, 8821, 8795, + 8796, 8785, 8822, 8822, 8822, 8822, 8823, 8825, 8826, 8828, + + 8827, 8829, 8830, 8832, 8834, 8836, 8837, 8839, 8840, 8843, + 8844, 8845, 8846, 8847, 8848, 8849, 8850, 8851, 8852, 8853, + 8854, 8855, 8858, 8843, 8856, 8857, 8846, 8855, 8859, 8860, + 8861, 8862, 8863, 8865, 8866, 8867, 8868, 8869, 8870, 8871, + 8873, 8870, 8874, 8875, 8876, 8877, 8864, 8858, 8878, 8880, + 8884, 8881, 8879, 8883, 8885, 8881, 8862, 8881, 8886, 8866, + 8826, 8868, 8879, 8887, 8888, 8898, 8881, 8874, 8895, 8893, + 8826, 8827, 8856, 8903, 8890, 8837, 8827, 8841, 8883, 8893, + 8857, 8890, 8894, 8894, 8862, 8899, 8895, 8866, 8907, 8909, + 8912, 8915, 8916, 8841, 8841, 8841, 8841, 8841, 8841, 8864, + + 8856, 8857, 8841, 8896, 8901, 8841, 8886, 8905, 8864, 8917, + 8899, 8918, 8864, 8896, 8864, 8891, 8891, 8891, 8891, 8902, + 8888, 8911, 8919, 8902, 8913, 8902, 8911, 8913, 8887, 8901, + 8885, 8920, 8905, 8921, 8886, 8923, 8841, 8924, 8841, 8887, + 8888, 8914, 8925, 8926, 8914, 8927, 8928, 8929, 8930, 8923, + 8841, 8931, 8913, 8841, 8841, 8842, 8901, 8932, 8933, 8934, + 8905, 8909, 8931, 8935, 8936, 8937, 8940, 8941, 8942, 8914, + 8943, 8842, 8842, 8842, 8842, 8842, 8842, 8935, 8944, 8946, + 8842, 8947, 8948, 8842, 8949, 8951, 8950, 8952, 8953, 8891, + 8950, 8954, 8941, 8955, 8956, 8957, 8959, 8960, 8956, 8929, + + 8956, 8964, 8891, 8961, 8961, 8961, 8961, 8967, 8968, 8969, + 8970, 8971, 8972, 8973, 8842, 8964, 8842, 8974, 8976, 8968, + 8978, 8979, 8980, 8981, 8982, 8986, 8987, 8988, 8842, 8991, + 8993, 8842, 8842, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, 8892, + 8892, 8892, 8892, 8892, 8892, 8892, 8958, 8958, 8958, 8958, + 8962, 8962, 8962, 8962, 8966, 8975, 8977, 8983, 8984, 8985, + 8989, 8990, 8992, 8994, 8995, 8996, 8997, 9001, 8999, 9005, + 9006, 8990, 8999, 9007, 8999, 8999, 9009, 9010, 8962, 8966, + 9012, 8977, 8983, 8984, 8985, 9008, 9013, 8992, 9014, 9015, + 8996, 9016, 9008, 9017, 9005, 9018, 9022, 9023, 9024, 9025, + 9026, 9027, 9028, 9028, 9028, 9028, 9029, 9030, 9031, 9032, + 9033, 8984, 9034, 9034, 9035, 9036, 9038, 9037, 9039, 9036, + + 9040, 9036, 9041, 9042, 9041, 9035, 9043, 9042, 9044, 9045, + 9028, 9037, 8989, 8958, 9046, 9047, 9038, 9048, 9049, 8975, + 9051, 9050, 9052, 9053, 9054, 9055, 9056, 9058, 9059, 9060, + 9054, 9061, 9062, 9056, 9063, 9064, 9065, 9065, 9028, 9050, + 9067, 9067, 9066, 9066, 9066, 9066, 9068, 9069, 9070, 9071, + 9066, 9072, 9072, 9073, 9073, 9075, 9061, 9074, 9074, 9076, + 9077, 9079, 9078, 9080, 9081, 9082, 9083, 9084, 9085, 9086, + 9087, 9088, 9089, 9090, 9091, 9092, 9083, 9093, 9094, 9095, + 9096, 9098, 9105, 9099, 9100, 9103, 9108, 9106, 9107, 9109, + 9112, 9110, 9113, 9111, 9127, 9114, 9065, 9066, 9066, 9116, + + 9115, 9117, 9125, 9119, 9124, 9124, 9075, 9106, 9107, 9129, + 9118, 9072, 9118, 9130, 9105, 9131, 9068, 9099, 9100, 9113, + 9115, 9076, 9110, 9114, 9103, 9111, 9108, 9109, 9090, 9112, + 9077, 9075, 9078, 9091, 9119, 9092, 9074, 9121, 9116, 9118, + 9117, 9132, 9133, 9119, 9093, 9101, 9120, 9122, 9135, 9139, + 9126, 9132, 9134, 9140, 9137, 9125, 9142, 9121, 9133, 9143, + 9135, 9101, 9101, 9101, 9101, 9101, 9101, 9120, 9122, 9144, + 9101, 9145, 9148, 9101, 9120, 9126, 9149, 9134, 9130, 9137, + 9150, 9152, 9153, 9154, 9155, 9122, 9158, 9160, 9160, 9161, + 9162, 9162, 9188, 9188, 9163, 9190, 9188, 9191, 9160, 9189, + + 9189, 9200, 9206, 9126, 9101, 9163, 9101, 9191, 9101, 9192, + 9208, 9101, 9192, 9223, 9161, 9225, 9206, 9101, 9101, 9227, + 9228, 9101, 9101, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + + 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, 9102, + 9102, 9102, 9102, 9102, 9102, 9102, 9123, 9156, 9193, 9136, + 9157, 9157, 9232, 9224, 9230, 9230, 9240, 9218, 9240, 9193, + 9253, 9226, 9123, 9123, 9123, 9123, 9123, 9123, 9218, 9193, + 9221, 9123, 9226, 9209, 9123, 9209, 9209, 9209, 9209, 9209, + 9209, 9229, 9219, 9219, 9219, 9219, 9219, 9219, 9231, 9233, + 9234, 9229, 9221, 9244, 9237, 9243, 9156, 9255, 9233, 9234, + 9231, 9156, 9238, 9238, 9243, 9123, 9224, 9123, 9237, 9123, + 9136, 9136, 9157, 9245, 9245, 9136, 9244, 9136, 9258, 9123, + 9219, 9253, 9123, 9123, 9159, 9159, 9159, 9159, 9159, 9159, + + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9159, + 9159, 9159, 9159, 9159, 9159, 9159, 9159, 9164, 9165, 9166, + 9167, 9168, 9169, 9170, 9171, 9172, 9175, 9173, 9176, 9174, + + 9254, 9239, 9178, 9182, 9250, 9180, 9239, 9181, 9254, 9179, + 9256, 9250, 9239, 9177, 9251, 9260, 9197, 9251, 9251, 9256, + 9257, 9184, 9261, 9264, 9183, 9260, 9195, 9194, 9205, 9202, + 9267, 9257, 9269, 9261, 9270, 9185, 9187, 9271, 9186, 9203, + 9165, 9198, 9199, 9196, 9169, 9273, 9274, 9204, 9280, 9167, + 9276, 9168, 9173, 9180, 9166, 9174, 9178, 9180, 9170, 9181, + 9172, 9171, 9182, 9164, 9165, 9166, 9167, 9168, 9169, 9170, + 9171, 9172, 9175, 9173, 9176, 9174, 9177, 9179, 9178, 9182, + 9183, 9180, 9184, 9181, 9185, 9179, 9186, 9195, 9187, 9177, + 9194, 9196, 9197, 9198, 9202, 9205, 9199, 9184, 9203, 9204, + + 9183, 9276, 9195, 9194, 9205, 9202, 9211, 9211, 9211, 9211, + 9279, 9185, 9187, 9279, 9186, 9203, 9266, 9198, 9199, 9196, + 9281, 9278, 9282, 9204, 9207, 9207, 9207, 9207, 9213, 9213, + 9213, 9213, 9210, 9210, 9210, 9210, 9241, 9278, 9207, 9283, + 9207, 9207, 9284, 9207, 9207, 9207, 9207, 9207, 9207, 9210, + 9246, 9210, 9210, 9210, 9210, 9210, 9210, 9212, 9212, 9212, + 9212, 9214, 9214, 9214, 9214, 9235, 9285, 9211, 9215, 9215, + 9215, 9215, 9216, 9216, 9216, 9216, 9215, 9266, 9259, 9286, + 9216, 9246, 9211, 9287, 9262, 9211, 9211, 9241, 9241, 9213, + 9235, 9217, 9217, 9217, 9217, 9290, 9215, 9272, 9292, 9217, + + 9216, 9242, 9242, 9242, 9242, 9272, 9213, 9213, 9210, 9262, + 9246, 9272, 9210, 9268, 9268, 9268, 9268, 9235, 9212, 9217, + 9295, 9275, 9214, 9293, 9289, 9252, 9214, 9277, 9293, 9215, + 9259, 9299, 9277, 9216, 9246, 9275, 9212, 9212, 9277, 9289, + 9214, 9252, 9252, 9252, 9252, 9252, 9252, 9215, 9288, 9298, + 9298, 9216, 9217, 9216, 9236, 9217, 9236, 9236, 9296, 9236, + 9236, 9236, 9236, 9236, 9236, 9242, 9291, 9297, 9262, 9300, + 9217, 9288, 9296, 9301, 9302, 9305, 9303, 9268, 9291, 9302, + 9304, 9300, 9308, 9297, 9307, 9310, 9252, 9303, 9242, 9305, + 9309, 9309, 9304, 9301, 9306, 9306, 9307, 9252, 9315, 9306, + + 9268, 9306, 9311, 9310, 9312, 9311, 9313, 9313, 9314, 9312, + 9317, 9313, 9316, 9313, 9318, 9312, 9319, 9320, 9321, 9314, + 9322, 9316, 9326, 9325, 9327, 9328, 9329, 9330, 9332, 9333, + 9331, 9334, 9322, 9325, 9331, 9335, 9330, 9336, 9332, 9337, + 9338, 9334, 9333, 9339, 9340, 9341, 9342, 9336, 9332, 9338, + 9343, 9344, 9345, 9346, 9342, 9340, 9335, 9346, 9343, 9347, + 9347, 9348, 9351, 9346, 9344, 9350, 9355, 9358, 9319, 9349, + 9349, 9349, 9349, 9350, 9352, 9318, 9352, 9319, 9354, 9321, + 9321, 9353, 9354, 9356, 9351, 9326, 9357, 9353, 9359, 9360, + 9363, 9365, 9362, 9357, 9321, 9361, 9359, 9368, 9326, 9360, + + 9319, 9323, 9362, 9366, 9361, 9364, 9364, 9364, 9364, 9372, + 9366, 9367, 9375, 9348, 9373, 9370, 9366, 9323, 9323, 9323, + 9323, 9323, 9323, 9369, 9367, 9374, 9323, 9369, 9355, 9323, + 9370, 9371, 9376, 9369, 9349, 9371, 9373, 9377, 9355, 9374, + 9378, 9379, 9380, 9376, 9378, 9356, 9381, 9382, 9383, 9368, + 9385, 9392, 9363, 9384, 9386, 9380, 9349, 9387, 9386, 9389, + 9323, 9381, 9323, 9323, 9384, 9388, 9393, 9387, 9393, 9385, + 9364, 9391, 9389, 9323, 9323, 9399, 9388, 9323, 9323, 9324, + 9390, 9395, 9391, 9395, 9390, 9394, 9390, 9397, 9401, 9402, + 9406, 9397, 9364, 9397, 9408, 9324, 9324, 9324, 9324, 9324, + + 9324, 9396, 9394, 9398, 9324, 9396, 9400, 9324, 9403, 9404, + 9405, 9396, 9409, 9398, 9400, 9410, 9413, 9414, 9415, 9416, + 9418, 9405, 9420, 9421, 9425, 9426, 9427, 9427, 9427, 9427, + 9429, 9430, 9431, 9432, 9434, 9435, 9413, 9436, 9324, 9437, + 9324, 9324, 9438, 9439, 9440, 9431, 9441, 9445, 9440, 9446, + 9447, 9402, 9324, 9448, 9449, 9324, 9324, 9451, 9445, 9449, + 9403, 9452, 9450, 9453, 9454, 9455, 9458, 9410, 9455, 9458, + 9403, 9404, 9450, 9459, 9460, 9450, 9461, 9454, 9463, 9458, + 9464, 9465, 9451, 9466, 9467, 9404, 9452, 9468, 9470, 9469, + 9473, 9479, 9403, 9469, 9471, 9472, 9471, 9467, 9484, 9474, + + 9481, 9472, 9474, 9486, 9481, 9485, 9481, 9473, 9485, 9474, + 9487, 9486, 9490, 9488, 9481, 9481, 9488, 9430, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + + 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, 9442, + 9442, 9443, 9462, 9494, 9493, 9457, 9493, 9478, 9456, 9477, + 9476, 9489, 9491, 9495, 9496, 9499, 9491, 9443, 9443, 9443, + 9443, 9443, 9443, 9500, 9482, 9501, 9443, 9462, 9482, 9443, + 9482, 9483, 9502, 9492, 9482, 9483, 9489, 9483, 9482, 9503, + 9483, 9504, 9497, 9498, 9482, 9483, 9492, 9497, 9498, 9506, + 9505, 9509, 9508, 9512, 9507, 9462, 9511, 9477, 9508, 9513, + 9443, 9510, 9443, 9505, 9503, 9507, 9515, 9510, 9511, 9478, + 9510, 9514, 9522, 9519, 9443, 9514, 9443, 9443, 9443, 9444, + 9456, 9457, 9476, 9478, 9456, 9477, 9476, 9517, 9519, 9524, + + 9525, 9503, 9517, 9518, 9520, 9444, 9444, 9444, 9444, 9444, + 9444, 9520, 9518, 9530, 9444, 9521, 9529, 9444, 9531, 9521, + 9532, 9533, 9529, 9535, 9534, 9536, 9535, 9538, 9515, 9534, + 9539, 9538, 9521, 9539, 9541, 9544, 9543, 9546, 9547, 9549, + 9552, 9515, 9553, 9554, 9547, 9554, 9551, 9556, 9444, 9543, + 9444, 9557, 9551, 9558, 9522, 9551, 9559, 9522, 9560, 9561, + 9562, 9563, 9444, 9565, 9444, 9444, 9444, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, 9480, + 9516, 9516, 9516, 9516, 9523, 9526, 9526, 9526, 9526, 9527, + 9527, 9527, 9527, 9537, 9540, 9542, 9545, 9545, 9545, 9545, + 9548, 9550, 9566, 9555, 9567, 9568, 9569, 9570, 9571, 9571, + 9572, 9573, 9574, 9573, 9575, 9577, 9570, 9527, 9576, 9540, + + 9555, 9578, 9576, 9575, 9576, 9548, 9579, 9580, 9579, 9576, + 9581, 9576, 9582, 9583, 9582, 9584, 9587, 9590, 9585, 9583, + 9580, 9585, 9591, 9588, 9584, 9537, 9586, 9588, 9586, 9588, + 9589, 9592, 9589, 9594, 9599, 9592, 9588, 9591, 9516, 9523, + 9593, 9597, 9595, 9601, 9594, 9602, 9550, 9516, 9595, 9604, + 9542, 9595, 9526, 9593, 9545, 9596, 9527, 9598, 9540, 9596, + 9598, 9596, 9600, 9545, 9603, 9605, 9597, 9600, 9596, 9603, + 9606, 9607, 9610, 9607, 9609, 9609, 9611, 9612, 9613, 9614, + 9614, 9617, 9616, 9615, 9615, 9618, 9619, 9620, 9621, 9622, + 9623, 9624, 9625, 9626, 9627, 9628, 9625, 9629, 9630, 9631, + + 9632, 9604, 9633, 9634, 9635, 9637, 9640, 9644, 9619, 9636, + 9636, 9636, 9636, 9636, 9645, 9646, 9647, 9648, 9649, 9651, + 9602, 9652, 9650, 9657, 9604, 9647, 9646, 9654, 9648, 9655, + 9653, 9644, 9606, 9604, 9616, 9658, 9609, 9655, 9645, 9649, + 9605, 9614, 9650, 9653, 9658, 9606, 9606, 9615, 9660, 9654, + 9667, 9662, 9669, 9670, 9674, 9640, 9675, 9672, 9616, 9676, + 9632, 9672, 9677, 9678, 9657, 9660, 9662, 9672, 9633, 9636, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, 9641, + 9641, 9641, 9641, 9642, 9656, 9659, 9661, 9663, 9656, 9664, + 9668, 9665, 9679, 9671, 9673, 9680, 9681, 9682, 9683, 9642, + 9642, 9642, 9642, 9642, 9642, 9685, 9661, 9692, 9642, 9659, + 9694, 9642, 9656, 9695, 9663, 9665, 9721, 9664, 9722, 9673, + + 9690, 9690, 9695, 9694, 9723, 9724, 9722, 9725, 9729, 9737, + 9739, 9722, 9741, 9742, 9725, 9749, 9721, 9751, 9754, 9724, + 9758, 9760, 9642, 9668, 9642, 9671, 9642, 9755, 9761, 9765, + 9755, 9760, 9754, 9766, 9767, 9642, 9642, 9768, 9761, 9642, + 9642, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, 9643, + 9643, 9643, 9643, 9643, 9666, 9687, 9698, 9688, 9688, 9689, + 9689, 9689, 9689, 9697, 9701, 9706, 9699, 9700, 9702, 9703, + 9666, 9666, 9666, 9666, 9666, 9666, 9753, 9759, 9777, 9666, + 9778, 9779, 9666, 9780, 9778, 9783, 9738, 9738, 9738, 9738, + 9756, 9759, 9756, 9756, 9756, 9756, 9756, 9756, 9753, 9788, + 9738, 9775, 9738, 9738, 9687, 9738, 9738, 9738, 9738, 9738, + 9738, 9774, 9698, 9666, 9699, 9666, 9666, 9666, 9789, 9700, + + 9687, 9688, 9781, 9781, 9774, 9703, 9775, 9666, 9697, 9701, + 9666, 9666, 9698, 9702, 9790, 9792, 9793, 9799, 9706, 9697, + 9701, 9706, 9699, 9700, 9702, 9703, 9689, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, 9693, + 9704, 9705, 9709, 9710, 9712, 9711, 9713, 9714, 9715, 9716, + 9717, 9772, 9720, 9776, 9784, 9798, 9796, 9731, 9734, 9782, + 9732, 9718, 9719, 9726, 9727, 9728, 9796, 9782, 9800, 9798, + 9736, 9733, 9735, 9740, 9740, 9740, 9740, 9797, 9776, 9784, + 9772, 9801, 9802, 9743, 9743, 9743, 9743, 9797, 9803, 9804, + 9709, 9805, 9704, 9806, 9810, 9812, 9715, 9820, 9716, 9825, + 9808, 9717, 9744, 9744, 9744, 9744, 9705, 9808, 9813, 9710, + 9711, 9712, 9732, 9828, 9734, 9813, 9704, 9705, 9709, 9710, + + 9712, 9711, 9713, 9714, 9715, 9716, 9717, 9718, 9720, 9719, + 9726, 9727, 9728, 9731, 9734, 9736, 9732, 9718, 9719, 9726, + 9727, 9728, 9733, 9735, 9743, 9829, 9736, 9733, 9735, 9740, + 9830, 9773, 9817, 9740, 9745, 9745, 9745, 9745, 9746, 9746, + 9746, 9746, 9743, 9744, 9747, 9747, 9747, 9747, 9763, 9763, + 9763, 9763, 9747, 9817, 9748, 9748, 9748, 9748, 9769, 9840, + 9848, 9744, 9748, 9744, 9809, 9831, 9746, 9785, 9785, 9785, + 9785, 9757, 9747, 9757, 9757, 9757, 9757, 9757, 9757, 9809, + 9811, 9831, 9748, 9773, 9764, 9764, 9764, 9764, 9807, 9769, + 9811, 9814, 9807, 9773, 9807, 9745, 9816, 9835, 9745, 9746, + + 9786, 9786, 9786, 9786, 9814, 9747, 9816, 9818, 9835, 9747, + 9748, 9757, 9764, 9745, 9818, 9748, 9821, 9746, 9769, 9787, + 9787, 9787, 9787, 9747, 9794, 9794, 9794, 9794, 9815, 9821, + 9819, 9815, 9824, 9748, 9822, 9763, 9823, 9826, 9823, 9791, + 9819, 9827, 9769, 9834, 9822, 9824, 9838, 9787, 9785, 9823, + 9791, 9838, 9791, 9791, 9785, 9791, 9791, 9791, 9791, 9791, + 9791, 9837, 9826, 9836, 9836, 9839, 9827, 9839, 9836, 9841, + 9837, 9764, 9842, 9844, 9843, 9845, 9844, 9851, 9841, 9843, + 9865, 9846, 9844, 9849, 9845, 9842, 9846, 9786, 9850, 9794, + 9853, 9834, 9849, 9827, 9847, 9847, 9852, 9850, 9855, 9853, + + 9852, 9791, 9854, 9856, 9856, 9867, 9787, 9861, 9855, 9859, + 9859, 9794, 9861, 9866, 9866, 9854, 9875, 9857, 9864, 9834, + 9858, 9858, 9858, 9858, 9864, 9827, 9832, 9880, 9857, 9851, + 9857, 9857, 9863, 9857, 9857, 9857, 9857, 9857, 9857, 9863, + 9860, 9863, 9832, 9832, 9832, 9832, 9832, 9832, 9851, 9860, + 9860, 9832, 9862, 9868, 9832, 9868, 9862, 9870, 9862, 9869, + 9870, 9862, 9872, 9869, 9871, 9871, 9870, 9876, 9873, 9874, + 9874, 9876, 9877, 9877, 9872, 9873, 9879, 9873, 9878, 9883, + 9879, 9881, 9884, 9886, 9885, 9832, 9887, 9832, 9857, 9878, + 9881, 9878, 9888, 9890, 9858, 9891, 9892, 9881, 9893, 9832, + + 9885, 9832, 9832, 9832, 9833, 9894, 9895, 9858, 9900, 9901, + 9902, 9902, 9902, 9902, 9907, 9908, 9901, 9907, 9910, 9906, + 9833, 9833, 9833, 9833, 9833, 9833, 9906, 9909, 9914, 9833, + 9909, 9883, 9833, 9911, 9911, 9915, 9916, 9917, 9914, 9918, + 9919, 9920, 9921, 9922, 9921, 9923, 9925, 9921, 9926, 9935, + 9936, 9927, 9926, 9922, 9927, 9933, 9925, 9937, 9938, 9933, + 9936, 9933, 9939, 9833, 9940, 9833, 9939, 9940, 9941, 9942, + 9938, 9944, 9945, 9943, 9940, 9833, 9943, 9833, 9946, 9947, + 9833, 9833, 9948, 9949, 9951, 9950, 9948, 9951, 9952, 9947, + 9953, 9894, 9950, 9954, 9955, 9956, 9964, 9902, 9903, 9903, + + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, 9903, + 9903, 9904, 9958, 9924, 9912, 9928, 9959, 9930, 9961, 9962, + + 9929, 9961, 9958, 9963, 9965, 9967, 9959, 9904, 9904, 9904, + 9904, 9904, 9904, 9969, 9972, 9934, 9904, 9966, 9975, 9904, + 9957, 9957, 9957, 9957, 9962, 9970, 9960, 9966, 9963, 9968, + 9971, 9973, 9968, 9974, 9932, 9974, 9976, 9981, 9982, 9970, + 9934, 9983, 9973, 9975, 9977, 9977, 9977, 9977, 9957, 9985, + 9904, 9984, 9904, 9985, 9986, 9928, 9987, 9988, 9930, 9932, + 9989, 9984, 9990, 9991, 9904, 9924, 9904, 9904, 9904, 9905, + 9912, 9928, 9929, 9930, 9992, 9934, 9929, 9934, 9960, 9993, + 9994, 9934, 9971, 9934, 9996, 9905, 9905, 9905, 9905, 9905, + 9905, 9997,10002,10003, 9905, 9998, 9932, 9905, 9960, 9998, + + 9932, 9998, 9932,10000, 9999, 9998, 9932, 9957,10000,10001, + 9932, 9999,10004,10001, 9999,10005,10006,10007,10005,10006, + 10007,10008,10009,10001,10011, 9977,10012,10007, 9905,10010, + 9905, 9977,10013,10009,10014,10013,10010,10016,10017,10010, + 10016, 9905, 9905,10019,10024, 9905, 9905, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, 9931, + 9978, 9978, 9978, 9978, 9979, 9980, 9980, 9980, 9980,10018, + 10020,10021,10028,10028,10015, 9979,10030, 9979, 9979,10031, + 9979, 9979, 9979, 9979, 9979, 9979,10015,10015, 9978,10022, + 10032,10023,10023,10029,10018,10020,10021,10027,10027,10022, + 10033,10034,10035,10036,10037,10022,10038,10039,10040,10041, + 10042,10043,10044,10045,10046,10046,10046,10046,10046,10048, + + 10049,10055,10020,10047,10047,10047,10047,10047,10050,10050, + 10050,10050,10056,10057,10059,10058, 9979,10060,10065,10063, + 9980,10066,10057,10066,10028,10060,10067, 9978,10058,10064, + 10064,10069, 9980,10071,10020,10023,10063,10067,10076,10050, + 10070,10027,10072,10072,10029,10077,10074,10071,10069,10029, + 10073,10080,10073,10079,10046,10079,10070,10074,10079,10081, + 10082,10085,10086,10047,10087,10088,10044,10089,10091,10091, + 10093,10094,10095,10111,10112,10119,10094,10095,10120,10123, + 10119,10119,10129,10120,10135,10136,10136,10123,10137,10119, + 10150,10158,10123,10161,10162,10050,10051,10051,10051,10051, + + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10051, + 10051,10051,10051,10051,10051,10051,10051,10051,10051,10052, + 10122,10090,10165,10153,10122,10155,10122,10153,10122,10166, + + 10155,10155,10153,10122,10122,10052,10052,10052,10052,10052, + 10052,10171,10152,10176,10052,10156,10152,10052,10152,10156, + 10152,10156,10177,10156,10166,10152,10157,10157,10156,10160, + 10160,10157,10169,10179,10160,10180,10167,10169,10167,10167, + 10090,10167,10167,10167,10167,10167,10167,10185,10052,10168, + 10052,10166,10052,10090,10168,10168,10170,10170,10186,10189, + 10052,10170,10052,10193,10195,10052,10052,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10054,10054,10054,10054,10054,10054,10054,10054,10054,10054, + 10068,10092,10092,10092,10092,10096,10097,10098,10100,10099, + 10101,10102,10172,10103,10105,10104,10107,10174,10196,10197, + 10198,10190,10190,10108,10106,10174,10190,10199,10115,10200, + 10174,10191,10191,10202,10125,10215,10191,10128,10113,10130, + + 10116,10202,10121,10164,10133,10109,10202,10114,10216,10203, + 10175,10203,10117,10124,10203,10149,10100,10132,10101,10126, + 10217,10218,10163,10206,10172,10068,10105,10204,10206,10097, + 10099,10104,10204,10102,10204,10108,10068,10075,10106,10098, + 10115,10096,10097,10098,10100,10099,10101,10102,10092,10103, + 10105,10104,10107,10075,10075,10075,10075,10075,10075,10108, + 10106,10109,10075,10113,10115,10075,10114,10116,10117,10124, + 10125,10126,10121,10128,10113,10130,10116,10121,10134,10132, + 10133,10109,10227,10114,10228,10149,10121,10164,10117,10124, + 10149,10223,10163,10132,10175,10126,10075,10163,10075,10223, + + 10075,10138,10138,10138,10138,10225,10205,10075,10173,10230, + 10075,10205,10075,10075,10075,10231,10139,10139,10139,10139, + 10205,10233,10140,10140,10140,10140,10134,10141,10141,10141, + 10141,10142,10142,10142,10142,10141,10234,10235,10236,10142, + 10238,10143,10143,10143,10143,10240,10210,10210,10144,10144, + 10144,10144,10210,10207,10134,10141,10241,10242,10207,10142, + 10173,10207,10138,10145,10145,10145,10145,10213,10173,10143, + 10239,10208,10213,10173,10213,10244,10144,10139,10140,10208, + 10138,10139,10211,10140,10208,10209,10245,10142,10141,10225, + 10246,10145,10142,10209,10211,10139,10247,10143,10209,10211, + + 10249,10140,10143,10141,10144,10250,10141,10212,10212,10144, + 10142,10251,10212,10146,10146,10146,10146,10252,10219,10145, + 10143,10146,10239,10219,10145,10219,10253,10144,10147,10147, + 10147,10147,10148,10148,10148,10148,10147,10254,10255,10256, + 10148,10146,10145,10178,10178,10178,10178,10182,10257,10182, + 10182,10182,10182,10182,10182,10222,10147,10258,10259,10261, + 10148,10183,10181,10183,10183,10183,10183,10183,10183,10146, + 10260,10262,10214,10181,10146,10181,10181,10214,10181,10181, + 10181,10181,10181,10181,10147,10184,10214,10181,10148,10147, + 10229,10263,10146,10148,10229,10148,10229,10264,10265,10184, + + 10267,10184,10184,10184,10184,10184,10184,10147,10147,10222, + 10184,10148,10187,10187,10187,10187,10188,10188,10188,10188, + 10192,10226,10260,10192,10192,10226,10192,10226,10192,10268, + 10178,10222,10232,10192,10269,10226,10232,10243,10232,10270, + 10243,10243,10273,10243,10188,10273,10274,10275,10276,10277, + 10278,10279,10280,10281,10274,10279,10282,10283,10284,10279, + 10285,10286,10287,10288,10289,10290,10291,10292,10293,10290, + 10295,10290,10294,10296,10295,10298,10299,10300,10301,10290, + 10299,10302,10299,10290,10291,10303,10301,10306,10288,10304, + 10311,10300,10305,10304,10299,10295,10305,10307,10305,10187, + + 10307,10308,10309,10188,10220,10310,10312,10314,10313,10308, + 10305,10309,10313,10315,10310,10292,10316,10318,10317,10319, + 10220,10220,10220,10220,10220,10220,10317,10320,10319,10220, + 10324,10312,10220,10321,10322,10323,10328,10329,10330,10334, + 10335,10336,10287,10292,10293,10328,10287,10330,10294,10337, + 10338,10340,10342,10323,10348,10298,10343,10345,10312,10327, + 10327,10327,10327,10220,10346,10220,10345,10346,10359,10347, + 10311,10344,10331,10347,10343,10331,10331,10220,10331,10344, + 10220,10220,10221,10352,10354,10321,10322,10327,10356,10349, + 10331,10349,10356,10354,10352,10325,10358,10358,10221,10221, + + 10221,10221,10221,10221,10322,10326,10325,10221,10325,10325, + 10221,10325,10325,10325,10325,10325,10325,10350,10351,10326, + 10325,10326,10326,10326,10326,10326,10326,10353,10355,10357, + 10326,10355,10357,10360,10360,10350,10351,10361,10361,10362, + 10363,10221,10366,10221,10367,10368,10327,10369,10370,10353, + 10371,10372,10373,10374,10375,10221,10376,10377,10221,10221, + 10271,10378,10379,10380,10381,10382,10383,10385,10386,10387, + 10388,10383,10389,10390,10392,10393,10271,10271,10271,10271, + 10271,10271,10391,10387,10396,10271,10394,10397,10271,10398, + 10399,10402,10389,10400,10401,10385,10386,10390,10405,10393, + + 10398,10406,10408,10401,10391,10404,10394,10399,10407,10407, + 10404,10402,10410,10407,10411,10362,10412,10400,10414,10271, + 10378,10271,10415,10416,10417,10418,10418,10418,10418,10420, + 10421,10422,10271,10271,10423,10426,10271,10271,10272,10427, + 10428,10424,10434,10441,10443,10453,10388,10455,10456,10469, + 10468,10474,10481,10482,10272,10272,10272,10272,10272,10272, + 10475,10440,10487,10272,10490,10440,10272,10440,10444,10440, + 10445,10491,10416,10492,10440,10468,10440,10470,10444,10494, + 10499,10500,10444,10416,10444,10475,10444,10470,10445,10501, + 10421,10444,10470,10445,10428,10480,10420,10272,10422,10272, + + 10444,10423,10445,10502,10480,10420,10421,10422,10507,10480, + 10423,10272,10418,10424,10272,10272,10428,10424,10272,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + + 10297,10297,10297,10297,10297,10297,10297,10297,10297,10297, + 10297,10297,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + 10384,10384,10384,10384,10384,10384,10384,10384,10384,10384, + + 10384,10384,10384,10384,10384,10425,10429,10430,10432,10433, + 10442,10436,10496,10438,10439,10435,10485,10437,10471,10448, + 10452,10450,10471,10515,10471,10516,10471,10473,10484,10484, + 10446,10471,10473,10484,10473,10442,10509,10457,10457,10457, + 10457,10509,10517,10458,10458,10458,10458,10459,10459,10459, + 10459,10460,10460,10460,10460,10508,10513,10543,10508,10430, + 10508,10513,10461,10461,10461,10461,10425,10436,10544,10546, + 10452,10433,10496,10524,10439,10450,10547,10496,10438,10549, + 10550,10425,10429,10430,10432,10433,10435,10436,10437,10438, + 10439,10435,10446,10437,10442,10448,10452,10450,10457,10458, + + 10485,10498,10551,10459,10458,10524,10446,10460,10459,10543, + 10552,10479,10460,10457,10556,10479,10457,10479,10461,10479, + 10497,10557,10458,10461,10479,10497,10459,10497,10556,10558, + 10460,10462,10462,10462,10462,10463,10463,10463,10463,10561, + 10527,10461,10464,10464,10464,10464,10465,10465,10465,10465, + 10562,10505,10467,10467,10467,10467,10505,10519,10505,10477, + 10467,10477,10477,10477,10477,10477,10477,10563,10564,10506, + 10464,10498,10527,10506,10465,10506,10498,10565,10506,10478, + 10467,10478,10478,10478,10478,10478,10478,10462,10510,10566, + 10571,10463,10462,10510,10573,10510,10463,10576,10463,10511, + + 10569,10511,10465,10464,10511,10575,10577,10465,10467,10519, + 10462,10462,10512,10467,10463,10512,10522,10512,10464,10478, + 10522,10464,10522,10578,10579,10465,10466,10466,10466,10466, + 10575,10467,10569,10519,10466,10488,10488,10488,10488,10583, + 10466,10585,10466,10466,10472,10466,10466,10466,10466,10466, + 10466,10518,10582,10518,10466,10472,10518,10472,10472,10489, + 10472,10472,10472,10472,10472,10472,10582,10586,10589,10472, + 10489,10590,10489,10489,10591,10489,10489,10489,10489,10489, + 10489,10523,10466,10592,10514,10593,10526,10466,10514,10523, + 10514,10523,10586,10514,10528,10523,10526,10523,10594,10595, + + 10526,10596,10526,10528,10528,10466,10597,10530,10528,10598, + 10528,10526,10489,10523,10472,10529,10599,10600,10526,10472, + 10567,10601,10488,10520,10532,10529,10528,10603,10605,10529, + 10570,10529,10607,10608,10529,10592,10531,10610,10612,10520, + 10520,10520,10520,10520,10520,10567,10531,10529,10520,10530, + 10531,10520,10531,10613,10560,10614,10535,10617,10560,10530, + 10560,10531,10618,10530,10620,10530,10535,10580,10531,10560, + 10535,10580,10535,10580,10587,10621,10532,10535,10587,10622, + 10587,10530,10520,10623,10520,10520,10532,10624,10535,10520, + 10532,10520,10532,10534,10625,10626,10520,10570,10627,10520, + + 10520,10521,10628,10534,10567,10609,10570,10534,10532,10534, + 10616,10609,10629,10534,10533,10630,10616,10521,10521,10521, + 10521,10521,10521,10631,10533,10534,10521,10536,10533,10521, + 10533,10633,10634,10635,10636,10641,10642,10536,10654,10533, + 10537,10536,10639,10536,10632,10640,10533,10639,10643,10644, + 10537,10640,10655,10521,10537,10645,10537,10647,10644,10536, + 10521,10643,10521,10521,10650,10537,10647,10521,10648,10521, + 10645,10657,10537,10648,10521,10650,10651,10521,10521,10652, + 10651,10652,10653,10659,10660,10521,10525,10661,10649,10653, + 10664,10664,10664,10664,10665,10668,10672,10525,10538,10525, + + 10525,10678,10525,10525,10525,10525,10525,10525,10538,10540, + 10539,10525,10538,10669,10538,10656,10632,10663,10538,10540, + 10539,10680,10688,10540,10539,10540,10539,10690,10691,10541, + 10538,10539,10692,10693,10720,10724,10727,10542,10525,10541, + 10667,10540,10539,10541,10670,10541,10553,10542,10525,10541, + 10671,10542,10525,10542,10525,10649,10553,10542,10568,10649, + 10553,10541,10553,10666,10649,10669,10663,10673,10568,10542, + 10525,10668,10568,10675,10568,10656,10728,10664,10553,10554, + 10656,10677,10681,10729,10663,10683,10684,10685,10667,10669, + 10568,10686,10584,10694,10732,10554,10554,10554,10554,10554, + + 10554,10699,10733,10584,10554,10584,10584,10554,10584,10584, + 10584,10584,10584,10584,10734,10697,10667,10584,10696,10666, + 10670,10739,10673,10713,10741,10687,10671,10687,10713,10713, + 10687,10698,10698,10698,10698,10685,10729,10687,10554,10666, + 10554,10726,10677,10673,10742,10743,10726,10683,10726,10675, + 10738,10735,10554,10746,10694,10554,10554,10677,10681,10554, + 10555,10683,10684,10685,10735,10753,10755,10686,10770,10694, + 10701,10701,10701,10701,10699,10738,10555,10555,10555,10555, + 10555,10555,10697,10696,10714,10555,10771,10698,10555,10761, + 10761,10697,10762,10765,10696,10714,10762,10714,10714,10772, + + 10714,10714,10714,10714,10714,10714,10773,10765,10715,10714, + 10715,10715,10715,10715,10715,10715,10776,10750,10737,10555, + 10737,10555,10750,10737,10737,10716,10701,10716,10716,10716, + 10716,10716,10716,10555,10767,10767,10555,10555,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10638,10638,10638,10638,10638,10638,10638,10638,10638, + 10638,10700,10700,10700,10700,10702,10702,10702,10702,10703, + 10703,10703,10703,10704,10704,10704,10704,10705,10705,10705, + 10705,10781,10723,10707,10707,10707,10707,10782,10717,10711, + 10711,10711,10711,10784,10756,10785,10786,10711,10712,10712, + 10712,10712,10717,10748,10717,10717,10717,10717,10717,10717, + 10719,10748,10719,10717,10764,10719,10748,10711,10744,10764, + 10787,10702,10700,10769,10719,10703,10744,10769,10744,10704, + + 10752,10744,10752,10705,10723,10752,10704,10700,10705,10707, + 10700,10763,10723,10788,10707,10711,10760,10723,10789,10703, + 10711,10763,10792,10790,10793,10763,10705,10706,10706,10706, + 10706,10711,10707,10721,10721,10721,10721,10794,10711,10711, + 10756,10706,10795,10706,10706,10718,10706,10706,10706,10706, + 10706,10706,10745,10745,10796,10712,10718,10745,10718,10718, + 10801,10718,10718,10718,10718,10718,10718,10766,10760,10730, + 10718,10730,10730,10730,10730,10730,10730,10766,10790,10791, + 10791,10766,10760,10706,10802,10804,10805,10731,10706,10731, + 10731,10731,10731,10731,10731,10783,10807,10809,10783,10790, + + 10759,10810,10811,10749,10759,10783,10706,10708,10708,10708, + 10708,10749,10759,10749,10803,10806,10749,10806,10812,10813, + 10721,10708,10809,10708,10708,10817,10708,10708,10708,10708, + 10708,10708,10819,10751,10768,10708,10751,10768,10817,10808, + 10823,10751,10808,10808,10797,10824,10751,10825,10768,10778, + 10778,10778,10778,10778,10778,10797,10798,10797,10797,10731, + 10797,10797,10797,10797,10797,10797,10803,10816,10708,10797, + 10798,10816,10798,10798,10798,10798,10798,10798,10826,10803, + 10799,10798,10821,10827,10828,10821,10708,10709,10709,10709, + 10709,10799,10829,10799,10799,10709,10799,10799,10799,10799, + + 10799,10799,10830,10831,10709,10799,10709,10709,10709,10709, + 10709,10709,10832,10800,10814,10709,10800,10815,10815,10815, + 10815,10815,10815,10818,10814,10800,10820,10814,10833,10820, + 10834,10835,10836,10818,10837,10838,10818,10839,10845,10820, + 10841,10842,10843,10709,10847,10843,10848,10849,10709,10851, + 10852,10853,10856,10847,10854,10853,10860,10862,10863,10851, + 10864,10869,10845,10866,10857,10867,10709,10710,10710,10710, + 10710,10849,10870,10872,10852,10710,10855,10855,10855,10855, + 10874,10878,10876,10882,10710,10883,10710,10710,10710,10710, + 10710,10710,10841,10842,10886,10710,10857,10887,10880,10885, + + 10885,10888,10889,10891,10892,10885,10854,10863,10894,10909, + 10901,10901,10901,10901,10911,10917,10841,10842,10918,10893, + 10893,10893,10893,10710,10915,10866,10919,10920,10710,10924, + 10854,10925,10867,10882,10932,10926,10907,10869,10901,10866, + 10926,10867,10944,10710,10950,10928,10710,10710,10757,10876, + 10928,10891,10880,10905,10905,10905,10905,10878,10876,10882, + 10951,10952,10953,10855,10757,10757,10757,10757,10757,10757, + 10954,10901,10930,10757,10880,10893,10757,10930,10907,10891, + 10892,10894,10896,10896,10896,10896,10901,10955,10907,10901, + 10901,10956,10907,10937,10907,10966,10907,10900,10900,10900, + + 10900,10907,10910,10910,10910,10910,10927,10757,10915,10757, + 10969,10927,10927,10958,10902,10902,10902,10902,10929,10958, + 10757,10757,10902,10929,10757,10757,10904,10904,10904,10904, + 10757,10758,10929,10923,10904,10937,10960,10923,10896,10923, + 10905,10923,10902,10896,10971,10973,10923,10758,10758,10758, + 10758,10758,10758,10900,10904,10974,10758,10968,10900,10758, + 10903,10903,10903,10903,10968,10921,10975,10956,10903,10900, + 10902,10921,10976,10931,10931,10902,10900,10900,10931,10921, + 10977,10913,10904,10913,10978,10970,10913,10904,10903,10910, + 10758,10904,10758,10902,10902,10913,10959,10979,10980,10959, + + 10970,10936,10981,10982,10758,10904,10983,10758,10758,10779, + 10972,10959,10972,10938,10984,10986,10903,10987,10988,10991, + 10960,10903,10939,10993,10995,10779,10779,10779,10779,10779, + 10779,10908,10997,10995,10779,11001,11002,10779,10903,10903, + 10999,10940,10908,10936,10908,10908,11006,10908,10908,10908, + 10908,10908,10908,10936,11007,10938,10908,10936,10941,10936, + 11008,11001,10999,10936,10939,10938,11012,10942,10779,10938, + 10779,10938,11017,11033,10939,10936,11014,11009,10939,10943, + 10939,11010,10779,10940,11034,10779,10779,10780,10939,11035, + 11037,10957,11039,10940,11042,11043,11047,10940,11045,10940, + + 10941,11048,11050,10780,10780,10780,10780,10780,10780,10942, + 10941,11045,10780,11052,10941,10780,10941,11051,11046,10942, + 10961,10943,11051,10942,10961,10942,10961,10961,11046,11060, + 11061,10943,10941,10957,11062,10943,11010,10943,11009,11063, + 10943,11014,11012,10957,11064,11065,10780,10957,10780,10957, + 10957,11058,11014,11009,11058,11067,11070,11010,11067,11072, + 10780,11073,10780,10780,10780,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10840,10840, + 10840,10840,10840,10840,10840,10840,10840,10840,10895,10895, + 10895,10895,11054,10946,10946,10946,10946,10946,10946,11074, + 11040,11075,10895,11076,10895,10895,11015,10895,10895,10895, + 10895,10895,10895,10967,10967,10967,10967,10967,10967,10985, + 10985,10985,10985,10985,11004,11004,11004,11004,11016,11018, + + 11020,11020,11020,11020,11054,11059,11016,11077,11079,11080, + 11081,11016,11059,11082,10895,10897,10897,10897,10897,11069, + 11083,11084,11085,11069,11086,11069,11069,11087,11089,10897, + 11091,10897,10897,10946,10897,10897,10897,10897,10897,10897, + 11093,11091,11092,11015,11021,11021,11021,11021,11094,10985, + 11095,11092,11015,10967,11040,11102,11020,11114,11021,11115, + 11021,11021,11018,11021,11021,11021,11021,11021,11021,11022, + 11022,11022,11022,11116,11096,11018,10897,11025,11025,11025, + 11025,11004,11097,11022,11118,11022,11022,11119,11022,11022, + 11022,11022,11022,11022,10897,10898,10898,10898,10898,11120, + + 11121,11122,11123,11023,11023,11023,11023,11026,11026,11026, + 11026,11124,10898,11053,10898,10898,10898,10898,10898,10898, + 11023,11121,11023,11023,11023,11023,11023,11023,11027,11027, + 11027,11027,11126,11025,11130,11049,11131,11129,11132,11049, + 11134,11049,11128,11049,11028,11028,11028,11028,11049,11025, + 11096,10898,11129,11128,11135,11053,10898,11136,11097,11023, + 11029,11029,11029,11029,11137,11053,11100,11099,11026,11053, + 11133,11053,11055,11138,10898,10899,10899,10899,10899,11139, + 11140,11133,11142,11026,11027,11143,11026,11026,11144,11027, + 11145,11103,10899,11146,10899,10899,10899,10899,10899,10899, + + 11028,11030,11030,11030,11030,11028,11147,11027,11027,11030, + 11031,11031,11031,11031,11055,11099,11029,11149,11031,11150, + 11151,11029,11028,11028,11055,11029,11152,11127,11055,11030, + 11055,10899,11032,11032,11032,11032,10899,11153,11031,11029, + 11032,11159,11100,11099,11101,11149,11103,11167,11168,11101, + 11156,10899,11160,11169,10899,10899,10934,11030,11101,11171, + 11032,11173,11030,11175,11176,11177,11031,11103,11178,11127, + 11179,11031,10934,10934,10934,10934,10934,10934,11180,11127, + 11030,10934,11181,11127,10934,11127,11182,11183,11032,11031, + 11184,11031,11187,11032,11188,11189,11032,11104,11104,11104, + + 11104,11127,11105,11105,11105,11105,11190,11106,11106,11106, + 11106,11032,11191,11156,11193,10934,11195,10934,11196,11107, + 11107,11107,11107,11197,11160,10934,11156,11193,11160,10934, + 11198,11199,10934,10934,10935,11203,11108,11108,11108,11108, + 11205,11206,11207,11209,10935,11171,11210,11211,11212,11213, + 10935,10935,10935,10935,10935,10935,11214,11215,11216,10935, + 11217,11223,10935,11106,11109,11109,11109,11109,11161,11161, + 11161,11161,11225,11104,11226,11107,11227,11104,11105,11222, + 11228,11229,11105,11220,11230,11198,10935,11106,11110,11110, + 11110,11110,11108,10935,11231,10935,10935,11107,11234,11235, + + 10935,11108,10935,11235,11220,11237,11198,10935,11238,11240, + 10935,10935,10947,11239,11111,11111,11111,11111,11242,11243, + 11109,11244,11236,11245,11161,11109,11246,11247,10947,10947, + 10947,10947,10947,10947,11249,11251,11250,10947,11252,11253, + 10947,11255,11256,11109,11110,11162,11162,11162,11162,11110, + 11258,11222,11259,11260,11264,11222,11112,11112,11112,11112, + 11163,11163,11163,11163,11112,11265,11267,11110,11268,11110, + 11111,10947,11270,10947,11271,11111,11272,11273,11111, 1859, + 11200,11200,11200,11200,11112,10947, 1856,10947,10947,10947, + 10949,11383,11383,11111,11201,11201,11201,11201,11236,11239, + + 1855,11162,11384,11384,11450,11450,10949,10949,10949,10949, + 10949,10949,11112,11359, 1854,10949,11163,11112,10949,11359, + 11359,11112,11250,11360,11163,11369,11162,11370, 1853,11360, + 11360,11369,11369,11370,11370,11112,11200,11372,11451,11451, + 11373,11483,11483,11372,11372,11200,11373,11373,11380,10949, + 11201,10949, 1851,11482,11380,11380,11530,11530,11409,10949, + 11482,11482, 1850,10949,11409,11409,10949,10949,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,10990,10990,10990,10990,10990,10990,10990,10990,10990, + 10990,11024,11024,11024,11024,11113,11113,11113,11113,11164, + 11164,11164,11164,11113,11926,11926, 1849,11926,11024, 1848, + 11024,11024,11024,11024,11024,11024,11165,11165,11165,11165, + 1843, 1842, 1841,11113,11166,11166,11166,11166,11202,11202, + + 11202,11202,11166,11420,11224,11224,11224,11224,11421,11420, + 11420, 1840,11431, 1839,11421,11421,11529,11024,11431,11431, + 1838,11113,11166,11529,11529,11164,11113, 1836, 1835,11432, + 11164, 1834,11434, 1833,11164,11432,11432,11024,11434,11434, + 1832,11024,11165, 1831,11113,11435, 1830,11165,11164, 1829, + 11166,11435,11435, 1828,11202,11166,11441, 1827, 1823,11202, + 11224,11462,11441,11441, 1821,11165, 1820,11462,11462,11485, + 11166, 1819,11491,11166,11202,11485,11485,11202,11491,11491, + 11224,11276,11276,11276,11276,11276,11276,11276,11276,11276, + 11276,11276,11276,11276,11276,11276,11276,11276,11276,11276, + + 11276,11276,11276,11276,11276,11277,11277,11277,11277,11277, + 11277,11277,11277,11277,11277,11277,11277,11277,11277,11277, + 11277,11277,11277,11277,11277,11277,11277,11277,11277,11278, + 11278,11278,11278,11278,11278,11278,11278,11278,11278,11278, + 11278,11278,11278,11278,11278,11278,11278,11278,11278,11278, + 11278,11278,11278,11279,11279,11279,11279,11279,11279,11279, + 11279,11279,11279,11279,11279,11279,11279,11279,11279,11279, + 11279,11279,11279,11279,11279,11279,11279,11280,11280,11280, + 11280,11280,11280,11280,11280,11280,11280,11280,11280,11280, + 11280,11280,11280,11280,11280,11280,11280,11280,11280,11280, + + 11280,11281,11281,11281,11281,11281,11281,11281,11281,11281, + 11281,11281,11281,11281,11281,11281,11281,11281,11281,11281, + 11281,11281,11281,11281,11281,11282,11282,11282,11282,11282, + 11282,11282,11282,11282,11282,11282,11282,11282,11282,11282, + 11282,11282,11282,11282,11282,11282,11282,11282,11282,11283, + 11283,11283,11283,11283,11283,11283,11283,11283,11283,11283, + 11283,11283,11283,11283,11283,11283,11283,11283,11283,11283, + 11283,11283,11283,11284,11284,11284,11284,11284,11284,11284, + 11284,11284,11284,11284,11284,11284,11284,11284,11284,11284, + 11284,11284,11284,11284,11284,11284,11284,11285,11285,11285, + + 11285,11285,11285,11285,11285,11285,11285,11285,11285,11285, + 11285,11285,11285,11285,11285,11285,11285,11285,11285,11285, + 11285,11286,11286,11286,11286,11286,11286,11286,11286,11286, + 11286,11286,11286,11286,11286,11286,11286,11286,11286,11286, + 11286,11286,11286,11286,11286,11287,11287,11287,11287,11287, + 11287,11287,11287,11287,11287,11287,11287,11287,11287,11287, + 11287,11287,11287,11287,11287,11287,11287,11287,11287,11288, + 11288,11288,11288,11288,11288,11288,11288,11288,11288,11288, + 11288,11288,11288,11288,11288,11288,11288,11288,11288,11288, + 11288,11288,11288,11289,11289,11289,11289,11289,11289,11289, + + 11289,11289,11289,11289,11289,11289,11289,11289,11289,11289, + 11289,11289,11289,11289,11289,11289,11289,11290,11290,11290, + 11290,11290,11290,11290,11290,11290,11290,11290,11290,11290, + 11290,11290,11290,11290,11290,11290,11290,11290,11290,11290, + 11290,11291,11291,11291,11291,11291,11291,11291,11291,11291, + 11291,11291,11291,11291,11291,11291,11291,11291,11291,11291, + 11291,11291,11291,11291,11291,11292,11292,11292,11292,11292, + 11292,11292,11292,11292,11292,11292,11292,11292,11292,11292, + 11292,11292,11292,11292,11292,11292,11292,11292,11292,11293, + 11293,11293,11293,11293,11293,11293,11293,11293,11293,11293, + + 11293,11293,11293,11293,11293,11293,11293,11293,11293,11293, + 11293,11293,11293,11294,11294,11294,11294,11294,11294,11294, + 11294,11294,11294,11294,11294,11294,11294,11294,11294,11294, + 11294,11294,11294,11294,11294,11294,11294,11295,11295,11295, + 11295,11295,11295,11295,11295,11295,11295,11295,11295,11295, + 11295,11295,11295,11295,11295,11295,11295,11295,11295,11295, + 11295,11296,11296,11296,11296,11296,11296,11296,11296,11296, + 11296,11296,11296,11296,11296,11296,11296,11296,11296,11296, + 11296,11296,11296,11296,11296,11297,11297,11297,11297,11297, + 11297,11297,11297,11297,11297,11297,11297,11297,11297,11297, + + 11297,11297,11297,11297,11297,11297,11297,11297,11297,11298, + 11298,11298,11298,11298,11298,11298,11298,11298,11298,11298, + 11298,11298,11298,11298,11298,11298,11298,11298,11298,11298, + 11298,11298,11298,11299,11299,11299,11299,11299,11299,11299, + 11299,11299,11299,11299,11299,11299,11299,11299,11299,11299, + 11299,11299,11299,11299,11299,11299,11299,11300,11300,11300, + 11300,11300,11300,11300,11300,11300,11300,11300,11300,11300, + 11300,11300,11300,11300,11300,11300,11300,11300,11300,11300, + 11300,11301,11301,11301,11301,11301,11301,11301,11301,11301, + 11301,11301,11301,11301,11301,11301,11301,11301,11301,11301, + + 11301,11301,11301,11301,11301,11302,11302,11302,11302,11302, + 11302,11302,11302,11302,11302,11302,11302,11302,11302,11302, + 11302,11302,11302,11302,11302,11302,11302,11302,11302,11303, + 11303,11303,11303,11303,11303,11303,11303,11303,11303,11303, + 11303,11303,11303,11303,11303,11303,11303,11303,11303,11303, + 11303,11303,11303,11304,11304,11304,11304,11304,11304,11304, + 11304,11304,11304,11304,11304,11304,11304,11304,11304,11304, + 11304,11304,11304,11304,11304,11304,11304,11305,11305,11305, + 11305,11305,11305,11305,11305,11305,11305,11305,11305,11305, + 11305,11305,11305,11305,11305,11305,11305,11305,11305,11305, + + 11305,11306,11306,11306,11306,11306,11306,11306,11306,11306, + 11306,11306,11306,11306,11306,11306,11306,11306,11306,11306, + 11306,11306,11306,11306,11306,11307,11307,11307,11307,11307, + 11307,11307,11307,11307,11307,11307,11307,11307,11307,11307, + 11307,11307,11307,11307,11307,11307,11307,11307,11307,11308, + 11308,11308,11308,11308,11308,11308,11308,11308,11308,11308, + 11308,11308,11308,11308,11308,11308,11308,11308,11308,11308, + 11308,11308,11308,11309,11309,11309,11309,11309,11309,11309, + 11309,11309,11309,11309,11309,11309,11309,11309,11309,11309, + 11309,11309,11309,11309,11309,11309,11309,11310,11310,11310, + + 11310,11310,11310,11310,11310,11310,11310,11310,11310,11310, + 11310,11310,11310,11310,11310,11310,11310,11310,11310,11310, + 11310,11311,11311,11311,11311,11311,11311,11311,11311,11311, + 11311,11311,11311,11311,11311,11311,11311,11311,11311,11311, + 11311,11311,11311,11311,11311,11312,11312,11312,11312,11312, + 11312,11312,11312,11312,11312,11312,11312,11312,11312,11312, + 11312,11312,11312,11312,11312,11312,11312,11312,11312,11313, + 11313,11313,11313,11313,11313,11313,11313,11313,11313,11313, + 11313,11313,11313,11313,11313,11313,11313,11313,11313,11313, + 11313,11313,11313,11314,11314,11314,11314,11314,11314,11314, + + 11314,11314,11314,11314,11314,11314,11314,11314,11314,11314, + 11314,11314,11314,11314,11314,11314,11314,11315,11315,11315, + 11315,11315,11315,11315,11315,11315,11315,11315,11315,11315, + 11315,11315,11315,11315,11315,11315,11315,11315,11315,11315, + 11315,11316,11316,11316,11316,11316,11316,11316,11316,11316, + 11316,11316,11316,11316,11316,11316,11316,11316,11316,11316, + 11316,11316,11316,11316,11316,11317,11317,11317,11317,11317, + 11317,11317,11317,11317,11317,11317,11317,11317,11317,11317, + 11317,11317,11317,11317,11317,11317,11317,11317,11317,11318, + 11318,11318,11318,11318,11318,11318,11318,11318,11318,11318, + + 11318,11318,11318,11318,11318,11318,11318,11318,11318,11318, + 11318,11318,11318,11319,11319,11319,11319,11319,11319,11319, + 11319,11319,11319,11319,11319,11319,11319,11319,11319,11319, + 11319,11319,11319,11319,11319,11319,11319,11320,11320,11320, + 11320,11320,11320,11320,11320,11320,11320,11320,11320,11320, + 11320,11320,11320,11320,11320,11320,11320,11320,11320,11320, + 11320,11321,11321,11321,11321,11321,11321,11321,11321,11321, + 11321,11321,11321,11321,11321,11321,11321,11321,11321,11321, + 11321,11321,11321,11321,11321,11322,11322,11322,11322,11322, + 11322,11322,11322,11322,11322,11322,11322,11322,11322,11322, + + 11322,11322,11322,11322,11322,11322,11322,11322,11322,11323, + 11323,11323,11323,11323,11323,11323,11323,11323,11323,11323, + 11323,11323,11323,11323,11323,11323,11323,11323,11323,11323, + 11323,11323,11323,11324,11324,11324,11324,11324,11324,11324, + 11324,11324,11324,11324,11324,11324,11324,11324,11324,11324, + 11324,11324,11324,11324,11324,11324,11324,11325,11325,11325, + 11325,11325,11325,11325,11325,11325,11325,11325,11325,11325, + 11325,11325,11325,11325,11325,11325,11325,11325,11325,11325, + 11325,11326,11326,11326,11326,11326,11326,11326,11326,11326, + 11326,11326,11326,11326,11326,11326,11326,11326,11326,11326, + + 11326,11326,11326,11326,11326,11327,11327,11327,11327,11327, + 11327,11327,11327,11327,11327,11327,11327,11327,11327,11327, + 11327,11327,11327,11327,11327,11327,11327,11327,11327,11328, + 11328,11328,11328,11328,11328,11328,11328,11328,11328,11328, + 11328,11328,11328,11328,11328,11328,11328,11328,11328,11328, + 11328,11328,11328,11329,11329,11329,11329,11329,11329,11329, + 11329,11329,11329,11329,11329,11329,11329,11329,11329,11329, + 11329,11329,11329,11329,11329,11329,11329,11330,11330,11330, + 11330,11330,11330,11330,11330,11330,11330,11330,11330,11330, + 11330,11330,11330,11330,11330,11330,11330,11330,11330,11330, + + 11330,11331,11331,11331,11331,11331,11331,11331,11331,11331, + 11331,11331,11331,11331,11331,11331,11331,11331,11331,11331, + 11331,11331,11331,11331,11331,11332,11332,11332,11332,11332, + 11332,11332,11332,11332,11332,11332,11332,11332,11332,11332, + 11332,11332,11332,11332,11332,11332,11332,11332,11332,11333, + 11333,11333,11333,11333,11333,11333,11333,11333,11333,11333, + 11333,11333,11333,11333,11333,11333,11333,11333,11333,11333, + 11333,11333,11333,11334,11334,11334,11334,11334,11334,11334, + 11334,11334,11334,11334,11334,11334,11334,11334,11334,11334, + 11334,11334,11334,11334,11334,11334,11334,11335,11335,11335, + + 11335,11335,11335,11335,11335,11335,11335,11335,11335,11335, + 11335,11335,11335,11335,11335,11335,11335,11335,11335,11335, + 11335,11336,11336,11336,11336,11336,11336,11336,11336,11336, + 11336,11336,11336,11336,11336,11336,11336,11336,11336,11336, + 11336,11336,11336,11336,11336,11337,11337,11337,11337,11337, + 11337,11337,11337,11337,11337,11337,11337,11337,11337,11337, + 11337,11337,11337,11337,11337,11337,11337,11337,11337,11338, + 11338,11338,11338,11338,11338,11338,11338,11338,11338,11338, + 11338,11338,11338,11338,11338,11338,11338,11338,11338,11338, + 11338,11338,11338,11339,11339,11339,11339,11339,11339,11339, + + 11339,11339,11339,11339,11339,11339,11339,11339,11339,11339, + 11339,11339,11339,11339,11339,11339,11339,11340,11340,11340, + 11340,11340,11340,11340,11340,11340,11340,11340,11340,11340, + 11340,11340,11340,11340,11340,11340,11340,11340,11340,11340, + 11340,11341,11341,11341,11341,11341,11341,11341,11341,11341, + 11341,11341,11341,11341,11341,11341,11341,11341,11341,11341, + 11341,11341,11341,11341,11341,11342,11342,11342,11342,11342, + 11342,11342,11342,11342,11342,11342,11342,11342,11342,11342, + 11342,11342,11342,11342,11342,11342,11342,11342,11342,11343, + 11343,11343,11343,11343,11343,11343,11343,11343,11343,11343, + + 11343,11343,11343,11343,11343,11343,11343,11343,11343,11343, + 11343,11343,11343,11344,11344,11344,11344,11344,11344,11344, + 11344,11344,11344,11344,11344,11344,11344,11344,11344,11344, + 11344,11344,11344,11344,11344,11344,11344,11345,11345,11345, + 11345,11345,11345,11345,11345,11345,11345,11345,11345,11345, + 11345,11345,11345,11345,11345,11345,11345,11345,11345,11345, + 11345,11346,11346,11346,11346,11346,11346,11346,11346,11346, + 11346,11346,11346,11346,11346,11346,11346,11346,11346,11346, + 11346,11346,11346,11346,11346,11347,11347,11347,11347,11347, + 11347,11347,11347,11347,11347,11347,11347,11347,11347,11347, + + 11347,11347,11347,11347,11347,11347,11347,11347,11347,11348, + 11348,11348,11348,11348,11348,11348,11348,11348,11348,11348, + 11348,11348,11348,11348,11348,11348,11348,11348,11348,11348, + 11348,11348,11348,11349, 1818,11492, 1815,11511, 1814, 1813, + 11349,11492,11492,11511,11511, 1804,11349,11349,11350,11350, + 11350,11350,11350,11350,11350,11350,11350,11350,11350,11350, + 11350,11350,11350,11350,11350,11350,11350,11350,11350,11350, + 11350,11350,11351,11351, 1802,11351,11351,11351,11351,11351, + 11351,11351,11351,11351,11351,11351,11351,11351,11351,11351, + 11351,11351,11351,11351,11351,11351,11352,11352, 1800,11352, + + 11352,11352,11352,11352,11352,11352,11352,11352,11352,11352, + 11352,11352,11352,11352,11352,11352,11352,11352,11352,11352, + 11353,11353, 1799,11353, 1795,11956,11956,11532,11956,11353, + 11353, 1794,11353,11532,11532, 1792,11353,11353,11354,11354, + 11354,11354,11354,11354,11354, 1791,11354,11354,11354,11354, + 11354,11354,11354,11354,11354,11354,11354,11354,11354,11354, + 11354,11354,11355,11355,11355,11355,11355,11355,11355,11355, + 11355,11355,11355,11355,11355,11355,11355,11355,11355,11355, + 11355,11355,11355,11355,11355,11355,11356,11356, 1788, 1787, + 1786,11540, 1783,11356,11356,11357,11357,11540,11540, 1781, + + 11541, 1780,11357,11357,11358,11358,11541,11541, 1779,11575, + 1777,11358,11358,11361,11361,11575,11575,11581, 1775,11582, + 11361,11361,11362,11581,11581,11582,11582,11362,11362,11362, + 11362,11362,11362,11362,11362,11362,11362,11362,11362,11362, + 11362,11362,11362,11362,11362,11362,11363,11363, 1774, 1773, + 11611, 1771,11625,11363,11363,11364,11611,11611,11625,11625, + 11630,11364,11364, 1770, 1769, 1768,11630,11630,11364,11364, + 11365,11365,11365,11365,11365,11365,11365,11365,11365,11365, + 11365,11365,11365,11365,11365,11365,11365,11365,11365,11365, + 11365,11365, 1766,11365,11366,11366,11366,11366,11366,11366, + + 11366,11366,11366,11366,11366,11366,11366,11366,11366,11366, + 11366,11366,11366,11366,11366,11366,11366,11366,11367,11367, + 11367,11367, 1765, 1764,11631, 1761,11367,11367, 1752,11367, + 11631,11631, 1751,11367,11367,11368,11368,11368,11368,11368, + 11368,11368,11368,11368,11368,11368,11368,11368,11368,11368, + 11368,11368,11368,11368,11368,11368,11368,11368,11368,11371, + 1748, 1747, 1746, 1745, 1744,11371,11371, 1743,11371,11374, + 11374,11374,11374,11374,11374, 1742,11374,11374,11374,11374, + 11374,11374,11374,11374,11374,11374,11374,11374,11374,11374, + 11374,11374,11374,11375,11375, 1741, 1740, 1739,11678, 1738, + + 11375,11375,11376,11376,11678,11678, 1737,11684, 1736,11376, + 11376,11377,11377,11684,11684, 1735, 1731, 1730,11377,11377, + 11378,11378,11378,11378, 1727,11378, 1726, 1725,11723, 1724, + 11378,11727, 1723,11378,11723,11723, 1722,11727,11727,11378, + 11378,11379,11379,11379,11379,11379,11379,11379,11379,11379, + 11379,11379,11379,11379,11379,11379,11379,11379,11379,11379, + 11379,11379,11379,11379,11379,11381,11381,11381,11381,11381, + 11381,11381,11381,11381,11381,11381,11381,11381,11381,11381, + 11381,11381,11381,11381,11381,11381,11381,11381,11381,11382, + 11382,11382,11382,11382,11382,11382,11382,11382,11382,11382, + + 11382,11382,11382,11382,11382,11382,11382,11382,11382,11382, + 11382,11382,11382,11385,11385,11385,11385,11385,11385,11385, + 11385,11385,11385,11385,11385,11385,11385,11385,11385,11385, + 11385,11385,11385,11385,11385,11385,11385,11386,11386,11386, + 11386,11386,11386,11386,11386,11386,11386,11386,11386,11386, + 11386,11386,11386,11386,11386,11386,11386,11386,11386,11386, + 11386,11387, 1721, 1717, 1716,11800, 1714, 1713,11387, 1712, + 11387,11800,11800,11801,11387,11387,11387,11387,11388,11801, + 11801, 1711,11803, 1710, 1709,11388, 1707,11388,11803,11803, + 1705,11388,11388,11388,11388,11389,11389,11389,11389,11389, + + 11389,11389,11389,11389,11389,11389,11389,11389,11389,11389, + 11389,11389,11389,11389,11389,11389,11389,11389,11389,11390, + 11390, 1704, 1703,11816, 1702,11838,11390,11390,11391,11816, + 11816,11838,11838, 1701,11839, 1700, 1699,11391, 1698,11391, + 11839,11839,11840,11391,11391,11392,11392, 1697,11840,11840, + 1696, 1695,11392,11392,11393,11393,11393,11393,11393,11393, + 11393,11393,11393,11393,11393,11393,11393,11393,11393,11393, + 11393,11393,11393,11393,11393,11393,11393,11393,11394, 1694, + 1693, 1691,11394,11394, 1690, 1688,11394,11394,11394,11394, + 11394,11394,11394,11394, 1685,11394,11394,11394,11394,11394, + + 11395,11395,11395,11395,11395,11395,11395,11395,11395,11395, + 11395,11395,11395,11395,11395,11395,11395,11395,11395,11395, + 11395,11395,11395,11395,11396,11396,11396,11396,11396,11396, + 11396,11396,11396,11396,11396,11396,11396,11396,11396,11396, + 11396,11396,11396,11396,11396,11396,11396,11396,11397,11397, + 1684, 1682, 1681, 1679, 1677,11397,11397,11398,11398, 1675, + 11398,11398,11398,11398,11398,11398,11398,11398,11398,11398, + 11398,11398,11398,11398,11398,11398,11398,11398,11398,11398, + 11398,11399,11399, 1673,11399,11399,11399,11399,11399,11399, + 11399,11399,11399,11399,11399,11399,11399,11399,11399,11399, + + 11399,11399,11399,11399,11399,11400,11400,11400,11400,11400, + 11400,11400,11400,11400,11400,11400,11400,11400,11400,11400, + 11400,11400,11400,11400,11400,11400,11400,11400,11400,11401, + 11401,11401,11401,11401,11401,11401,11401,11401,11401,11401, + 11401,11401,11401,11401,11401,11401,11401,11401,11401,11401, + 11401,11401,11401,11402,11402,11402,11402,11402,11402, 1671, + 11402,11402,11402,11402,11402,11402,11402,11402,11402,11402, + 11402,11402,11402,11402,11402,11402,11402,11403,11403,11403, + 11403,11403,11403,11403,11403,11403,11403,11403,11403,11403, + 11403,11403,11403,11403,11403,11403,11403,11403,11403,11403, + + 11403,11404, 1669, 1665, 1662, 1661,11852, 1660,11404,11404, + 1659,11404,11852,11852, 1655, 1653, 1652,11404,11404,11405, + 11405, 1651, 1647, 1646, 1645, 1641,11405,11405,11406, 1640, + 1637, 1636, 1634, 1632, 1627,11406,11406,11406,11406, 1626, + 1625, 1624, 1620, 1616,11406,11406,11407, 1615, 1614, 1611, + 1609, 1605, 1604,11407,11407,11407,11407, 1603, 1601, 1600, + 1597, 1596,11407,11407,11408,11408,11408,11408,11408,11408, + 11408,11408,11408,11408,11408,11408,11408,11408,11408,11408, + 11408,11408,11408,11408,11408,11408,11408,11408,11410,11410, + 1595,11410,11410,11410,11410,11410,11410,11410,11410,11410, + + 11410,11410,11410,11410,11410,11410,11410,11410,11410,11410, + 11410,11410,11411,11411,11411,11411,11411,11411,11411,11411, + 11411,11411,11411,11411,11411,11411,11411,11411,11411,11411, + 11411,11411,11411,11411,11411,11411,11412,11412, 1594, 1593, + 1590, 1588, 1587,11412,11412,11413,11413, 1586, 1584, 1582, + 1581, 1580,11413,11413,11414,11414, 1579, 1574, 1570, 1569, + 1568,11414,11414,11415,11415,11415,11415,11415,11415,11415, + 1567,11415,11415,11415,11415,11415,11415,11415,11415,11415, + 11415,11415,11415,11415,11415,11415,11415,11416,11416,11416, + 11416,11416,11416,11416,11416,11416,11416,11416,11416,11416, + + 11416,11416,11416,11416,11416,11416,11416,11416,11416,11416, + 11416,11417,11417, 1566, 1565, 1563, 1561, 1559,11417,11417, + 11418,11418, 1558, 1557, 1555, 1554, 1551,11418,11418,11419, + 11419, 1550, 1549, 1548, 1547, 1546,11419,11419,11422,11422, + 1545, 1544, 1543, 1542, 1541,11422,11422,11423, 1540, 1539, + 1538, 1535,11423,11423,11423,11423,11423,11423,11423,11423, + 11423,11423,11423,11423,11423,11423,11423,11423,11423,11423, + 11423,11424,11424, 1533, 1532, 1531, 1530, 1456,11424,11424, + 11425, 1378, 1367, 1361, 1353, 1334, 1333, 1332,11425,11425, + 11425, 1330, 1323, 1322, 1321, 1319,11425,11425,11426,11426, + + 11426,11426,11426,11426,11426,11426,11426,11426,11426,11426, + 11426,11426,11426,11426,11426,11426,11426,11426,11426,11426, + 1316,11426,11427,11427,11427,11427,11427,11427,11427,11427, + 11427,11427,11427,11427,11427,11427,11427,11427,11427,11427, + 11427,11427,11427,11427,11427,11427,11428,11428,11428,11428, + 11428,11428,11428,11428,11428,11428,11428,11428,11428,11428, + 11428,11428,11428,11428,11428,11428,11428,11428,11428,11428, + 11429,11429, 1314, 1311, 1309, 1308, 1305,11429,11429,11430, + 11430,11430,11430,11430,11430,11430,11430,11430,11430,11430, + 11430,11430,11430,11430,11430,11430,11430,11430,11430,11430, + + 11430,11430,11430,11433, 1303, 1300, 1297, 1290, 1275,11433, + 11433, 1270,11433,11436, 1269, 1268, 1267, 1261, 1258, 1256, + 11436,11436,11436,11436, 1255, 1254, 1253, 1251, 1248,11436, + 11436,11437,11437, 1245, 1241, 1240, 1238, 1235,11437,11437, + 11438,11438, 1234, 1232, 1231, 1230, 1227,11438,11438,11439, + 11439, 1224, 1223, 1222, 1221, 1220,11439,11439,11440,11440, + 11440,11440, 1219, 1218, 1216, 1215, 1214, 1213,11440, 1211, + 1206,11440, 1200, 1180, 1174, 1160, 1158,11440,11440,11442, + 1156, 1155, 1154, 1153, 1152, 1151,11442,11442, 1150,11442, + 1149, 1148, 1147, 1146, 1145,11442,11442,11443,11443, 1144, + + 1143, 1142, 1141, 1140,11443,11443,11444, 1138, 1137, 1134, + 1131, 1129, 1128,11444,11444,11444,11444, 1127, 1126, 1125, + 1123, 1121,11444,11444,11445,11445,11445,11445,11445,11445, + 11445,11445,11445,11445,11445,11445,11445,11445,11445,11445, + 11445,11445,11445,11445,11445,11445,11445,11445,11446,11446, + 11446,11446,11446,11446, 1119,11446,11446,11446,11446,11446, + 11446,11446,11446,11446,11446,11446,11446,11446,11446,11446, + 11446,11446,11447,11447,11447,11447,11447,11447,11447,11447, + 11447,11447,11447,11447,11447,11447,11447,11447,11447,11447, + 11447,11447,11447,11447,11447,11447,11448,11448,11448,11448, + + 11448,11448,11448,11448,11448,11448,11448,11448,11448,11448, + 11448,11448,11448,11448,11448,11448,11448,11448,11448,11448, + 11449,11449,11449,11449,11449,11449,11449,11449,11449,11449, + 11449,11449,11449,11449,11449,11449,11449,11449,11449,11449, + 11449,11449,11449,11449,11452, 1115, 1113, 1108, 1082, 1055, + 1053,11452, 986, 982, 971, 970, 969,11452,11452, 968, + 11452,11453, 967, 966, 964, 963, 962, 961,11453, 960, + 956,11453, 955, 954,11453,11453,11454,11454,11454,11454, + 11454,11454,11454,11454,11454,11454,11454,11454,11454,11454, + 11454,11454,11454,11454,11454,11454,11454,11454,11454,11454, + + 11455,11455, 953, 952, 951, 950, 948,11455,11455,11456, + 943, 941, 938, 932, 931, 930, 927, 926,11456, 918, + 909, 905, 894, 887,11456,11456,11457,11457, 886, 885, + 884, 883, 878,11457,11457,11458,11458,11458,11458,11458, + 11458,11458,11458,11458,11458,11458,11458,11458,11458,11458, + 11458,11458,11458,11458,11458,11458,11458,11458,11458,11459, + 877, 876, 868,11459,11459, 867, 865,11459,11459,11459, + 11459,11459,11459,11459,11459, 861,11459,11459,11459,11459, + 11459,11460, 859, 858, 857,11460,11460, 855, 853,11460, + 11460,11460,11460,11460,11460,11460,11460, 848,11460,11460, + + 11460,11460,11460,11461,11461,11461,11461,11461,11461,11461, + 11461,11461,11461,11461,11461,11461,11461,11461,11461,11461, + 11461,11461,11461,11461,11461,11461,11461,11463, 842, 841, + 840, 839, 838, 837,11463,11463, 832,11463, 831, 830, + 829, 828, 827,11463,11463,11464,11464, 826, 823, 822, + 821, 819,11464,11464,11465, 818, 807, 806, 804, 801, + 800,11465,11465,11465,11465, 799, 796, 791, 790, 789, + 11465,11465,11466,11466,11466,11466,11466,11466,11466,11466, + 11466,11466,11466,11466,11466,11466,11466,11466,11466,11466, + 11466,11466,11466,11466,11466,11466,11467,11467, 787, 786, + + 784, 783, 781,11467,11467,11468,11468, 780, 777, 770, + 767, 766,11468,11468,11469,11469, 762,11469,11469,11469, + 11469,11469,11469,11469,11469,11469,11469,11469,11469,11469, + 11469,11469,11469,11469,11469,11469,11469,11469,11470,11470, + 11470,11470,11470,11470,11470,11470,11470,11470,11470,11470, + 11470,11470,11470,11470,11470,11470,11470,11470,11470,11470, + 11470,11470,11471,11471,11471,11471,11471,11471,11471,11471, + 11471,11471,11471,11471,11471,11471,11471,11471,11471,11471, + 11471,11471,11471,11471,11471,11471,11472, 668, 662, 650, + 645, 644, 643, 619, 617, 616,11472,11472,11472,11472, + + 11472,11472,11472,11472,11472,11473, 604,11473, 596, 593, + 587,11473,11473,11474, 585, 575, 570, 569, 565, 554, + 11474,11474, 553,11474, 552, 549, 548, 541, 540,11474, + 11474,11475,11475, 536, 535, 532, 531, 526,11475,11475, + 11476,11476,11476,11476,11476,11476,11476,11476,11476,11476, + 11476,11476,11476,11476,11476,11476,11476,11476,11476,11476, + 11476,11476,11476,11476,11477, 524, 515, 511, 506, 504, + 500,11477,11477,11477,11477, 489, 469, 461, 457, 456, + 11477,11477,11478,11478, 452, 448, 446, 445, 440,11478, + 11478,11479,11479, 438, 435, 433, 431, 425,11479,11479, + + 11480,11480, 407, 400, 379, 378, 377,11480,11480,11481, + 369, 366,11481, 361, 355, 343, 339, 337, 332, 331, + 324,11481,11481, 316, 314, 310, 309, 307,11481,11481, + 11484,11484, 306, 305, 303, 301, 300,11484,11484,11486, + 11486, 291, 287, 286, 272, 268,11486,11486,11487,11487, + 267, 261, 258, 244, 234,11487,11487,11488,11488,11488, + 11488,11488,11488,11488,11488,11488,11488,11488,11488,11488, + 11488,11488,11488,11488,11488,11488,11488,11488,11488,11488, + 11488,11489,11489,11489,11489,11489,11489,11489,11489,11489, + 11489,11489,11489,11489,11489,11489,11489,11489,11489,11489, + + 11489,11489,11489, 228,11489,11490,11490,11490,11490,11490, + 11490,11490,11490,11490,11490,11490,11490,11490,11490,11490, + 11490,11490,11490,11490,11490,11490,11490,11490,11490,11493, + 11493, 223, 215, 213, 196, 192,11493,11493,11494,11494, + 191, 188, 187, 181, 138,11494,11494,11495,11495, 137, + 136, 135, 134, 133,11495,11495,11496, 72, 71, 66, + 65, 40, 39,11496,11496, 38,11496, 37, 0, 0, + 0, 0,11496,11496,11497,11497, 0, 0, 0, 0, + 0,11497,11497,11498, 0, 0, 0, 0, 0, 0, + 11498,11498,11498,11498, 0, 0, 0, 0, 0,11498, + + 11498,11499,11499,11499,11499,11499,11499,11499,11499,11499, + 11499,11499,11499,11499,11499,11499,11499,11499,11499,11499, + 11499,11499,11499,11499,11499,11500, 0, 0, 0, 0, + 0, 0, 0, 0, 0,11500,11500,11500,11500,11500, + 11500,11500,11500,11500,11501,11501,11501,11501,11501,11501, + 11501,11501,11501,11501,11501,11501,11501,11501,11501,11501, + 11501,11501,11501,11501,11501,11501,11501,11501,11502,11502, + 11502,11502,11502,11502,11502,11502,11502,11502,11502,11502, + 11502,11502,11502,11502,11502,11502,11502,11502,11502,11502, + 11502,11502,11503,11503,11503,11503,11503,11503,11503,11503, + + 11503,11503,11503,11503,11503,11503,11503,11503,11503,11503, + 11503,11503,11503,11503,11503,11503,11504, 0, 0, 0, + 0, 0, 0,11504, 0, 0, 0, 0, 0,11504, + 11504, 0,11504,11505, 0, 0, 0, 0, 0, 0, + 11505, 0, 0,11505, 0, 0,11505,11505,11506,11506, + 0, 0, 0, 0, 0,11506,11506,11507, 0, 0, + 0, 0, 0, 0, 0, 0,11507, 0, 0, 0, + 0, 0,11507,11507,11508,11508, 0, 0, 0, 0, + 0,11508,11508,11509, 0, 0, 0,11509,11509, 0, + 0,11509,11509,11509,11509,11509,11509,11509,11509, 0, + + 11509,11509,11509,11509,11509,11510, 0, 0, 0,11510, + 11510, 0, 0,11510,11510,11510,11510,11510,11510,11510, + 11510, 0,11510,11510,11510,11510,11510,11512, 0, 0, + 0, 0, 0, 0,11512,11512, 0,11512, 0, 0, + 0, 0, 0,11512,11512,11513,11513, 0, 0, 0, + 0, 0,11513,11513,11514, 0, 0, 0, 0, 0, + 0,11514,11514,11514,11514, 0, 0, 0, 0, 0, + 11514,11514,11515,11515,11515,11515,11515,11515,11515,11515, + 11515,11515,11515,11515,11515,11515,11515,11515,11515,11515, + 11515,11515,11515,11515,11515,11515,11516,11516, 0, 0, + + 0, 0, 0,11516,11516,11517,11517, 0, 0, 0, + 0, 0,11517,11517,11518,11518, 0,11518,11518,11518, + 11518,11518,11518,11518,11518,11518,11518,11518,11518,11518, + 11518,11518,11518,11518,11518,11518,11518,11518,11519,11519, + 11519,11519,11519,11519,11519,11519,11519,11519,11519,11519, + 11519,11519,11519,11519,11519,11519,11519,11519,11519,11519, + 11519,11519,11520,11520,11520,11520,11520,11520,11520,11520, + 11520,11520,11520,11520,11520,11520,11520,11520,11520,11520, + 11520,11520,11520,11520,11520,11520,11521, 0, 0, 0, + 0, 0, 0,11521,11521, 0,11521, 0, 0, 0, + + 0, 0,11521,11521,11522,11522, 0, 0, 0, 0, + 0,11522,11522,11523,11523,11523,11523,11523,11523,11523, + 11523,11523,11523,11523,11523,11523,11523,11523,11523,11523, + 11523,11523,11523,11523,11523,11523,11523,11524, 0, 0, + 0, 0, 0, 0,11524,11524,11524,11524, 0, 0, + 0, 0, 0,11524,11524,11525,11525, 0, 0, 0, + 0, 0,11525,11525,11526,11526, 0, 0, 0, 0, + 0,11526,11526,11527,11527, 0, 0, 0, 0, 0, + 11527,11527,11528,11528, 0, 0, 0, 0, 0,11528, + 11528,11531,11531, 0, 0, 0, 0, 0,11531,11531, + + 11533,11533, 0, 0, 0, 0,11533,11533,11533,11534, + 11534, 0, 0, 0, 0, 0,11534,11534,11535,11535, + 11535,11535,11535,11535,11535,11535,11535,11535,11535,11535, + 11535,11535,11535,11535,11535,11535,11535,11535,11535,11535, + 11535,11535,11536,11536,11536,11536,11536,11536,11536,11536, + 11536,11536,11536,11536,11536,11536,11536,11536,11536,11536, + 11536,11536,11536,11536,11536,11536,11537,11537,11537,11537, + 11537,11537,11537,11537,11537,11537,11537,11537,11537,11537, + 11537,11537,11537,11537,11537,11537,11537,11537,11537,11537, + 11538,11538,11538,11538,11538,11538,11538,11538,11538,11538, + + 11538,11538,11538,11538,11538,11538,11538,11538,11538,11538, + 11538,11538,11538,11538,11539,11539,11539,11539,11539,11539, + 11539,11539,11539,11539,11539,11539,11539,11539,11539,11539, + 11539,11539,11539,11539,11539,11539,11539,11539,11542,11542, + 0, 0, 0, 0, 0,11542,11542,11543,11543, 0, + 0, 0, 0, 0,11543,11543,11544,11544, 0, 0, + 0, 0, 0,11544,11544,11545, 0, 0, 0, 0, + 0, 0,11545,11545, 0,11545, 0, 0, 0, 0, + 0,11545,11545,11546,11546, 0, 0, 0, 0, 0, + 11546,11546,11547, 0, 0, 0, 0, 0, 0,11547, + + 11547,11547,11547, 0, 0, 0, 0, 0,11547,11547, + 11548,11548,11548,11548,11548,11548,11548,11548,11548,11548, + 11548,11548,11548,11548,11548,11548,11548,11548,11548,11548, + 11548,11548,11548,11548,11549,11549,11549,11549,11549,11549, + 11549,11549,11549,11549,11549,11549,11549,11549,11549,11549, + 11549,11549,11549,11549,11549,11549,11549,11549,11550,11550, + 11550,11550,11550,11550,11550,11550,11550,11550,11550,11550, + 11550,11550,11550,11550,11550,11550,11550,11550,11550,11550, + 11550,11550,11551, 0, 0, 0, 0, 0, 0,11551, + 0, 0, 0, 0, 0,11551,11551, 0,11551,11552, + + 0, 0, 0, 0, 0, 0,11552, 0, 0,11552, + 0, 0,11552,11552,11553,11553, 0, 0, 0, 0, + 0,11553,11553,11554, 0, 0, 0, 0, 0, 0, + 0, 0,11554, 0, 0, 0, 0,11554,11554,11554, + 11555,11555, 0, 0, 0, 0, 0,11555,11555,11556, + 0, 0, 0,11556,11556, 0, 0,11556,11556,11556, + 11556,11556,11556,11556,11556, 0,11556,11556,11556,11556, + 11556,11557, 0, 0, 0,11557,11557, 0, 0,11557, + 11557,11557,11557,11557,11557,11557,11557, 0,11557,11557, + 11557,11557,11557,11558, 0, 0, 0, 0, 0, 0, + + 11558,11558, 0,11558, 0, 0, 0, 0, 0,11558, + 11558,11559,11559, 0, 0, 0, 0, 0,11559,11559, + 11560, 0, 0, 0, 0, 0, 0,11560,11560,11560, + 11560, 0, 0, 0, 0, 0,11560,11560,11561,11561, + 0, 0, 0, 0, 0,11561,11561,11562,11562, 0, + 0, 0, 0, 0,11562,11562,11563,11563, 0,11563, + 11563,11563,11563,11563,11563,11563,11563,11563,11563,11563, + 11563,11563,11563,11563,11563,11563,11563,11563,11563,11563, + 11564,11564,11564,11564,11564,11564,11564,11564,11564,11564, + 11564,11564,11564,11564,11564,11564,11564,11564,11564,11564, + + 11564,11564,11564,11564,11565,11565,11565,11565,11565,11565, + 11565,11565,11565,11565,11565,11565,11565,11565,11565,11565, + 11565,11565,11565,11565,11565,11565,11565,11565,11566, 0, + 0, 0, 0, 0, 0,11566,11566, 0,11566, 0, + 0, 0, 0, 0,11566,11566,11567,11567, 0, 0, + 0, 0, 0,11567,11567,11568, 0, 0, 0, 0, + 11568, 0, 0, 0, 0, 0,11568,11568, 0,11568, + 11569, 0, 0, 0, 0, 0, 0,11569,11569,11569, + 11569, 0, 0, 0, 0, 0,11569,11569,11569,11570, + 11570, 0, 0, 0, 0, 0,11570,11570,11571,11571, + + 0, 0, 0, 0, 0,11571,11571,11572, 0, 0, + 0, 0, 0,11572,11572, 0,11572,11573,11573, 0, + 0, 0, 0, 0,11573,11573,11574,11574, 0, 0, + 0, 0, 0,11574,11574,11576,11576, 0, 0, 0, + 0, 0,11576,11576,11577, 0, 0,11577, 0, 0, + 0, 0, 0, 0, 0, 0,11577,11577, 0, 0, + 0, 0, 0,11577,11577,11578,11578,11578,11578,11578, + 11578,11578,11578,11578,11578,11578,11578,11578,11578,11578, + 11578,11578,11578,11578,11578,11578,11578,11578,11578,11579, + 11579,11579,11579,11579,11579,11579,11579,11579,11579,11579, + + 11579,11579,11579,11579,11579,11579,11579,11579,11579,11579, + 11579,11579,11579,11580,11580,11580,11580,11580,11580,11580, + 11580,11580,11580,11580,11580,11580,11580,11580,11580,11580, + 11580,11580,11580,11580,11580,11580,11580,11583,11583, 0, + 0, 0, 0, 0,11583,11583,11584, 0, 0,11584, + 0, 0, 0, 0, 0, 0, 0, 0,11584,11584, + 0, 0, 0, 0, 0,11584,11584,11585, 0, 0, + 11585, 0, 0, 0, 0, 0, 0, 0, 0,11585, + 11585, 0, 0, 0, 0, 0,11585,11585,11586, 0, + 0, 0, 0, 0, 0,11586,11586, 0,11586, 0, + + 0, 0, 0, 0,11586,11586,11587,11587, 0, 0, + 0, 0, 0,11587,11587,11588, 0, 0, 0, 0, + 0, 0,11588,11588,11588,11588, 0, 0, 0, 0, + 0,11588,11588,11588,11589,11589, 0,11589,11589,11589, + 11589,11589,11589,11589,11589,11589,11589,11589,11589,11589, + 11589,11589,11589,11589,11589,11589,11589,11589,11590, 0, + 0, 0, 0,11590, 0, 0, 0, 0, 0,11590, + 11590, 0,11590,11591,11591,11591,11591,11591,11591,11591, + 11591,11591,11591,11591,11591,11591,11591,11591,11591,11591, + 11591,11591,11591,11591,11591,11591,11591,11592,11592,11592, + + 11592,11592,11592,11592,11592,11592,11592,11592,11592,11592, + 11592,11592,11592,11592,11592,11592,11592,11592,11592,11592, + 11592,11593, 0, 0,11593, 0, 0,11593, 0, 0, + 0, 0, 0, 0,11593, 0, 0, 0, 0, 0, + 11593,11593, 0,11593,11594, 0, 0,11594, 0, 0, + 11594, 0, 0, 0, 0, 0, 0,11594, 0, 0, + 11594, 0, 0,11594,11594,11595,11595, 0, 0, 0, + 0, 0,11595,11595,11596, 0, 0, 0, 0, 0, + 0, 0, 0,11596, 0, 0, 0, 0, 0,11596, + 11596,11597,11597, 0, 0, 0, 0, 0,11597,11597, + + 11598,11598, 0, 0, 0, 0, 0,11598,11598,11599, + 0, 0, 0,11599,11599, 0, 0,11599,11599,11599, + 11599,11599,11599,11599,11599, 0,11599,11599,11599,11599, + 11599,11600, 0, 0, 0,11600,11600, 0, 0,11600, + 11600,11600,11600,11600,11600,11600,11600, 0,11600,11600, + 11600,11600,11600,11601, 0, 0, 0, 0, 0, 0, + 11601,11601, 0,11601, 0, 0, 0, 0, 0,11601, + 11601,11602,11602, 0, 0, 0, 0, 0,11602,11602, + 11603, 0, 0, 0, 0, 0, 0,11603,11603,11603, + 11603, 0, 0, 0, 0, 0,11603,11603,11604,11604, + + 0, 0, 0, 0, 0,11604,11604,11605,11605, 0, + 0, 0, 0, 0,11605,11605,11606,11606, 0,11606, + 11606,11606,11606,11606,11606,11606,11606,11606,11606,11606, + 11606,11606,11606,11606,11606,11606,11606,11606,11606,11606, + 11607,11607,11607,11607,11607,11607,11607,11607,11607,11607, + 11607,11607,11607,11607,11607,11607,11607,11607,11607,11607, + 11607,11607,11607,11607,11608,11608,11608,11608,11608,11608, + 11608,11608,11608,11608,11608,11608,11608,11608,11608,11608, + 11608,11608,11608,11608,11608,11608,11608,11608,11609, 0, + 0, 0, 0, 0, 0,11609,11609, 0,11609, 0, + + 0, 0, 0, 0,11609,11609,11610,11610, 0, 0, + 0, 0, 0,11610,11610,11612,11612, 0,11612,11612, + 11612,11612,11612,11612,11612,11612,11612,11612,11612,11612, + 11612,11612,11612,11612,11612,11612,11612,11612,11612,11613, + 11613,11613,11613,11613,11613,11613,11613,11613,11613,11613, + 11613,11613,11613,11613,11613,11613,11613,11613,11613,11613, + 11613, 0,11613,11614,11614,11614,11614,11614,11614,11614, + 11614,11614,11614,11614,11614,11614,11614,11614,11614,11614, + 11614,11614,11614,11614,11614,11614,11614,11615, 0, 0, + 0, 0,11615, 0, 0, 0, 0, 0,11615,11615, + + 0,11615,11616,11616,11616,11616,11616,11616,11616,11616, + 11616,11616,11616,11616,11616,11616,11616,11616,11616,11616, + 11616,11616,11616,11616,11616,11616,11617,11617,11617,11617, + 11617,11617,11617,11617,11617,11617,11617,11617,11617,11617, + 11617,11617,11617,11617,11617,11617,11617,11617,11617,11617, + 11618, 0, 0,11618,11618,11618,11618,11618,11618,11618, + 11618,11618,11618,11618,11618,11618,11618,11618,11618,11618, + 0,11618,11618,11618,11619, 0, 0, 0, 0, 0, + 0,11619,11619,11619,11619, 0, 0, 0, 0, 0, + 11619,11619,11620,11620, 0, 0, 0, 0, 0,11620, + + 11620,11621,11621, 0, 0, 0, 0, 0,11621,11621, + 11622, 0, 0, 0, 0, 0,11622,11622, 0,11622, + 11623,11623, 0, 0, 0, 0, 0,11623,11623,11624, + 11624, 0, 0, 0, 0, 0,11624,11624,11626,11626, + 0, 0, 0, 0, 0,11626,11626,11627,11627, 0, + 0, 0, 0, 0,11627,11627,11628,11628,11628,11628, + 11628,11628,11628,11628,11628,11628,11628,11628,11628,11628, + 11628,11628,11628,11628,11628,11628,11628,11628,11628,11628, + 11629,11629,11629,11629,11629,11629,11629,11629,11629,11629, + 11629,11629,11629,11629,11629,11629,11629,11629,11629,11629, + + 11629,11629,11629,11629,11632, 0, 0, 0, 0, 0, + 0, 0, 0,11632,11632, 0, 0, 0, 0, 0, + 11632,11632,11632,11633,11633, 0, 0, 0, 0, 0, + 11633,11633,11634,11634, 0, 0, 0, 0, 0,11634, + 11634,11635, 0, 0, 0, 0, 0, 0,11635,11635, + 0,11635, 0, 0, 0, 0, 0,11635,11635,11636, + 11636, 0, 0, 0, 0, 0,11636,11636,11637, 0, + 0, 0, 0, 0, 0,11637,11637,11637,11637, 0, + 0, 0, 0, 0,11637,11637,11638, 0, 0, 0, + 0,11638, 0, 0, 0, 0, 0,11638,11638, 0, + + 11638,11639,11639,11639,11639,11639,11639,11639,11639,11639, + 11639,11639,11639,11639,11639,11639,11639,11639,11639,11639, + 11639,11639,11639,11639,11639,11640,11640,11640,11640,11640, + 11640,11640,11640,11640,11640,11640,11640,11640,11640,11640, + 11640,11640,11640,11640,11640,11640,11640,11640,11640,11641, + 11641,11641,11641,11641,11641,11641,11641,11641,11641,11641, + 11641,11641,11641,11641, 0,11641,11641,11641,11641,11641, + 11641,11641,11641,11642,11642,11642,11642,11642,11642,11642, + 11642,11642,11642,11642,11642,11642,11642,11642,11642,11642, + 11642,11642,11642,11642,11642,11642,11642,11643, 0, 0, + + 0, 0, 0, 0,11643,11643, 0,11643, 0, 0, + 0, 0, 0,11643,11643,11644,11644, 0, 0, 0, + 0, 0,11644,11644,11645, 0, 0, 0, 0, 0, + 0,11645, 0, 0, 0, 0, 0,11645,11645, 0, + 11645,11646,11646, 0, 0, 0, 0, 0,11646,11646, + 11647, 0, 0, 0, 0, 0, 0, 0, 0,11647, + 0, 0, 0, 0, 0,11647,11647,11648,11648, 0, + 0, 0, 0, 0,11648,11648,11649,11649, 0, 0, + 0, 0, 0,11649,11649,11650, 0, 0, 0,11650, + 11650, 0, 0,11650,11650,11650,11650,11650,11650,11650, + + 11650, 0,11650,11650,11650,11650,11650,11651, 0, 0, + 0,11651,11651, 0, 0,11651,11651,11651,11651,11651, + 11651,11651,11651, 0,11651,11651,11651,11651,11651,11652, + 0, 0, 0, 0, 0, 0,11652,11652, 0,11652, + 0, 0, 0, 0, 0,11652,11652,11653,11653, 0, + 0, 0, 0, 0,11653,11653,11654,11654,11654,11654, + 0, 0, 0, 0, 0, 0,11654,11654,11654,11654, + 0, 0, 0, 0, 0,11654,11654,11654,11655,11655, + 0, 0, 0, 0, 0,11655,11655,11656,11656, 0, + 0, 0, 0, 0,11656,11656,11657,11657, 0,11657, + + 11657,11657,11657,11657,11657,11657,11657,11657,11657,11657, + 11657,11657,11657,11657,11657,11657,11657,11657,11657,11657, + 11658,11658,11658,11658,11658,11658,11658,11658,11658,11658, + 11658,11658,11658,11658,11658,11658,11658,11658,11658,11658, + 11658,11658,11658,11658,11659,11659,11659,11659,11659,11659, + 11659,11659,11659,11659,11659,11659,11659,11659,11659,11659, + 11659,11659,11659,11659,11659,11659,11659,11659,11660, 0, + 0, 0, 0, 0,11660,11660, 0,11660,11661,11661, + 0,11661,11661,11661,11661,11661,11661,11661,11661,11661, + 11661,11661,11661,11661,11661,11661,11661,11661,11661,11661, + + 11661,11661,11662, 0, 0, 0, 0,11662, 0, 0, + 0, 0, 0,11662,11662, 0,11662,11663,11663, 0, + 11663,11663,11663,11663,11663,11663,11663,11663,11663,11663, + 11663,11663,11663,11663,11663,11663,11663,11663,11663,11663, + 11663,11664,11664,11664,11664,11664,11664,11664,11664,11664, + 11664,11664,11664,11664,11664,11664,11664,11664,11664,11664, + 11664,11664,11664, 0,11664,11665,11665,11665,11665,11665, + 11665,11665,11665,11665,11665,11665,11665,11665,11665,11665, + 11665,11665,11665,11665,11665,11665,11665,11665,11665,11666, + 0, 0, 0, 0,11666, 0, 0, 0, 0, 0, + + 11666,11666, 0,11666,11667,11667,11667,11667,11667,11667, + 11667,11667,11667,11667,11667,11667,11667,11667,11667,11667, + 11667,11667,11667,11667,11667,11667,11667,11667,11668,11668, + 11668,11668,11668,11668,11668, 0,11668,11668,11668,11668, + 11668,11668,11668,11668,11668,11668,11668,11668,11668,11668, + 11668,11668,11669,11669,11669,11669,11669,11669,11669,11669, + 11669,11669,11669,11669,11669,11669,11669,11669,11669,11669, + 11669,11669,11669,11669,11669,11669,11670, 0, 0, 0, + 0, 0,11670,11670, 0,11670,11671, 0, 0, 0, + 0, 0, 0,11671,11671,11671,11671, 0, 0, 0, + + 0, 0,11671,11671,11672,11672, 0, 0, 0, 0, + 0,11672,11672,11673,11673, 0, 0, 0, 0, 0, + 11673,11673,11674, 0, 0, 0, 0, 0,11674,11674, + 0,11674,11675,11675, 0, 0, 0, 0, 0,11675, + 11675,11676, 0, 0, 0, 0, 0, 0, 0, 0, + 11676,11676, 0, 0, 0, 0, 0,11676,11676,11677, + 0, 0, 0, 0, 0,11677,11677, 0,11677,11679, + 11679, 0, 0, 0, 0, 0,11679,11679,11680,11680, + 0, 0, 0, 0, 0,11680,11680,11681,11681,11681, + 11681,11681,11681,11681,11681,11681,11681,11681,11681,11681, + + 11681,11681,11681,11681,11681,11681,11681,11681,11681,11681, + 11681,11682,11682,11682,11682,11682,11682,11682,11682,11682, + 11682,11682,11682,11682,11682,11682,11682,11682,11682,11682, + 11682,11682,11682,11682,11682,11683,11683,11683,11683,11683, + 11683,11683,11683,11683,11683,11683,11683,11683,11683,11683, + 11683,11683,11683,11683,11683,11683,11683,11683,11683,11685, + 11685, 0, 0, 0, 0, 0,11685,11685,11686,11686, + 0, 0, 0, 0, 0,11686,11686,11687,11687, 0, + 0, 0, 0, 0,11687,11687,11688,11688,11688,11688, + 0, 0, 0, 0, 0, 0,11688, 0, 0,11688, + + 0, 0, 0, 0, 0,11688,11688,11689, 0, 0, + 0, 0, 0, 0,11689,11689, 0,11689, 0, 0, + 0, 0, 0,11689,11689,11690,11690, 0, 0, 0, + 0, 0,11690,11690,11691, 0, 0, 0, 0, 0, + 0,11691,11691,11691,11691, 0, 0, 0, 0, 0, + 11691,11691,11692, 0, 0, 0, 0,11692, 0, 0, + 0, 0, 0,11692,11692, 0,11692,11693, 0, 0, + 0, 0,11693, 0, 0, 0, 0, 0,11693,11693, + 0,11693,11694,11694,11694,11694,11694,11694,11694,11694, + 11694,11694,11694,11694,11694,11694,11694,11694,11694,11694, + + 11694,11694,11694,11694,11694,11694,11695,11695,11695,11695, + 11695,11695,11695,11695,11695,11695,11695,11695,11695,11695, + 11695,11695,11695,11695,11695,11695,11695,11695,11695,11695, + 11696, 0, 0, 0, 0, 0, 0,11696, 0, 0, + 0, 0, 0,11696,11696, 0,11696,11697,11697, 0, + 0, 0, 0, 0,11697,11697,11698, 0, 0, 0, + 0, 0, 0, 0, 0,11698, 0, 0, 0, 0, + 0,11698,11698,11699,11699, 0, 0, 0, 0, 0, + 11699,11699,11700, 0, 0, 0,11700,11700, 0, 0, + 11700,11700,11700,11700,11700,11700,11700,11700, 0,11700, + + 11700,11700,11700,11700,11701, 0, 0, 0,11701,11701, + 0, 0,11701,11701,11701,11701,11701,11701,11701,11701, + 0,11701,11701,11701,11701,11701,11702, 0, 0, 0, + 0, 0, 0,11702,11702, 0,11702, 0, 0, 0, + 0, 0,11702,11702,11703,11703, 0, 0, 0, 0, + 0,11703,11703,11704, 0, 0, 0, 0, 0, 0, + 11704,11704,11704,11704, 0, 0, 0, 0, 0,11704, + 11704,11705,11705,11705,11705, 0, 0, 0, 0, 0, + 0, 0, 0,11705,11705, 0,11705, 0, 0, 0, + 11705,11705,11706,11706, 0, 0, 0, 0, 0,11706, + + 11706,11707,11707, 0,11707,11707,11707,11707,11707,11707, + 11707,11707,11707,11707,11707,11707,11707,11707,11707,11707, + 11707,11707,11707,11707,11707,11708,11708,11708,11708,11708, + 11708,11708,11708,11708,11708,11708,11708,11708,11708,11708, + 11708,11708,11708,11708,11708,11708,11708,11708,11708,11709, + 11709,11709,11709,11709,11709,11709,11709,11709,11709,11709, + 11709,11709,11709,11709,11709,11709,11709,11709,11709,11709, + 11709,11709,11709,11710,11710, 0, 0, 0, 0, 0, + 11710,11710,11711, 0, 0, 0, 0,11711, 0, 0, + 0, 0, 0,11711,11711, 0,11711,11712, 0, 0, + + 0, 0, 0, 0,11712,11712, 0,11712, 0, 0, + 0, 0, 0,11712,11712,11713,11713,11713,11713,11713, + 11713,11713, 0,11713,11713,11713,11713,11713,11713,11713, + 11713,11713,11713,11713,11713,11713,11713,11713,11713,11714, + 11714,11714,11714,11714,11714,11714,11714,11714,11714,11714, + 11714,11714,11714,11714,11714,11714,11714,11714,11714,11714, + 11714,11714,11714,11715,11715,11715,11715,11715,11715,11715, + 11715,11715,11715,11715,11715,11715,11715,11715,11715,11715, + 11715,11715,11715,11715,11715,11715,11715,11716, 0, 0, + 0, 0, 0,11716,11716, 0,11716,11717, 0, 0, + + 0, 0, 0, 0,11717,11717,11717,11717, 0, 0, + 0, 0, 0,11717,11717,11718,11718, 0, 0, 0, + 0, 0,11718,11718,11719,11719, 0, 0, 0, 0, + 0,11719,11719,11720, 0, 0, 0, 0, 0,11720, + 11720, 0,11720,11721,11721, 0, 0, 0, 0, 0, + 11721,11721,11721,11722, 0, 0, 0, 0, 0,11722, + 11722, 0,11722,11724,11724, 0, 0, 0, 0, 0, + 11724,11724,11725, 0, 0,11725, 0, 0, 0, 0, + 0, 0, 0, 0,11725,11725, 0, 0, 0, 0, + 0,11725,11725,11726,11726,11726,11726,11726,11726,11726, + + 11726,11726,11726,11726,11726,11726,11726,11726,11726,11726, + 11726,11726,11726,11726,11726,11726,11726,11728, 0, 0, + 11728, 0, 0, 0, 0, 0, 0, 0, 0,11728, + 11728, 0, 0, 0, 0, 0,11728,11728,11729, 0, + 0,11729, 0, 0, 0, 0, 0, 0, 0, 0, + 11729,11729, 0, 0, 0, 0, 0,11729,11729,11730, + 0, 0,11730, 0, 0, 0, 0, 0, 0, 0, + 0,11730,11730, 0, 0, 0, 0, 0,11730,11730, + 11731,11731,11731,11731, 0, 0, 0, 0, 0, 0, + 11731, 0, 0,11731, 0, 0, 0, 0, 0,11731, + + 11731,11732,11732, 0, 0, 0, 0, 0,11732,11732, + 11733, 0, 0, 0, 0, 0, 0,11733,11733,11733, + 11733, 0, 0, 0, 0, 0,11733,11733,11734, 0, + 0, 0, 0, 0, 0,11734,11734, 0,11734, 0, + 0, 0, 0, 0,11734,11734,11735, 0, 0, 0, + 0,11735, 0, 0, 0, 0, 0,11735,11735, 0, + 11735,11736,11736,11736,11736,11736,11736,11736,11736,11736, + 11736,11736,11736,11736,11736,11736,11736,11736,11736,11736, + 11736,11736,11736,11736,11736,11737,11737,11737,11737,11737, + 11737,11737,11737,11737,11737,11737,11737,11737,11737,11737, + + 11737,11737,11737,11737,11737,11737,11737,11737,11737,11738, + 0, 0, 0, 0, 0, 0,11738, 0, 0, 0, + 0, 0,11738,11738, 0,11738,11739,11739, 0, 0, + 0, 0, 0,11739,11739,11740, 0, 0, 0, 0, + 0, 0, 0, 0,11740, 0, 0, 0, 0, 0, + 11740,11740,11741,11741, 0, 0, 0, 0, 0,11741, + 11741,11742, 0, 0, 0,11742,11742, 0, 0,11742, + 11742,11742,11742,11742,11742,11742,11742, 0,11742,11742, + 11742,11742,11742,11743, 0, 0, 0,11743,11743, 0, + 0,11743,11743,11743,11743,11743,11743,11743,11743, 0, + + 11743,11743,11743,11743,11743,11744,11744, 0, 0, 0, + 0, 0,11744,11744,11745, 0, 0, 0, 0, 0, + 0,11745,11745,11745,11745, 0, 0, 0, 0, 0, + 11745,11745,11746,11746,11746,11746,11746,11746,11746,11746, + 11746,11746,11746,11746,11746,11746,11746,11746,11746,11746, + 11746,11746,11746,11746,11746,11746,11747,11747, 0, 0, + 0, 0, 0,11747,11747,11748,11748,11748,11748,11748, + 11748,11748,11748,11748,11748,11748,11748,11748,11748,11748, + 11748,11748,11748,11748,11748,11748,11748,11748,11748,11749, + 11749,11749,11749,11749,11749,11749,11749,11749,11749,11749, + + 11749,11749,11749,11749,11749,11749,11749,11749,11749,11749, + 11749,11749,11749,11750,11750, 0, 0, 0, 0, 0, + 11750,11750,11751, 0, 0, 0, 0,11751, 0, 0, + 0, 0, 0,11751,11751, 0,11751,11752,11752,11752, + 11752,11752,11752,11752, 0,11752,11752,11752,11752,11752, + 11752,11752,11752,11752,11752,11752,11752,11752,11752,11752, + 11752,11753,11753,11753,11753,11753,11753,11753,11753,11753, + 11753,11753,11753,11753,11753,11753,11753,11753,11753,11753, + 11753,11753,11753,11753,11753,11754, 0, 0, 0, 0, + 0, 0,11754,11754, 0,11754, 0, 0, 0, 0, + + 0,11754,11754,11755,11755, 0, 0, 0, 0, 0, + 11755,11755,11756,11756,11756,11756,11756,11756,11756,11756, + 11756,11756,11756,11756,11756,11756,11756,11756,11756,11756, + 11756,11756,11756,11756,11756,11756,11757, 0, 0, 0, + 0, 0, 0,11757,11757,11757,11757, 0, 0, 0, + 0, 0,11757,11757,11758,11758, 0, 0, 0, 0, + 0,11758,11758,11759,11759, 0, 0, 0, 0, 0, + 11759,11759,11760, 0, 0, 0, 0, 0,11760,11760, + 0,11760,11761,11761, 0, 0, 0, 0, 0,11761, + 11761,11762, 0, 0, 0, 0, 0, 0, 0, 0, + + 0,11762, 0,11762, 0, 0, 0,11762,11762,11763, + 0, 0, 0, 0, 0, 0, 0, 0,11763,11763, + 0,11763, 0, 0, 0,11763,11763,11764,11764, 0, + 0, 0, 0, 0,11764,11764,11765, 0, 0, 0, + 0, 0, 0, 0, 0, 0,11765, 0,11765, 0, + 0, 0,11765,11765,11766,11766, 0, 0, 0, 0, + 0,11766,11766,11767,11767, 0, 0, 0, 0, 0, + 11767,11767,11768,11768, 0, 0, 0, 0, 0,11768, + 11768,11769,11769, 0, 0, 0, 0, 0,11769,11769, + 11770, 0, 0, 0, 0, 0, 0,11770,11770,11770, + + 11770, 0, 0, 0, 0, 0,11770,11770,11771, 0, + 0, 0, 0,11771, 0, 0, 0, 0, 0,11771, + 11771, 0,11771,11772, 0, 0, 0, 0, 0, 0, + 11772,11772, 0,11772, 0, 0, 0, 0, 0,11772, + 11772,11773,11773,11773,11773,11773,11773,11773,11773,11773, + 11773,11773,11773,11773,11773,11773,11773,11773,11773,11773, + 11773,11773,11773,11773,11773,11774,11774,11774,11774,11774, + 11774,11774,11774,11774,11774,11774,11774,11774,11774,11774, + 11774,11774,11774,11774,11774,11774,11774,11774,11774,11775, + 0, 0,11775, 0, 0, 0, 0, 0, 0,11775, + + 0,11775, 0, 0, 0,11775,11775, 0,11775,11776, + 0, 0, 0, 0, 0, 0, 0, 0,11776, 0, + 0, 0, 0, 0,11776,11776,11777,11777, 0, 0, + 0, 0, 0,11777,11777,11778, 0, 0, 0,11778, + 11778, 0, 0,11778,11778,11778,11778,11778,11778,11778, + 11778, 0,11778,11778,11778,11778,11778,11779, 0, 0, + 0,11779,11779, 0, 0,11779,11779,11779,11779,11779, + 11779,11779,11779, 0,11779,11779,11779,11779,11779,11780, + 11780, 0, 0, 0, 0, 0,11780,11780,11781, 0, + 0, 0, 0, 0, 0,11781,11781,11781,11781, 0, + + 0, 0, 0, 0,11781,11781,11782,11782,11782,11782, + 11782,11782,11782,11782,11782,11782,11782,11782,11782,11782, + 11782,11782,11782,11782,11782,11782,11782,11782,11782,11782, + 11783,11783, 0, 0, 0, 0, 0,11783,11783,11784, + 11784,11784,11784,11784,11784,11784,11784,11784,11784,11784, + 11784,11784,11784,11784,11784,11784,11784,11784,11784,11784, + 11784,11784,11784,11785,11785,11785,11785,11785,11785,11785, + 11785,11785,11785,11785,11785,11785,11785,11785,11785,11785, + 11785,11785,11785,11785,11785,11785,11785,11786,11786, 0, + 0, 0, 0, 0,11786,11786,11787, 0, 0, 0, + + 0,11787, 0, 0, 0, 0, 0,11787,11787, 0, + 11787,11788,11788,11788,11788,11788,11788,11788, 0,11788, + 11788,11788,11788,11788,11788,11788,11788,11788,11788,11788, + 11788,11788,11788,11788,11788,11789,11789,11789,11789,11789, + 11789,11789,11789,11789,11789,11789,11789,11789,11789,11789, + 11789,11789,11789,11789,11789,11789,11789,11789,11789,11790, + 11790, 0, 0, 0, 0, 0,11790,11790,11791,11791, + 11791,11791,11791,11791,11791,11791,11791,11791,11791,11791, + 11791,11791,11791,11791,11791,11791,11791,11791,11791,11791, + 11791,11791,11792,11792,11792,11792,11792,11792,11792,11792, + + 11792,11792,11792,11792,11792,11792,11792,11792,11792,11792, + 11792,11792,11792,11792,11792,11792,11793,11793, 0, 0, + 0, 0, 0,11793,11793,11794, 0, 0, 0, 0, + 0, 0,11794,11794,11794,11794, 0, 0, 0, 0, + 0,11794,11794,11795,11795, 0, 0, 0, 0, 0, + 11795,11795,11796,11796,11796,11796,11796,11796,11796,11796, + 11796,11796,11796,11796,11796,11796,11796,11796,11796,11796, + 11796,11796,11796,11796,11796,11796,11797,11797, 0, 0, + 0, 0, 0,11797,11797,11798, 0, 0, 0, 0, + 0,11798,11798, 0,11798,11799,11799, 0, 0, 0, + + 0, 0,11799,11799,11802,11802,11802,11802, 0, 0, + 0, 0, 0, 0, 0, 0,11802,11802, 0, 0, + 0, 0, 0,11802,11802,11804, 0, 0, 0, 0, + 0,11804,11804, 0,11804,11805,11805, 0, 0, 0, + 0, 0,11805,11805,11806,11806, 0, 0, 0, 0, + 0,11806,11806,11807,11807, 0, 0, 0, 0, 0, + 11807,11807,11808,11808, 0, 0, 0, 0, 0,11808, + 11808,11809, 0, 0, 0, 0, 0, 0,11809,11809, + 11809,11809, 0, 0, 0, 0, 0,11809,11809,11810, + 0, 0, 0, 0,11810, 0, 0, 0, 0, 0, + + 11810,11810, 0,11810,11811,11811,11811,11811,11811,11811, + 11811,11811,11811,11811,11811,11811,11811,11811,11811,11811, + 11811,11811,11811,11811,11811,11811,11811,11811,11812,11812, + 11812,11812,11812,11812,11812,11812,11812,11812,11812,11812, + 11812,11812,11812,11812,11812,11812,11812,11812,11812,11812, + 11812,11812,11813,11813,11813,11813,11813,11813,11813,11813, + 11813,11813,11813,11813,11813,11813,11813,11813,11813,11813, + 11813,11813,11813,11813,11813,11813,11814, 0, 0, 0, + 0, 0, 0, 0, 0,11814, 0, 0, 0, 0, + 0,11814,11814,11815,11815, 0, 0, 0, 0, 0, + + 11815,11815,11817, 0, 0, 0,11817,11817, 0, 0, + 11817,11817,11817,11817,11817,11817,11817,11817, 0,11817, + 11817,11817,11817,11817,11818,11818, 0, 0, 0, 0, + 0,11818,11818,11819, 0, 0, 0, 0, 0, 0, + 11819,11819,11819,11819, 0, 0, 0, 0, 0,11819, + 11819,11820,11820, 0, 0, 0, 0, 0,11820,11820, + 11821,11821,11821,11821,11821,11821,11821,11821,11821,11821, + 11821,11821,11821,11821,11821,11821,11821,11821,11821,11821, + 11821,11821,11821,11821,11822,11822,11822,11822,11822,11822, + 11822,11822,11822,11822,11822,11822,11822,11822,11822,11822, + + 11822,11822,11822,11822,11822,11822,11822,11822,11823,11823, + 11823,11823,11823,11823,11823,11823,11823,11823,11823,11823, + 11823,11823,11823,11823,11823,11823,11823,11823,11823,11823, + 11823,11823,11824,11824, 0, 0, 0, 0, 0,11824, + 11824,11825, 0, 0, 0, 0,11825, 0, 0, 0, + 0, 0,11825,11825, 0,11825,11826,11826,11826,11826, + 11826,11826,11826, 0,11826,11826,11826,11826,11826,11826, + 11826,11826,11826,11826,11826,11826,11826,11826,11826,11826, + 11827,11827,11827,11827,11827,11827,11827,11827,11827,11827, + 11827,11827,11827,11827,11827,11827,11827,11827,11827,11827, + + 11827,11827,11827,11827,11828,11828,11828,11828,11828,11828, + 11828,11828,11828,11828,11828,11828,11828,11828,11828,11828, + 11828,11828,11828,11828,11828,11828,11828,11828,11829,11829, + 11829,11829,11829,11829,11829,11829,11829,11829,11829,11829, + 11829,11829,11829,11829,11829,11829,11829,11829,11829,11829, + 11829,11830,11830,11830,11830,11830,11830,11830,11830,11830, + 11830,11830,11830,11830,11830,11830,11830,11830,11830,11830, + 11830,11830,11830,11830,11830,11831,11831, 0, 0, 0, + 0, 0,11831,11831,11832, 0, 0, 0, 0, 0, + 0,11832,11832,11832,11832, 0, 0, 0, 0, 0, + + 11832,11832,11833,11833, 0, 0, 0, 0, 0,11833, + 11833,11834,11834,11834,11834,11834,11834,11834,11834,11834, + 11834,11834,11834,11834,11834,11834,11834,11834,11834,11834, + 11834,11834,11834,11834,11834,11835,11835, 0, 0, 0, + 0, 0,11835,11835,11836, 0, 0, 0, 0, 0, + 11836,11836, 0,11836,11837,11837, 0, 0, 0, 0, + 0,11837,11837,11841, 0, 0, 0, 0, 0,11841, + 11841, 0,11841,11842,11842, 0, 0, 0, 0, 0, + 11842,11842,11843,11843, 0, 0, 0, 0, 0,11843, + 11843,11844,11844, 0, 0, 0, 0, 0,11844,11844, + + 11845,11845, 0, 0, 0, 0, 0,11845,11845,11846, + 0, 0, 0, 0, 0, 0,11846,11846,11846,11846, + 0, 0, 0, 0, 0,11846,11846,11847, 0, 0, + 0, 0,11847, 0, 0, 0, 0, 0,11847,11847, + 0,11847,11848,11848,11848,11848,11848,11848,11848,11848, + 11848,11848,11848,11848,11848,11848,11848,11848,11848,11848, + 11848,11848,11848,11848,11848,11848,11849,11849,11849,11849, + 11849,11849,11849,11849,11849,11849,11849,11849,11849,11849, + 11849,11849,11849,11849,11849,11849,11849,11849,11849,11849, + 11850,11850,11850,11850,11850,11850,11850,11850,11850,11850, + + 11850,11850,11850,11850,11850,11850,11850,11850,11850,11850, + 11850,11850,11850,11850,11851, 0, 0, 0, 0, 0, + 0, 0, 0,11851, 0, 0, 0, 0, 0,11851, + 11851,11853, 0, 0, 0, 0,11853, 0, 0,11853, + 11853,11853,11853,11853,11853,11853,11853, 0,11853,11853, + 11853,11853,11853,11854,11854, 0, 0, 0, 0, 0, + 11854,11854,11855, 0, 0, 0, 0, 0, 0,11855, + 11855,11855,11855, 0, 0, 0, 0, 0,11855,11855, + 11856,11856, 0, 0, 0, 0, 0,11856,11856,11857, + 11857,11857,11857,11857,11857,11857,11857,11857,11857,11857, + + 11857,11857,11857,11857,11857,11857,11857,11857,11857,11857, + 11857,11857,11857,11858,11858,11858,11858,11858,11858,11858, + 11858,11858,11858,11858,11858,11858,11858,11858,11858,11858, + 11858,11858,11858,11858,11858,11858,11858,11859,11859,11859, + 11859,11859,11859,11859,11859,11859,11859,11859,11859,11859, + 11859,11859,11859,11859,11859,11859,11859,11859,11859,11859, + 11859,11860,11860,11860,11860, 0, 0, 0, 0, 0, + 0, 0, 0,11860,11860, 0, 0, 0, 0, 0, + 11860,11860,11860,11861,11861,11861,11861,11861,11861,11861, + 11861,11861,11861,11861,11861,11861,11861,11861,11861,11861, + + 11861,11861,11861,11861,11861,11861,11861,11862, 0, 0, + 0, 0,11862, 0, 0, 0, 0, 0,11862,11862, + 0,11862,11863,11863,11863,11863,11863,11863,11863, 0, + 11863,11863,11863,11863,11863,11863,11863,11863,11863,11863, + 11863,11863,11863,11863,11863,11863,11864,11864,11864,11864, + 11864,11864,11864,11864,11864,11864,11864,11864,11864,11864, + 11864,11864,11864,11864,11864,11864,11864,11864,11864,11864, + 11865,11865,11865,11865,11865,11865,11865,11865,11865,11865, + 11865,11865,11865,11865,11865,11865,11865,11865,11865,11865, + 11865,11865,11865,11865,11866,11866, 0, 0, 0, 0, + + 0,11866,11866, 0,11866,11867,11867,11867,11867,11867, + 11867,11867,11867,11867,11867,11867,11867,11867,11867,11867, + 11867,11867,11867,11867,11867,11867,11867,11867,11867,11868, + 11868,11868,11868,11868,11868,11868,11868,11868,11868,11868, + 11868,11868,11868,11868,11868,11868,11868,11868,11868,11868, + 11868,11868,11868,11869, 0, 0, 0, 0, 0,11869, + 11869, 0,11869,11870,11870,11870,11870,11870,11870,11870, + 11870,11870,11870,11870,11870,11870,11870,11870,11870,11870, + 11870,11870,11870,11870,11870,11870,11870,11871,11871,11871, + 11871,11871,11871,11871,11871,11871,11871,11871,11871,11871, + + 11871,11871,11871,11871,11871,11871,11871,11871,11871, 0, + 11871,11872, 0, 0, 0, 0, 0, 0,11872,11872, + 11872,11872, 0, 0, 0, 0, 0,11872,11872,11873, + 11873, 0, 0, 0, 0, 0,11873,11873,11874,11874, + 11874,11874,11874,11874,11874,11874,11874,11874,11874,11874, + 11874,11874,11874,11874,11874,11874,11874,11874,11874,11874, + 11874,11874,11875, 0, 0, 0, 0, 0,11875,11875, + 0,11875,11876,11876, 0, 0, 0, 0, 0,11876, + 11876,11877,11877, 0, 0, 0, 0, 0,11877,11877, + 11878,11878, 0, 0, 0, 0, 0,11878,11878,11879, + + 11879,11879,11879, 0, 0, 0, 0, 0, 0, 0, + 0,11879,11879, 0, 0, 0, 0, 0,11879,11879, + 11879,11880, 0, 0, 0, 0, 0, 0,11880,11880, + 11880,11880, 0, 0, 0, 0, 0,11880,11880,11881, + 0, 0, 0, 0,11881, 0, 0, 0, 0, 0, + 11881,11881, 0,11881,11882,11882,11882,11882,11882,11882, + 11882,11882,11882,11882,11882,11882,11882,11882,11882,11882, + 11882,11882,11882,11882,11882,11882,11882,11882,11883,11883, + 11883,11883,11883,11883,11883,11883,11883,11883,11883,11883, + 11883,11883,11883,11883,11883,11883,11883,11883,11883,11883, + + 11883,11883,11884,11884,11884,11884,11884,11884,11884,11884, + 11884,11884,11884,11884,11884,11884,11884,11884,11884,11884, + 11884,11884,11884,11884,11884,11884,11885,11885,11885,11885, + 11885,11885,11885,11885,11885,11885,11885,11885,11885,11885, + 11885,11885,11885,11885,11885,11885,11885,11885,11885,11885, + 11886, 0, 0, 0, 0, 0, 0, 0, 0,11886, + 0, 0, 0, 0, 0,11886,11886,11887,11887,11887, + 11887, 0, 0, 0, 0, 0, 0, 0, 0,11887, + 11887, 0, 0, 0, 0, 0,11887,11887,11887,11888, + 0, 0, 0, 0, 0, 0,11888,11888,11888,11888, + + 0, 0, 0, 0, 0,11888,11888,11889,11889, 0, + 0, 0, 0, 0,11889,11889,11890,11890,11890,11890, + 11890,11890,11890,11890,11890,11890,11890,11890,11890,11890, + 11890,11890,11890,11890,11890,11890,11890,11890,11890,11890, + 11891,11891,11891,11891,11891,11891,11891,11891,11891,11891, + 11891,11891,11891,11891,11891,11891,11891,11891,11891,11891, + 11891,11891,11891,11891,11892, 0, 0, 0, 0, 0, + 11892,11892, 0,11892,11893,11893,11893,11893,11893,11893, + 11893, 0,11893,11893,11893,11893,11893,11893,11893,11893, + 11893,11893,11893,11893,11893,11893,11893,11893,11894,11894, + + 11894,11894,11894,11894,11894, 0,11894,11894,11894,11894, + 11894,11894,11894,11894,11894,11894,11894,11894,11894,11894, + 11894,11894,11895,11895,11895,11895,11895,11895,11895,11895, + 11895,11895,11895,11895,11895,11895,11895,11895,11895,11895, + 11895,11895,11895,11895,11895,11895,11896,11896,11896,11896, + 11896,11896,11896,11896,11896,11896,11896,11896,11896,11896, + 11896,11896,11896,11896,11896,11896,11896,11896,11896,11896, + 11897,11897, 0, 0, 0, 0, 0,11897,11897, 0, + 11897,11898,11898,11898,11898,11898,11898,11898,11898,11898, + 11898,11898,11898,11898,11898,11898,11898,11898,11898,11898, + + 11898,11898,11898,11898,11898,11899,11899,11899,11899,11899, + 11899,11899,11899,11899,11899,11899,11899,11899,11899,11899, + 11899,11899,11899,11899,11899,11899,11899,11899,11899,11900, + 11900, 0, 0, 0, 0, 0,11900,11900,11901, 0, + 0, 0, 0, 0,11901,11901, 0,11901,11902, 0, + 0, 0, 0, 0,11902,11902,11902, 0,11902, 0, + 0, 0, 0, 0,11902,11902,11903, 0, 0, 0, + 0, 0,11903,11903, 0,11903,11904,11904,11904,11904, + 11904,11904,11904,11904,11904,11904,11904,11904,11904,11904, + 11904,11904,11904,11904,11904,11904,11904,11904,11904,11904, + + 11905,11905,11905,11905,11905,11905,11905,11905,11905,11905, + 11905,11905,11905,11905,11905,11905,11905,11905,11905,11905, + 11905,11905, 0,11905,11906, 0, 0, 0, 0, 0, + 0,11906,11906,11906,11906, 0, 0, 0, 0, 0, + 11906,11906,11907,11907,11907,11907,11907,11907,11907,11907, + 11907,11907,11907,11907,11907,11907,11907,11907,11907,11907, + 11907,11907,11907,11907,11907,11907,11908, 0, 0, 0, + 0, 0,11908,11908, 0,11908,11909,11909, 0, 0, + 0, 0, 0,11909,11909,11910, 0, 0, 0, 0, + 0, 0,11910,11910,11910,11910, 0, 0, 0, 0, + + 0,11910,11910,11911, 0, 0, 0, 0,11911, 0, + 0, 0, 0, 0,11911,11911, 0,11911,11912,11912, + 11912,11912,11912,11912,11912,11912,11912,11912,11912,11912, + 11912,11912,11912,11912,11912,11912,11912,11912,11912,11912, + 11912,11912,11913,11913,11913,11913,11913,11913,11913,11913, + 11913,11913,11913,11913,11913,11913,11913,11913,11913,11913, + 11913,11913,11913,11913,11913,11913,11914,11914, 0, 0, + 0, 0, 0,11914,11914,11915, 0, 0, 0, 0, + 0,11915,11915,11915, 0,11915, 0, 0, 0, 0, + 0,11915,11915,11916,11916,11916,11916,11916,11916,11916, + + 11916,11916,11916,11916,11916,11916,11916,11916,11916,11916, + 11916,11916,11916,11916,11916,11916,11916,11917,11917,11917, + 11917,11917,11917,11917,11917,11917,11917,11917,11917,11917, + 11917,11917,11917,11917,11917,11917,11917,11917,11917,11917, + 11917,11918,11918,11918,11918,11918,11918,11918,11918,11918, + 11918,11918,11918,11918,11918,11918,11918,11918,11918,11918, + 11918,11918,11918,11918,11918,11919, 0, 0, 0, 0, + 0, 0, 0, 0,11919, 0, 0, 0, 0, 0, + 11919,11919,11920,11920,11920,11920,11920,11920,11920,11920, + 11920,11920,11920,11920,11920,11920,11920,11920,11920,11920, + + 11920,11920,11920,11920,11920,11920,11921,11921,11921,11921, + 11921,11921,11921,11921,11921,11921,11921,11921,11921,11921, + 11921,11921,11921,11921,11921,11921,11921,11921,11921,11921, + 11922, 0, 0, 0, 0, 0,11922,11922, 0,11922, + 11923, 0, 0, 0, 0,11923, 0, 0, 0, 0, + 0,11923,11923, 0,11923,11924,11924,11924,11924,11924, + 11924,11924,11924,11924,11924,11924,11924,11924,11924,11924, + 11924,11924,11924,11924,11924,11924,11924,11924,11924,11925, + 11925,11925,11925,11925,11925,11925,11925,11925,11925,11925, + 11925,11925,11925,11925,11925,11925,11925,11925,11925,11925, + + 11925,11925,11925,11927,11927,11927,11927,11927,11927,11927, + 0,11927,11927,11927,11927,11927,11927,11927,11927,11927, + 11927,11927,11927,11927,11927,11927,11927,11928,11928,11928, + 11928,11928,11928,11928, 0,11928,11928,11928,11928,11928, + 11928,11928,11928,11928,11928,11928,11928,11928,11928,11928, + 11928,11929,11929,11929,11929,11929,11929,11929, 0,11929, + 11929,11929,11929,11929,11929,11929,11929,11929,11929,11929, + 11929,11929,11929,11929,11929,11930,11930,11930,11930,11930, + 11930,11930,11930,11930,11930,11930,11930,11930,11930,11930, + 11930,11930,11930,11930,11930,11930,11930,11930,11930,11931, + + 11931,11931,11931,11931,11931,11931,11931,11931,11931,11931, + 11931,11931,11931,11931,11931,11931,11931,11931,11931,11931, + 11931,11931,11931,11932,11932,11932,11932,11932,11932,11932, + 11932,11932,11932,11932,11932,11932,11932,11932,11932,11932, + 11932,11932,11932,11932,11932,11932,11932,11933,11933,11933, + 11933,11933,11933,11933,11933,11933,11933,11933,11933,11933, + 11933,11933,11933,11933,11933,11933,11933,11933,11933,11933, + 11934,11934, 0, 0, 0, 0, 0,11934,11934,11935, + 0, 0, 0, 0, 0,11935,11935, 0,11935,11936, + 11936,11936,11936,11936,11936,11936,11936,11936,11936,11936, + + 11936,11936,11936,11936,11936,11936,11936,11936,11936,11936, + 11936,11936,11936,11937,11937,11937,11937,11937,11937,11937, + 11937,11937,11937,11937,11937,11937,11937,11937,11937,11937, + 11937,11937,11937,11937,11937,11937,11937,11938,11938,11938, + 11938,11938,11938,11938,11938,11938,11938,11938,11938,11938, + 11938,11938,11938,11938,11938,11938,11938,11938,11938,11938, + 11938,11939, 0, 0, 0, 0, 0, 0,11939,11939, + 11939,11939, 0, 0, 0, 0, 0,11939,11939,11940, + 11940,11940,11940,11940,11940,11940,11940,11940,11940,11940, + 11940,11940,11940,11940,11940,11940,11940,11940,11940,11940, + + 11940,11940,11940,11941,11941,11941,11941,11941,11941,11941, + 11941,11941,11941,11941,11941,11941,11941,11941,11941,11941, + 11941,11941,11941,11941,11941,11941,11941,11942,11942, 0, + 0, 0, 0, 0,11942,11942,11942,11943, 0, 0, + 0, 0, 0, 0,11943,11943,11943,11943, 0, 0, + 0, 0, 0,11943,11943,11944,11944, 0,11944,11944, + 11944,11944,11944,11944,11944,11944,11944,11944,11944,11944, + 11944,11944,11944,11944,11944,11944,11944,11944,11944,11945, + 0, 0, 0, 0,11945, 0, 0, 0, 0, 0, + 11945,11945, 0,11945,11946,11946,11946,11946,11946,11946, + + 11946,11946,11946,11946,11946,11946,11946,11946,11946,11946, + 11946,11946,11946,11946,11946,11946,11946,11946,11947,11947, + 0, 0, 0, 0, 0,11947,11947,11948, 0, 0, + 0, 0, 0, 0, 0, 0,11948, 0, 0, 0, + 0, 0,11948,11948,11949,11949,11949,11949,11949,11949, + 11949,11949,11949,11949,11949,11949,11949,11949,11949,11949, + 11949,11949,11949,11949,11949,11949,11949,11949,11950,11950, + 11950,11950,11950,11950,11950,11950,11950,11950,11950,11950, + 11950,11950,11950,11950,11950,11950,11950,11950,11950,11950, + 11950,11951,11951,11951,11951,11951,11951,11951,11951,11951, + + 11951,11951,11951,11951,11951,11951,11951,11951,11951,11951, + 11951,11951,11951,11951,11951,11952, 0, 0, 0, 0, + 0,11952,11952, 0,11952,11953,11953,11953,11953,11953, + 11953,11953,11953,11953,11953,11953,11953,11953,11953,11953, + 11953,11953,11953,11953,11953,11953,11953,11953,11953,11954, + 11954,11954,11954,11954,11954,11954,11954,11954,11954,11954, + 11954,11954,11954,11954,11954,11954,11954,11954,11954,11954, + 11954,11954,11954,11955,11955,11955,11955,11955,11955,11955, + 11955,11955,11955,11955,11955,11955,11955,11955,11955,11955, + 11955,11955,11955,11955,11955,11955,11955,11957,11957,11957, + + 11957,11957,11957,11957,11957,11957,11957,11957,11957,11957, + 11957,11957,11957,11957,11957,11957,11957,11957,11957,11957, + 11957,11958,11958,11958,11958,11958,11958,11958,11958,11958, + 11958,11958,11958,11958,11958,11958,11958,11958,11958,11958, + 11958,11958,11958,11958,11958,11959,11959,11959,11959,11959, + 11959,11959, 0,11959,11959,11959,11959,11959,11959,11959, + 11959,11959,11959,11959,11959,11959,11959,11959,11959,11960, + 11960,11960,11960,11960,11960,11960, 0,11960,11960,11960, + 11960,11960,11960,11960,11960,11960,11960,11960,11960,11960, + 11960,11960,11960,11961,11961,11961,11961,11961,11961,11961, + + 0,11961,11961,11961,11961,11961,11961,11961,11961,11961, + 11961,11961,11961,11961,11961,11961,11961,11962,11962,11962, + 11962,11962,11962,11962,11962,11962,11962,11962,11962,11962, + 11962,11962,11962,11962,11962,11962,11962,11962,11962,11962, + 11962,11963, 0, 0, 0, 0, 0,11963,11963,11963, + 0,11963, 0, 0, 0, 0, 0,11963,11963,11964, + 11964,11964,11964,11964,11964,11964,11964,11964,11964,11964, + 11964,11964,11964,11964,11964,11964,11964,11964,11964,11964, + 11964,11964,11964,11965,11965,11965,11965,11965,11965,11965, + 11965,11965,11965,11965,11965,11965,11965,11965,11965,11965, + + 11965,11965,11965,11965,11965,11965,11965,11966,11966, 0, + 0, 0, 0, 0,11966,11966,11967,11967,11967,11967, + 11967,11967,11967,11967,11967,11967,11967,11967,11967,11967, + 11967,11967,11967,11967,11967,11967,11967,11967,11967,11967, + 11968,11968,11968,11968,11968,11968,11968,11968,11968,11968, + 11968,11968,11968,11968,11968,11968,11968,11968,11968,11968, + 11968,11968,11968,11968,11969,11969,11969,11969,11969,11969, + 11969,11969,11969,11969,11969,11969,11969,11969,11969,11969, + 11969,11969,11969,11969,11969,11969,11969,11969,11970,11970, + 11970,11970,11970,11970,11970,11970,11970,11970,11970,11970, + + 11970,11970,11970,11970,11970,11970,11970,11970,11970,11970, + 11970,11970,11971, 0, 0, 0, 0, 0, 0,11971, + 11971,11971,11971, 0, 0, 0, 0, 0,11971,11971, + 11972,11972,11972,11972,11972,11972,11972,11972,11972,11972, + 11972,11972,11972,11972,11972,11972,11972,11972,11972,11972, + 11972,11972,11972,11972,11973,11973,11973,11973,11973,11973, + 11973,11973,11973,11973,11973,11973,11973,11973,11973,11973, + 11973,11973,11973,11973,11973,11973,11973,11973,11974, 0, + 0, 0, 0, 0, 0,11974,11974,11974,11974, 0, + 0, 0, 0, 0,11974,11974,11975, 0, 0, 0, + + 0, 0,11975,11975,11975, 0,11975, 0, 0, 0, + 0, 0,11975,11975,11976,11976,11976,11976,11976,11976, + 11976,11976,11976,11976,11976,11976,11976,11976,11976,11976, + 11976,11976,11976,11976,11976,11976,11976,11976,11977,11977, + 0, 0, 0, 0, 0,11977,11977,11978, 0, 0, + 0, 0, 0, 0, 0, 0,11978, 0, 0, 0, + 0, 0,11978,11978,11979,11979,11979,11979,11979,11979, + 11979,11979,11979,11979,11979,11979,11979,11979,11979,11979, + 11979,11979,11979,11979,11979,11979,11979,11979,11980,11980, + 11980,11980,11980,11980,11980,11980,11980,11980,11980,11980, + + 11980,11980,11980,11980,11980,11980,11980,11980,11980,11980, + 11980,11981,11981,11981,11981,11981,11981,11981,11981,11981, + 11981,11981,11981,11981,11981,11981,11981,11981,11981,11981, + 11981,11981,11981,11981,11981,11982, 0, 0, 0, 0, + 0,11982,11982, 0,11982,11983,11983,11983,11983,11983, + 11983,11983,11983,11983,11983,11983,11983,11983,11983,11983, + 11983,11983,11983,11983,11983,11983,11983,11983,11983,11984, + 11984,11984,11984,11984,11984,11984,11984,11984,11984,11984, + 11984,11984,11984,11984,11984,11984,11984,11984,11984,11984, + 11984,11984,11984,11985,11985,11985,11985,11985,11985,11985, + + 11985,11985,11985,11985,11985,11985,11985,11985,11985,11985, + 11985,11985,11985,11985,11985,11985,11985,11986,11986,11986, + 11986,11986,11986,11986, 0,11986,11986,11986,11986,11986, + 11986,11986,11986,11986,11986,11986,11986,11986,11986,11986, + 11986,11987,11987,11987,11987,11987,11987,11987, 0,11987, + 11987,11987,11987,11987,11987,11987,11987,11987,11987,11987, + 11987,11987,11987,11987,11987,11988,11988,11988,11988,11988, + 11988,11988, 0,11988,11988,11988,11988,11988,11988,11988, + 11988,11988,11988,11988,11988,11988,11988,11988,11988,11989, + 11989,11989,11989,11989,11989,11989,11989,11989,11989,11989, + + 11989,11989,11989,11989,11989,11989,11989,11989,11989,11989, + 11989,11989,11989,11990,11990,11990,11990,11990,11990,11990, + 11990,11990,11990,11990,11990,11990,11990,11990,11990,11990, + 11990,11990,11990,11990,11990,11990,11990,11991,11991,11991, + 11991,11991,11991,11991,11991,11991,11991,11991,11991,11991, + 11991,11991,11991,11991,11991,11991,11991,11991,11991,11991, + 11991,11992, 0, 0, 0, 0, 0, 0, 0, 0, + 11992,11992, 0, 0, 0, 0, 0,11992,11992,11992, + 11993,11993,11993,11993,11993,11993,11993,11993,11993,11993, + 11993,11993,11993,11993,11993,11993,11993,11993,11993,11993, + + 11993,11993,11993,11993,11994, 0, 0, 0, 0, 0, + 0,11994,11994,11994,11994, 0, 0, 0, 0, 0, + 11994,11994,11995, 0, 0, 0, 0, 0, 0,11995, + 11995,11995,11995, 0, 0, 0, 0, 0,11995,11995, + 11996, 0, 0, 0, 0, 0, 0, 0, 0,11996, + 11996, 0, 0, 0, 0, 0,11996,11996,11996,11997, + 11997, 0, 0, 0, 0, 0,11997,11997, 0,11997, + 11998,11998,11998,11998,11998,11998,11998,11998,11998,11998, + 11998,11998,11998,11998,11998,11998,11998,11998,11998,11998, + 11998,11998,11998,11998,11999, 0, 0, 0, 0,11999, + + 0, 0, 0, 0, 0,11999,11999, 0,11999,12000, + 12000,12000,12000,12000,12000,12000,12000,12000,12000,12000, + 12000,12000,12000,12000,12000,12000,12000,12000,12000,12000, + 12000,12000,12000,12001,12001,12001,12001,12001,12001,12001, + 12001,12001,12001,12001,12001,12001,12001,12001,12001,12001, + 12001,12001,12001,12001,12001,12001,12001,12002,12002,12002, + 12002,12002,12002,12002,12002,12002,12002,12002,12002,12002, + 12002,12002,12002,12002,12002,12002,12002,12002,12002,12002, + 12002,12003,12003,12003,12003,12003,12003,12003,12003,12003, + 12003,12003,12003,12003,12003,12003,12003,12003,12003,12003, + + 12003,12003,12003,12003,12003,12004, 0, 0, 0, 0, + 0,12004,12004, 0,12004,12005,12005,12005,12005,12005, + 12005,12005,12005,12005,12005,12005,12005,12005,12005,12005, + 12005,12005,12005,12005,12005,12005,12005,12005,12005,12006, + 12006,12006,12006,12006,12006,12006,12006,12006,12006,12006, + 12006,12006,12006,12006,12006,12006,12006,12006,12006,12006, + 12006,12006,12006,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275,11275,11275,11275, + 11275,11275,11275,11275,11275,11275,11275 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "tth.lex" +/* TtH flex file to convert plain TeX and LaTeX to HTML. +(c) Ian Hutchinson, 1997-2011. +Released under the terms of the GPL2. See license.txt +This file needs to be turned into a C program using flex +And then compiled into the tth executable using a C compiler. +*/ +#line 10 "tth.lex" +#define TTH_VERSION "4.12" + /*#define TTH_GOLD "gold" no longer a distinction*/ /*sf*/ +#define TTH_HEAD "HEAD" /*sf*/ +char tth_DOC[]="\n\ + Version XXXX (c)1997-2017 Ian Hutchinson\n\ + TtH (TeX-to-HTML) translates TeX into HTML.\n\n\ +The program is a filter by default: it reads from stdin and writes to stdout.\n\ +But a non-switch argument specifies the file[.tex] to translate to file.html.\n\ +Diagnostics concerning unknown or untranslated constructs are sent to stderr.\n\n\ + Obtain USAGE & switch information by: tth -?\n\ + Obtain QUALIFICATIONS by: tth -?q\n\n\ +TtH may be used and distributed under the terms of the GPL version 2.\n"; +char tth_DOCQ[]="\n\ +TeX including mathematics; Plain TeX; LaTeX (2e). \n\ +Limitations and special usages:\n\ + \\input searches TTHINPUTS not TEXINPUTS. Counter operations are global.\n\ + \\catcode changes, tabbing environment, \\usepackage: not supported.\n\ + \\epsfbox{file.eps} links or inlines the figure file, depending on -e switch.\n\ + \\special{html:stuff} inserts HTML stuff. \\iftth is always true.\n\ + \\href{URL}{anchor text} inserts a hypertext anchor pointing to URL.\n\ + %%tth: ... passes the rest of the comment to TtH (not TeX) for parsing\n\ +\n\ +"; +char tth_USAGE[]="\n\ +USAGE: tth [-a -c ...] [<]file.tex [>file.html] [2>err]\n\ + A non-switch argument specifies the input file and the implied output file.\n\ + -h print help. -? print this usage.\n\ + -a enable automatic calls of LaTeX: if no aux file exists, attempt to call.\n\ + picture environment conversion using latex2gif. Default omit.\n\ + -c prefix header \"Content-type: text/HTML\" (for direct web serving).\n\ + -d disable definitions with delimited arguments. Default enable.\n\ + -e? epsfbox handling: -e1 convert to png/gif using user-supplied ps2png/gif.\n\ + -e2 convert and include inline. -e0 (default) no conversion, just ref. \n\ + -f? limit built-up fraction nesting in display eqns to ?(0-9). Default 5.\n\ + -g remove, don\'t guess intent of, \\font commands. Default guess font/size.\n\ + -i use italic font for equations (like TeX). Default roman.\n\ + -j? use index page length ?. Default 20 lines. -j single column.\n\ + -Lfile tell tth the base file (no extension) for LaTeX auxiliary input,\n\ + enables LaTeX commands (e.g. \\frac) without a \\documentclass line.\n\ + -n? HTML title format control. 0 raw. 1 expand macros. 2 expand eqns. \n\ + -ppath specify additional directories (path) to search for input files.\n\ + -r raw HTML output (omit header and tail) for inclusion in other files.\n\ + -t display built-up items in textstyle equations. Default in-line.\n\ + -u unicode character encoding. (Default iso-8859-1).\n\ + -w? HTML writing style. Default no head/body tags. -w -w0 no title.\n\ + -w1 single title only, head/body tags. -w2 XHTML.\n\ + -y? equation style: bit 1 compress vertically; bit 2 inline overaccents.\n\ + -xmakeindxcmd specify command for making index. Default \"makeindex\"\n\ + -v give verbose commentary. -V even more verbose (for debugging).\n"; +char *tth_debughelp="\n\ +Debugging mask: usage tth -vn with n the sum of:\n\ +Bit 1. 1 Standard verbose messages.\n\ +Bit 2. 2 Equation code.\n\ +Bit 3. 4 Definitions, counters, countersetting.\n\ +Bit 4. 8 Macro expansions. Delimited argument matching.\n\ +Bit 5. 16 Stack levels, brace counts etc.\n\ +Bit 6. 32 Tabular, Figures and Pictures.\n\ +Bit 7. 64 Comments.\n\ +Bit 8. 128 Auxiliary Files.\n\ +Bit 9. 256 Cross-references.\n\ +Bit 10. 512 Built-ins, codes.\n\ +Bit 11. 1024 Conditionals, dimensions.\n\ +Bit 12. 2048 Fonts\n\ +Bit 13. 4096 Termination.\n\ +Bit 14. 8192 Line-end diagnosis.\n\ +Bit 16. 32768 Silence unknown command warnings.\n\ + -V= 2048+256+4+2+1\n"; + + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> /* For toupper */ +#include <time.h> +#define GET_DIMEN {yy_push_state(lookforunit);yy_push_state(lookfornum);\ + *argchar=0;} +#define TTH_MAXDEPTH 30 +#define TTH_CHARLEN 500 +#define TTH_DLEN 20000 +#define TTH_34DLEN 72000 +#define TTH_FONTLEN 200 +#ifdef __vms +#define SUCCESS 1 +#define RMCMD "del" +#define RMTERM ";" +#define PATH_SEP "," +#define DIR_SEP "" +#else +#define SUCCESS 0 +#ifdef MSDOS +#define RMCMD "del" +#define RMTERM "" +#define PATH_SEP ";" +#define DIR_SEP "\\" +#else +#define RMCMD "rm" +#define RMTERM "" +#define PATH_SEP ":" +#define DIR_SEP "/" +#endif +#endif + + /*#define TTH_EXIT(level) exit(level)*/ +#define TTH_EXIT(level) return level; +#define TTH_FATAL(level) yy_push_state(error);tth_ercnt=-abs(level);tth_erlev=level; + + /* Silence warnings */ +#define YY_NO_TOP_STATE + + /* lex Globals */ +void tth_push(),tth_pop(); +char* tth_symbol_point(); +int tth_root_len[TTH_MAXDEPTH] ={0}; +char tth_root_index[TTH_MAXDEPTH][TTH_CHARLEN]={{0}}; +int tth_root_depth=0; +int tth_num_lines = 1; +int tth_push_depth=0; +char tth_closures[TTH_MAXDEPTH][TTH_CHARLEN]; +char tth_texclose[TTH_MAXDEPTH][TTH_CHARLEN]={{0}}; +char tth_font_open[TTH_MAXDEPTH][TTH_CHARLEN]={{0}}; +char tth_font_close[TTH_MAXDEPTH][TTH_CHARLEN]={{0}}; +char tth_fonto_def[TTH_CHARLEN]={0}; +char tth_fontc_def[TTH_CHARLEN]={0}; +int tth_key[TTH_MAXDEPTH]; +int tth_debug = 0; +int tth_verb = 0; +int tth_delimdef=1; +int tth_mathitalic=1; +int tth_flev0=5; +int tth_flev=5; +int tth_multinum=1; +int tth_autopic=0; +int tth_istyle=3; +int tth_htmlstyle=0; +int tth_unicode=2; +int tth_indexpage=20; +int tth_allowinput=1; +int tth_titlestate=4; +int tth_tagpurge=0; + +#ifdef MSDOS + /* Define the size of djgpp stack*/ +unsigned _stklen = 1048576; /* need a larger stack (1Mb) */ +#endif + + /*Global string pointer and length*/ +#define MAX_INCLUDE_DEPTH 100 +YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +YY_BUFFER_STATE halbuff; +FILE *tth_inputfile=0; +FILE *tth_indexfile=0; +FILE *tth_indexstyle=0; +FILE *tth_picfile=0; +FILE *tth_fdout=0; +int tth_stack_ptr = 0; +int tth_ercnt=0; +int tth_erlev=0; +int tth_epsftype=0; +int tth_fontguess=1; +int tth_splitfile=0; /*sf*/ +int tth_inlinefrac=0; +char tth_latex_file[TTH_CHARLEN]={0}; /* base name of latex files. */ +char tth_index_cmd[TTH_CHARLEN]={0}; /* Makeindex command line. */ +char tth_texinput_path[TTH_CHARLEN]={0}; +int tth_LaTeX=0; +char *tth_latex_builtins = "\\def\\frac#1#2{{{#1}\\over{#2}}}\ +\\def\\label#1{\\tthlabel}\ +\\def\\newlabel#1#2{\\tthnewlabel}\ +\\def\\ref#1{\\tthref}\ +\\def\\pageref#1{\\tthpageref}\ +\\def\\index{\\tthgpindex}\ +\\def\\see#1#2{{\\it\\seename} #1}\ +\\tthcountinit\ +\\newcount\\footnote\ +\\newcounter{chapter}\ +\\newcounter{section}[chapter]\ +\\newcounter{subsection}[section]\ +\\renewcommand{\\thesubsection}{\\thesection.\\arabic{subsection}}\ +\\newcounter{subsubsection}[subsection]\ +\\renewcommand{\\thesubsubsection}{\\thesubsection.\\arabic{subsubsection}}\ +\\newcounter{equation}[chapter]\ +\\newcounter{figure}[chapter]\ +\\newcounter{table}[chapter]\ +\\newcounter{part}\ +\\newcounter{secnumdepth}\ +\\setcounter{secnumdepth}{3}\ +\\def\\newtheorem#1#2{\\newenvironment{#1}{\\par\\stepcounter{#1}\ + \\textbf{#2 \\arabic{#1}}\\bgroup \\em}{\\par\\egroup}\\newcounter{#1}}\ +\\def\\tthenclose#1#2#3{#1{#3}#2}\ +\\def\\prefacename{Preface}\ +\\def\\refname{References}\ +\\def\\abstractname{Abstract}\ +\\def\\bibname{Bibliography}\ +\\def\\chaptername{Chapter}\ +\\def\\appendixname{Appendix}\ +\\def\\contentsname{Contents}\ +\\def\\listfigurename{List of Figures}\ +\\def\\listtablename{List of Tables}\ +\\def\\indexname{Index}\ +\\def\\figurename{Figure}\ +\\def\\tablename{Table}\ +\\def\\partname{Part}\ +\\def\\enclname{encl}\ +\\def\\ccname{cc}\ +\\def\\headtoname{To}\ +\\def\\pagename{Page}\ +\\def\\seename{see}\ +\\def\\alsoname{see also}\ +\\def\\proofname{Proof}\ +\\def\\newfont#1#2{\\font#1 #2 }\ +\\def\\thanks#1{\\footnote{#1}}\ +\\def\\bibcite{\\gdef}\n"; +char *tth_latex_builtins2= +"\\newcommand{\\part}[1][]{\\tthpart}\ +\\newcommand{\\chapter}[1][]{\\tthchapter}\ +\\newcommand{\\section}[1][]{\\tthsection}\ +\\newcommand{\\subsection}[1][]{\\tthsubsection}\ +\\newcommand{\\subsubsection}[1][]{\\tthsubsubsection}\ +\\newcounter{paragraph}[subsubsection]\ +\\renewcommand{\\theparagraph}{\\thesubsubsection.\\arabic{paragraph}}\ +\\newcommand{\\paragraph}[1][]{\\tthparagraph}\ +\\newcounter{subparagraph}[paragraph]\ +\\renewcommand{\\thesubparagraph}{\\theparagraph.\\arabic{subparagraph}}\ +\\newcommand{\\subparagraph}[1][]{\\tthsubparagraph}\ +\\newcommand{\\author}[2][]{\\centerheader{3}{#2}{align=\"center\"}}\ +\\newcommand{\\date}[2][]{\\centerheader{3}{#2}{align=\"center\"}}\ +\\newcommand{\\address}[2][]{\\centerheader{3}{#2}{align=\"center\"}}\ +\\newcommand{\\parbox}[2][]{\\hbox to #2}\ +\\def\\symbol#1{\\char#1}\ +\\def\\text{\\textrm}\ +\\def\\definecolor#1#2#3{\\def{#1}{{#3}}}\ +\\def\\setlength#1#2{#1=#2}\ +\\def\\columnwidth{\\hsize}\ +\\newcommand\\caption[1][]{\\tthcaption}\ +\\newenvironment{longtable}\ +{\\begin{table}\\begin{center}\ + \\def\\noalcen##1{\\noalign{\\centering ##1}\\stepcounter{table}}\ + \\renewcommand\\caption[2][]{\\ifx ##2* \\noalcen\ + \\else\\noalign{\\tthcaption{##2}}\\fi}\ + \\def\\endhead{\\\\}\\def\\endfirsthead{\\\\}\ + \\def\\endfoot{\\\\}\\def\\endlastfoot{\\\\}\ + \\def\\kill{\\\\}\ + \\begin{tabular}}\ + {\\end{tabular}\\end{center}\\end{table}}\ +\\def\\tthciteform{}\\def\\tthbibform{[}\\def\\tthbibcb{]}\ +\\def\\tthciteob{[}\\def\\tthcitepb{,}\\def\\tthcitefi{,}\\def\\tthcitecb{]}\ +\\newcommand\\citet[2][]{{\\def\\tthciteform##1##2##3##4{##3 [##2]}\ +\\def\\tthciteob{}\\def\\tthcitecb{}\\def\\tthcitib{}\\cite[#1]{#2}}}\ +\\newcommand\\citep[2][]{{\\def\\tthciteform##1##2##3##4{##3, ##2}\ +\\def\\tthciteob{[}\\cite[#1]{#2}}}\ +\\newcommand\\marginpar[2][]{\\special{html:<table align=\"right\" border=\ +\"border\"><tr><td align=\"right\">}#2\\special{html:</td></tr></table>}}\ +\\def\\newsavebox{\\newbox}\n"; +char *tth_latex_builtins3= +"\\def\\tthsplittail{\ +\\special{html:\n<hr /><table width=\"100\\%\"><tr><td>\n\ + <a href=\"index.html\">HEAD</a></td><td align=\"right\">\n\ +<a href=\"}\\tthfilenext\\special{html:\">}NEXT\n\ +\\special{html:</a></td></tr></table>\n</div></body></html>}}\n\ +\\def\\tthsplittop{\ +\\special{html:<table width=\"100\\%\"><tr><td>\n\ + <a href=\"index.html\">HEAD</a></td><td align=\"right\">\n\ + <a href=\"}\\tthfilechar\\special{html:\">}PREVIOUS\n\ +\\special{html:</a></td></tr></table>}}\n\ +\\def\\glossary\\index\n\ +\\newenvironment{floatingfigure}{\\special{html:\ +<br clear=\"all\" />\n\ +<table border=\"0\" align=\"left\" width=\"20\\%\"><tr><td>}\ +\\begin{figure}\\wd}{\\special{html:</td></tr></table>}\\end{figure}}\n\ +\\def\\tabularnewline{\\\\}\n\ +\\def\\AtEndDocument#1{}"; +char *tth_builtins = "\\def\\bye{\\vfill\\eject\\end }\ +\\def\\cal{\\sffamily\\it }\ +\\def\\phantom#1{\\tthphantom}\ +\\let\\hphantom=\\phantom\ +\\def\\root#1\\of#2{\\sqrt[#1]{#2}}\ +\\def\\H#1{\\\"#1}\\def\\b#1{\\underline{#1}}\ +\\def\\v{\\noexpand\\v}\\def\\u{\\noexpand\\u}\ +\\def\\t{\\noexpand\\t}\\def\\d{\\noexpand\\d}\ +\\def\\c#1{\\noexpand\\c #1}\ +\\def\\url{\\tthurl}\ +\\def\\hyperlink#1#2{\\href{\\##1}{#2}}\ +\\def\\hypertarget#1#2{\\special{html:<a id=\"#1\">}#2\\special{html:</a>}}\ +\\def\\proclaim #1.#2\\par{\\medskip{\\bf#1.\\ }{\\sl#2\\par}}\ +\\def\\newdimen#1{\\def#1{\\tthdimen#1 0\\tth_hsize}}\ +\\def\\hsize{\\tthdimen\\hsize 1\\tth_hsize}\ +\\def\\ensuremath#1{$#1$}\ +\\def\\TeX{\\ensuremath{\\rm T_EX}}\ +\\def\\LaTeX{\\ensuremath{\\rm L^AT_EX}}\ +\\def\\buildrel#1\\over#2{\\mathop{#2}^{#1}}\ +\\newcount\\tthdummy\ +\\def\\uppercase#1{{\\tth_uppercase #1}}\ +\\def\\newbox#1{\\def#1{}}\n\ +\\def\\today{\\tth_today}\n\ +\\def\\tthfootnotes{Footnotes}\n\ +\\def\\string#1{\\verb!#1!}\n\ +\\def\\displaylines#1{\\eqalign{#1}}\n\ +\\def\\leqalignno#1{\\eqalignno{#1}}\n\ +\\def\\leqno#1{\\eqno{#1}}\ +\\def\\bm#1{{\\tth_bm #1}}\ +\\newenvironment{abstract}{\\begin{tthabstract}}{\\end{tthabstract}}\ +\\newcommand\\tthoutopt[1][]{#1}\n\ +\\newcommand\\tthnooutopt[1][]{}\n"; + + /* static functions */ +static int indexkey(); +static void mkkey(),rmkey(),rmdef(),mkdef(); +static void delimit(); +static int b_align(); +static int roman(); +static int scaledpoints(); +static void tagpurge(); +static int adddimen(); + +/* Start condition stacks, not POSIX */ +/* Permits to compile without -lfl */ +/* Remove isatty calls for VMS */ +/* Not as accurate, probably because of rescanning. %option yylineno */ +/* Start conditions */ +/* Paragraph grouping for beginsection, item etc: */ + +/* Cause par to scan texclose.*/ + +/* Look for first token following and put argchar at end:*/ + +/* Expand following command and output expchar after first token, +if non-null, else prefix exptex and rescan (in equations)*/ + +/* Put swapchar after following open brace and rescan. */ + +/* Enclose a bare token in braces. Caller must initialize dupstore: */ + +/* Output the current brace group as raw text. Terminate with closing: */ + +/* Output verbatim till we encounter \end{verbatim} */ + +/* Output verbatim till we encounter a character matching chr1[0] */ + +/* Output without HTML tags so that we are compatible with title*/ + +/* Get from here to end of brace group. Then treat according to storetype: +0 Make argchar the closing of first, attach second copy, rescan. +1 Save in supstore. 2 Save in substore. For sup/bscripting. +3 Rescan with argchar between first and second copies. +4 Rescan one copy only with argchar prepended. +5 Rescan one copy with argchar postpended. +*/ + +/* Same thing but delimited by square brackets */ + +/* Throw away a following group closed by \fi or \end{picture} */ + +/* Throw away the following text closed by \else or \fi */ + +/* Inner if state inside falsetext. As falsetext except no else sensitivity*/ + +/* Throw away the following text closed by \or */ + +/* Break out of dumping of ortext states */ + +/* Get the unexpanded tokens to compare for ifx */ + +/* Get the tokens to compare for if */ + +/* Get the numbers to compare for ifnum */ + +/* Look for first number following. Put into argchar, and Pop. */ + +/* Look for first number following. Output num, argchar, and Pop. */ + +/* Look for unit. Catenate to argchar. Construct dimension in anumber */ + +/* Get the first file-like argument. */ + +/* Get nothing but the corresponding closebrace. */ + +/* Get a box definition for setbox. Mostly getting optional dimension */ + +/* Get an immediate sub or sup, else pop*/ + +/* Get the command we are defining only: */ + +/* Get a brace group as the definition's name */ + +/* Get the definition's argument description. Leave number in narg. */ + +/* Compress whitespace in delimited definition argument template and store*/ + +/* Get the end part of a newenvironment */ + +/* Define a let command. Explicitly using predefined macro. */ + +/* Throw away contiguous brace groups */ + +/* Advancing dimensions */ + +/* Get complete definition of a new count: */ + +/* Perform a counter advance: */ + +/* Output the value of a counter: */ + +/* Set the value of a previously defined counter: */ + +/* Extract the halign template. */ + +/* Inside tables, interpret & and \cr */ + +/* Handle ends of lines in halign state, e.g. \hline \end{tabular} \multi */ + +/* State for exiting expand-after of an ampersand. */ + +/* State for exiting expand-after of an ampersand in equations. */ + + + +/* Equation mode. */ + +/* Display table mode */ + +/* Textbox in equations mode */ + +/* latex listing environments */ + + + + +/* Uppercase mode */ + +/* Small caps text mode, no braces allowed. */ + +/* Define the token to be the next lot of text: */ + +/* Obtain the bracegroup as a macro argument: */ + +/* Obtain the bracket group as a macro argument: */ + +/* Detect the presence of [ and switch to optag if found */ + +/* Input a file. */ + +/* Parameter substitution in macros. */ + +/* Expanding an edef*/ + +/* Interpreting delimited definition argument */ + +/* Removing spaces e.g. after commands */ + +/* Warn if output takes place before title. */ + +/* titlecheck state for strict HTML/XHTML. */ + +/* Scan builtins at start. */ + +/* Scan LaTeX builtins at start. */ + +/* Glue flex clause removal */ + +/* rule dimension removal */ + +/* big delimiter get type */ + +/* Picture environment */ + +/* csname getting state */ + +/*tabular alignment string interpretation*/ + +/* Copying halign material to precell*/ + +/* Inserting space in horizontal lines and vertical.*/ + + +/* Dealing with hboxes */ + +/* Dealing with vboxes */ + +/* Setting Dimensions */ + +/* PreScanning tabular argument */ + +/* Error exiting state */ + +/* Paragraph checking state after a newline when par is possible*/ + +/* Expand following token till we reach something no more expandable +but don't embrace it. Prefix exptex if not zero. */ + +/* Copying of a group but escaping special characters as we go. Hence +making it suitable for subsequent verbatim or url handling. Ending +as dugroup. */ + +/* Dupgroup that treats % as a normal character */ + +/* Deal with the string that has been stored using uncommentgroup*/ + + +/* Checking if the start of a $$ indicates display table */ + +/* Defines */ +/* NOA [^a-zA-Z0-9] Removed 1.04 */ +/* Old versions. WSP [ \t\n] WSC [^ \t\n] NL \n */ +/* Costs 120k C! BRCG \{[^\}]*(\{[^\}]*(\{[^\}]*\})?[^\}]*\})?[^\}]*\} */ +#line 14815 "lex.yy.c" + +#define INITIAL 0 +#define pargroup 1 +#define parclose 2 +#define tokenarg 3 +#define exptokarg 4 +#define swaparg 5 +#define embracetok 6 +#define rawgroup 7 +#define verbatim 8 +#define verb 9 +#define notags 10 +#define dupgroup 11 +#define dupsquare 12 +#define discardgroup 13 +#define falsetext 14 +#define innerfalse 15 +#define ortext 16 +#define orbreak 17 +#define getifx 18 +#define getiftok 19 +#define getifnum 20 +#define lookfornum 21 +#define insertnum 22 +#define lookforunit 23 +#define lookforfile 24 +#define matchbrace 25 +#define getbox 26 +#define getsubp 27 +#define getdef 28 +#define getdefbr 29 +#define getnumargs 30 +#define ddcomp 31 +#define getend 32 +#define letdef 33 +#define unknown 34 +#define dimadv 35 +#define getcount 36 +#define advance 37 +#define number 38 +#define counterset 39 +#define htemplate 40 +#define halign 41 +#define hendline 42 +#define hamper 43 +#define mamper 44 +#define vtemplate 45 +#define valign 46 +#define equation 47 +#define disptab 48 +#define textbox 49 +#define Litemize 50 +#define Lenumerate 51 +#define Ldescription 52 +#define Lindex 53 +#define uppercase 54 +#define textsc 55 +#define define 56 +#define macarg 57 +#define optag 58 +#define optdetect 59 +#define inputfile 60 +#define psub 61 +#define xpnd 62 +#define delimint 63 +#define removespace 64 +#define titlecheck 65 +#define stricttitle 66 +#define builtins 67 +#define latexbuiltins 68 +#define glue 69 +#define ruledim 70 +#define bigdel 71 +#define picture 72 +#define csname 73 +#define talign 74 +#define tempamp 75 +#define hskip 76 +#define vskip 77 +#define hbox 78 +#define vbox 79 +#define setdimen 80 +#define tabpre 81 +#define error 82 +#define parcheck 83 +#define tokexp 84 +#define escgroup 85 +#define uncommentgroup 86 +#define urlgroup 87 +#define indexgroup 88 +#define halsearch 89 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include <unistd.h> +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +int yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + + static int yy_start_stack_ptr = 0; + static int yy_start_stack_depth = 0; + static int *yy_start_stack = NULL; + + static void yy_push_state (int new_state ); + + static void yy_pop_state (void ); + + static int yy_top_state (void ); + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 540 "tth.lex" + + + /* Local storage */ + +#define NCOUNT 256 +#define NFNMAX 1600 +#define NARMAX 20 +#define TTH_PUSH_BUFF(rmv) if ( tth_stack_ptr >= MAX_INCLUDE_DEPTH )\ + {fprintf(stderr,buffdeep,tth_num_lines);TTH_EXIT( 1 );}\ + eofrmv[tth_stack_ptr]=rmv;\ + include_stack[tth_stack_ptr++] = YY_CURRENT_BUFFER; +char *buffdeep="**** Error: FATAL. Scan buffers nested too deeply. Infinite loop? Line %d.\n"; +#define TTH_SCAN_STRING TTH_PUSH_BUFF(0);yy_scan_string +extern void tth_epsf(),tth_symext(),tth_encode(),tth_undefine(); + /*Not static except for tthfunc*/ +#define STATIC +STATIC char closing[TTH_CHARLEN]={0}; +STATIC char preclose[TTH_CHARLEN]={0}; +STATIC char argchar[TTH_CHARLEN]={0}; +STATIC char defchar[TTH_CHARLEN]={0}; +STATIC char eqchar[4*TTH_CHARLEN]={0}; +STATIC char eqchar2[4*TTH_CHARLEN]={0}; +STATIC char scratchstring[TTH_CHARLEN]={0}; +STATIC char scrstring[TTH_CHARLEN]={0}; +STATIC char swapchar[TTH_CHARLEN]={0}; +STATIC char expchar[TTH_CHARLEN]={0}; +STATIC char exptex[TTH_CHARLEN]={0}; +STATIC char strif[TTH_CHARLEN]={0}; +STATIC char newcstr[TTH_CHARLEN]={0}; +STATIC char boxalign[TTH_CHARLEN]={0}; +STATIC char boxvalign[TTH_CHARLEN]={0}; +STATIC char dupstore[TTH_DLEN]; +STATIC char dupstore2[2*TTH_DLEN]; +STATIC char supstore[TTH_DLEN]={0}; +STATIC char substore[TTH_DLEN]={0}; +STATIC char defstore[TTH_DLEN]={0}; +STATIC char psubstore[TTH_DLEN]={0}; +STATIC char chr1[2]={0}; +STATIC int storetype=0; +STATIC int bracecount=0; +STATIC int horizmode=0; /* 1 in horizontal mode. -1 after a \n. 0 after a \par*/ +STATIC int horiztemp=0; +STATIC int whitespace=0; +STATIC int edeftype=0; + /* Stacking of halign and tabular operational data. */ +STATIC int colnum=0; +STATIC char halstring[TTH_CHARLEN]={0}; +STATIC char *halstrings[NARMAX]; +STATIC YY_BUFFER_STATE halbuffs[NARMAX]; +STATIC int halignenter=0; +STATIC int halenter[NARMAX]={99}; +STATIC int halncols[NARMAX]={0}; +STATIC int halind=0; +#define TTH_HAL_PUSH if(tth_debug&32)fprintf(stderr,"HAL PUSH %d,",halind);\ + if(tth_debug&32)fprintf(stderr,"%s\n",halstring);\ + if(halind < NARMAX) {\ + halenter[halind]=halignenter;halncols[halind]=ncols;\ + halbuffs[halind]=halbuff;colnum=0;mkkey(halstring,halstrings,&halind);\ + }else{ fprintf(stderr,"**** Error: Fatal. Tables nested too deeply. Line %d\n",tth_num_lines);\ + TTH_EXIT(1);} +#define TTH_HAL_POP if(tth_debug&32)fprintf(stderr,"HAL POP %d,",halind-1);\ + if(halind > 0){\ + strcpy(halstring,halstrings[halind-1]);\ + rmkey(halstrings,&halind);halbuff=halbuffs[halind];\ + halignenter=halenter[halind];ncols=halncols[halind];\ + if(tth_debug&32)fprintf(stderr,"%s\n",halstring);\ + }else{ fprintf(stderr,"**** Error: Fatal. Underflow of Table index. Line %d\n",tth_num_lines);\ + TTH_EXIT(1);} +STATIC int eqalignlog=0; /* 1 eqalign, >1 no-numbering, >100 reset at line end.*/ +STATIC int colspan=1; /* colspan of table cell; was 0 default. Now 1.*/ +STATIC int eqaligncell=0; +STATIC int eqalignrow=0; +STATIC int eqalog[NARMAX]; /* Storage for pushing eqalign flags */ +STATIC int eqacell[NARMAX]; +STATIC int eqarow[NARMAX]; +STATIC int eqaind=0; +#define TTH_EQA_PUSH if(eqaind < NARMAX) {\ + eqalog[eqaind]=eqalignlog;eqacell[eqaind]=eqaligncell;\ + eqarow[eqaind]=eqalignrow;eqaind++;\ + }else{ fprintf(stderr,"**** Error: Fatal. Matrices nested too deeply. Line %d\n",tth_num_lines);\ + TTH_EXIT(1);} +#define TTH_EQA_POP if(eqaind > 0){ eqaind--;\ + eqalignlog=eqalog[eqaind];eqaligncell=eqacell[eqaind];\ + eqalignrow=eqarow[eqaind];\ + }else{ fprintf(stderr,"**** Error: Fatal. Underflow of Matrix index:%d Line %d\n",eqaind,tth_num_lines);\ + TTH_EXIT(1);} +STATIC int i,ind=0,jarg=0,jargmax=0,jscratch,js2,jshal,jstal=0, hgt=0; +STATIC int iac=0,jac=0; +STATIC int ncounters=0; +STATIC int counters[NCOUNT]={0}; +STATIC char *countkeys[NCOUNT]={0}; +STATIC char *countwithins[NCOUNT]={0}; +STATIC int nkeys=0; +STATIC char *keys[NFNMAX]={0}; +STATIC char *defs[NFNMAX]={0}; +STATIC char *optargs[NFNMAX]={0}; +STATIC int nargs[NFNMAX]={0}; +STATIC int lkeys[NFNMAX]={0}; +STATIC int ckeys[NFNMAX]={0}; +STATIC int localdef=0; +STATIC int narg; +STATIC int margmax=0; +STATIC char *margkeys[NARMAX]={0}; +STATIC char *margs[NARMAX]={0}; +STATIC int margn[NARMAX]={0}; +/* Fractions and math */ +extern void tth_enclose(),tth_prefix(); +STATIC int eqdepth=0; +STATIC char *eqstrs[NFNMAX]; +STATIC char eqstr[4*TTH_DLEN]={0}; +STATIC char eqstore[4*TTH_DLEN]; +STATIC char eqlimited[TTH_DLEN]={0}; +/* STATIC int eqsubsup=0; */ +STATIC int eqclose=0; +STATIC int eqhgt=0; +STATIC int mtrx[NFNMAX]={0}; +STATIC int active[NFNMAX]={0}; +STATIC int levhgt[NFNMAX]={0}; +STATIC int tophgt[NFNMAX]={0}; +STATIC char levdelim[NFNMAX][20]={{0}}; +STATIC int tabwidth=150; +STATIC int qrtlen=0,qrtlen2=0; +STATIC time_t thetime; +struct tm timestruct; +STATIC char *chscratch=0; +STATIC char *chs2=0; +STATIC char *chs3=0; +STATIC char *chdef=0; +STATIC char *chopt=0; +STATIC int lopt=0; +/* Latex Sections etc*/ +STATIC int chaplog=0; +STATIC int countstart=0; +#define ftntno counters[0+countstart] +#define chapno counters[1+countstart] +#define sectno counters[2+countstart] +#define subsectno counters[3+countstart] +#define subsubsectno counters[4+countstart] +#define equatno counters[5+countstart] +#define figureno counters[6+countstart] +#define tableno counters[7+countstart] +#define partno counters[8+countstart] +#define secnumdepth counters[9+countstart] +STATIC int appendix=0; +STATIC char environment[20]={0}; /* Name of environment */ +STATIC char labelchar[20]={0}; /* Running label in current section. */ +STATIC char envirchar[20]={0}; /* Running label in numbered environment. */ +STATIC char refchar[20]={0}; /* Type of internal reference. */ +STATIC char colorchar[20]={0}; +STATIC char filechar[20]={0}; +STATIC char filenext[20]={0}; /*sf*/ +STATIC char auxflch[20]={0}; +STATIC char schar[3]={0}; /*sf*/ +#define TNO 400 +STATIC char *tchar[TNO]={0}; /*sf*/ +STATIC char *fchar[TNO]={0}; /*sf*/ +STATIC int tbno=0; /*sf*/ +STATIC int fgno=0; /*sf*/ +STATIC char ftntcode[4]; +STATIC int ftntwrap=0; +STATIC int displaystyle=0; +STATIC int nbuiltins=0; + /* STATIC int compression=0; */ +STATIC int enumerate=0; +STATIC char enumtype[5]={'1','a','i','A','I'}; +STATIC int eofrmv[MAX_INCLUDE_DEPTH]; +STATIC int lbook=0; +STATIC int lefteq=0; +STATIC char unitlength[TTH_CHARLEN]={0}; +STATIC int picno=0; +STATIC int ncols=0; +STATIC char tdalign[TTH_CHARLEN]={0}; +STATIC char precell[TTH_CHARLEN]={0}; +STATIC float anumber=0.,bnumber=1.,cnumber=0.; +STATIC float cyanc=0.,magentac=0.,yellowc=0.,blackc=0.; +STATIC float redc=0.,greenc=0.,bluec=0.; +STATIC int thesize=0; +STATIC int tthglue=0; +STATIC int tth_eqwidth=100; +STATIC int dimadvstate=0; +#define TTH_INDPC 5 +extern int tth_group(); + /* Number of scaledpoints per screen pixel. 100 pixels per inch. */ +#define SCALEDPERPIXEL (65536*72/100) + /* Guess of the screen width in pixels larger than real is usually the best + error to have. */ +#define DEFAULTHSIZEPIX 1000 +/* extern int tth_halcode(); */ +STATIC int boxborder=0; +extern int tth_cmykcolor(); +STATIC char xpndstring[2]={0}; +STATIC int bibliogs=0; +STATIC int verbinput=0; +/* Open for reading, and test that we really can read it. */ +STATIC char openscrt[2]; +#define TTH_FILE_OPEN(scratchstring) \ + ( (tth_inputfile=fopen(scratchstring,"r")) ?\ + ( ( (fread(openscrt,1,1,tth_inputfile)==0) && ferror(tth_inputfile) \ + && (!fclose(tth_inputfile) || 1 ) ) ? \ + NULL : (freopen(scratchstring,"r",tth_inputfile)) )\ + : NULL ) +STATIC int tth_index_face=0; +STATIC int tth_index_line=0; +STATIC int tthindexrefno=0; +STATIC int oa_removes=0; +STATIC char page_compositor[]="-"; +STATIC char input_filename[TTH_CHARLEN]={0}; +STATIC int minus=1; +#define TTH_UNKS_LEN 4000 +STATIC char unknownstring[TTH_UNKS_LEN]={0}; +STATIC char valignstring[TTH_CHARLEN]={0}; +STATIC int valsec=0; +STATIC char tth_verbenviron[TTH_MAXDEPTH]={0}; + /* */ + + /* Define the storable stacked integers */ +#define INTDEPTHMAX 30 /* Stack depth*/ +#define INTMAX 10 /* Maximum integers */ +#define INTERROR 99999 /* Value indicating overflow */ +int PUSHEDINTS[INTMAX][INTDEPTHMAX]={{0}}; +int PUSHEDINTDEPTHS[INTMAX]={0}; +#define TTH_INT_SETPUSH(name,value) \ + if(PUSHEDINTDEPTHS[name]<INTDEPTHMAX) {\ + PUSHEDINTS[name][++PUSHEDINTDEPTHS[name] ]=value;\ + }else{fprintf(stderr,"INT overflow, %s\n","name");++PUSHEDINTDEPTHS[name];} +#define TTH_INT_VALUE(name) \ + (PUSHEDINTDEPTHS[name]<=INTDEPTHMAX) ? \ + PUSHEDINTS[name][PUSHEDINTDEPTHS[name] ] :\ + INTERROR +#define TTH_INT_POP(name) \ + if(PUSHEDINTDEPTHS[name]>0){\ + PUSHEDINTS[name][PUSHEDINTDEPTHS[name]--]=0;\ + }else{fprintf(stderr,"INT underflow, %s\n","name");} + /* Here we define as macros the names of our pushed integers. */ +#define EQSUBSUP 0 + /* Calls are then of the form, e.g. TTH_INT_VALUE(EQSUBSUP,10)*/ + + +/*mathstringshl*/ + + /*Macros in scanner etc. */ +#ifdef TTH_GOLD +#define TTH_NAME "Hgold" +#else +#define TTH_NAME "H" +#endif + +#define TTH_SYMBOLN (tth_unicode ? "" : "<span style=\"font-family:symbol\">\n") +#define TTH_SYMBOL (tth_unicode ? "" : "<span style=\"font-family:symbol\">") +#define TTH_SYMEND (tth_unicode ? "" : "</span>") +#define TTH_SYMENDN (tth_unicode ? "" : "</span\n>") +#define TTH_SYMPT(chr) (tth_unicode ? tth_symbol_point(chr) : chr) + +#define TTH_DISP1 ((tth_debug < 2) ? "\n<br clear=\"all\" /><table border=\"0\" width=\"%d%%\"><tr><td>\n<table align=\"center\" cellspacing=\"0\" cellpadding=\"2\"><tr><td nowrap=\"nowrap\" align=\"center\">\n" : "\n<br clear=\"all\" /><table border=\"1\" width=\"%d%%\"><tr><td>\n<table border=\"1\" align=\"center\"><tr><td nowrap=\"nowrap\" align=\"center\">\n" ) +/* DISPE for equalign etc. Old version.*/ +#define TTH_DISPE ((tth_debug < 2) ? "\n<br clear=\"all\" /><table border=\"0\" width=\"%d%%\"><tr><td>\n" : "\n<br clear=\"all\" /><table border=\"1\" width=\"%d%%\"><tr><td>\n" ) + /* New broken version + #define TTH_DISPE ((tth_debug < 2) ? "\n<br clear=\"all\" /><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"%d%%\">\n" : "\n<br clear=\"all\" /><table border=\"1\" width=\"%d%%\">\n" ) */ + +#define TTH_DISP2 "</td></tr></table>\n</td></tr></table>\n" +#define TTH_DISP3 "</td></tr></table>\n</td><td width=\"1%\">" +#define TTH_DISP4 "</td></tr></table>\n" +#define TTH_DISP5 "\n</td><td width=\"1%\">" +#define TTH_DISP6 "</td></tr></table>\n" /* Instead of DISP4*/ +#define TTH_TSTY1 ((tth_debug <2) ? "<br clear=\"all\" /><table border=\"0\" align=\"left\" cellspacing=\"0\" cellpadding=\"0\"><tr><td nowrap=\"nowrap\">" : "<br clear=\"all\" /><table border=\"1\" align=\"left\"><tr><td>" ) +#define TTH_TSTY2 "\n</td></tr></table><br />" +#define TTH_EQ1 ((tth_debug<2) ? "<table border=\"0\" align=\"left\" cellspacing=\"0\" cellpadding=\"0\"><tr><td nowrap=\"nowrap\" align=\"center\">\n" : "<table border=\"1\" align=\"left\"><tr><td nowrap=\"nowrap\" align=\"center\">\n") +#define TTH_EQ3 ((tth_debug<2) ? "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">" : "<table border=\"1\">" ) +#define TTH_EQ2 "</table>\n" +#define TTH_EQ4 "</td></tr></table>\n" +#define TTH_EQ5 ((tth_debug<2) ? "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td nowrap=\"nowrap\" align=\"center\">\n" : "<table border=\"1\"><tr><td nowrap=\"nowrap\" align=\"center\">\n") +#define TTH_EQ6 ((tth_debug<2) ? "<tr><td width=\"50%\"></td><td nowrap=\"nowrap\" align=\"right\">\n" : "<tr><td width=\"50%\"></td><td nowrap=\"nowrap\" align=\"right\">\n" ) +#define TTH_EQ7 "\n <tr><td width=\"50%%\"></td><td nowrap=\"nowrap\" align=\"%s\" colspan=\"%d\">" +#define TTH_EQ8 "</td><td width=\"50%\"></td><td width=\"1\" align=\"right\">" +#define TTH_EQ9 "</td><td width=\"50%\">" +#define TTH_EQ10 "\n <tr><td nowrap=\"nowrap\" align=\"%s\" colspan=\"%d\">" +#define TTH_EQ11 ((tth_debug<2)?"<table><tr><td nowrap=\"nowrap\" align=\"%s\" colspan=\"%d\">":"<table border=\"1\"><tr><td nowrap=\"nowrap\" align=\"%s\" colspan=\"%d\">") +#define TTH_CELL1 ((eqclose > tth_flev) ? ((levdelim[eqclose][0]||levdelim[eqclose+1][0]) ? "" : "["): ((levdelim[eqclose][0]) ? "" : "</td><td nowrap=\"nowrap\" align=\"center\">\n") ) +#define TTH_CELL2 ((eqclose > tth_flev) ? ((levdelim[eqclose+1][0]||levdelim[eqclose][0]) ? "" : "]"): ((levdelim[eqclose+1][0]) ? "" : "</td><td nowrap=\"nowrap\" align=\"center\">\n") ) + /* CELL2 and CELL3 need to be identical apart from the test. */ +#define TTH_CELL3 "</td><td nowrap=\"nowrap\" align=\"center\">\n" +#define TTH_CELL4 "</td><td align=\"right\">" + /*#define TTH_CELL_L "</td><td align=\"left\">"*/ +#define TTH_CELL_TAB (eqdepth ?"</td></tr></table></td>":"</td>") +#define TTH_CELL_L "</td><td align=\"left\" class=\"cl\">" +#define TTH_CELL_R "</td><td align=\"right\" class=\"cr\">" +#define TTH_CELL5 "</td><td nowrap=\"nowrap\">" +#define TTH_CELL_START "</td><td" +#define TTH_LEV1 ((eqclose > tth_flev) ? "(": ((tth_debug<2) ? "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td nowrap=\"nowrap\" align=\"center\">\n": "<table border=\"1\"><tr><td nowrap=\"nowrap\" align=\"center\">\n") ) +#define TTH_LEV2 ((eqclose > tth_flev) ? ")": "</td></tr></table>") + +#define TTH_EQA1 ((tth_debug<2) ? ((eqalignlog) ? "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr><td nowrap=\"nowrap\" align=\"left\">\n":"<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr><td nowrap=\"nowrap\" align=\"center\">\n") : ((eqalignlog) ? "<table border=\"1\"><tr><td nowrap=\"nowrap\" align=\"left\">\n":"<table border=\"1\"><tr><td nowrap=\"nowrap\" align=\"center\">\n")) +#define TTH_EQA2 "</td></tr></table>" +#define TTH_EQA3 ((eqalignlog) ? "</td><td nowrap=\"nowrap\" align=\"left\">\n" : "</td><td nowrap=\"nowrap\" align=\"center\">\n") +#define TTH_EQA4 ((eqalignlog) ? "</td><td nowrap=\"nowrap\" align=\"left\" colspan=" : "</td><td nowrap=\"nowrap\" align=\"center\" colspan=") + /* The leading \n is vital in tth_istyle. */ +#define TTH_DIV ((eqclose > tth_flev) ? "/":(tth_istyle&1 ? "\n<div class=\"hrcomp\"><hr noshade=\"noshade\" size=\"1\"/></div>":"<hr noshade=\"noshade\" size=\"1\" />") ) + +#define TTH_ATOP ((eqclose > tth_flev) ? " || ":"<br />\n" ) +#define TTH_NULL_BOTTOM ((eqclose > tth_flev) ? "":" <br />" ) +#define TTH_NOALIGN "<tr><td nowrap=\"nowrap\" colspan=6>" +#define TTH_BR "<br />" +#define TTH_BRN "<br />\n" +#define TTH_SUP1 "<sup>" +#define TTH_SUP2 "</sup>" +#define TTH_SUB1 "<sub>" +#define TTH_SUB2 "</sub>" +#define TTH_OINT strcat(eqstr,"</td><td align=\"center\">");\ + strcat(eqstr,TTH_SYMBOL);chr1[0]=243;strcat(eqstr,TTH_SYMPT(chr1));\ + strcat(eqstr,"<br />(");chr1[0]=231;strcat(eqstr,TTH_SYMPT(chr1));\ + strcat(eqstr,")<br />");chr1[0]=245;strcat(eqstr,TTH_SYMPT(chr1));\ + strcat(eqstr,TTH_SYMEND);strcat(eqstr,"<br />");strcat(eqstr,"</td><td>");\ + if(levhgt[eqclose] == 1)levhgt[eqclose]=2;hgt=3; + /* These ought to be a good way of closing up over/under braces etc + but layout is too broken to give good vertical centering then +#define TTH_OBR (tth_istyle&1 ? "\n<div class=\"hrcomp\"><hr /></div>" : "<hr />") +#define TTH_OBRB (tth_istyle&1 ? "\n<div class=\"hrcomp\"><br /></div>" : "<br />") + */ +#define TTH_OBR "<hr />" +#define TTH_OBRB "<br />" +#define TTH_EM1 "<em>" +#define TTH_EM2 "</em>" +#define TTH_SMALLCAPS_FONT1 "<span style=\"font-size:x-small\">" +#define TTH_SMALLCAPS_FONT2 "</span>" +#define TTH_BOLDO "<b>" +#define TTH_BOLD1 "<b>" +#define TTH_BOLDC "</b>" +#define TTH_BOLD2 "</b>" +#define TTH_BLDITO "<b><i>" +#define TTH_BLDIT1 "<b><i>" +#define TTH_BLDITC "</i></b>" +#define TTH_BLDIT2 "</i></b>" +#define TTH_ITAL1 "<i>" +#define TTH_ITAL2 "</i>" +#define TTH_ITALO "<i>" +#define TTH_ITALC "</i>" +#define TTH_TT1 "<tt>" +#define TTH_TT2 "</tt>" +#define TTH_TTO "<tt>" +#define TTH_TTC "</tt>" +#define TTH_UNDL1 "<u>" +#define TTH_UNDL2 "</u>" +#define TTH_NORM1 (tth_istyle&1 ? "<span class=\"roman\">" : "") +#define TTH_NORM2 (tth_istyle&1 ? "</span>" : "") +#define TTH_HELV1 "<span style=\"font-family:helvetica\">" +#define TTH_HELV2 "</span>" +/* #define TTH_FONTCANCEL "</i></b></tt>" Trying a less drastic approach */ +#define TTH_FONTCANCEL "</b>" +#define TTH_DAG "†" +#define TTH_DDAG "‡" + +#define TTH_OA1 (tth_istyle&1 ? "<div class=\"comp\">" : "") +#define TTH_OA2 (tth_istyle&1 ? "<br /></div>\n<div class=\"norm\">" : "<br />") +/* The comb bottom style is messed up by differences between NS and gecko. + The margin bottom does not seem to matter. Even uncompressed accents + are misaligned in Gecko. This is a font scaling problem.*/ +#define TTH_OA3 (tth_istyle&1 ? "</div>\n<div class=\"comb\"> </div>\n" : " <br />") +#define TTH_OA4 (tth_istyle&1 ? "\n<div class=\"comb\"> </div>\n" :" <br />") +#define TTH_OA5 (tth_istyle&1 ? "\n<div class=\"norm\">" : "") +#define TTH_STYLE ((tth_debug&2) ? " <style type=\"text/css\"><!--\n\ + td div.comp { margin-top: -0.6ex; margin-bottom: -1ex; background: yellow;}\n\ + td div.comb { margin-top: -0.7ex; margin-bottom: -.6ex; background: yellow;}\n\ + td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex; background: yellow;}\n\ + td div.norm {line-height:normal; background: cyan;} \n\ + span.roman {font-family: serif; font-style: normal; font-weight: normal;} \n\ + span.overacc2 {position: relative; left: .8em; top: -1.2ex;}\n\ + span.overacc1 {position: relative; left: .6em; top: -1.2ex;} --></style>\n"\ + : " <style type=\"text/css\"><!--\n\ + td div.comp { margin-top: -0.6ex; margin-bottom: -1ex;}\n\ + td div.comb { margin-top: -0.6ex; margin-bottom: -.6ex;}\n\ + td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex;}\n\ + td div.norm {line-height:normal;}\n\ + span.roman {font-family: serif; font-style: normal; font-weight: normal;} \n\ + span.overacc2 {position: relative; left: .8em; top: -1.2ex;}\n\ + span.overacc1 {position: relative; left: .6em; top: -1.2ex;} --></style>\n") + +#define TTH_SIZESTYLE " <style type=\"text/css\"><!--\n\ + .tiny {font-size:30%;}\n\ + .scriptsize {font-size:xx-small;}\n\ + .footnotesize {font-size:x-small;}\n\ + .smaller {font-size:smaller;}\n\ + .small {font-size:small;}\n\ + .normalsize {font-size:medium;}\n\ + .large {font-size:large;}\n\ + .larger {font-size:x-large;}\n\ + .largerstill {font-size:xx-large;}\n\ + .huge {font-size:300%;}\n\ + --></style>\n" + + +#define TTH_MATHS(chr) strcat(eqstr,TTH_SYMBOL);\ + strcat(eqstr,TTH_SYMPT(chr)); strcat(eqstr,TTH_SYMENDN); +#define TTH_MATHI(icr) chr1[0]=icr;TTH_MATHS(chr1); +#define TTH_MATHC(chr) strcat(eqstr,chr); +#define TTH_COMPLEX ( (strcspn(eqstr,"&+-/") < strlen(eqstr)) || (strstr(eqstr,"\\pm") != NULL) || (strstr(eqstr,"\\mp") != NULL)) + /* +#define TTH_P_STYLE " <style type=\"text/css\"><!-- div.p { margin-top: 7pt;}--></style>\n" + */ +#define TTH_P_STYLE " <style type=\"text/css\"> div.p { margin-top: 7pt;}</style>\n" +/* #define TTH_PAR_ACTION if(tth_htmlstyle&2){\ */ +/* TTH_OUTPUT("\n<div class=\"p\"></div>\n");}\ */ +/* else{TTH_OUTPUT("\n<p>\n");}horizmode=0; */ +/* The comment is to fool tidy into thinking it's not empty*/ +#define TTH_PAR_ACTION TTH_OUTPUT("\n<div class=\"p\"><!----></div>\n");horizmode=0; + +#define TTH_CLEAR "<br clear=\"all\" />" +#define TTH_LIMITOP(icr) chr1[0]=icr;if(eqclose >tth_flev-1){TTH_MATHI(icr);}else{\ + oa_removes=0;\ + strcat(eqstr,TTH_CELL3);\ + strcpy(eqlimited,chr1);\ + if(levhgt[eqclose] == 1)levhgt[eqclose]=2;\ + if(bracecount){\ + fprintf(stderr,"****Internal Error! Bracecount nonzero in limitop.\n");\ + bracecount=0;}\ + yy_push_state(getsubp);} +#define TTH_OUTPUT(chr) if(eqdepth){strcat(eqstr,chr);}else{fprintf(tth_fdout,"%s",chr);} +#define TTH_OUTPUTH(chr) if(eqdepth){strcat(eqstr,chr);}else{fprintf(tth_fdout,"%s",chr);}horizmode=1; +#define TTH_CLOSEGROUP TTH_OUTPUT(closing) +#define TTH_HGT 12 +#define TTH_BOXCODE "<span style=\"font-size:x-small\"><sup>[<u>¯</u>]</sup></span>" +#define TTH_HBAR "ħ" +#define TTH_TEXTBOX1 "" +#define TTH_TEXTBOX2 "" + /* Tabular variable markup */ +#define TTH_TRO "\n<tr>" +#define TTH_TRC "</tr>" +#define TTH_TABC "</table>\n" +#define TTH_TABB "<table border=\"1\" class=\"tabular\">" +#define TTH_TABO "<table class=\"tabular\">" +#define TTH_TRTD "<tr><td></td></tr>" +#define TTH_MULSTART "<td colspan=\"%d\"%s>" +#define TTH_TABNOAL "\n<tr><td colspan=\"%d\">" +#define TTH_TABNOAL2 "\n</tr></td>" +#define TTH_MULSPAN "<td align=\"center\" colspan=\"%d\">" +#define TTH_TDVAR "<td%s>" +#define TTH_TABRT " align=\"right\"" +#define TTH_TABLT " align=\"left\"" +#define TTH_TABCT " align=\"center\"" + + /* This was the old doctype. Reports are that on Windows gecko recognizes + symbol fonts for a doctype of 40 but not 401. So keep to 40*/ +#define TTH_DOCTYPE4 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html>" +#define TTH_DOCTYPE41 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>" +#define TTH_DOCXML "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">" +#define TTH_DOCTYPE (tth_htmlstyle&2 ? TTH_DOCXML : TTH_DOCTYPE4 ) +#define TTH_GENERATOR (!(tth_htmlstyle&3) ? "\n<meta name=\"GENERATOR\" content=\"Tt%s %s\">\n" : ( tth_htmlstyle&2 ? "\n<head>\n<meta name=\"GENERATOR\" content=\"Tt%s %s\" />\n" : "\n<head>\n<meta name=\"GENERATOR\" content=\"Tt%s %s\">\n") ) +#define TTH_ENCODING (!tth_unicode ? (tth_htmlstyle&2 ?"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />\n":"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n") : "") + + + +#define TTH_MIME_HEAD "MIME-Version: 1.0\nContent-Type: MULTIPART/MIXED; BOUNDARY=\"1293058819-1213484446-873576042\"\n\n--1293058819-1213484446-873576042\nContent-Type: TEXT/HTML; charset=iso-8859-1; name=\"index.html\"\n\n" /*sf*/ +#define TTH_MIME_DIVIDE "\n--1293058819-1213484446-873576042\nContent-Type: TEXT/HTML; charset=iso-8859-1; name=\"%s\"\n\n" /*sf*/ + + +#define TTH_DO_MACRO *(yytext+strcspn(yytext," "))=0;\ + ind=indexkey(yytext,keys,&nkeys); \ + if(horizmode) horizmode=1;\ + if(ind != -1) {\ + jargmax=nargs[ind];\ + chdef=defs[ind];\ + chopt=optargs[ind];\ + if(optargs[ind]) lopt=1; else lopt=0;\ + *dupstore=0;\ + if( jargmax == 0){\ + jarg=1;\ + if(tth_debug&8)fprintf(stderr,"Using definition %s %d= %s\n",yytext,ind,chdef);\ + TTH_PUSH_BUFF(1);\ + yy_scan_string(chdef);\ + yy_push_state(psub);\ + }else if(jargmax >0){\ + jarg=1;\ + if(tth_debug&8) fprintf(stderr,"Getting arguments of %s\n",yytext);\ + bracecount=-1;\ + if(lopt) yy_push_state(optdetect);\ + else{yy_push_state(macarg);yy_push_state(embracetok);}\ + }else{\ + if(tth_debug&8)fprintf(stderr,"Using Delimited Definition:%s\n",yytext);\ + chscratch=defs[ind-1];\ + chs2=chscratch;\ + *dupstore2=0;\ + jarg=0;\ + yy_push_state(delimint);whitespace=0;\ + horizmode=1;\ + }\ + } + +#define TTH_CHECK_LENGTH js2=0;\ + if(strlen(dupstore) > 9*TTH_DLEN/10 ){chs2=dupstore;js2=1;}\ + else if(strlen(defstore) > 9*TTH_DLEN/10 ){chs2=defstore;js2=1;}\ + else if(strlen(psubstore) > 9*TTH_DLEN/10 ){chs2=psubstore;js2=1;}\ + else if(strlen(dupstore2) > 18*TTH_DLEN/10 ){chs2=dupstore2;js2=1;}\ + if(js2){ *(chs2+200)=0;fprintf(stderr,\ + "\n**** Error: FATAL. Exceeding allowed string length. Line %d. Runaway argument?\n String starts:%s ...\n",tth_num_lines,chs2);\ + fprintf(stderr," Possible cause: Use of macro %d, %s\n",ind,keys[ind]);\ + TTH_EXIT(1);} + +#define TTH_CCAT(chr1,chr2) if(strlen(chr1)+strlen(chr2) >= TTH_CHARLEN)\ + {fprintf(stderr,\ +"**** Character overflow; catenation of %s prevented, line %d\n%s",\ +chr2,tth_num_lines,\ +" Check for alternating font changes. Use grouping instead.\n\ + If necessary, increase the value of TTH_CHARLEN and recompile TtH.\n");}\ +else strcat(chr1,chr2); + +#define TTH_CCPY(chr1,chr2) if(strlen(chr2) >= TTH_CHARLEN)\ + {fprintf(stderr,\ +"**** Character overflow; strcpy of %s prevented, line %d\n",chr2,tth_num_lines);}\ +else strcpy(chr1,chr2); + +#define TTH_PRECLOSE(chr1) strcpy(preclose,closing);TTH_CCPY(closing,chr1);\ + TTH_CCAT(closing,preclose); + + /* +#define TTH_PRETEXCLOSE(chr1) strcpy(preclose,tth_texclose[tth_push_depth]);\ + TTH_CCPY(tth_texclose[tth_push_depth],chr1);\ + TTH_CCAT(tth_texclose[tth_push_depth],preclose); + */ +#define TTH_PRETEXCLOSE(chr1) strcpy(scratchstring,tth_texclose[tth_push_depth]);\ + TTH_CCPY(tth_texclose[tth_push_depth],chr1);\ + TTH_CCAT(tth_texclose[tth_push_depth],scratchstring);*scratchstring=0; + +#define TTH_SWAP(chr1) strcpy(swapchar,chr1);yy_push_state(swaparg);\ + yy_push_state(embracetok); + /* Do an explicitly defined tex function of argno arguments (>0) */ +#define TTH_TEX_FN(chr1,argno) chdef=chr1;jargmax=argno;\ + jarg=1;bracecount=-1;lopt=0;\ + yy_push_state(macarg);yy_push_state(embracetok); + /* Do an explicitly defined tex function of argno arguments (>1) + including an optional argument. */ +#define TTH_TEX_FN_OPT(chr1,argno,defaultopt) chdef=chr1;jargmax=argno;\ + jarg=1;bracecount=-1;lopt=1;chopt=defaultopt;\ + yy_push_state(optdetect); + +#define TTH_PUSH_CLOSING tth_key[tth_push_depth]=nkeys;tth_push(closing) +#define TTH_POP_CLOSING if(tth_debug&16)fprintf(stderr,"nkeys:%d,tth_key:%d\n",nkeys,tth_key[tth_push_depth-1]);\ + if(nkeys-tth_key[tth_push_depth-1])\ + tth_undefine(keys,&nkeys,tth_key[tth_push_depth-1],lkeys);tth_pop(closing); + +#define TTH_HALCODE(chr1) ((*chr1=='c') ? TTH_TABCT :\ +( (*chr1=='r')? TTH_TABRT :\ +( (*chr1=='p')? (\ + (strcpy(scrstring," width=\"")!=NULL &&\ + strncat(scrstring,chr1+2,strlen(chr1+2)-1)!=NULL &&\ + strcat(scrstring,"\"")!=NULL) ? scrstring: "")\ + : TTH_TABLT))) + + + /* fprintf(stderr,"%s-%s[%d%d]",precell,yytext,jshal,jstal);\ + if(jshal==1){TTH_CCAT(precell,"{");}\ + */ +#define TTH_HALACT if(tth_debug&32)\ + fprintf(stderr,"+%s[%d%d]",yytext,jshal,jstal);\ + if(jshal>1){jshal--;}else{\ + if(jshal==0){sprintf(scratchstring,TTH_TDVAR,TTH_HALCODE(yytext));\ + TTH_OUTPUT(tdalign);*tdalign=0;\ + TTH_OUTPUT(scratchstring);\ + if(eqdepth){TTH_OUTPUT(TTH_EQ5);}\ + }\ + yy_switch_to_buffer(include_stack[--tth_stack_ptr] );\ + yy_pop_state();jshal=0;\ + if(tth_debug&32){fprintf(stderr,"%s",precell);}\ + TTH_SCAN_STRING(precell);*precell=0;} +#define TTH_HALSWITCH {TTH_PUSH_BUFF(0);yy_switch_to_buffer(halbuff);yy_push_state(talign);} + +#define TTH_TEXCLOSE if(*tth_texclose[tth_push_depth-1]){\ + if(tth_debug&8)fprintf(stderr,\ + "Active TEXCLOSE: %s at push_depth %d, eqclose=%d\n", \ + tth_texclose[tth_push_depth-1],tth_push_depth,eqclose); \ + yyless(0);TTH_SCAN_STRING(tth_texclose[tth_push_depth-1]);\ + *tth_texclose[tth_push_depth-1]=0;} + +#define TTH_INC_LINE if(!(tth_stack_ptr||ftntwrap)){\ + if(tth_debug&32)fprintf(stderr," Line increment: numlines=%d yytext=%s",\ + tth_num_lines,yytext);tth_num_lines++;}; +#define TTH_INC_MULTI chs3=yytext;while((chs3=(strstr(chs3,"\n"))?(strstr(chs3,"\n")):(strstr(chs3,"\r")))){chs3++;TTH_INC_LINE}; +#define TTH_EXTRACT_COMMENT \ + if((chscratch=strstr(yytext,"%%tth:"))||(chscratch=strstr(yytext,"%%ttm:"))){\ + TTH_CCPY(scratchstring,chscratch+6);\ + chs2=yytext;\ + while((chs2=strstr(chs2,"\n"))!=NULL&&chs2<=chscratch){\ + TTH_INC_LINE;chs2++;\ + }\ + TTH_SCAN_STRING(scratchstring);\ + }else + + +#define TTH_TINY (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"tiny\">" : "<div class=\"tiny\">") +#define TTH_SCRIPTSIZE (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"scriptsize\">": "<div class=\"scriptsize\">") +#define TTH_FOOTNOTESIZE (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"footnotesize\">": "<div class=\"footnotesize\">") +#define TTH_SMALL (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"small\">": "<div class=\"small\">") +#define TTH_NORMALSIZE (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"normalsize\">": "<div class=\"normalsize\">") +#define TTH_large (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"large\">": "<div class=\"large\">") +#define TTH_Large (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"larger\">": "<div class=\"larger\">") +#define TTH_LARGE (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"largerstill\">": "<div class=\"largerstill\">") +#define TTH_HUGE (((horizmode!=0) || (tth_htmlstyle&4)) ? "<span class=\"huge\">": "<div class=\"huge\">") +#define TTH_SIZEEND (((horizmode!=0) || (tth_htmlstyle&4)) ? "</span>" :"</div>") + +#define TTH_SIZEGEN1 "<span style=\"font-size:" +#define TTH_SIZEGEN2 "%\">" +#define TTH_COLOR "\\special{html:<span style=\"color:#%s\">}" +#define TTH_COLOREND "</span>" + /*start executable statements*/ + +tth_flev=tth_flev0; + + + /******************************* RULES *****************************/ + +#line 15710 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 11276 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 45164 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 1148 "tth.lex" +nbuiltins=nkeys;tth_debug=tth_LaTeX-1;fprintf(tth_fdout,"\n"); + YY_BREAK +case 2: +YY_RULE_SETUP +#line 1149 "tth.lex" +nbuiltins=nkeys; bibliogs=0; + YY_BREAK +/* Strip out formating commands. */ +case 3: +YY_RULE_SETUP +#line 1152 "tth.lex" + + YY_BREAK +case 4: +YY_RULE_SETUP +#line 1153 "tth.lex" + + YY_BREAK +case 5: +YY_RULE_SETUP +#line 1154 "tth.lex" + + YY_BREAK +case 6: +YY_RULE_SETUP +#line 1155 "tth.lex" + + YY_BREAK +case 7: +YY_RULE_SETUP +#line 1156 "tth.lex" + + YY_BREAK +case 8: +YY_RULE_SETUP +#line 1157 "tth.lex" + + YY_BREAK +case 9: +YY_RULE_SETUP +#line 1158 "tth.lex" + + YY_BREAK +case 10: +YY_RULE_SETUP +#line 1159 "tth.lex" + + YY_BREAK +case 11: +YY_RULE_SETUP +#line 1160 "tth.lex" + + YY_BREAK +case 12: +YY_RULE_SETUP +#line 1161 "tth.lex" + + YY_BREAK +case 13: +YY_RULE_SETUP +#line 1162 "tth.lex" + + YY_BREAK +case 14: +YY_RULE_SETUP +#line 1163 "tth.lex" + + YY_BREAK +case 15: +YY_RULE_SETUP +#line 1164 "tth.lex" + + YY_BREAK +case 16: +#line 1166 "tth.lex" +case 17: +YY_RULE_SETUP +#line 1166 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +/* external macro expansion in notags.*/ +case 18: +YY_RULE_SETUP +#line 1168 "tth.lex" +{ + if(tth_titlestate&1){ + TTH_DO_MACRO else{TTH_OUTPUT(yytext);} + }else{ + TTH_OUTPUT(yytext); + } +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 1175 "tth.lex" +TTH_OUTPUT(yytext+1); + YY_BREAK +case 20: +YY_RULE_SETUP +#line 1176 "tth.lex" +{ + if(tth_titlestate&2){ + tth_tagpurge=1; + TTH_SCAN_STRING("\\tth_notageq"); + } +} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 1183 "tth.lex" +{ + if(tth_titlestate){ + yy_push_state(notags); + }else{ + yy_push_state(verbatim); + } + TTH_PUSH_CLOSING; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 1191 "tth.lex" +{ /* Defined as a latex command with optional arg */ + verbinput=1; + TTH_TEX_FN_OPT("\\tth_verbinput #2 \\tth_endverbinput#tthdrop2",2,""); +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 1195 "tth.lex" +{ + fprintf(tth_fdout,"\n<pre>"); yy_push_state(verbatim); /*begin verbatim*/ + TTH_PUSH_CLOSING; TTH_CCPY(closing,"</pre>"); + yy_push_state(inputfile); + yy_push_state(removespace); +} + YY_BREAK +case 24: +#line 1203 "tth.lex" +case 25: +YY_RULE_SETUP +#line 1203 "tth.lex" +TTH_TEX_FN("\\tthexpandafter#tthdrop1",1); + YY_BREAK +case 26: +YY_RULE_SETUP +#line 1204 "tth.lex" +{ + if(horizmode) horizmode=1; + js2=indexkey("#1",margkeys,&margmax); + yy_pop_state(); + strcpy(exptex,margs[js2]); + rmdef(margkeys,margs,&margmax); + if(tth_debug&8)fprintf(stderr,"Expanding after %s\n",exptex); + *expchar=0; + yy_push_state(tokexp); /* expandafter not using embracing */ + } + YY_BREAK +case 27: +#line 1215 "tth.lex" +case 28: +YY_RULE_SETUP +#line 1215 "tth.lex" +yy_push_state(csname);strcpy(scratchstring," "); + YY_BREAK +case 29: +YY_RULE_SETUP +#line 1216 "tth.lex" +strcat(scratchstring,yytext); + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 1217 "tth.lex" +{ + fprintf(stderr,"**** Error: line end in csname. Syntax error? Line %d\n",tth_num_lines); + TTH_SCAN_STRING("\\endcsname"); +} + YY_BREAK +case 31: +YY_RULE_SETUP +#line 1221 "tth.lex" +{ + yy_pop_state(); + chscratch=scratchstring+strspn(scratchstring," \t")-1; + *chscratch='\\'; + if(tth_debug&8)fprintf(stderr,"Rescanning \\csname:%s\n",chscratch); + TTH_SCAN_STRING(chscratch); +} + YY_BREAK +/**** ********** Non-standard functions. ******************/ +/* Put any personal rules here unless there is some special reason. */ +case 32: +YY_RULE_SETUP +#line 1231 "tth.lex" +{ + TTH_OUTPUT(TTH_Large);TTH_PRECLOSE(TTH_SIZEEND); + TTH_OUTPUT(TTH_BOLD1);TTH_PRECLOSE(TTH_BOLD2); +} + YY_BREAK +case 33: +/* rule 33 can match eol */ +YY_RULE_SETUP +#line 1235 "tth.lex" +{ + TTH_INC_MULTI; + TTH_SCAN_STRING("\\epsfbox"); +} + YY_BREAK +case 34: +#line 1240 "tth.lex" +case 35: +#line 1241 "tth.lex" +/* \\epsfbox TTH_TEX_FN("\\tthpsfile#tthdrop1",1); + This code needs to be changed to behave like \leavevmode\hbox + in that it stacks boxes horizontally. + A problem is that to prevent h/vbox from breaking lines unnecessarily in HTML + we start a new table only if we are NOT in horizmode. This is the opposite + of TeX's behaviour. However, a \vbox ought to do it.*/ +case 36: +YY_RULE_SETUP +#line 1247 "tth.lex" +{ + { + if(tth_debug&32)fprintf(stderr,"Calling tthpsfile %s\n",yytext); + TTH_TEX_FN("\\tthpsfile#tthdrop1",1); + } +} + YY_BREAK +case 37: +YY_RULE_SETUP +#line 1253 "tth.lex" +TTH_TEX_FN("\\tthpsfile#tthdrop1",1); + YY_BREAK +case 38: +YY_RULE_SETUP +#line 1254 "tth.lex" +{ + /*if(horizmode)*/ horizmode=1; + js2=indexkey("#1",margkeys,&margmax); + TTH_CCPY(scratchstring,margs[js2]); + yy_pop_state(); + rmdef(margkeys,margs,&margmax); + if(tth_debug&32)fprintf(stderr,"Figure inclusion %s\n",scratchstring); + if((chscratch=strstr(scratchstring,"file=")) != NULL){ + chscratch=chscratch+5; + }else if((chscratch=strstr(scratchstring,"figure=")) != NULL){ + chscratch=chscratch+7; + }else{ + chscratch=scratchstring; + } + chscratch=chscratch+strspn(chscratch,"{ "); + *(chscratch+strcspn(chscratch,"},"))=0; /* Terminate at } or ,*/ + tth_epsf(chscratch,tth_epsftype); + } + YY_BREAK +/* Starting State for Constructing head/body and title.*/ +case 39: +YY_RULE_SETUP +#line 1276 "tth.lex" +{ + fprintf(stderr,"Initial HTML output assumed to be the title.\n"); + if(tth_htmlstyle&3)strcat(tth_texclose[tth_push_depth], + "</head>\n<body><div>\n"); + yy_pop_state(); + yyless(0); + } + YY_BREAK +case 40: +/* rule 40 can match eol */ +YY_RULE_SETUP +#line 1283 "tth.lex" +{ + fprintf(stderr,"Initial HTML output including title.\n"); + if(tth_htmlstyle&3)strcat(tth_texclose[tth_push_depth], + "</head>\n<body><div>\n"); + yy_pop_state(); + yyless(0); +} + YY_BREAK +case 41: +YY_RULE_SETUP +#line 1290 "tth.lex" +{ + fprintf(stderr,"Initial HTML output apparently NOT the title terminates head.\n"); + if(tth_htmlstyle&3) {TTH_OUTPUT("</head>\n<body><div>\n")}; + yy_pop_state(); + yyless(0); +} + YY_BREAK +case 42: +YY_RULE_SETUP +#line 1297 "tth.lex" +TTH_TEX_FN_OPT("{\\headline{#2} \\centerheader{1}{{#2}}{align=\"center\"}}#tthdrop2",2,""); + YY_BREAK +case 43: +YY_RULE_SETUP +#line 1299 "tth.lex" +{ + if(!tth_htmlstyle&1){ + TTH_TEX_FN_OPT("{\\headline{#2} \\centerheader{1}{{#2}}{align=\"center\"}}#tthdrop2",2,""); + }else{ + TTH_TEX_FN_OPT("{\\centerheader{1}{{#2}}{align=\"center\"}}#tthdrop2",2,""); + } +} + YY_BREAK +case 44: +YY_RULE_SETUP +#line 1307 "tth.lex" +{ + yy_pop_state(); + if(tth_htmlstyle&3){ + TTH_TEX_FN("{\\special{html:\n<title>} \\begin{notags}#1\\end{verbatim} \\special{html:\n\n

    \n}}#tthdrop1",1); + }else{ + TTH_TEX_FN("{\\special{html:\n} \\begin{notags}#1\\end{verbatim}\\special{html:\n}}#tthdrop1",1); + } +} + YY_BREAK +case 45: +YY_RULE_SETUP +#line 1316 "tth.lex" +if(!tth_htmlstyle&1){ + TTH_TEX_FN("{\\special{html:\n}\\begin{notags}#1\\end{verbatim}\\special{html:\n}}#tthdrop1",1); +}else{ + TTH_TEX_FN("#tthdrop1",1); +} + YY_BREAK +case 46: +YY_RULE_SETUP +#line 1322 "tth.lex" + + YY_BREAK +case 47: +/* rule 47 can match eol */ +YY_RULE_SETUP +#line 1323 "tth.lex" +TTH_INC_LINE; /* Don't put spurious \par s at top.*/ + YY_BREAK +/* Trap some common causes of improper output in titlecheck state. */ +case 48: +#line 1326 "tth.lex" +case 49: +YY_RULE_SETUP +#line 1326 "tth.lex" +{TTH_SCAN_STRING("\\title");} + YY_BREAK +case 50: +#line 1329 "tth.lex" +case 51: +#line 1330 "tth.lex" +case 52: +#line 1331 "tth.lex" +case 53: +#line 1332 "tth.lex" +case 54: +#line 1333 "tth.lex" +case 55: +#line 1334 "tth.lex" +case 56: +#line 1335 "tth.lex" +case 57: +YY_RULE_SETUP +#line 1335 "tth.lex" +{ + sprintf(newcstr,"\\headline{#1}%s{#1}#tthdrop1",yytext); + TTH_TEX_FN(newcstr,1);} + YY_BREAK +case 58: +/* rule 58 can match eol */ +#line 1340 "tth.lex" +case 59: +/* rule 59 can match eol */ +#line 1341 "tth.lex" +case 60: +/* rule 60 can match eol */ +#line 1342 "tth.lex" +case 61: +/* rule 61 can match eol */ +#line 1343 "tth.lex" +case 62: +/* rule 62 can match eol */ +#line 1344 "tth.lex" +case 63: +/* rule 63 can match eol */ +#line 1345 "tth.lex" +case 64: +/* rule 64 can match eol */ +#line 1346 "tth.lex" +case 65: +/* rule 65 can match eol */ +#line 1347 "tth.lex" +case 66: +/* rule 66 can match eol */ +#line 1348 "tth.lex" +case 67: +/* rule 67 can match eol */ +YY_RULE_SETUP +#line 1348 "tth.lex" +{ + fprintf(stderr, + "**** File starts with \"%s\". It can\'t be the HTML title.\n", + yytext); + fprintf(tth_fdout,"\nNo Title\n"); + if(tth_htmlstyle&3)fprintf(tth_fdout,"\n
    \n"); + yy_pop_state(); + yyless(0); + TTH_SCAN_STRING("\\par"); +} + YY_BREAK +/* Things that can't go in the HTML head in strict mode.*/ +case 68: +#line 1360 "tth.lex" +case 69: +#line 1361 "tth.lex" +case 70: +#line 1362 "tth.lex" +case 71: +#line 1363 "tth.lex" +case 72: +#line 1364 "tth.lex" +case 73: +#line 1365 "tth.lex" +case 74: +#line 1366 "tth.lex" +case 75: +#line 1367 "tth.lex" +case 76: +YY_RULE_SETUP +#line 1367 "tth.lex" +{ + fprintf(stderr, + "**** File starts with \"%s\". It can\'t be in strict HTML heads.\n", + yytext); + fprintf(tth_fdout,"\nNo Title\n"); + if(tth_htmlstyle&3)fprintf(tth_fdout,"\n
    \n"); + yy_pop_state(); + yyless(0); + TTH_SCAN_STRING("\\par"); +} + YY_BREAK +/* Make the title the first one to five plain words. */ +case 77: +YY_RULE_SETUP +#line 1378 "tth.lex" +{ + fprintf(stderr,"HTML Title constructed as:%s\n",yytext); + fprintf(tth_fdout,"\n%s\n",yytext); + if(tth_htmlstyle&3)fprintf(tth_fdout,"\n
    \n"); + yy_pop_state(); + yyless(0); + TTH_SCAN_STRING("\\par"); +} + YY_BREAK +case 78: +YY_RULE_SETUP +#line 1386 "tth.lex" +{ + fprintf(stderr,"Pagecolor in titlecheck.\n"); + if(tth_htmlstyle&3)fprintf(tth_fdout,"No title\n"); + yy_pop_state();/* titlecheck terminated */ + TTH_TEX_FN_OPT("{\\edef\\tthexpcol{\\tthpageColor{#2}}\\tthexpcol}#tthdrop2",2,""); +} + YY_BREAK +case 79: +YY_RULE_SETUP +#line 1393 "tth.lex" +{ /*tth_num_lines--;*/ + TTH_TEX_FN("{\\special{html:\n}#2\\special{html:}}#tthdrop2",2); } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 1395 "tth.lex" +TTH_TEX_FN("{\\special{html:\n}#2 \\special{html:}}#tthdrop3",3);/* tth_num_lines--;*/ + YY_BREAK +case 81: +#line 1398 "tth.lex" +case 82: +YY_RULE_SETUP +#line 1398 "tth.lex" +{ + TTH_PUSH_CLOSING;yy_push_state(rawgroup); + } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 1402 "tth.lex" +TTH_SCAN_STRING("\\expandafter\\tthhref\\tthescape"); + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1403 "tth.lex" +{ + TTH_TEX_FN("{\\special{html:}#2\\special{html:}}#tthdrop2",2); +} + YY_BREAK +/* Get the following brace group and escape special chars, rescan */ +case 85: +#line 1408 "tth.lex" +case 86: +YY_RULE_SETUP +#line 1408 "tth.lex" +{ + *dupstore=0; + *argchar=0; + storetype=5; /* Rescan one copy argchar postfixed. */ + yy_push_state(escgroup); + bracecount=-1; + yy_push_state(embracetok); /* Make sure we have a braced argument */ +} + YY_BREAK +case 87: +#line 1417 "tth.lex" +case 88: +YY_RULE_SETUP +#line 1417 "tth.lex" +{ + *dupstore=0; + *argchar=0; + yy_push_state(urlgroup); + storetype=99; /* Just leave in dupgroup to be dealt with by prior state*/ + yy_push_state(uncommentgroup); + bracecount=-1; + yy_push_state(embracetok); /* Make sure we have a braced argument */ +} + YY_BREAK +case 89: +/* rule 89 can match eol */ +YY_RULE_SETUP +#line 1427 "tth.lex" +{ + yyless(0); + yy_pop_state(); + /*remove the closing brace*/ + *(dupstore+strlen(dupstore)-1)=0; + if(strcspn(dupstore,"\\&")!=0){ + /* Even the href can't contain an ampersand literally so we need to + translate it.*/ + strcpy(dupstore2,dupstore); + *dupstore=0; + i=0; + while(*(dupstore2+i)!=0){ + if(*(dupstore2+i)=='&'){ + if(*(dupstore+strlen(dupstore)-1)=='\\') + *(dupstore+strlen(dupstore)-1)=0;/*Remove prior */ + strncat(dupstore,"&",5); + }else{ + strncat(dupstore,(dupstore2+i),1); + } + i++; + } + } + sprintf(dupstore2, + "\\special{html:}\\verb%c%s%c\\special{html:}" + ,dupstore+1,6,dupstore+1,6); + TTH_SCAN_STRING(dupstore2); + *dupstore=0; + *dupstore2=0; + } + YY_BREAK +/* Colordvi commands, won't work in equations. Convert to \color */ +case 90: +#line 1459 "tth.lex" +case 91: +#line 1460 "tth.lex" +case 92: +#line 1461 "tth.lex" +case 93: +#line 1462 "tth.lex" +case 94: +#line 1463 "tth.lex" +case 95: +#line 1464 "tth.lex" +case 96: +#line 1465 "tth.lex" +case 97: +YY_RULE_SETUP +#line 1465 "tth.lex" +{ + strcpy(scratchstring,yytext+1); + /**scratchstring=tolower(*scratchstring);*/ + sprintf(scrstring,"\\color{%s}",scratchstring); + TTH_SWAP(scrstring); +} + YY_BREAK +case 98: +/* rule 98 can match eol */ +YY_RULE_SETUP +#line 1471 "tth.lex" +TTH_INC_MULTI;fprintf(tth_fdout,","); + YY_BREAK +/************************ Comment removal ******************/ +/* Many needed so that e.g. inside a comment does not break stuff */ +case 99: +/* rule 99 can match eol */ +#line 1476 "tth.lex" +case 100: +/* rule 100 can match eol */ +#line 1477 "tth.lex" +case 101: +/* rule 101 can match eol */ +YY_RULE_SETUP +#line 1477 "tth.lex" +{ + TTH_INC_LINE; + if(strstr(yytext,"%%tth:")==yytext){TTH_SCAN_STRING(yytext+6);} + else if(strstr(yytext,"%%ttm:")==yytext){TTH_SCAN_STRING(yytext+6);} + else{ + if(tth_debug&64) fprintf(stderr,"Comment:%s",yytext); + } + } + YY_BREAK +case 102: +/* rule 102 can match eol */ +YY_RULE_SETUP +#line 1486 "tth.lex" +{ + TTH_INC_LINE; + if(strstr(yytext,"%%tth:")==yytext){TTH_SCAN_STRING(yytext+6);} + else if(strstr(yytext,"%%ttm:")==yytext){TTH_SCAN_STRING(yytext+6);} + else{ + if(tth_debug&64) fprintf(stderr,"Comment:%s",yytext); + if(horizmode) horizmode=-1; + yy_push_state(parcheck); + } + } + YY_BREAK +/* escgroup explicitly ignores comment removal and other special chars.*/ +case 103: +YY_RULE_SETUP +#line 1498 "tth.lex" +strcat(dupstore,"\\");strcat(dupstore,yytext); + YY_BREAK +/* Don't escape things already escaped*/ +case 104: +YY_RULE_SETUP +#line 1500 "tth.lex" +strcat(dupstore,yytext); + YY_BREAK +/*********************************************************************/ +/* Date information needs to be before conditionals. */ +case 105: +YY_RULE_SETUP +#line 1503 "tth.lex" +{ + time(&thetime); + strcpy(scratchstring,ctime(&thetime)); + strcpy(scratchstring+10,", "); + TTH_OUTPUT(scratchstring+4); + TTH_OUTPUTH(scratchstring+20); + } + YY_BREAK +/* Act as if these are counters */ +case 106: +YY_RULE_SETUP +#line 1512 "tth.lex" +{ + yyless(0); + TTH_SCAN_STRING("\\number"); +} + YY_BREAK +case 107: +YY_RULE_SETUP +#line 1517 "tth.lex" +{ + time(&thetime); + timestruct=*localtime(&thetime); + timestruct.tm_year= timestruct.tm_year+1900; + sprintf(scrstring,"%d",timestruct.tm_year); + /* Remove space afterwards*/ + TTH_PUSH_BUFF(1);yy_scan_string(scrstring); + yy_pop_state(); +} + YY_BREAK +case 108: +YY_RULE_SETUP +#line 1526 "tth.lex" +{ + time(&thetime); + timestruct=*localtime(&thetime); + sprintf(scrstring,"%d",timestruct.tm_mon+1); + TTH_PUSH_BUFF(1);yy_scan_string(scrstring); + yy_pop_state(); +} + YY_BREAK +case 109: +YY_RULE_SETUP +#line 1533 "tth.lex" +{ + time(&thetime); + timestruct=*localtime(&thetime); + sprintf(scrstring,"%d",timestruct.tm_mday); + TTH_PUSH_BUFF(1);yy_scan_string(scrstring); + yy_pop_state(); +} + YY_BREAK +/***********************************************************************/ +/* Conditionals*/ +case 110: +YY_RULE_SETUP +#line 1543 "tth.lex" +{ + strcpy(scratchstring,strstr(yytext,"\\if")+3); + sprintf(scrstring,"\\def\\if%s{\\iffalse}\\def\\%sfalse{\\%dfalse}\\def\\%strue{\\%dtrue}",scratchstring,scratchstring,nkeys,scratchstring,nkeys); + TTH_SCAN_STRING(scrstring); +} + YY_BREAK +case 111: +YY_RULE_SETUP +#line 1548 "tth.lex" +{ + sscanf(yytext+1,"%d",&js2); + strncpy(defs[js2]+3,"false",5); +} + YY_BREAK +case 112: +YY_RULE_SETUP +#line 1552 "tth.lex" +{ + sscanf(yytext+1,"%d",&js2); + strncpy(defs[js2]+3,"true ",5); +} + YY_BREAK +case 113: +#line 1558 "tth.lex" +case 114: +#line 1559 "tth.lex" +case 115: +#line 1560 "tth.lex" +case 116: +YY_RULE_SETUP +#line 1560 "tth.lex" +if(tth_debug&1024)fprintf(stderr,"Starting %s.\n",yytext); + YY_BREAK +case 117: +YY_RULE_SETUP +#line 1562 "tth.lex" + + YY_BREAK +case 118: +#line 1564 "tth.lex" +case 119: +YY_RULE_SETUP +#line 1564 "tth.lex" +{ + yy_push_state(innerfalse); + if(tth_debug&1024)fprintf(stderr,"Starting inner \\if in falsetext.\n"); +} + YY_BREAK +case 120: +#line 1569 "tth.lex" +case 121: +YY_RULE_SETUP +#line 1569 "tth.lex" + + YY_BREAK +case 122: +YY_RULE_SETUP +#line 1570 "tth.lex" +{ + yy_push_state(falsetext); + if(tth_debug&1024)fprintf(stderr,"Starting \\iffalse.\n"); +} + YY_BREAK +case 123: +YY_RULE_SETUP +#line 1574 "tth.lex" +if(horizmode) yy_push_state(falsetext); + YY_BREAK +case 124: +YY_RULE_SETUP +#line 1575 "tth.lex" +if(!horizmode) yy_push_state(falsetext); + YY_BREAK +case 125: +#line 1578 "tth.lex" +case 126: +YY_RULE_SETUP +#line 1578 "tth.lex" +{ + if(tth_debug&1024)fprintf(stderr,"Ending true clause \\if\\fi.\n"); + if(horizmode)horizmode=1; +} + YY_BREAK +case 127: +#line 1583 "tth.lex" +case 128: +YY_RULE_SETUP +#line 1583 "tth.lex" +{ + if(tth_debug&1024)fprintf(stderr,"Ending true clause \\if\\else\n"); + yy_push_state(falsetext); + if(horizmode)horizmode=1; +} + YY_BREAK +case 129: +YY_RULE_SETUP +#line 1588 "tth.lex" +{ + yy_pop_state(); + if(tth_debug&1024)fprintf(stderr,"Ending false clause \\if\\else.\n"); + if(horizmode)horizmode=1; + yy_push_state(removespace); +} + YY_BREAK +case 130: +YY_RULE_SETUP +#line 1594 "tth.lex" +/* Don't misinterpret other commands. */ + YY_BREAK +case 131: +YY_RULE_SETUP +#line 1595 "tth.lex" +{ + yy_pop_state(); + if(tth_debug&1024)fprintf(stderr,"Ending false clause \\if\\fi.\n"); + if(horizmode)horizmode=1; +} + YY_BREAK +case 132: +YY_RULE_SETUP +#line 1600 "tth.lex" + + YY_BREAK +case 133: +YY_RULE_SETUP +#line 1602 "tth.lex" +yy_push_state(innerfalse); + YY_BREAK +case 134: +YY_RULE_SETUP +#line 1603 "tth.lex" +yy_pop_state(); if(tth_debug&1024)fprintf(stderr,"\\or "); + YY_BREAK +case 135: +YY_RULE_SETUP +#line 1604 "tth.lex" +yy_push_state(innerfalse); /* Ignore nested ifs */ + YY_BREAK +case 136: +YY_RULE_SETUP +#line 1605 "tth.lex" +{ + yy_pop_state(); if(tth_debug&1024)fprintf(stderr,"#tthorbreak\n"); + TTH_SCAN_STRING(yytext); + } + YY_BREAK +case 137: +#line 1610 "tth.lex" +case 138: +YY_RULE_SETUP +#line 1610 "tth.lex" +{ + if(tth_debug&1024)fprintf(stderr,"%s ortext\n",yytext); + TTH_SCAN_STRING("#tthorbreak");} + YY_BREAK +case 139: +YY_RULE_SETUP +#line 1613 "tth.lex" +/*fprintf(stderr,"ortext ");*/ + YY_BREAK +case 140: +YY_RULE_SETUP +#line 1615 "tth.lex" +{ + yy_pop_state(); if(tth_debug&1024)fprintf(stderr,"#orbreak end\n");} + YY_BREAK +case 141: +YY_RULE_SETUP +#line 1617 "tth.lex" +{ + yyless(0); + yy_pop_state(); if(tth_debug&1024)fprintf(stderr,"Orbreak exit\n");} + YY_BREAK +case 142: +#line 1622 "tth.lex" +case 143: +#line 1623 "tth.lex" +case 144: +#line 1624 "tth.lex" +case 145: +#line 1625 "tth.lex" +case 146: +#line 1626 "tth.lex" +case 147: +YY_RULE_SETUP +#line 1626 "tth.lex" +{ + yy_push_state(getifnum);strcpy(strif,yytext);yy_push_state(removespace);} + YY_BREAK +case 148: +#line 1629 "tth.lex" +case 149: +YY_RULE_SETUP +#line 1629 "tth.lex" +yy_push_state(number);jscratch=0; + YY_BREAK +case 150: +YY_RULE_SETUP +#line 1630 "tth.lex" +TTH_CCAT(strif,yytext); + YY_BREAK +case 151: +YY_RULE_SETUP +#line 1631 "tth.lex" +{ + TTH_DO_MACRO + else if( (ind=indexkey(yytext,countkeys,&ncounters)) != -1) { + if(tth_debug&1024)fprintf(stderr,"If Counter %d, %s\n",ind,countkeys[ind]); + sprintf(scratchstring,"%d ",counters[ind]); + TTH_PUSH_BUFF(1);yy_scan_string(scratchstring); /* remove spaces */ + } else { + yyless(0); + TTH_SCAN_STRING("#"); /*Termination Sign*/ + } + } + YY_BREAK +case 152: +YY_RULE_SETUP +#line 1642 "tth.lex" +TTH_CCAT(strif,yytext);yy_push_state(removespace); + YY_BREAK +case 153: +/* rule 153 can match eol */ +YY_RULE_SETUP +#line 1643 "tth.lex" +/*Oct 2001.*/ + YY_BREAK +case 154: +YY_RULE_SETUP +#line 1644 "tth.lex" +{ + yy_pop_state(); + if(*yytext != '#') {yyless(0);} + if(tth_debug&1024)fprintf(stderr,"strif text:%s\n",strif); + chs2=strif+strcspn(strif,"0123456789"); + if(strstr(strif,"\\ifnum")){ + chscratch=chs2+strcspn(chs2,"<>="); + sscanf(chs2,"%d",&jscratch); + sscanf(chscratch+1,"%d",&js2); + switch(*chscratch){ + case '<': if(!(jscratch': if(!(jscratch>js2)) yy_push_state(falsetext);break; + } + }else if(strstr(strif,"\\ifodd")){ + sscanf(chs2,"%d",&jscratch); + if(!(jscratch & 1)) yy_push_state(falsetext);break; /* even */ + }else if(strstr(strif,"\\ifcase")){ + sscanf(chs2,"%d",&jscratch); + yy_push_state(orbreak); + for(js2=1;js2<=jscratch;js2++) yy_push_state(ortext); + } +} + YY_BREAK +case 155: +#line 1669 "tth.lex" +case 156: +YY_RULE_SETUP +#line 1669 "tth.lex" +yy_push_state(getiftok);*strif=0; yy_push_state(removespace); + YY_BREAK +case 157: +YY_RULE_SETUP +#line 1670 "tth.lex" +{ + TTH_DO_MACRO + else{ + if(tth_debug&1024) fprintf(stderr, + "**** Unknown or unexpandable command %s as \\if test token. Line %d\n",yytext,tth_num_lines); + if(strlen(strif) > 1){ + yy_pop_state(); + if(!(strlen(strif)==strlen(yytext) && strstr(strif,yytext))) + yy_push_state(falsetext); + }else strcat(strif,yytext); + } +} + YY_BREAK +case 158: +/* rule 158 can match eol */ +YY_RULE_SETUP +#line 1682 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) TTH_INC_LINE; + if(strlen(strif)){ + yy_pop_state(); + if(!(strlen(strif)==strlen(yytext) && strstr(strif,yytext))) + yy_push_state(falsetext); + }else strcat(strif,yytext); +} + YY_BREAK +case 159: +#line 1692 "tth.lex" +case 160: +YY_RULE_SETUP +#line 1692 "tth.lex" +yy_push_state(getifx);*strif=0; yy_push_state(removespace); + YY_BREAK +case 161: +/* rule 161 can match eol */ +#line 1694 "tth.lex" +case 162: +/* rule 162 can match eol */ +YY_RULE_SETUP +#line 1694 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) TTH_INC_LINE; + if(tth_debug&1024) fprintf(stderr,"\\ifx comparison argument:%s\n",yytext); + if(strlen(strif)){ /* Terminate */ + yy_pop_state(); + js2=0; + if(strlen(strif)>1) { + if(strlen(yytext)>1){ /* Both apparently command strings */ + if(strlen(strif)==strlen(yytext) && strstr(strif,yytext))js2=1; + if(((ind=indexkey(yytext,keys,&nkeys))!=-1) == + ((i=indexkey(strif,keys,&nkeys))!=-1)){ + if((tth_debug&1024)&&(i>=0)) + fprintf(stderr,"Comparing:%d:%d:%s:%s:\n",i,ind,defs[i],defs[ind]); + if(i==ind)js2=1; else if(strstr(defs[i],defs[ind])==defs[i]) js2=1; + }else if((ind=indexkey(yytext,countkeys,&ncounters))!=-1)/*counters*/ + if(ind == indexkey(strif,countkeys,&ncounters))js2=1; + } + }else if(strlen(yytext)==1){ /* Both single characters */ + if(*strif==*yytext) js2=1; + } + if(!js2){ + if(tth_debug&1024) fprintf(stderr,"ifx FALSE\n"); + yy_push_state(falsetext); + }else if(tth_debug&1024) fprintf(stderr,"ifx TRUE\n"); + } + if(strlen(yytext) > 1)yy_push_state(removespace); + strcpy(strif,yytext); +} + YY_BREAK +/********************************************************************/ +/* Equation Code */ +/*equationhl*/ +case 163: +YY_RULE_SETUP +#line 1725 "tth.lex" +{ + if(!eqalignrow) mkkey(eqstr,eqstrs,&eqdepth); /* Start new row */ + if(tth_istyle&1)eqalignrow=eqalignrow+6*(levhgt[eqclose]-1)+TTH_HGT;else + eqalignrow=eqalignrow+levhgt[eqclose]; + levhgt[eqclose]=1; /* new */ + TTH_TEX_FN("{#1}\\tth_lefteq#tthdrop1",1); +} + YY_BREAK +case 164: +YY_RULE_SETUP +#line 1733 "tth.lex" +{ + TTH_TEX_FN("{\\buildrel{#1}\\over{#2}}#tthdrop2",2); +} + YY_BREAK +case 165: +/* rule 165 can match eol */ +YY_RULE_SETUP +#line 1737 "tth.lex" +TTH_CHECK_LENGTH; TTH_INC_LINE; + YY_BREAK +case 166: +/* rule 166 can match eol */ +YY_RULE_SETUP +#line 1739 "tth.lex" +{ + TTH_INC_MULTI; + if(*halstring){ /* halign and tabular */ + TTH_SCAN_STRING("\\tth_halcr}"); + }else{ + unput('}'); + } +} /* see also at \begin{array} = \matrix */ + YY_BREAK +/* Version that uses tabular code: */ +case 167: +YY_RULE_SETUP +#line 1749 "tth.lex" +TTH_SCAN_STRING("\\end{tabular}"); + YY_BREAK +case 168: +YY_RULE_SETUP +#line 1751 "tth.lex" +{ + if(tth_debug&2)fprintf(stderr,"end eqnarray, eqdepth=%d, eqclose=%d, tth_multinum=%d, eqalignlog=%d.\n",eqdepth,eqclose,tth_multinum,eqalignlog); + TTH_SCAN_STRING("}}\\tth_endeqnarray"); +} + YY_BREAK +case 169: +YY_RULE_SETUP +#line 1755 "tth.lex" +if(eqalignlog <= 100) eqalignlog=eqalignlog+100; + YY_BREAK +/* Font faces and styles etc.*/ +case 170: +YY_RULE_SETUP +#line 1757 "tth.lex" +TTH_SWAP("\\rm "); + YY_BREAK +case 171: +#line 1759 "tth.lex" +case 172: +YY_RULE_SETUP +#line 1759 "tth.lex" +TTH_SWAP("\\bf "); + YY_BREAK +case 173: +YY_RULE_SETUP +#line 1760 "tth.lex" +TTH_SWAP("\\it "); + YY_BREAK +case 174: +YY_RULE_SETUP +#line 1761 "tth.lex" +TTH_SWAP("\\it "); + YY_BREAK +case 175: +YY_RULE_SETUP +#line 1762 "tth.lex" +TTH_SWAP("\\tt "); + YY_BREAK +case 176: +YY_RULE_SETUP +#line 1763 "tth.lex" +TTH_SWAP("\\sffamily "); + YY_BREAK +case 177: +YY_RULE_SETUP +#line 1764 "tth.lex" + + YY_BREAK +case 178: +/* rule 178 can match eol */ +YY_RULE_SETUP +#line 1765 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +case 179: +YY_RULE_SETUP +#line 1766 "tth.lex" +TTH_MATHI(219); + YY_BREAK +case 180: +YY_RULE_SETUP +#line 1769 "tth.lex" +{ + /* halign */ + /*if(*halstring) {TTH_SCAN_STRING("}\\tth_mhamper{");*/ + if(*halstring) {TTH_SCAN_STRING("\\tth_mhamper"); + }else{ yy_push_state(mamper); + } + } + YY_BREAK +case 181: +YY_RULE_SETUP +#line 1776 "tth.lex" +yy_push_state(hamper); + YY_BREAK +/* hamper for halign */ +case 182: +/* rule 182 can match eol */ +YY_RULE_SETUP +#line 1779 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +case 183: +/* rule 183 can match eol */ +YY_RULE_SETUP +#line 1780 "tth.lex" +{ + yyless(0);yy_pop_state(); + tth_enclose(TTH_EQA1,eqstr,TTH_EQA2,eqstore); + if(eqaligncell && !tth_LaTeX && eqalignlog){ + /* This ends the second cell of eqaligno. */ + strcat(eqstr,TTH_CELL_R); + } else strcat(eqstr,TTH_EQA3); + if(eqaligncell) { + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + } + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + eqaligncell++; +} + YY_BREAK +case 184: +YY_RULE_SETUP +#line 1796 "tth.lex" +TTH_TEX_FN("\\tthemultispan{#1}#tthdrop1",1); + YY_BREAK +case 185: +YY_RULE_SETUP +#line 1797 "tth.lex" +TTH_TEX_FN("\\tthemultispan{#1}#tthdrop2",2); + YY_BREAK +/* interior in array */ +case 186: +YY_RULE_SETUP +#line 1799 "tth.lex" +{ + yy_pop_state(); + chscratch=strstr(yytext,"multi"); + TTH_CCPY(argchar,chscratch+strcspn(chscratch,"{")+1); + *(argchar+strcspn(argchar,"}"))=0; + tth_enclose(TTH_EQA1,eqstr,TTH_EQA2,eqstore); + sprintf(eqstr+strlen(eqstr),"%s\"%s\"%s\n",TTH_EQA4,argchar,">"); + if(eqaligncell) { + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + } + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + eqaligncell++; + } + YY_BREAK +case 187: +YY_RULE_SETUP +#line 1814 "tth.lex" +{ /* line start in array */ + chscratch=strstr(yytext,"multi"); + TTH_CCPY(argchar,chscratch+strcspn(chscratch,"{")+1); + *(argchar+strcspn(argchar,"}"))=0; + sscanf(argchar,"%d",&colspan); + } + YY_BREAK +case 188: +YY_RULE_SETUP +#line 1820 "tth.lex" +{ /* expand first */ + TTH_DO_MACRO + else{ + yyless(0);yy_pop_state(); + tth_enclose(TTH_EQA1,eqstr,TTH_EQA2,eqstore); + if(eqaligncell && !tth_LaTeX && eqalignlog){ + /* This ends the second cell of eqaligno. */ + strcat(eqstr,TTH_CELL_R); + } else strcat(eqstr,TTH_EQA3); + if(eqaligncell) { + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + } + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + eqaligncell++; + } +} + YY_BREAK +case 189: +YY_RULE_SETUP +#line 1839 "tth.lex" +{ + if(tth_debug&33) fprintf(stderr,"noalign in equation:\n"); + if(!eqalignrow) mkkey(eqstr,eqstrs,&eqdepth); + if(tth_istyle&1)eqalignrow=eqalignrow+6*(levhgt[eqclose]-1)+TTH_HGT;else + eqalignrow=eqalignrow+levhgt[eqclose]; + levhgt[eqclose]=1; + strcpy(eqstr,TTH_NOALIGN); + TTH_TEX_FN("{#1}\\special{html:}\\tth_eqfin#tthdrop1",1); + } + YY_BREAK +case 190: +/* rule 190 can match eol */ +#line 1849 "tth.lex" +case 191: +/* rule 191 can match eol */ +#line 1850 "tth.lex" +case 192: +/* rule 192 can match eol */ +YY_RULE_SETUP +#line 1850 "tth.lex" +{ + if(eqclose && (active[eqclose-1] || mtrx[eqclose-1])){ + /* If this is really an array-type environment. */ + if(tth_debug&16)fprintf(stderr, + "Active tth_cr. yytext=%s eqclose=%d, active=%d\n", + yytext,eqclose,active[eqclose-1]); + if(strstr(yytext,"tth_")){ /* Prefix special opening */ + sprintf(scrstring,TTH_EQ11, + (lefteq ? "left":(eqalignlog ?"right":"center")),colspan); + /*(colspan? colspan : 1)); Avoid colspan=0; not now necc.*/ + tth_enclose(scrstring,eqstr,TTH_EQA2,eqstore); + }else{ + /* Next line ensures \cr is equivalent to \nonumber\\ */ + if(strstr(yytext,"\\cr"))if(eqalignlog <= 100) eqalignlog=eqalignlog+100; + tth_enclose(TTH_EQA1,eqstr,TTH_EQA2,eqstore); + } + if(tth_debug&16)fprintf(stderr, + "TTH_CR, eqalignlog=%d, colspan=%d, envirchar=%s, tth_multinum=%d, tth_LaTeX=%d.\n", + eqalignlog,colspan,envirchar,tth_multinum,tth_LaTeX); + if(eqaligncell){ /* If there is a preceding & (cell) prefix it. */ + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + } + /* If this row is an eqalign or is not the first.*/ + if((eqalignlog&&(eqalignlog-100))||eqalignrow){ + sprintf(eqchar,((eqalignlog&&(eqalignlog-100))?TTH_EQ7:TTH_EQ10), + (lefteq ? "left":((eqalignlog&&(eqalignlog-100)) ? + "right":"center")),colspan); + tth_prefix(eqchar,eqstr,eqstore); /* Prefix its opening */ + *eqchar=0; + } + if(eqalignrow){ /* If this row is not the first.*/ + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); /* Prefix previous row */ + rmkey(eqstrs,&eqdepth); + } + if(tth_LaTeX && tth_multinum && strlen(envirchar) && (eqalignlog==1) ){ + strcat(eqstr,TTH_EQ8); + strcpy(scratchstring,"(\\theequation)"); + }else{ + if((eqalignlog>1)&&(eqalignlog-100)) strcat(eqstr,TTH_EQ9); + *scratchstring=0; + } + strcat(scratchstring,"\\tth_closerow"); + TTH_SCAN_STRING(scratchstring); + /*mtrx[eqclose-1]=0; A mistake. Should be done only at end.*/ + }else if(*halstring){ /* halign and tabular */ + TTH_SCAN_STRING("\\tth_halcr"); + }else{ + fprintf(stderr,"**** Improper \\\\ or \\cr outside array environment ignored, Line %d.\n",tth_num_lines); + } +} + YY_BREAK +case 193: +YY_RULE_SETUP +#line 1902 "tth.lex" +{ + if(tth_LaTeX && tth_multinum && strlen(envirchar) && (eqalignlog==1) ){ + equatno++;sprintf(envirchar,"%d",equatno);tth_multinum++; + } + strcat(eqstr,""); /* Close the row */ + *eqchar=0; + mkkey(eqstr,eqstrs,&eqdepth); /* Start new row */ + *eqstr=0; + /* eqalignrow++; old */ + if(tth_istyle&1)eqalignrow=eqalignrow+6*(levhgt[eqclose]-1)+TTH_HGT;else + eqalignrow=eqalignrow+levhgt[eqclose]; + levhgt[eqclose]=1; /* new */ + eqaligncell=0; + lefteq=0; + colspan=1; + if(eqalignlog >= 100) eqalignlog=eqalignlog-100; +} + YY_BREAK +case 194: +YY_RULE_SETUP +#line 1920 "tth.lex" +{ + if(tth_debug&16) { + fprintf(stderr,"Start Group {, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s\n",eqdepth,eqclose,tth_flev,levdelim[eqclose]); + } + if(tth_flev < 0) tth_flev=tth_flev-99; + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + eqclose++; + tophgt[eqclose]=0; + levhgt[eqclose]=1; + TTH_PUSH_CLOSING; + } + YY_BREAK +case 195: +YY_RULE_SETUP +#line 1933 "tth.lex" +{ + if(mtrx[eqclose-1] || active[eqclose-1] || tophgt[eqclose]){ + /* Terminate getsubp state */ + yyless(0); + TTH_SCAN_STRING("#"); + }else{ + /* Just enter the brace termination code. */ + TTH_SCAN_STRING("\\tth_closebrace"); + } +} + YY_BREAK +case 196: +#line 1944 "tth.lex" +case 197: +YY_RULE_SETUP +#line 1944 "tth.lex" +{ + TTH_TEXCLOSE else{ + do{ + if(tth_debug&16) { + if(active[eqclose]) { + fprintf(stderr, + "Active Group }, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s, active=%d\n" + ,eqdepth,eqclose,tth_flev,levdelim[eqclose],active[eqclose]);} + else {fprintf(stderr, + "Close Group }, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s\n" + ,eqdepth,eqclose,tth_flev,levdelim[eqclose]);} + } + if(tophgt[eqclose] != 0){ /* If fraction */ + if(tth_debug&16)fprintf(stderr,"Fraction closing.\n"); + if(levhgt[eqclose] > 1 || (eqclose > tth_flev && TTH_COMPLEX)){ + /* If bottom contains a fraction or we are topped out. */ + /* Try bottom compression*/ + oa_removes=b_align(eqstr,tth_debug); + tth_enclose(TTH_LEV1,eqstr,TTH_LEV2,eqstore); + }else{ /* Put br at end if we are still closing a real cell */ + if((eqclose <= tth_flev) && (active[eqclose-1]!=30)) strcat(eqstr,TTH_BR); + } + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + TTH_CLOSEGROUP;TTH_POP_CLOSING; /* put closing before cell end */ + if(active[eqclose-1]!=30){ + /* CELL1/2 test for non-zero levdelim 0,+1 */ + tth_enclose(TTH_CELL1,eqstr,TTH_CELL2,eqstore); + if(eqclose <= tth_flev) yy_push_state(getsubp); + if(tth_debug&16) fprintf(stderr,"Whole fraction:%s\n",eqstr); + } + }else { + TTH_CLOSEGROUP;TTH_POP_CLOSING; + } + if(eqclose > tth_flev) hgt=1; else hgt=tophgt[eqclose]+levhgt[eqclose]; + if(tth_debug&16) fprintf(stderr,"eqclose=%d,tth_flev=%d,hgt=%d,%d,%d\n", + eqclose,tth_flev,hgt,tophgt[eqclose],levhgt[eqclose]); + if(levhgt[eqclose-1] < hgt) levhgt[eqclose-1]=hgt; + if(tth_debug&2 && (levdelim[eqclose][0]||levdelim[eqclose+1][0])) + fprintf(stderr,"Delimiting:%s%d%s\n", + levdelim[eqclose],hgt,levdelim[eqclose+1]); + if(levdelim[eqclose][0]){ + delimit(levdelim[eqclose],hgt,eqchar); + } + if(levdelim[eqclose+1][0]){ + delimit(levdelim[eqclose+1],hgt,eqchar2); + } + /* Cut spurious cells off end of eqchar and eqstr if necessary*/ + chscratch=eqchar+strlen(eqchar)-strlen(TTH_CELL3); + if( (strstr(chscratch,TTH_CELL3)==chscratch) && + (strstr(eqstr,TTH_CELL_START)==eqstr+strspn(eqstr," \n"))){ + *chscratch=0; + } + chscratch=eqstr+strlen(eqstr)-strlen(TTH_CELL3); + if( (strstr(eqchar2,TTH_CELL_START)==eqchar2+strspn(eqchar2," \n")) && + (strstr(chscratch,TTH_CELL3)==chscratch) ){ + *chscratch=0; + } /* Section could be combined with delimit immediately above. */ + /* rely on no delimiters on active closures. False for matrix. */ + if(levdelim[eqclose+1][0] && (hgt > 1)) yy_push_state(getsubp); + *levdelim[eqclose]=0; + *levdelim[eqclose+1]=0; + + tth_enclose(eqchar,eqstr,eqchar2,eqstore); + *eqchar=0; + *eqchar2=0; + if(active[eqclose-1]==30){ /* eqlimited section for mathop, overbrace */ + if(tth_debug&2)fprintf(stderr,"Mathop eqlimited:%s\n",eqstr); + if(strlen(eqlimited)+strlen(eqstr)< TTH_DLEN) { + strcat(eqlimited,eqstr); + if(tth_debug&2)fprintf(stderr,"EQlimited=||%s||\n",eqlimited); + }else{ + fprintf(stderr, + "Error: Fatal! Exceeded eqlimited storage. Over/underbrace too long.\n"); + TTH_EXIT(5); + } + strcpy(eqstr,eqstrs[eqdepth-1]); + yy_push_state(getsubp); + if(levhgt[eqclose] == 1)levhgt[eqclose]=2; /* Force fraction closure */ + active[eqclose-1]=0; + }else{ + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + } + rmkey(eqstrs,&eqdepth); + if(tth_flev < 0) tth_flev=tth_flev+99; + active[eqclose]=0; + mtrx[eqclose]=0; + eqclose--; + if(eqclose < 0) { + fprintf(stderr,"**** Error! Fatal! Negative closure count, line:%d\n",tth_num_lines); + TTH_EXIT(4); + } + } while (active[eqclose]); + if(tth_debug&16) fprintf(stderr, + "Completing Close Group, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s\n" + ,eqdepth,eqclose,tth_flev,levdelim[eqclose]); + } +} + YY_BREAK +case 198: +YY_RULE_SETUP +#line 2043 "tth.lex" +{ /* Cope with ambiguous style at equation end */ + if(displaystyle){ + if(tth_debug&2)fprintf(stderr,"$$ in displaystyle\n"); + TTH_SCAN_STRING("}\\tth_endequation"); + }else{ + yyless(1); + TTH_SCAN_STRING("}\\tth_endinline"); + } + } + YY_BREAK +case 199: +YY_RULE_SETUP +#line 2053 "tth.lex" +{ + TTH_TEXCLOSE else{ + if(tth_debug&2) fprintf(stderr,"Leaving inline eq, eqclose=%d, eqdepth=%d, tth_flev=%d, levhgt=%d, tophgt=%d\n", + eqclose,eqdepth,tth_flev,levhgt[eqclose],tophgt[eqclose]); + TTH_CLOSEGROUP;TTH_POP_CLOSING; + if(tth_inlinefrac && (levhgt[eqclose]+tophgt[eqclose]>1)) + tth_enclose(TTH_TSTY1,eqstr,TTH_TSTY2,eqstore); + if(eqdepth==1){ + rmkey(eqstrs,&eqdepth); /*eqdepth--;*/ + tth_flev=tth_flev0; + horizmode=1; + if(tth_tagpurge){ + tagpurge(eqstr); + tth_tagpurge=0; + } + fprintf(tth_fdout,"%s",eqstr);*eqstr=0; + }else{ + if(displaystyle)displaystyle--; + eqdepth--; + if(tth_debug&2)fprintf(stderr, + "Equation in a textbox inside an equation.\n"); + TTH_OUTPUT(TTH_TEXTBOX1); + } + yy_pop_state(); + } +} + YY_BREAK +/* Force all equations to end enclosed. */ +case 200: +YY_RULE_SETUP +#line 2080 "tth.lex" +{ + if(strstr(yytext,"*")==NULL){ /* end{equation} */ + if(tth_multinum < 2) { + TTH_SCAN_STRING("}\\tth_numbereq"); + }else { + /* end of equation which needs to unincrement*/ + equatno--; + TTH_SCAN_STRING("}\\tth_endequation"); + } + }else {TTH_SCAN_STRING("}\\tth_endequation");} /* embracing essential */ +} + YY_BREAK +case 201: +#line 2092 "tth.lex" +case 202: +YY_RULE_SETUP +#line 2092 "tth.lex" +TTH_SCAN_STRING("}\\tth_endequation"); + YY_BREAK +case 203: +YY_RULE_SETUP +#line 2094 "tth.lex" +{ + strcat(eqstr,TTH_DISP3); + TTH_SCAN_STRING("(\\theequation)\\tth_endnumbered"); +} + YY_BREAK +case 204: +YY_RULE_SETUP +#line 2098 "tth.lex" +equatno--;TTH_SCAN_STRING("\\tth_endequation"); + YY_BREAK +case 205: +#line 2100 "tth.lex" +case 206: +YY_RULE_SETUP +#line 2100 "tth.lex" +{ + TTH_TEXCLOSE else{ + eqaligncell=0; + if(tth_debug&2) fprintf(stderr, + "End equation %d, %s. eqalignlog=%d, tth_eqwidth=%d\n", + equatno,yytext,eqalignlog,tth_eqwidth); + if(tth_multinum)tth_multinum=1; + { + if(eqalignlog){ + sprintf(scrstring,TTH_DISPE,tth_eqwidth); + tth_enclose(scrstring,eqstr,TTH_DISP6,eqstore); +/* tth_enclose(scrstring,eqstr,TTH_DISP4,eqstore); */ + }else{ + sprintf(scrstring,TTH_DISP1,tth_eqwidth); + if(strstr(yytext,"numb")){ + tth_enclose(scrstring,eqstr,TTH_DISP4,eqstore); + }else{ + tth_enclose(scrstring,eqstr,TTH_DISP2,eqstore); + } + } + if(tth_debug&2) fprintf(stderr, + "Leaving display eq, eqclose=%d, eqdepth=%d, tth_flev=%d\n", + eqclose,eqdepth,tth_flev); + if(eqdepth==1){ + rmkey(eqstrs,&eqdepth);/*eqdepth--;*/ + }else{ + fprintf(stderr, + "**** Error: Fatal Abnormal eqdepth %d on display equation exit, line %d\n", + eqdepth,tth_num_lines);TTH_EXIT(2); + } + if(eqclose > 0) { + fprintf(stderr, + "**** Error: Fatal Abnormal eqclose %d on Display Equation End, line %d\n", + eqclose,tth_num_lines);TTH_EXIT(3); + } + yy_pop_state(); + tth_flev=tth_flev0; /* Necessary if textstyle has been used. */ + horizmode=1; /* Make sure we now recognize \n\n */ + displaystyle=0; + *environment=0; + eqalignlog=0; + TTH_CLOSEGROUP;TTH_POP_CLOSING; + fprintf(tth_fdout,"%s\n",eqstr);*eqstr=0; + } + } +} + YY_BREAK +/* Single character fractions .*/ +case 207: +/* rule 207 can match eol */ +YY_RULE_SETUP +#line 2147 "tth.lex" +{ + if(active[eqclose]){ /* reembrace to protect active closure */ + TTH_INC_MULTI; + sprintf(scratchstring,"{%s}",yytext); + TTH_SCAN_STRING(scratchstring); + }else if((eqclose > tth_flev || !displaystyle)){ + TTH_INC_MULTI; + chscratch=yytext+strspn(yytext,"${ \t\n"); + chs2=strstr(chscratch,"\\over")+5; + sprintf(scratchstring,"%c/%c", + *(chscratch),*(chs2+strspn(chs2," \t\r\n"))); + TTH_OUTPUT(scratchstring); + }else{ /* split to prevent treatment */ + strcpy(scratchstring,yytext); + jscratch=strspn(yytext,"${ \t"); + yyless(jscratch); + *(scratchstring+jscratch)=0; + TTH_SCAN_STRING(scratchstring); + } + } + YY_BREAK +case 208: +/* rule 208 can match eol */ +YY_RULE_SETUP +#line 2168 "tth.lex" +{ + TTH_INC_MULTI; + yyless(strspn(yytext," \t\r\n")); +} + YY_BREAK +case 209: +/* rule 209 can match eol */ +YY_RULE_SETUP +#line 2172 "tth.lex" +{ + TTH_INC_MULTI; + if(tth_debug&16)fprintf(stderr, + "Over Close Group, depth=%d, eqclose=%d, levhgt=%d\n", + eqdepth,eqclose,levhgt[eqclose]); + if(levhgt[eqclose] > 1 || (eqclose > tth_flev && TTH_COMPLEX)) { + /* Remove unnecessary cell and bottoms from single cells*/ + oa_removes=b_align(eqstr,tth_debug); + tth_enclose(TTH_LEV1,eqstr,TTH_LEV2,eqstore); + }else { /* Fix a strange alignment problem. Removed 15 Oct 2003 + if((tth_istyle&1) && !strstr(yytext,"atop") && !strstr(yytext,"choose")) + tth_prefix(" ",eqstr,eqstore); */ + } + if(strstr(yytext,"atop") || strstr(yytext,"choose")) + strcat(eqstr,TTH_ATOP); + else strcat(eqstr,TTH_DIV); + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + tophgt[eqclose]=levhgt[eqclose]+1; + levhgt[eqclose]=1; + if(strstr(yytext,"choose")){ + strcat(levdelim[eqclose],"("); + tth_push_depth--; + TTH_PRETEXCLOSE("\\tth_chooseclose"); + tth_push_depth++; + } + } + YY_BREAK +case 210: +YY_RULE_SETUP +#line 2199 "tth.lex" +strcpy(levdelim[eqclose+1],")"); + YY_BREAK +/*TTH_SCAN_STRING("\\right)"); doesn't work. Imbalances closures.*/ +/* End of Fraction*/ +/* Sub/p scripts. */ +/* Dont make prime a superscript, it becomes too small. + This case will not be used if we are doing a full cell (getsubsup). */ +case 211: +YY_RULE_SETUP +#line 2207 "tth.lex" +TTH_MATHI(162); + YY_BREAK +case 212: +YY_RULE_SETUP +#line 2208 "tth.lex" +{ + strcat(eqstr,TTH_SUP1);yy_push_state(exptokarg); + TTH_CCPY(expchar,TTH_SUP2); + } + YY_BREAK +case 213: +YY_RULE_SETUP +#line 2212 "tth.lex" +{ + strcat(eqstr,TTH_SUB1);yy_push_state(exptokarg); + TTH_CCPY(expchar,TTH_SUB2); + } + YY_BREAK +/* Version that uses tabular:*/ +case 214: +/* rule 214 can match eol */ +YY_RULE_SETUP +#line 2217 "tth.lex" +{ + TTH_INC_MULTI; + TTH_SCAN_STRING("\\begin{tabular}"); +} + YY_BREAK +case 215: +/* rule 215 can match eol */ +#line 2222 "tth.lex" +case 216: +/* rule 216 can match eol */ +YY_RULE_SETUP +#line 2222 "tth.lex" +{ /*border not really supported*/ + TTH_INC_MULTI; + TTH_HAL_PUSH;*halstring=0; + if(strstr(yytext,"eq") != NULL) eqalignlog++;/*make both levels 1*/ + TTH_EQA_PUSH; + /*This instead of the previous makes level 1 only. Intended for lone + \eqno, but breaks the standard layout. So don't do it.*/ + /* if(strstr(yytext,"eq") != NULL) eqalignlog++;*/ + TTH_PUSH_CLOSING; + if(strstr(yytext,"eq") == NULL) eqalignlog=0; + /*if(strstr(yytext,"eq") != NULL) eqalignlog++; else eqalignlog=0;*/ + if(tth_debug&2) { + fprintf(stderr, + "Matrix {, eqdepth=%d, eqclose=%d, eqalignlog=%d, tth_flev=%d, levdelim=%s.\n" + ,eqdepth,eqclose,eqalignlog,tth_flev,levdelim[eqclose]); + } + mkkey(eqstr,eqstrs,&eqdepth); + eqclose++; + *eqstr=0; + levhgt[eqclose]=1; + tophgt[eqclose]=0; + eqaligncell=0; + eqalignrow=0; + tth_push_depth--; + TTH_PRETEXCLOSE("\\tth_cr\\tth_matrixclose"); + tth_push_depth++; + mtrx[eqclose-1]=1; + if(tth_debug&16)fprintf(stderr,"Set Matrix: eqclose=%d,eqdepth=%d\n",eqclose,eqdepth);/**/ + } + YY_BREAK +case 217: +YY_RULE_SETUP +#line 2251 "tth.lex" +{ + if(tth_debug&16) fprintf(stderr,"Matrix close %d, levhgt=%d, rows=%d\n", + eqclose,levhgt[eqclose],eqalignrow); + if(tth_istyle&1) levhgt[eqclose]=(eqalignrow+6*(levhgt[eqclose]-1)+TTH_HGT)/6; else levhgt[eqclose]=levhgt[eqclose]+eqalignrow; + tth_prefix(eqstrs[eqdepth-1],eqstr,eqstore); + rmkey(eqstrs,&eqdepth); + if(eqalignlog){ + /* For 50% but just first line */ + tth_enclose(TTH_EQ3,eqstr,TTH_EQ2,eqstore); + }else{ + tth_enclose(TTH_EQ1,eqstr,TTH_EQ2,eqstore); + } + TTH_EQA_POP; + TTH_HAL_POP; + /* Enclose unless this is the end of an eqalign type construct. */ + if(eqaind || !eqalignlog)tth_enclose(TTH_CELL5,eqstr,TTH_CELL5,eqstore); + active[eqclose-1]=0; +} + YY_BREAK +case 218: +YY_RULE_SETUP +#line 2270 "tth.lex" +{ + TTH_TEX_FN("\\mbox{\\left\\lbrace\\matrix{#1}\\right.}#tthdrop1",1); +} + YY_BREAK +case 219: +YY_RULE_SETUP +#line 2273 "tth.lex" +{ + TTH_TEX_FN("\\left(\\matrix{#1}\\right)#tthdrop1",1); +} + YY_BREAK +/* textboxes. Because of problems as subscript, removed this to builtins. + \\textrm | + but this does not generally seem to be a good plan. + But the approach below breaks with unenclosed subscript texts. + */ +case 220: +/* rule 220 can match eol */ +#line 2283 "tth.lex" +case 221: +/* rule 221 can match eol */ +#line 2284 "tth.lex" +case 222: +/* rule 222 can match eol */ +#line 2285 "tth.lex" +case 223: +/* rule 223 can match eol */ +#line 2286 "tth.lex" +case 224: +/* rule 224 can match eol */ +YY_RULE_SETUP +#line 2286 "tth.lex" +{ + TTH_INC_MULTI; + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\rm "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 225: +YY_RULE_SETUP +#line 2290 "tth.lex" +{ + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\bf "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 226: +#line 2294 "tth.lex" +case 227: +YY_RULE_SETUP +#line 2294 "tth.lex" +{ + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\it "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 228: +YY_RULE_SETUP +#line 2297 "tth.lex" +{ + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\tt "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 229: +YY_RULE_SETUP +#line 2300 "tth.lex" +{ + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\sffamily "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 230: +YY_RULE_SETUP +#line 2303 "tth.lex" +{ + strcpy(scratchstring,"\\tth_tbone");strcat(scratchstring,"\\scshape "); TTH_SCAN_STRING("\\tth_tbox"); +} + YY_BREAK +case 231: +YY_RULE_SETUP +#line 2306 "tth.lex" +{ + if(tth_debug&2)fprintf(stderr, + "Start textbox. eqclose %d. push_depth %d. Line %d\n" + ,eqclose,tth_push_depth,tth_num_lines); + if(!displaystyle) yy_push_state(textbox); + TTH_SWAP(scratchstring); + /* This had to be moved into tth_tbone */ + /*TTH_PRETEXCLOSE("\\tth_boxclose");*/ +} + YY_BREAK +case 232: +YY_RULE_SETUP +#line 2315 "tth.lex" +{ + if(tth_debug&2)fprintf(stderr, + "Start textbox exptokarg. Displaystyle %d. eqclose %d, push_depth %d, Line %d\n" + ,displaystyle,eqclose,tth_push_depth,tth_num_lines); + yy_pop_state(); + if(!displaystyle)yy_push_state(textbox); + yy_push_state(exptokarg); + TTH_SWAP(scratchstring); +} + YY_BREAK +case 233: +YY_RULE_SETUP +#line 2324 "tth.lex" +{ /* box closure*/ + if(tth_debug&2) fprintf(stderr,"Box closure, eqclose=%d\n",eqclose); + if(!displaystyle) yy_pop_state(); /* textbox state end */ + } + YY_BREAK +case 234: +YY_RULE_SETUP +#line 2328 "tth.lex" +{ + if(tth_debug&8)fprintf(stderr,"tbone at push_depth %d\n",tth_push_depth); + TTH_OUTPUT(TTH_TEXTBOX1); + tth_push_depth--;TTH_PRETEXCLOSE("\\tth_boxclose");tth_push_depth++; +} + YY_BREAK +case 235: +YY_RULE_SETUP +#line 2333 "tth.lex" +{GET_DIMEN;} /* Override new handling */ + YY_BREAK +case 236: +#line 2336 "tth.lex" +case 237: +#line 2337 "tth.lex" +case 238: +YY_RULE_SETUP +#line 2337 "tth.lex" +{ + /* Deal with single $ or inline in display equations or boxes.*/ + if(displaystyle==1){ /* Open inline in box enclose it.*/ + if(tth_debug&2)fprintf(stderr,"Inline inside displaystyle.\n"); + TTH_SCAN_STRING("{$"); + displaystyle++; + }else if(displaystyle==2){ + if(!strstr(tth_font_open[tth_push_depth],TTH_ITAL1)){ + strcat(tth_font_open[tth_push_depth],tth_font_open[0]); + strcat(tth_font_close[tth_push_depth],tth_font_close[0]); + } + displaystyle++; + }else if(displaystyle==3){ /* End enclosure inserted. */ + if(tth_debug&2)fprintf(stderr,"End Inline inside displaystyle.\n"); + TTH_SCAN_STRING("}"); + displaystyle=1; + }else if(strstr(tth_texclose[tth_push_depth],"tth_boxclose")) { + if(tth_debug&2) fprintf(stderr,"Inline inside box.\n"); + if(!strstr(tth_font_open[tth_push_depth],TTH_ITAL1)){ + strcat(tth_font_open[tth_push_depth],tth_font_open[0]); + strcat(tth_font_close[tth_push_depth],tth_font_close[0]); + } + }else{ + TTH_SCAN_STRING("}\\tth_endinline"); + } + } + YY_BREAK +/* Math greek and symbols */ +case 239: +YY_RULE_SETUP +#line 2364 "tth.lex" +TTH_MATHS("a"); + YY_BREAK +case 240: +YY_RULE_SETUP +#line 2365 "tth.lex" +TTH_MATHS("b"); + YY_BREAK +case 241: +YY_RULE_SETUP +#line 2366 "tth.lex" +TTH_MATHS("g"); + YY_BREAK +case 242: +YY_RULE_SETUP +#line 2367 "tth.lex" +TTH_MATHS("d"); + YY_BREAK +case 243: +YY_RULE_SETUP +#line 2368 "tth.lex" +TTH_MATHS("e"); + YY_BREAK +/* \\varepsilon{SP}* TTH_MATHS("e"); */ +case 244: +YY_RULE_SETUP +#line 2370 "tth.lex" +{ + if(tth_unicode){ + TTH_MATHI(129); /*Kludge for coding translation */ + }else{ + TTH_MATHS("e"); + } +} + YY_BREAK +case 245: +YY_RULE_SETUP +#line 2377 "tth.lex" +TTH_MATHS("z"); + YY_BREAK +case 246: +YY_RULE_SETUP +#line 2378 "tth.lex" +TTH_MATHS("h") + YY_BREAK +case 247: +YY_RULE_SETUP +#line 2379 "tth.lex" +TTH_MATHS("q"); + YY_BREAK +case 248: +YY_RULE_SETUP +#line 2380 "tth.lex" +TTH_MATHS("J"); + YY_BREAK +case 249: +YY_RULE_SETUP +#line 2381 "tth.lex" +TTH_MATHS("i"); + YY_BREAK +case 250: +YY_RULE_SETUP +#line 2382 "tth.lex" +TTH_MATHS("k"); + YY_BREAK +case 251: +YY_RULE_SETUP +#line 2383 "tth.lex" +TTH_MATHS("l"); + YY_BREAK +case 252: +YY_RULE_SETUP +#line 2384 "tth.lex" +TTH_MATHS("l"); + YY_BREAK +case 253: +YY_RULE_SETUP +#line 2385 "tth.lex" +TTH_MATHS("m"); + YY_BREAK +case 254: +YY_RULE_SETUP +#line 2386 "tth.lex" +TTH_MATHS("n"); + YY_BREAK +case 255: +YY_RULE_SETUP +#line 2387 "tth.lex" +TTH_MATHS("x"); + YY_BREAK +case 256: +YY_RULE_SETUP +#line 2388 "tth.lex" +TTH_MATHS("p"); + YY_BREAK +case 257: +YY_RULE_SETUP +#line 2389 "tth.lex" +TTH_MATHS("v"); + YY_BREAK +case 258: +YY_RULE_SETUP +#line 2390 "tth.lex" +TTH_MATHS("r"); + YY_BREAK +case 259: +YY_RULE_SETUP +#line 2391 "tth.lex" +TTH_MATHS("r"); + YY_BREAK +case 260: +YY_RULE_SETUP +#line 2392 "tth.lex" +TTH_MATHS("s"); + YY_BREAK +case 261: +YY_RULE_SETUP +#line 2393 "tth.lex" +TTH_MATHS("V"); + YY_BREAK +case 262: +YY_RULE_SETUP +#line 2394 "tth.lex" +TTH_MATHS("t"); + YY_BREAK +case 263: +YY_RULE_SETUP +#line 2395 "tth.lex" +TTH_MATHS("u"); + YY_BREAK +case 264: +YY_RULE_SETUP +#line 2396 "tth.lex" +TTH_MATHS("f"); + YY_BREAK +case 265: +YY_RULE_SETUP +#line 2397 "tth.lex" +TTH_MATHS("j"); + YY_BREAK +case 266: +YY_RULE_SETUP +#line 2398 "tth.lex" +TTH_MATHS("c"); + YY_BREAK +case 267: +YY_RULE_SETUP +#line 2399 "tth.lex" +TTH_MATHS("y"); + YY_BREAK +case 268: +YY_RULE_SETUP +#line 2400 "tth.lex" +TTH_MATHS("w"); + YY_BREAK +case 269: +YY_RULE_SETUP +#line 2401 "tth.lex" +TTH_MATHS("G"); + YY_BREAK +case 270: +YY_RULE_SETUP +#line 2402 "tth.lex" +TTH_MATHS("D"); + YY_BREAK +case 271: +YY_RULE_SETUP +#line 2403 "tth.lex" +TTH_MATHS("Q"); + YY_BREAK +case 272: +YY_RULE_SETUP +#line 2404 "tth.lex" +TTH_MATHS("L"); + YY_BREAK +case 273: +YY_RULE_SETUP +#line 2405 "tth.lex" +TTH_MATHS("X"); + YY_BREAK +case 274: +YY_RULE_SETUP +#line 2406 "tth.lex" +TTH_MATHS("P"); + YY_BREAK +case 275: +YY_RULE_SETUP +#line 2407 "tth.lex" +TTH_MATHS("S"); + YY_BREAK +case 276: +YY_RULE_SETUP +#line 2408 "tth.lex" +TTH_MATHS("U"); + YY_BREAK +case 277: +YY_RULE_SETUP +#line 2409 "tth.lex" +TTH_MATHS("F"); + YY_BREAK +case 278: +YY_RULE_SETUP +#line 2410 "tth.lex" +TTH_MATHS("Y"); + YY_BREAK +case 279: +YY_RULE_SETUP +#line 2411 "tth.lex" +TTH_MATHS("W"); + YY_BREAK +case 280: +YY_RULE_SETUP +#line 2413 "tth.lex" +TTH_MATHC("l"); + YY_BREAK +case 281: +YY_RULE_SETUP +#line 2414 "tth.lex" +TTH_MATHI(192); + YY_BREAK +case 282: +YY_RULE_SETUP +#line 2415 "tth.lex" +TTH_MATHS("i"); + YY_BREAK +case 283: +YY_RULE_SETUP +#line 2416 "tth.lex" +TTH_MATHC("j"); + YY_BREAK +case 284: +YY_RULE_SETUP +#line 2417 "tth.lex" +TTH_MATHI(195); + YY_BREAK +case 285: +#line 2419 "tth.lex" +case 286: +YY_RULE_SETUP +#line 2419 "tth.lex" +TTH_MATHI(194); + YY_BREAK +case 287: +#line 2421 "tth.lex" +case 288: +YY_RULE_SETUP +#line 2421 "tth.lex" +TTH_MATHI(193); + YY_BREAK +case 289: +YY_RULE_SETUP +#line 2422 "tth.lex" +TTH_MATHI(182); + YY_BREAK +case 290: +YY_RULE_SETUP +#line 2423 "tth.lex" +TTH_MATHI(165); + YY_BREAK +case 291: +YY_RULE_SETUP +#line 2424 "tth.lex" +TTH_MATHI(208); + YY_BREAK +case 292: +YY_RULE_SETUP +#line 2425 "tth.lex" +TTH_MATHI(162); + YY_BREAK +case 293: +YY_RULE_SETUP +#line 2426 "tth.lex" +TTH_MATHI(162); + YY_BREAK +case 294: +YY_RULE_SETUP +#line 2427 "tth.lex" +TTH_MATHI(198); + YY_BREAK +case 295: +YY_RULE_SETUP +#line 2428 "tth.lex" +TTH_MATHI(209); + YY_BREAK +case 296: +YY_RULE_SETUP +#line 2429 "tth.lex" +TTH_MATHI(214); + YY_BREAK +case 297: +#line 2431 "tth.lex" +case 298: +YY_RULE_SETUP +#line 2431 "tth.lex" +TTH_MATHS("|"); + YY_BREAK +case 299: +#line 2433 "tth.lex" +case 300: +#line 2434 "tth.lex" +case 301: +YY_RULE_SETUP +#line 2434 "tth.lex" +TTH_MATHS("||"); + YY_BREAK +case 302: +YY_RULE_SETUP +#line 2435 "tth.lex" +TTH_MATHC("["); + YY_BREAK +case 303: +YY_RULE_SETUP +#line 2436 "tth.lex" +TTH_MATHC("]"); + YY_BREAK +case 304: +YY_RULE_SETUP +#line 2437 "tth.lex" +TTH_MATHC("{"); + YY_BREAK +case 305: +YY_RULE_SETUP +#line 2438 "tth.lex" +TTH_MATHC("}"); + YY_BREAK +case 306: +YY_RULE_SETUP +#line 2439 "tth.lex" +TTH_MATHI(249); + YY_BREAK +case 307: +YY_RULE_SETUP +#line 2440 "tth.lex" +TTH_MATHI(251); + YY_BREAK +case 308: +YY_RULE_SETUP +#line 2441 "tth.lex" +TTH_MATHI(233); + YY_BREAK +case 309: +YY_RULE_SETUP +#line 2442 "tth.lex" +TTH_MATHI(235); + YY_BREAK +case 310: +YY_RULE_SETUP +#line 2443 "tth.lex" +TTH_MATHI(225); + YY_BREAK +case 311: +YY_RULE_SETUP +#line 2444 "tth.lex" +TTH_MATHI(241); + YY_BREAK +case 312: +#line 2446 "tth.lex" +case 313: +#line 2447 "tth.lex" +case 314: +YY_RULE_SETUP +#line 2447 "tth.lex" +TTH_MATHC("\\"); + YY_BREAK +case 315: +YY_RULE_SETUP +#line 2448 "tth.lex" +TTH_MATHS("\""); + YY_BREAK +case 316: +YY_RULE_SETUP +#line 2449 "tth.lex" +TTH_MATHS("$"); + YY_BREAK +case 317: +YY_RULE_SETUP +#line 2450 "tth.lex" +TTH_MATHI(216); + YY_BREAK +case 318: +YY_RULE_SETUP +#line 2451 "tth.lex" +TTH_MATHI(167); + YY_BREAK +case 319: +YY_RULE_SETUP +#line 2452 "tth.lex" +TTH_MATHI(168); + YY_BREAK +case 320: +YY_RULE_SETUP +#line 2453 "tth.lex" +TTH_MATHI(169); + YY_BREAK +case 321: +YY_RULE_SETUP +#line 2454 "tth.lex" +TTH_MATHI(170); + YY_BREAK +case 322: +YY_RULE_SETUP +#line 2456 "tth.lex" +TTH_MATHS("-"); + YY_BREAK +/*Risky. \+ TTH_MATHS("+"); */ +case 323: +YY_RULE_SETUP +#line 2458 "tth.lex" +TTH_MATHC("T"); + YY_BREAK +case 324: +#line 2460 "tth.lex" +case 325: +YY_RULE_SETUP +#line 2460 "tth.lex" +TTH_MATHS("^"); + YY_BREAK +case 326: +YY_RULE_SETUP +#line 2461 "tth.lex" +TTH_MATHI(176); + YY_BREAK +case 327: +YY_RULE_SETUP +#line 2462 "tth.lex" +TTH_MATHC("~"); + YY_BREAK +case 328: +YY_RULE_SETUP +#line 2463 "tth.lex" +TTH_MATHS(" ~ "); + YY_BREAK +case 329: +#line 2465 "tth.lex" +case 330: +YY_RULE_SETUP +#line 2465 "tth.lex" +TTH_MATHC(" mod "); + YY_BREAK +case 331: +YY_RULE_SETUP +#line 2466 "tth.lex" +TTH_MATHC(" < "); + YY_BREAK +case 332: +YY_RULE_SETUP +#line 2467 "tth.lex" +TTH_MATHC(" > "); + YY_BREAK +case 333: +#line 2469 "tth.lex" +case 334: +YY_RULE_SETUP +#line 2469 "tth.lex" +TTH_MATHC(" << "); + YY_BREAK +case 335: +#line 2471 "tth.lex" +case 336: +YY_RULE_SETUP +#line 2471 "tth.lex" +TTH_MATHC(" >> "); + YY_BREAK +case 337: +YY_RULE_SETUP +#line 2472 "tth.lex" +TTH_MATHS("*"); + YY_BREAK +case 338: +YY_RULE_SETUP +#line 2473 "tth.lex" +TTH_MATHS("*"); + YY_BREAK +case 339: +YY_RULE_SETUP +#line 2474 "tth.lex" +TTH_MATHI(224); + YY_BREAK +case 340: +YY_RULE_SETUP +#line 2475 "tth.lex" +TTH_MATHI(183); + YY_BREAK +case 341: +YY_RULE_SETUP +#line 2476 "tth.lex" +TTH_MATHC("·"); + YY_BREAK +/*\\cdot TTH_MATHI(215);*/ +case 342: +YY_RULE_SETUP +#line 2478 "tth.lex" +TTH_MATHI(200); + YY_BREAK +case 343: +YY_RULE_SETUP +#line 2479 "tth.lex" +TTH_MATHI(199); + YY_BREAK +case 344: +YY_RULE_SETUP +#line 2480 "tth.lex" +TTH_MATHI(177); + YY_BREAK +case 345: +YY_RULE_SETUP +#line 2481 "tth.lex" +TTH_MATHS("-±"); + YY_BREAK +case 346: +#line 2483 "tth.lex" +case 347: +YY_RULE_SETUP +#line 2483 "tth.lex" +TTH_MATHI(218); + YY_BREAK +case 348: +#line 2485 "tth.lex" +case 349: +YY_RULE_SETUP +#line 2485 "tth.lex" +TTH_MATHI(217); + YY_BREAK +case 350: +YY_RULE_SETUP +#line 2486 "tth.lex" +TTH_MATHI(197); + YY_BREAK +case 351: +YY_RULE_SETUP +#line 2487 "tth.lex" +TTH_MATHI(196); + YY_BREAK +case 352: +YY_RULE_SETUP +#line 2488 "tth.lex" +TTH_MATHI(198); + YY_BREAK +case 353: +/* rule 353 can match eol */ +YY_RULE_SETUP +#line 2490 "tth.lex" +TTH_INC_MULTI;/* Don't mess up if it is in wrong place*/ + YY_BREAK +case 354: +YY_RULE_SETUP +#line 2491 "tth.lex" +{ + if(eqclose <= tth_flev-1 && displaystyle){ + /*If we end with a CELL3, cut it off. */ + if( ((jscratch=strlen(eqstr)) >= (js2=strlen(TTH_CELL3))) && + strcmp(eqstr+jscratch-js2,TTH_CELL3) == 0){ + *(eqstr+jscratch-js2)=0; + } + strcat(eqstr,TTH_CELL_L); + if(levhgt[eqclose] == 1)levhgt[eqclose]=2; + if(hgt < 2) hgt=2; + yy_push_state(getsubp); + } +} + YY_BREAK +case 355: +YY_RULE_SETUP +#line 2505 "tth.lex" +{ + if(eqclose > tth_flev-1 || !displaystyle ){ + TTH_MATHI(242); /* TTH_OUTPUT(" "); perhaps not */ + }else{ + delimit("ò",2,eqchar); + strcat(eqstr,eqchar); + *eqchar=0; + if(levhgt[eqclose] == 1)levhgt[eqclose]=2; + hgt=3; + yy_push_state(getsubp); + } + } + YY_BREAK +case 356: +#line 2518 "tth.lex" +case 357: +YY_RULE_SETUP +#line 2518 "tth.lex" +{ + if(eqclose > tth_flev-1){ + TTH_MATHC("(");TTH_MATHI(242);TTH_MATHC(")"); + }else{ + TTH_OINT; + yy_push_state(getsubp); + } + } + YY_BREAK +case 358: +YY_RULE_SETUP +#line 2527 "tth.lex" +TTH_LIMITOP(199); + YY_BREAK +case 359: +YY_RULE_SETUP +#line 2528 "tth.lex" +TTH_LIMITOP(200); + YY_BREAK +case 360: +YY_RULE_SETUP +#line 2529 "tth.lex" +TTH_LIMITOP(218); + YY_BREAK +case 361: +YY_RULE_SETUP +#line 2530 "tth.lex" +TTH_LIMITOP(217); + YY_BREAK +case 362: +YY_RULE_SETUP +#line 2531 "tth.lex" +TTH_LIMITOP(196); + YY_BREAK +case 363: +YY_RULE_SETUP +#line 2532 "tth.lex" +TTH_LIMITOP(197); + YY_BREAK +case 364: +YY_RULE_SETUP +#line 2533 "tth.lex" +TTH_LIMITOP(229); + YY_BREAK +case 365: +YY_RULE_SETUP +#line 2534 "tth.lex" +TTH_LIMITOP(213); + YY_BREAK +case 366: +YY_RULE_SETUP +#line 2535 "tth.lex" +TTH_LIMITOP(242); + YY_BREAK +case 367: +YY_RULE_SETUP +#line 2536 "tth.lex" +/* Drop a limits command if not combined */ + YY_BREAK +case 368: +YY_RULE_SETUP +#line 2538 "tth.lex" +TTH_MATHI(199); + YY_BREAK +case 369: +YY_RULE_SETUP +#line 2539 "tth.lex" +TTH_MATHI(200); + YY_BREAK +case 370: +YY_RULE_SETUP +#line 2540 "tth.lex" +TTH_MATHI(218); + YY_BREAK +case 371: +YY_RULE_SETUP +#line 2541 "tth.lex" +TTH_MATHI(217); + YY_BREAK +case 372: +YY_RULE_SETUP +#line 2542 "tth.lex" +TTH_MATHI(196); + YY_BREAK +case 373: +YY_RULE_SETUP +#line 2543 "tth.lex" +TTH_MATHI(197); + YY_BREAK +case 374: +YY_RULE_SETUP +#line 2544 "tth.lex" +TTH_MATHI(229); + YY_BREAK +case 375: +YY_RULE_SETUP +#line 2545 "tth.lex" +TTH_MATHI(213); + YY_BREAK +case 376: +YY_RULE_SETUP +#line 2547 "tth.lex" +TTH_MATHI(184); + YY_BREAK +case 377: +YY_RULE_SETUP +#line 2548 "tth.lex" +TTH_MATHC("×"); + YY_BREAK +/*\\times TTH_MATHI(180);*/ +case 378: +YY_RULE_SETUP +#line 2550 "tth.lex" +TTH_MATHC(" <~"); + YY_BREAK +case 379: +YY_RULE_SETUP +#line 2551 "tth.lex" +TTH_MATHC(" >~"); + YY_BREAK +case 380: +YY_RULE_SETUP +#line 2553 "tth.lex" +TTH_MATHC(" ");TTH_MATHC("|");TTH_MATHC(" "); + YY_BREAK +case 381: +YY_RULE_SETUP +#line 2554 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(163);TTH_MATHC(" "); + YY_BREAK +case 382: +YY_RULE_SETUP +#line 2555 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(163);TTH_MATHC(" "); + YY_BREAK +case 383: +YY_RULE_SETUP +#line 2556 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(179);TTH_MATHC(" "); + YY_BREAK +case 384: +YY_RULE_SETUP +#line 2557 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(179);TTH_MATHC(" "); + YY_BREAK +case 385: +YY_RULE_SETUP +#line 2558 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(186);TTH_MATHC(" "); + YY_BREAK +case 386: +YY_RULE_SETUP +#line 2559 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(187);TTH_MATHC(" "); + YY_BREAK +case 387: +#line 2561 "tth.lex" +case 388: +YY_RULE_SETUP +#line 2561 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(185);TTH_MATHC(" "); + YY_BREAK +case 389: +YY_RULE_SETUP +#line 2562 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(185);TTH_MATHC(" "); + YY_BREAK +case 390: +YY_RULE_SETUP +#line 2563 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(203);TTH_MATHC(" "); + YY_BREAK +case 391: +YY_RULE_SETUP +#line 2564 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(204);TTH_MATHC(" "); + YY_BREAK +case 392: +YY_RULE_SETUP +#line 2565 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(205);TTH_MATHC(" "); + YY_BREAK +case 393: +YY_RULE_SETUP +#line 2566 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(201);TTH_MATHC(" "); + YY_BREAK +case 394: +YY_RULE_SETUP +#line 2567 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(202);TTH_MATHC(" "); + YY_BREAK +case 395: +YY_RULE_SETUP +#line 2568 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(206);TTH_MATHC(" "); + YY_BREAK +case 396: +#line 2570 "tth.lex" +case 397: +YY_RULE_SETUP +#line 2570 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(207);TTH_MATHC(" "); + YY_BREAK +case 398: +#line 2572 "tth.lex" +case 399: +YY_RULE_SETUP +#line 2572 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(39);TTH_MATHC(" "); + YY_BREAK +case 400: +#line 2574 "tth.lex" +case 401: +YY_RULE_SETUP +#line 2574 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(64);TTH_MATHC(" "); + YY_BREAK +case 402: +YY_RULE_SETUP +#line 2575 "tth.lex" +TTH_MATHC(" ");TTH_MATHI(181);TTH_MATHC(" "); + YY_BREAK +case 403: +#line 2577 "tth.lex" +case 404: +YY_RULE_SETUP +#line 2577 "tth.lex" +TTH_MATHI(172); + YY_BREAK +case 405: +YY_RULE_SETUP +#line 2578 "tth.lex" +TTH_MATHI(172); + YY_BREAK +/* A slight kludge */ +case 406: +#line 2581 "tth.lex" +case 407: +#line 2582 "tth.lex" +case 408: +#line 2583 "tth.lex" +case 409: +YY_RULE_SETUP +#line 2583 "tth.lex" +TTH_MATHI(174); + YY_BREAK +case 410: +YY_RULE_SETUP +#line 2584 "tth.lex" +TTH_MATHI(174); + YY_BREAK +case 411: +YY_RULE_SETUP +#line 2585 "tth.lex" +TTH_MATHI(173); + YY_BREAK +case 412: +YY_RULE_SETUP +#line 2586 "tth.lex" +TTH_MATHI(175); + YY_BREAK +case 413: +YY_RULE_SETUP +#line 2587 "tth.lex" +TTH_MATHC(yytext); + YY_BREAK +case 414: +YY_RULE_SETUP +#line 2588 "tth.lex" +TTH_MATHC(yytext); + YY_BREAK +case 415: +#line 2590 "tth.lex" +case 416: +YY_RULE_SETUP +#line 2590 "tth.lex" +TTH_MATHI(171); + YY_BREAK +case 417: +YY_RULE_SETUP +#line 2591 "tth.lex" +TTH_MATHI(220); + YY_BREAK +case 418: +YY_RULE_SETUP +#line 2592 "tth.lex" +TTH_MATHI(220); + YY_BREAK +case 419: +YY_RULE_SETUP +#line 2593 "tth.lex" +TTH_MATHI(222); + YY_BREAK +case 420: +YY_RULE_SETUP +#line 2594 "tth.lex" +TTH_MATHI(222); + YY_BREAK +case 421: +YY_RULE_SETUP +#line 2595 "tth.lex" +TTH_MATHC(yytext); + YY_BREAK +case 422: +#line 2597 "tth.lex" +/* moved before if code \\iff TTH_MATHI(219); */ +case 423: +YY_RULE_SETUP +#line 2598 "tth.lex" +TTH_MATHI(219); + YY_BREAK +case 424: +YY_RULE_SETUP +#line 2599 "tth.lex" +TTH_MATHI(221); + YY_BREAK +case 425: +YY_RULE_SETUP +#line 2600 "tth.lex" +TTH_MATHI(223); + YY_BREAK +/* \\dots{SP}* TTH_MATHI(188); Not in math mode */ +case 426: +YY_RULE_SETUP +#line 2602 "tth.lex" +TTH_MATHI(188); + YY_BREAK +case 427: +YY_RULE_SETUP +#line 2603 "tth.lex" +TTH_MATHI(188); + YY_BREAK +case 428: +YY_RULE_SETUP +#line 2604 "tth.lex" +TTH_MATHI(188); + YY_BREAK +case 429: +YY_RULE_SETUP +#line 2605 "tth.lex" +TTH_MATHI(188); + YY_BREAK +case 430: +YY_RULE_SETUP +#line 2606 "tth.lex" +TTH_MATHI(188); + YY_BREAK +case 431: +YY_RULE_SETUP +#line 2607 "tth.lex" +TTH_OUTPUT("···"); + YY_BREAK +case 432: +YY_RULE_SETUP +#line 2608 "tth.lex" +TTH_OUTPUT(":"); + YY_BREAK +case 433: +YY_RULE_SETUP +#line 2609 "tth.lex" +TTH_MATHC("@"); + YY_BREAK +case 434: +#line 2611 "tth.lex" +case 435: +YY_RULE_SETUP +#line 2611 "tth.lex" +TTH_OUTPUT(TTH_DAG); + YY_BREAK +case 436: +#line 2613 "tth.lex" +case 437: +YY_RULE_SETUP +#line 2613 "tth.lex" +TTH_OUTPUT(TTH_DDAG); + YY_BREAK +case 438: +YY_RULE_SETUP +#line 2615 "tth.lex" +TTH_MATHC("arccos"); + YY_BREAK +case 439: +YY_RULE_SETUP +#line 2616 "tth.lex" +TTH_MATHC("arcsin"); + YY_BREAK +case 440: +YY_RULE_SETUP +#line 2617 "tth.lex" +TTH_MATHC("arctan"); + YY_BREAK +case 441: +YY_RULE_SETUP +#line 2618 "tth.lex" +TTH_MATHC("arg"); + YY_BREAK +case 442: +YY_RULE_SETUP +#line 2619 "tth.lex" +TTH_MATHC("cos"); + YY_BREAK +case 443: +YY_RULE_SETUP +#line 2620 "tth.lex" +TTH_MATHC("cosh"); + YY_BREAK +case 444: +YY_RULE_SETUP +#line 2621 "tth.lex" +TTH_MATHC("cot"); + YY_BREAK +case 445: +YY_RULE_SETUP +#line 2622 "tth.lex" +TTH_MATHC("coth"); + YY_BREAK +case 446: +YY_RULE_SETUP +#line 2623 "tth.lex" +TTH_MATHC("csc"); + YY_BREAK +/* \\deg{SP}* TTH_MATHC("°"); Incorrect TeX */ +case 447: +YY_RULE_SETUP +#line 2625 "tth.lex" +TTH_MATHC("deg"); + YY_BREAK +case 448: +YY_RULE_SETUP +#line 2626 "tth.lex" +TTH_MATHC("dim"); + YY_BREAK +case 449: +YY_RULE_SETUP +#line 2627 "tth.lex" +TTH_MATHC("exp"); + YY_BREAK +case 450: +YY_RULE_SETUP +#line 2628 "tth.lex" +TTH_MATHC("hom"); + YY_BREAK +case 451: +YY_RULE_SETUP +#line 2629 "tth.lex" +TTH_MATHC("ker"); + YY_BREAK +case 452: +YY_RULE_SETUP +#line 2630 "tth.lex" +TTH_MATHC("lg"); + YY_BREAK +case 453: +YY_RULE_SETUP +#line 2631 "tth.lex" +TTH_MATHC("ln"); + YY_BREAK +case 454: +YY_RULE_SETUP +#line 2632 "tth.lex" +TTH_MATHC("log"); + YY_BREAK +case 455: +YY_RULE_SETUP +#line 2633 "tth.lex" +TTH_MATHC("sec"); + YY_BREAK +case 456: +YY_RULE_SETUP +#line 2634 "tth.lex" +TTH_MATHC("sin"); + YY_BREAK +case 457: +YY_RULE_SETUP +#line 2635 "tth.lex" +TTH_MATHC("sinh"); + YY_BREAK +case 458: +YY_RULE_SETUP +#line 2636 "tth.lex" +TTH_MATHC("tan"); + YY_BREAK +case 459: +YY_RULE_SETUP +#line 2637 "tth.lex" +TTH_MATHC("tanh"); + YY_BREAK +case 460: +#line 2640 "tth.lex" +case 461: +#line 2641 "tth.lex" +case 462: +#line 2642 "tth.lex" +case 463: +#line 2643 "tth.lex" +case 464: +#line 2644 "tth.lex" +case 465: +#line 2645 "tth.lex" +case 466: +#line 2646 "tth.lex" +case 467: +#line 2647 "tth.lex" +case 468: +#line 2648 "tth.lex" +case 469: +YY_RULE_SETUP +#line 2648 "tth.lex" +{ + if(strstr(yytext,"nolimit")){js2=0;}else{js2=1;} + *(yytext+1+strcspn(yytext+1," \\"))=0; + if(eqclose >tth_flev-1 || js2==0){ TTH_MATHC(yytext+1); + }else{ + strcat(eqstr,TTH_CELL3); + strcat(eqlimited,yytext+1); + oa_removes=0; + yy_push_state(getsubp); + if(levhgt[eqclose] == 1) levhgt[eqclose]=2; /* Force fraction closure */ + } + } + YY_BREAK +case 470: +/* rule 470 can match eol */ +#line 2661 "tth.lex" +case 471: +/* rule 471 can match eol */ +YY_RULE_SETUP +#line 2661 "tth.lex" +{ + if(eqclose > tth_flev-1 || !displaystyle ){ + unput('{'); + }else{ + TTH_INC_MULTI; + strcat(eqstr,TTH_CELL3); + mkkey(eqstr,eqstrs,&eqdepth); + eqclose++; + if(tth_flev<0)tth_flev=tth_flev-99; + TTH_PUSH_CLOSING; + active[eqclose-1]=30; + /*TTH_PRETEXCLOSE("\\tth_eqlimited");*/ + oa_removes=0; + if(*(yytext+1) == 'o'){ + TTH_CCPY(closing,TTH_OBRB); + strcpy(eqstr,TTH_OBR); + }else if(*(yytext+1) == 'u'){ + TTH_CCPY(closing,TTH_OBR); + strcpy(eqstr,TTH_OBRB); + }else { + strcpy(eqstr,""); + unput(' '); + } + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + tophgt[eqclose]=1; + levhgt[eqclose]=1; + active[eqclose]=1; + unput('{'); + } +} + YY_BREAK +case 472: +YY_RULE_SETUP +#line 2692 "tth.lex" +{ /* not done eqlimited section for mathop, overbrace */ + if(tth_debug&2)fprintf(stderr,"Mathop eqlimited:%s\n",eqstr); + if(strlen(eqlimited)+strlen(eqstr)< TTH_DLEN) { + strcat(eqlimited,eqstr); + if(tth_debug&2)fprintf(stderr,"EQLIMITED=||%s||\n",eqlimited); + }else{ + fprintf(stderr, + "Error: Fatal! Exceeded eqlimited storage. Over/underbrace too long.\n"); + TTH_EXIT(5); + } + *eqstr=0; + /*strcpy(eqstr,eqstrs[eqdepth-1]);*/ + yy_push_state(getsubp); /*Does not work here */ + if(levhgt[eqclose] == 1)levhgt[eqclose]=2; /* Force fraction closure */ + /*active[eqclose-1]=0;*/ +} + YY_BREAK +/* end of symbols */ +case 473: +YY_RULE_SETUP +#line 2710 "tth.lex" +/* Nothing needs doing */ + YY_BREAK +case 474: +YY_RULE_SETUP +#line 2711 "tth.lex" +TTH_SWAP("\\buildrel\\rightarrow\\over "); + YY_BREAK +case 475: +YY_RULE_SETUP +#line 2712 "tth.lex" +TTH_SWAP("\\buildrel\\leftarrow\\over "); + YY_BREAK +/* Above accents expressed with braces. Removed {WSP} 11 Apr */ +case 476: +YY_RULE_SETUP +#line 2715 "tth.lex" +{ /* single character bar; convert to \sar */ + *(yytext+1)='s'; + TTH_SCAN_STRING(yytext); + } + YY_BREAK +case 477: +#line 2720 "tth.lex" +case 478: +#line 2721 "tth.lex" +case 479: +#line 2722 "tth.lex" +case 480: +#line 2723 "tth.lex" +case 481: +#line 2724 "tth.lex" +case 482: +#line 2725 "tth.lex" +case 483: +#line 2726 "tth.lex" +case 484: +YY_RULE_SETUP +#line 2726 "tth.lex" +{ + if(tth_debug&2) { + fprintf(stderr,"Start Overaccent {, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s.\n",eqdepth,eqclose,tth_flev,levdelim[eqclose]); + } + if(*(yytext+2)=='d') *(yytext+1)='2'; + if(strstr(yytext,"wide")==yytext+1) yytext=yytext+4; /* skip wide */ + if(eqclose > tth_flev && *(yytext+1)=='q'){TTH_OUTPUT(scratchstring);} + if(eqclose > tth_flev && tth_istyle&2 && *(yytext+1)!='q'){ + /* Testing of stylesheet aproach for inline use: -w2 not Netscape. */ + switch(*(yytext+1)){ + case 'h': TTH_OUTPUT("");TTH_MATHI(217); + TTH_OUTPUT("");break; + case 't':TTH_OUTPUT("~");break; + case 'o': case 'b': case 's': + TTH_OUTPUT("");TTH_MATHI(190); + TTH_OUTPUT("");break; + case 'd':TTH_OUTPUT("· ");break; + case '2':TTH_OUTPUT("·· ");break; + case 'v': + TTH_OUTPUT("");TTH_MATHI(174); + TTH_OUTPUT("");break; + } + }else{ /*Display or non-style in-line*/ + mkkey(eqstr,eqstrs,&eqdepth); + eqclose++; + *eqstr=0; + if(tth_flev<0)tth_flev=tth_flev-99; + TTH_PUSH_CLOSING; + if(eqclose > tth_flev){ /* Inline levels will be enclosed in [()]. */ + TTH_CCPY(closing,""); + switch(*(yytext+1)){ + case 'o': case 'b': case 's': TTH_MATHS("`");break; + case 'd': TTH_CCPY(closing,"\\dot");break; + case '2': TTH_CCPY(closing,"\\ddot");break; + case 't': TTH_CCPY(closing,"\\tilde");break; + case 'h': TTH_MATHC("^");break; + case 'v': TTH_CCPY(closing,"\\vec");break; + case 'q': /* output moved above to fix inline */ break; + default : fprintf(stderr,"Overaccent error:%s,%d\n",yytext,*(yytext+1)); + } + }else{ /* Display case*/ + TTH_CCPY(closing,TTH_OA3); + switch(*(yytext+1)){ + case 'o': strcpy(eqstr,TTH_DIV); + strcat(eqstr,TTH_OA5);TTH_CCPY(closing,TTH_OA3); + break; + case 'b': case 's': TTH_OUTPUT(TTH_OA1); + TTH_OUTPUT((tth_istyle&1 ? "-":"_"));TTH_OUTPUT(TTH_OA2);break; + case 'd': TTH_OUTPUT(TTH_OA1); + if(tth_istyle&1) {TTH_MATHI(215);} else {TTH_OUTPUT(".");} + TTH_OUTPUT(TTH_OA2);break; + case '2': TTH_OUTPUT(TTH_OA1); + if(tth_istyle&1) {TTH_MATHI(215);TTH_MATHI(215);} else + {TTH_OUTPUT("..");} TTH_OUTPUT(TTH_OA2);break; + /* case '2': strcpy(eqstr,"..
    ");break; */ + case 't':TTH_OUTPUT(TTH_OA1);TTH_OUTPUT("~");strcat(eqstr,TTH_OA2);break; + case 'h':TTH_OUTPUT(TTH_OA1);TTH_OUTPUT("^");strcat(eqstr,TTH_OA2);break; + case 'v':TTH_OUTPUT(TTH_OA1);TTH_MATHI(174);TTH_OUTPUT(TTH_OA2);break; + /* case 'v': TTH_MATHI(174);strcat(eqstr,"
    ");break; */ + case 'q': { + if(tth_debug&2)fprintf(stderr,"qrtlen=%d\n",qrtlen); + sprintf(eqstr,"
  • ",valignstring); +} + YY_BREAK +case 672: +YY_RULE_SETUP +#line 4350 "tth.lex" +{ + yy_pop_state(); +} + YY_BREAK +case 673: +YY_RULE_SETUP +#line 4354 "tth.lex" +{ + if(*halstring) {yy_push_state(hamper); + }else{fprintf(tth_fdout,"
    and use
    %s  ",TTH_OA1); + for(i=0;i%s%s%s", + TTH_FOOTNOTESIZE,scrstring,TTH_SIZEEND); + TTH_OUTPUT(scratchstring); + } + sprintf(dupstore,"{\\surd %s}",margs[jscratch]); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + }else if(strcspn(margs[jscratch],"{}\\")==js2 + && !(tth_istyle&1) /* Only for non-compressed */ + && !qrtlen2 /* And non index */ + ){/* multiple char qrt case.*/ + sprintf(scratchstring,"%s%s%s",TTH_SYMBOL,TTH_SYMPT(chr1),TTH_SYMEND); + sprintf(dupstore,"\\qrt{%s}",margs[jscratch]); + qrtlen=strlen(dupstore)-6; + js2=0; + chscratch=dupstore+5; + while((jscratch=strcspn(chscratch," )(^_")) != strlen(chscratch)){ + js2++; + chscratch=chscratch+jscratch+1; + if(!strcspn((chscratch-1),"^_"))js2++; + } + qrtlen=qrtlen-(0.5*js2); + TTH_SCAN_STRING(dupstore);*dupstore=0; + }else{ /* Default case, embedded groups or commands. Or index*/ + if(qrtlen2){ + sprintf(scratchstring, + "%s%s%s%s%s%s",TTH_FOOTNOTESIZE,scrstring,TTH_SIZEEND, + TTH_SYMBOL,TTH_SYMPT(chr1),TTH_SYMEND); + }else{ + sprintf(scratchstring,"%s%s%s",TTH_SYMBOL,TTH_SYMPT(chr1),TTH_SYMEND); + } + if(eqclose > tth_flev-1 ) { /* put in braces if topped out */ + TTH_OUTPUT(scratchstring); + TTH_MATHC("{"); + TTH_PUSH_CLOSING; + /* TTH_CCPY(closing,"}"); Came in wrong order after fraction. + so fixed in the dupstore call.*/ + if(tth_debug&2) { + fprintf(stderr, + "Start Sqrt {, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s.\n" + ,eqdepth,eqclose,tth_flev,levdelim[eqclose]); + } + mkkey(eqstr,eqstrs,&eqdepth); + *eqstr=0; + if(tth_flev < 0) tth_flev=tth_flev-99; + eqclose++; + tophgt[eqclose]=0; + levhgt[eqclose]=1; + sprintf(dupstore,"%s}\\}",margs[jscratch]); + }else{ /* use overline */ + sprintf(dupstore,"{\\overline{%s}\\tth_makeroot}",margs[jscratch]); + tth_root_depth++; + /* pass to delimit code via global stack. */ + TTH_SCAN_STRING(dupstore); /* defer the contents scan. Do index */ + tth_flev=tth_flev-99; /* No built-up in index */ + /* use double braces to ensure inline enclosure works correctly. */ + sprintf(dupstore,"{{%s}\\tth_rootindex}",scrstring); + } + TTH_SCAN_STRING(dupstore); + *dupstore=0; + } + yy_pop_state(); + rmdef(margkeys,margs,&margmax); /* Dump two arguments */ + rmdef(margkeys,margs,&margmax); + }else{fprintf(stderr,"Error finding sqrt argument");} +} /* end of tth_sqrt*/ + YY_BREAK +case 488: +YY_RULE_SETUP +#line 2891 "tth.lex" +{ + TTH_CCPY(tth_root_index[tth_root_depth],eqstr); + tth_root_len[tth_root_depth]=strlen(eqstr); + *eqstr=0; + tth_flev=tth_flev+99; +} + YY_BREAK +case 489: +YY_RULE_SETUP +#line 2897 "tth.lex" +strcpy(levdelim[eqclose],"Ö"); + YY_BREAK +/* Above accents etc without braces: embrace following token (and rescan). */ +case 490: +/* rule 490 can match eol */ +#line 2902 "tth.lex" +case 491: +/* rule 491 can match eol */ +#line 2903 "tth.lex" +case 492: +/* rule 492 can match eol */ +#line 2904 "tth.lex" +case 493: +/* rule 493 can match eol */ +#line 2905 "tth.lex" +case 494: +/* rule 494 can match eol */ +#line 2906 "tth.lex" +case 495: +/* rule 495 can match eol */ +#line 2907 "tth.lex" +case 496: +/* rule 496 can match eol */ +YY_RULE_SETUP +#line 2907 "tth.lex" +{ /* overline needs leading WSP */ + TTH_INC_MULTI; + strcpy(dupstore,yytext); + *(dupstore+strcspn(dupstore," \t\r\n"))=0; + /* yy_push_state(embracetok); OLD */ + *expchar=0;TTH_CCPY(exptex,dupstore);*dupstore=0; + yy_push_state(exptokarg); /* overaccent */ + } + YY_BREAK +case 497: +/* rule 497 can match eol */ +YY_RULE_SETUP +#line 2915 "tth.lex" +{ /*This is default.*/ + TTH_INC_MULTI; + if((tth_flev > 0 )){ + strcpy(scrstring,yytext+5); + *(scrstring+strlen(scrstring)-2)=0; + sprintf(scratchstring,"}\\special{html:%s}%s\\tth_endnumbered", + (eqalignlog ? TTH_DISP5 : TTH_DISP3),scrstring); + /*fprintf(stderr,"Ending eqno: %s\n",scratchstring); */ + TTH_SCAN_STRING(scratchstring); + }else{ + yyless(5); TTH_MATHC("     "); + } + } + YY_BREAK +case 498: +YY_RULE_SETUP +#line 2928 "tth.lex" +{ /* Fallback only */ + if((tth_flev > 0 ) && (eqaligncell)) { + tth_enclose(TTH_EQ1,eqstr,TTH_EQ4,eqstore); + strcat(eqstr,TTH_CELL4); + } + TTH_MATHC("     "); + } + YY_BREAK +case 499: +/* rule 499 can match eol */ +YY_RULE_SETUP +#line 2935 "tth.lex" +{ + TTH_INC_MULTI; + TTH_SCAN_STRING("\\left.\\tth_size2\\right"); + } + YY_BREAK +case 500: +/* rule 500 can match eol */ +YY_RULE_SETUP +#line 2939 "tth.lex" +{ + TTH_INC_MULTI; + TTH_SCAN_STRING("\\left.\\tth_size3\\right"); + } + YY_BREAK +case 501: +YY_RULE_SETUP +#line 2943 "tth.lex" +levhgt[eqclose]=2; + YY_BREAK +case 502: +YY_RULE_SETUP +#line 2944 "tth.lex" +levhgt[eqclose]=3; + YY_BREAK +case 503: +/* rule 503 can match eol */ +YY_RULE_SETUP +#line 2945 "tth.lex" +{ + TTH_INC_MULTI;yy_push_state(bigdel);strcpy(scratchstring,"{");} + YY_BREAK +case 504: +/* rule 504 can match eol */ +YY_RULE_SETUP +#line 2947 "tth.lex" +{ + TTH_INC_MULTI;yy_push_state(bigdel);strcpy(scratchstring,"}");} + YY_BREAK +case 505: +YY_RULE_SETUP +#line 2950 "tth.lex" +; + YY_BREAK +case 506: +YY_RULE_SETUP +#line 2951 "tth.lex" +; + YY_BREAK +case 507: +YY_RULE_SETUP +#line 2952 "tth.lex" +; + YY_BREAK +/* Textstyle html is so limited that it makes no sense to use it. + Also it can trip problem with implied grouping of an eq insufficient. + to end dupgroup. Partly avoided by the eqdept>2 test but not entirely.*/ +/* +\\textstyle { + if(eqdepth>2){ + tth_flev=tth_flev-99; + TTH_CCPY(argchar,"\\tth_endtextstyle"); + storetype=5; + yy_push_state(dupgroup); + } +} +\\tth_endtextstyle tth_flev=tth_flev+99; + */ +case 508: +YY_RULE_SETUP +#line 2967 "tth.lex" + + YY_BREAK +case 509: +YY_RULE_SETUP +#line 2968 "tth.lex" + + YY_BREAK +case 510: +YY_RULE_SETUP +#line 2969 "tth.lex" + + YY_BREAK +/* Default equation actions. */ +/* Was single character. IE gave problems. */ +case 511: +YY_RULE_SETUP +#line 2973 "tth.lex" +{ + strcat(eqstr,tth_font_open[tth_push_depth]); + strcat(eqstr,yytext); + strcat(eqstr,tth_font_close[tth_push_depth]); + } + YY_BREAK +case 512: +YY_RULE_SETUP +#line 2979 "tth.lex" +TTH_MATHC(" "); + YY_BREAK +case 513: +#line 2981 "tth.lex" +case 514: +#line 2982 "tth.lex" +case 515: +#line 2983 "tth.lex" +case 516: +#line 2984 "tth.lex" +case 517: +YY_RULE_SETUP +#line 2984 "tth.lex" +{ + if(*(yytext) == '\\'){ chscratch=yytext+1;} else {chscratch=yytext;} + if(*chscratch=='&')chscratch="&"; + /* If the font has been changed, use it for non-letters too */ + if(!tth_mathitalic || strcmp(tth_font_open[tth_push_depth],TTH_ITAL1)!=0 ){ + strcat(eqstr,tth_font_open[tth_push_depth]); + strcat(eqstr,chscratch); + strcat(eqstr,tth_font_close[tth_push_depth]); + }else{ + strcat(eqstr,chscratch); + } +} + YY_BREAK +case 518: +/* rule 518 can match eol */ +YY_RULE_SETUP +#line 2996 "tth.lex" +TTH_INC_MULTI; TTH_SCAN_STRING(" = "); + YY_BREAK +/**** tth pseudo-TeX ******/ +case 519: +YY_RULE_SETUP +#line 3001 "tth.lex" +{ + if(tth_debug&8) fprintf(stderr,"#tthbigsup, eqhgt=%d\n",eqhgt); + strcat(eqstr,TTH_BR); + *expchar=0; + if(strlen(eqlimited)){ + tth_symext(eqlimited,eqstr+strlen(eqstr)); + *eqlimited=0; + for(i=0;i");TTH_PRECLOSE(""); + }else{ + TTH_OUTPUT("");TTH_PRECLOSE(""); + } +} + YY_BREAK +case 529: +YY_RULE_SETUP +#line 3063 "tth.lex" +{ /* No more subp's */ + if(*yytext != '#') yyless(0); + storetype=0; + yy_pop_state(); + if(strlen(supstore) || strlen(substore)){ /* Need to deal with subp */ + strcpy(dupstore,"{\\tthscriptsize{"); + strcat(dupstore,supstore); + strcat(dupstore,"}}#tthbigsup{\\tthscriptsize{"); + strcat(dupstore,substore); + strcat(dupstore,"}}"); + if(tth_istyle&1) eqhgt=0.8*hgt+0.7; else eqhgt=hgt; + if(tth_debug&8)fprintf(stderr,"Scanning subpscripts:%s\n",dupstore); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + *argchar=0; + *supstore=0; + *substore=0; + strcpy(expchar,""); /* make non-null */ + yy_push_state(exptokarg); /* scanning subpscripts */ + }else if(strlen(eqlimited)){ /* No delimiters but a limited symbol */ + tth_symext(eqlimited,eqstr+strlen(eqstr)); + for(i=0;i"); + *eqlimited=0; + } + } + YY_BREAK +/* New big, left, right, delimiters section */ +case 530: +YY_RULE_SETUP +#line 3093 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"{");unput(*scratchstring);} + YY_BREAK +case 531: +YY_RULE_SETUP +#line 3095 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"}");unput(*scratchstring);} + YY_BREAK +case 532: +YY_RULE_SETUP +#line 3097 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"(");unput(*scratchstring);} + YY_BREAK +case 533: +YY_RULE_SETUP +#line 3099 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],")");unput(*scratchstring);} + YY_BREAK +case 534: +YY_RULE_SETUP +#line 3101 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"[");unput(*scratchstring);} + YY_BREAK +case 535: +YY_RULE_SETUP +#line 3103 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"]");unput(*scratchstring);} + YY_BREAK +case 536: +YY_RULE_SETUP +#line 3105 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"é");unput(*scratchstring);} + YY_BREAK +case 537: +YY_RULE_SETUP +#line 3107 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"ù");unput(*scratchstring);} + YY_BREAK +case 538: +YY_RULE_SETUP +#line 3109 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"ë");unput(*scratchstring);} + YY_BREAK +case 539: +YY_RULE_SETUP +#line 3111 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"û");unput(*scratchstring);} + YY_BREAK +case 540: +YY_RULE_SETUP +#line 3113 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"á");unput(*scratchstring);} + YY_BREAK +case 541: +YY_RULE_SETUP +#line 3115 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"ñ");unput(*scratchstring);} + YY_BREAK +case 542: +YY_RULE_SETUP +#line 3117 "tth.lex" +{ + yy_pop_state();strcpy(levdelim[eqclose+1],"|");unput(*scratchstring);} + YY_BREAK +case 543: +YY_RULE_SETUP +#line 3119 "tth.lex" +{ + yy_pop_state();*levdelim[eqclose+1]=*yytext;unput(*scratchstring);} + YY_BREAK +case 544: +YY_RULE_SETUP +#line 3121 "tth.lex" +yy_pop_state();*levdelim[eqclose+1]=0;unput(*scratchstring); + YY_BREAK +case 545: +YY_RULE_SETUP +#line 3122 "tth.lex" +{ /* unknown bigdelimiter; make blank and then rescan. */ + yy_pop_state();yyless(0); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +/* ************* LaTeX Math constructs. ***********************/ +case 546: +#line 3132 "tth.lex" +case 547: +#line 3133 "tth.lex" +case 548: +YY_RULE_SETUP +#line 3133 "tth.lex" +{ /* Latex display equations */ + if(tth_debug&3)fprintf(stderr,"Latex display eqn %d\n",equatno); + displaystyle=1; + /* Not needed now that empty div is used. + if(tth_htmlstyle&2){ + TTH_OUTPUT(closing); strcpy(closing,""); + TTH_OUTPUT("\n
    \n"); + }*/ + horizmode=0; + strcpy(eqstr,""); + eqclose=0; + mkkey(eqstr,eqstrs,&eqdepth); + TTH_PUSH_CLOSING; + if(!strstr(tth_font_open[tth_push_depth],TTH_ITALO)){ + TTH_CCAT(tth_font_open[tth_push_depth],tth_font_open[0]); + TTH_CCAT(tth_font_close[tth_push_depth],tth_font_close[0]); + } + yy_push_state(equation); + if( (strlen(yytext)>2) && *(yytext+7)=='e'){ + if(*(yytext+strlen(yytext)-2)!='*') { + equatno++; + strcpy(environment,"equation"); + sprintf(envirchar,"%d",equatno); + }else if(tth_multinum) *envirchar=0; + } + if(tth_debug&2) fprintf(stderr,"envirchar=%s, tth_multinum=%d, equatno=%d\n", + envirchar,tth_multinum,equatno); + TTH_SCAN_STRING("{"); /*OCT*/ + } + YY_BREAK +/* begin (inline) math moved after the close math */ +case 549: +YY_RULE_SETUP +#line 3163 "tth.lex" +{ /* Assume this is NOT inside \math */ + if(strstr(yytext,"*") != NULL){ + eqalignlog=1; tth_multinum++; /* No row numbering. No end numbering */ + } else eqalignlog=0; + if(tth_debug&2)fprintf(stderr, + "eqnarray: eqalignlog=%d, tth_multinum=%d yytext=%s\n", + eqalignlog,tth_multinum,yytext); + TTH_SCAN_STRING("\\begin{equation}\\eqalign{"); + } + YY_BREAK +/* ********************** LateX Non Math ********************************/ +case 550: +YY_RULE_SETUP +#line 3175 "tth.lex" +{ /* Check for aux file. If present input. */ + tth_LaTeX=1; + if(tth_splitfile)strcpy(filechar,"index.html"); /*sf*/ + if(strlen(tth_latex_file)){ + TTH_CCPY(argchar,tth_latex_file);strcat(argchar,".aux"); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + } else{ + fprintf(stderr,"No auxiliary LaTeX file found: %s\n",argchar); + /* New automatic auxfile section.*/ + if(tth_autopic){ + fprintf(stderr, + "...trying to run latex, logfile=%s.tlg. This may take a moment ...\n", + tth_latex_file); + sprintf(scratchstring, + "latex -interaction=batchmode %s >%s.tlg", + tth_latex_file,tth_latex_file); + if((js2=system(scratchstring))!=SUCCESS) + fprintf(stderr,"...latex returned: %d indicating error(s) in the tex file.\n",js2); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + fprintf(stderr,"...latex seems to have created the aux file.\n"); + }else{ + fprintf(stderr,"**** System call:%s failed to create aux file.\n**** You probably don't have latex installed.\n", + scratchstring); + fprintf(stderr,"**** Continuing, but any forward references etc. will be incorrect.\n"); + } + /* End of auto aux section.*/ + } + } + argchar[0]=0; + }else{ + fprintf(stderr, + "Latex base filename blank. Auxiliary files will not be found.\n"); + } + TTH_PUSH_CLOSING;TTH_CCPY(closing,""); + /* {TTH_PAR_ACTION} Not here because of titles etc. */ + horizmode=0; + } + YY_BREAK +case 551: +YY_RULE_SETUP +#line 3218 "tth.lex" +{/* Open index tid file for writing and start to do so. */ + if(strlen(tth_latex_file)){ + strcpy(scratchstring,tth_latex_file);strcat(scratchstring,".tid"); + if( (tth_indexfile=fopen(scratchstring,"w")) ){ + fprintf(stderr,"Opened index file: %s\n",scratchstring); + /* Open the makeindex style file. Or use default compositor.*/ + strcpy(scratchstring,tth_latex_file);strcat(scratchstring,".tms"); + if( (tth_indexstyle=fopen(scratchstring,"w")) ){ + strcpy(page_compositor,"."); + fprintf(tth_indexstyle,"page_compositor \"%s\"\n",page_compositor); + fclose(tth_indexstyle); + } + } else { + fprintf(stderr,"**** Failed to open index file: %s Line %d\n",scratchstring,tth_num_lines); + } + } + } + YY_BREAK +case 552: +YY_RULE_SETUP +#line 3236 "tth.lex" +{ /* Version to grab whole thing even special chars*/ + *dupstore=0; + *argchar=0; + yy_push_state(indexgroup); + storetype=99; /* Just leave in dupgroup to be dealt with by prior state*/ + yy_push_state(uncommentgroup); + bracecount=-1; +} + YY_BREAK +case 553: +/* rule 553 can match eol */ +YY_RULE_SETUP +#line 3244 "tth.lex" +{ /* \index action on group stored in dupstore. */ + yyless(0); + yy_pop_state(); + if(horizmode) horizmode=1; + chscratch=dupstore+1; /* Remove braces.*/ + *(chscratch+strlen(chscratch)-1)=0; + tthindexrefno++; + if(tth_indexfile != NULL){ + strcpy(scratchstring,chscratch); + *(scratchstring+strcspn(scratchstring,"|@"))= 0 ; + /*Here we should remove spaces and special characters in a version + of scratchstring to be used as the name. Because (quoting) ID and + NAME tokens must begin with a letter ([A-Za-z]) and may be + followed by any number of letters, digits ([0-9]), hyphens ("-"), + underscores ("_"), colons (":"), and periodsx("."). This means + the unallowed characters are: "\n\t_!\"#$%&'()*+,/;<=>?[\\]^`{|}~" */ + /* This version replaced only ! + while(strlen(scratchstring)-strcspn(scratchstring,"!")) + *(scratchstring+strcspn(scratchstring,"!")) = '+'; */ + while(strlen(scratchstring) + -strcspn(scratchstring,"\n\t !\"#$%&'()*+,/;<=>?[\\]^`{|}~")) + *(scratchstring + +strcspn(scratchstring,"\n\t !\"#$%&'()*+,/;<=>?[\\]^`{|}~")) = '_'; + strcpy(scrstring,chscratch); + *(scrstring+strcspn(scrstring,"|"))= 0 ; /* remove all number formatting */ + if(lbook){ + if(appendix)sprintf(argchar,"%c",chapno+64); + else sprintf(argchar,"%d",chapno); + if(strstr(chscratch,"|see")==NULL){ + if(tth_splitfile) fprintf(tth_indexfile, /*sf*/ + "\\indexentry{%s|href{%s#%s%s%d%d}}{%s%s%d}\n", /*sf*/ + scrstring,filechar,scratchstring,/*sf*/ + argchar,sectno,tthindexrefno,/*sf*/ + argchar,page_compositor,sectno); else /*sf*/ + fprintf(tth_indexfile, + "\\indexentry{%s|href{#%s%s%d%d}}{%s%s%d}\n", + scrstring,scratchstring, + argchar,sectno,tthindexrefno, + argchar,page_compositor,sectno); + fprintf(tth_fdout,"", + scratchstring,argchar,sectno,tthindexrefno); + }else{ /* A |see case */ + fprintf(tth_indexfile, + "\\indexentry{%s}{%s%s%d}\n",chscratch, + argchar,page_compositor,sectno); } + }else { + if(appendix)sprintf(argchar,"%c",sectno+64); + else sprintf(argchar,"%d",sectno); + if(strstr(chscratch,"|see")==NULL){ + if(tth_splitfile) fprintf(tth_indexfile, /*sf*/ + "\\indexentry{%s|href{%s#%s%s%d%d}}{%s%s%d}\n", /*sf*/ + scrstring,filechar,scratchstring, /*sf*/ + argchar,subsectno,tthindexrefno, /*sf*/ + argchar,page_compositor,subsectno); else /*sf*/ + fprintf(tth_indexfile, + "\\indexentry{%s|href{#%s%s%d%d}}{%s%s%d}\n", + scrstring,scratchstring, + argchar,subsectno,tthindexrefno, + argchar,page_compositor,subsectno); + fprintf(tth_fdout,"" + ,scratchstring,argchar,subsectno); + }else{ /* A |see case */ + fprintf(tth_indexfile, + "\\indexentry{%s}{%s%s%d}\n",chscratch, + argchar,page_compositor,subsectno); + } + } + *argchar=0; + } + *dupstore=0; +} + YY_BREAK +case 554: +YY_RULE_SETUP +#line 3316 "tth.lex" +{ /* Check for file. If present put title and open */ + if(tth_indexfile !=NULL){ + fprintf(stderr,"Closing index file and processing ...\n"); + fclose(tth_indexfile); + tth_indexfile=NULL;/* Omitting this caused segfaults during + footnote wrap if there are index entries in + footnotes. I guess because one tries to + write to fclosed file. In any case those + entries aren't entered into index. Fixme.*/ + if(*tth_index_cmd){ + if(strstr(tth_index_cmd," ")){/* Command with spaces is complete format*/ + sprintf(scratchstring, + tth_index_cmd,tth_latex_file,tth_latex_file,tth_latex_file); + }else{/* No spaces: just the makeindex command */ + sprintf(scratchstring,"%s -o %s.tin %s.tid", + tth_index_cmd,tth_latex_file,tth_latex_file); + } + }else sprintf(scratchstring,"makeindex -o %s.tin -s %s.tms %s.tid", + tth_latex_file,tth_latex_file,tth_latex_file); + jscratch=system(scratchstring); + if(jscratch != SUCCESS){ + fprintf(stderr,"**** System call failed: %s**** Index not made.\n" + ,scratchstring); + } + strcpy(scratchstring,"(showing section)"); + } else *scratchstring=0; + /* Get the index anyway */ + sprintf(argchar,"\n\\special{html:\n}\\beginsection{\\indexname{ %s}}\\par\\input %s.tin", + scratchstring,tth_latex_file); + TTH_SCAN_STRING(argchar); + argchar[0]=0; + if(tth_splitfile){ /*sf*/ + strcpy(filenext,"docindex.html");/*sf*/ + TTH_SCAN_STRING("\\tthsplittail\\tthsplitinv\\tthsplittop\\tthfileupd"); /*sf*/ + }/*sf*/ + } + YY_BREAK +case 555: +YY_RULE_SETUP +#line 3352 "tth.lex" +{ /* Check for file. If present put title and open */ + TTH_CCPY(argchar,tth_latex_file);TTH_CCAT(argchar,".toc"); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + fclose(tth_inputfile);tth_inputfile=NULL; + sprintf(scratchstring,"\\htmlheader{1}{\\contentsname{ }}\\input %s ", + argchar); + if(tth_indexfile) {TTH_PUSH_BUFF(11);} else /*get extra code*/ + {TTH_PUSH_BUFF(0);} /*braces required*/ + yy_scan_string(scratchstring); + } + argchar[0]=0; + } + YY_BREAK +case 556: +YY_RULE_SETUP +#line 3364 "tth.lex" +{ /* Check for file. If present put title and open */ + TTH_CCPY(argchar,tth_latex_file);strcat(argchar,".lot"); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\htmlheader{1}{\\listtablename{ }}\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + } + tbno=0;/*sf*/ + argchar[0]=0; + } + YY_BREAK +case 557: +YY_RULE_SETUP +#line 3374 "tth.lex" +{ /* Check for file. If present put title and open */ + TTH_CCPY(argchar,tth_latex_file);strcat(argchar,".lof"); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\htmlheader{1}{\\listfigurename{ }}\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + } + fgno=0;/*sf*/ + argchar[0]=0; + } + YY_BREAK +case 558: +/* rule 558 can match eol */ +YY_RULE_SETUP +#line 3384 "tth.lex" +{ /*Processing aux file*/ + TTH_INC_LINE + if(strstr(yytext,"toc}{\\contentsline")==yytext+12){ /*sf*/ + /* Updating section label*/ /*sf*/ + if( (chscratch=strstr(yytext,"numberline {"))!=NULL){ /*sf*/ + strncpy(schar,(chscratch+12),2); /*max: 2 digit number*/ /*sf*/ + *(schar+strcspn(schar,"}."))=0; /*sf*/ + } /*sf*/ + }else if(strstr(yytext,"lof}{\\contentsline")){ /*sf*/ + if(fgno < TNO) mkkey(schar,fchar,&fgno); /*sf*/ + else fprintf(stderr,"Too many figures"); /*sf*/ + }else if(strstr(yytext,"lot}{\\contentsline")){ /*sf*/ + if(tbno < TNO) mkkey(schar,tchar,&tbno); /*sf*/ + else fprintf(stderr,"Too many tables"); /*sf*/ + } /*sf*/ +} + YY_BREAK +case 559: +/* rule 559 can match eol */ +YY_RULE_SETUP +#line 3400 "tth.lex" +{ + horizmode=1; + *scrstring=0; + if(tth_debug&128) fprintf(stderr,"Contentsline %s\n",yytext); + strcpy(refchar,"tth_sEc"); + if(strstr(yytext,"{chapter}")!=NULL){ + chaplog=4;strcpy(refchar,"tth_chAp"); + }else if(strstr(yytext,"{table}")!=NULL){ + strcpy(refchar,"tth_tAb"); + for(i=0;i<4;i++) strcat(scrstring," "); + }else if(strstr(yytext,"{figure}")!=NULL){ + strcpy(refchar,"tth_fIg"); + for(i=0;i<4;i++) strcat(scrstring," "); + }else if(strstr(yytext,"{section}")!=NULL){ + for(i=0;i%s  ", + scrstring,auxflch,refchar,chscratch,chscratch); + TTH_TEX_FN("{#1}\\special{html:
    }\\tthunknown#tthdrop2",2); + }else{ + if(strstr(yytext,"{part}")){/*Only enter unnumbered line if part*/ + TTH_TEX_FN("{#1}\\special{html:
    }\\tthunknown#tthdrop2",2); + }else{TTH_TEX_FN("\\tthunknown#tthdrop2",2);} + } + unput('{'); /* Already in first group. */ +} + YY_BREAK +case 560: +/* rule 560 can match eol */ +YY_RULE_SETUP +#line 3451 "tth.lex" +{ + TTH_INC_MULTI; + js2=strcspn(yytext,"{"); + strcpy(dupstore,yytext+js2+1); + if(tth_debug&256) fprintf(stderr,"Citations:%s\n",dupstore); + i=0;ind=-1; + strcpy(dupstore2,"\\tthciteob"); + for(jargmax=0;jargmax<30;jargmax++){ +/* ind=ind+i+1; */ + ind=ind+i+1+strspn(dupstore+ind+i+1,", \t\n");/*Advance to start of next*/ + js2=strcspn(dupstore+ind,"},\t\n"); /*Termination of key*/ + i=js2+strspn(dupstore+ind+js2," \t\n"); /* Next divider*/ + *(dupstore+ind+js2)=0; + jarg=indexkey(dupstore+ind,keys,&nkeys); + if(jarg == -1) { + fprintf(stderr,"No bibcite for %s\n",dupstore+ind); + }else{ + if(ckeys[jarg]==0){ + if(tth_splitfile)sprintf(dupstore2+strlen(dupstore2),/*sf*/ + "\\special{html:}",/*sf*/ + dupstore+ind,dupstore+ind);else /*sf*/ + sprintf(dupstore2+strlen(dupstore2), + "\\special{html:}", + dupstore+ind,dupstore+ind); + ckeys[jarg]++; + }else{ + if(tth_splitfile)sprintf(dupstore2+strlen(dupstore2),/*sf*/ + "\\special{html:}",/*sf*/ + dupstore+ind);else /*sf*/ + sprintf(dupstore2+strlen(dupstore2), + "\\special{html:}", + dupstore+ind); + } + strcpy(scratchstring,defs[jarg]); + if((chscratch=strstr(scratchstring,"#tthdrop0"))) *chscratch=0; + /* New operator on the bibcite */ + strcat(dupstore2,"\\tthciteform "); + strcat(dupstore2,scratchstring); + if(*(dupstore+ind+i+1))strcat(dupstore2,"\\tthciteib{}"); + strcat(dupstore2,"\\special{html:}"); + if(!nargs[jarg]){ + if(lbook)jscratch=chapno; else jscratch=sectno; + if(appendix) nargs[jarg]=jscratch+64; + else nargs[jarg]=jscratch; + js2=jarg; + mkkey(filechar,optargs,&js2); + } + } + if(*(dupstore+ind+i+1)){ + strcat(dupstore2,"\\tthcitepb"); + } else { /* Exhausted citations */ + js2=strcspn(yytext,"{"); + if((jscratch=strcspn(yytext,"[")) < js2-2){ + strcat(dupstore2,"\\tthcitefi{}"); + strncat(dupstore2,yytext+jscratch+1,js2-jscratch-2); + } + strcat(dupstore2,"\\tthcitecb{}"); + jargmax=30; + } + } + if(tth_debug&256)fprintf(stderr,"Rescanning citations:\n%s\n",dupstore2); + TTH_SCAN_STRING(dupstore2); + i=0;ind=0;jarg=0;jargmax=0; *dupstore=0; *dupstore2=0; +} + YY_BREAK +case 561: +YY_RULE_SETUP +#line 3516 "tth.lex" +TTH_TEX_FN("\\tth_thebibliography#tthdrop1",1); + YY_BREAK +case 562: +YY_RULE_SETUP +#line 3517 "tth.lex" +{ + if(lbook) {TTH_SCAN_STRING("\\special{html:

    }\\bibname\\special{html:

    \n}\\begin{description}");} + else {TTH_SCAN_STRING("\\special{html:

    }\\refname\\special{html:

    \n}\\begin{description}");} + if(tth_splitfile){ /*sf*/ + if(!bibliogs) strcpy(filenext,"refs.html"); /*sf*/ + else sprintf(filenext,"refs%d.html",bibliogs); /*sf*/ + bibliogs++; /*sf*/ + TTH_SCAN_STRING("\\tthsplittail\\tthsplitinv\\tthsplittop\\tthfileupd"); /*sf*/ + }/*sf*/ + TTH_SCAN_STRING("\\par"); + } + YY_BREAK +case 563: +YY_RULE_SETUP +#line 3529 "tth.lex" +TTH_TEX_FN_OPT("\\tthbibitem{#2}#tthdrop2",2,""); + YY_BREAK +case 564: +/* rule 564 can match eol */ +YY_RULE_SETUP +#line 3530 "tth.lex" +{ + TTH_INC_MULTI; + TTH_OUTPUT(closing);strcpy(closing,"\n"); /*27 Apr 2001 */ + fprintf(tth_fdout,"
    "); + strcpy(dupstore,yytext); + *(dupstore+strlen(dupstore)-1)=0; + if((chs2=strstr(dupstore,"]"))==NULL) chs2=dupstore; + chs2=chs2+strcspn(chs2,"{")+1; + jarg=indexkey(chs2,keys,&nkeys); + if(jarg== -1){ + fprintf(stderr,"Unknown bibitem %s\n",chs2); + fprintf(tth_fdout,"[]
    "); + }else{ + *(scratchstring)=0; + if(tth_splitfile){ /*sf*/ + if(!optargs[jarg]) /*sf*/ + {fprintf(stderr,"**** Error: Null bibitem optarg (file)\n");}else/*sf*/ + strcpy(scratchstring,optargs[jarg]); /*sf*/ + } /*sf*/ + /* New operator on the bibcite */ + strcpy(scrstring,"\\tthbibform "); + strcat(scrstring,defs[jarg]); + if((chscratch=strstr(scrstring,"#tthdrop"))) *chscratch=0;/* huh?*/ + strcat(scrstring,"\\tthbibcb"); + strcat(scrstring,"}"); + TTH_PUSH_CLOSING; strcpy(closing,"
    "); + fprintf(tth_fdout,"",scratchstring,chs2,chs2); + TTH_SCAN_STRING(scrstring); + } + jarg=0;*dupstore=0; + } + YY_BREAK +case 565: +/* rule 565 can match eol */ +YY_RULE_SETUP +#line 3561 "tth.lex" +{ /* Input the bbl file. */ + TTH_CCPY(argchar,tth_latex_file);strcat(argchar,".bbl"); + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + }else{ + if(tth_autopic){ + fprintf(stderr, + "**** No bibliography file %s found. Trying to create.\n",argchar); + /* New automatic bbl file section.*/ + fprintf(stderr, + "...trying to run latex, logfile=%s.tlg. This may take a moment ...\n", + tth_latex_file); + sprintf(scratchstring,"latex -interaction=batchmode %s >%s.tlg", + tth_latex_file,tth_latex_file); + if((js2=system(scratchstring))!=SUCCESS) + fprintf(stderr,"...latex returned: %d indicating error(s) in the tex file.\n",js2); + fprintf(stderr,"...trying to run bibtex ...\n"); + sprintf(scrstring,"bibtex %s",tth_latex_file); + if(system(scrstring)!=SUCCESS)fprintf(stderr,"Bibtex failed\n"); + if(system(scratchstring)!=SUCCESS){}; + if( (tth_inputfile=fopen(argchar,"r")) != NULL){ + tth_prefix("\\input ",argchar,eqstore); + TTH_SCAN_STRING(argchar); + fclose(tth_inputfile);tth_inputfile=NULL; + fprintf(stderr,"...latex/bibtex have created file. "); + fprintf(stderr,"If Unknown bibitem now occurs, rerun tth.\n"); + }else{ + fprintf(stderr,"**** System calls failed. You probably don't have latex or bibtex installed.\n**** No bbl file created. Bibliography will be incomplete.\n"); + } + }else{ + /* End of auto bbl section.*/ + fprintf(stderr, + "**** No bibliography file %s found. Create using latex and bibtex.\n", + argchar); + } + } + argchar[0]=0; + } + YY_BREAK +case 566: +YY_RULE_SETUP +#line 3602 "tth.lex" +{ + chapno=0;sectno=0;appendix=1; + if(lbook) strcpy(scratchstring, + "\\renewcommand{\\thechapter}{\\Alph{chapter}}"); + else strcpy(scratchstring, + "\\renewcommand{\\thesection}{\\Alph{section}}"); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 567: +YY_RULE_SETUP +#line 3610 "tth.lex" +{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    "); +} + YY_BREAK +case 568: +YY_RULE_SETUP +#line 3613 "tth.lex" +{ + sprintf(scratchstring,"%s\\tthenclose{\\special{html:

    }%s{ %s} \\special{html:
    }}{\\special{html:


    }} ", + "\\stepcounter{part}", + "\\partname","\\thepart"); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 569: +YY_RULE_SETUP +#line 3619 "tth.lex" +{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    ");} + YY_BREAK +case 570: +YY_RULE_SETUP +#line 3621 "tth.lex" +{ + figureno=0;tableno=0; + sprintf(labelchar,"%d",chapno+1); + if(appendix) sprintf(labelchar,"%c",chapno+1+64); + TTH_SCAN_STRING("\\tthchapcomplete"); + if(tth_splitfile){ /*sf*/ + sprintf(filenext,"chap%s.html",labelchar);/*sf*/ + TTH_SCAN_STRING("\\tthsplittail\\tthsplitinv\\tthsplittop\\tthfileupd"); /*sf*/ + }/*sf*/ +} + YY_BREAK +case 571: +YY_RULE_SETUP +#line 3631 "tth.lex" +if(tth_splitfile) strcpy(filechar,filenext); /*sf*/ + YY_BREAK +case 572: +YY_RULE_SETUP +#line 3632 "tth.lex" +{/*sf*/ + fprintf(tth_fdout,TTH_MIME_DIVIDE,filenext);/*sf*/ + fprintf(tth_fdout,TTH_DOCTYPE); /*sf*/ + fprintf(tth_fdout,TTH_GENERATOR,TTH_NAME,TTH_VERSION); /*sf*/ + fprintf(tth_fdout,TTH_ENCODING); /*sf*/ + fprintf(tth_fdout,"%s",TTH_P_STYLE); /*sf*/ + if(tth_istyle)fprintf(tth_fdout,"%s",TTH_STYLE); /*sf*/ + if(!(tth_htmlstyle&4))fprintf(tth_fdout,"%s",TTH_SIZESTYLE); /*sf*/ + fprintf(tth_fdout,"%s\n",filenext);/*sf*/ + if(tth_htmlstyle&3)fprintf(tth_fdout,"\n
    \n");/*sf*/ +}/*sf*/ + YY_BREAK +case 573: +YY_RULE_SETUP +#line 3643 "tth.lex" +fprintf(tth_fdout,"%s",filenext); /*sf*/ + YY_BREAK +case 574: +YY_RULE_SETUP +#line 3644 "tth.lex" +fprintf(tth_fdout,"%s",filechar); /*sf*/ + YY_BREAK +case 575: +YY_RULE_SETUP +#line 3645 "tth.lex" +{ + if(appendix) {TTH_CCPY(argchar,"\\appendixname");} + else TTH_CCPY(argchar,"\\chaptername"); + sprintf(scratchstring,"\n\\stepcounter{chapter}\\tthenclose{\ + \\special{html:

    }\n%s{ \\thechapter}\ + \\special{html:
    }}{\\special{html:

    }} ", + labelchar,argchar); + TTH_SCAN_STRING(scratchstring);*argchar=0; +} + YY_BREAK +case 576: +YY_RULE_SETUP +#line 3654 "tth.lex" +{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    ");} + YY_BREAK +case 577: +YY_RULE_SETUP +#line 3656 "tth.lex" +{ + TTH_SCAN_STRING("\\tthsectcomplete"); + if(lbook) { + sprintf(labelchar,"%d.%d",chapno,sectno+1); + if(appendix)sprintf(labelchar,"%c.%d",chapno+64,sectno+1); + }else{ + sprintf(labelchar,"%d",sectno+1); + if(appendix)sprintf(labelchar,"%c",sectno+1+64); + if(tth_splitfile){ /*sf*/ + sprintf(filenext,"sec%s.html",labelchar);/*sf*/ + TTH_SCAN_STRING("\\tthsplittail\\tthsplitinv\\tthsplittop\\tthfileupd"); /*sf*/ + }/*sf*/ + } +} + YY_BREAK +case 578: +YY_RULE_SETUP +#line 3670 "tth.lex" +{ + if(secnumdepth > 0){ + /* the following needs the space at the end for tex compatibility */ + sprintf(scratchstring,"\n\\stepcounter{section}\\tthenclose{\ + \\special{html:

    }\n\\thesection\ + \\special{html:  }}{\\special{html:

    }} ",labelchar); + TTH_SCAN_STRING(scratchstring); + }else{ + fprintf(tth_fdout,"\n

    "); + yy_push_state(tokenarg); + TTH_CCPY(argchar,"

    "); + } +} + YY_BREAK +case 579: +YY_RULE_SETUP +#line 3683 "tth.lex" +{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    ");} + YY_BREAK +case 580: +YY_RULE_SETUP +#line 3685 "tth.lex" +{ + { + if(lbook) { + if(appendix) sprintf(labelchar,"%c.%d.%d",chapno+64,sectno,subsectno+1); + else sprintf(labelchar,"%d.%d.%d",chapno,sectno,subsectno+1); + }else { + if(appendix) sprintf(labelchar,"%c.%d",sectno+64,subsectno+1); + else sprintf(labelchar,"%d.%d",sectno,subsectno+1); + } + if(secnumdepth > 1){ + sprintf(scratchstring,"\n\\stepcounter{subsection}\\tthenclose{\ + \\special{html:

    }\n\\thesubsection\ + \\special{html:  }}{\\special{html:

    }} ",labelchar); + TTH_SCAN_STRING(scratchstring); + }else{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    "); + } + } +} + YY_BREAK +case 581: +YY_RULE_SETUP +#line 3704 "tth.lex" +{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    ");} + YY_BREAK +case 582: +YY_RULE_SETUP +#line 3706 "tth.lex" +{ + { + if(lbook) { + if(appendix) sprintf(labelchar,"%c.%d.%d.%d", + chapno+64,sectno,subsectno,subsubsectno+1); + else sprintf(labelchar,"%d.%d.%d.%d", + chapno,sectno,subsectno,subsubsectno+1); + }else { + if(appendix) sprintf(labelchar,"%c.%d.%d", + sectno+64,subsectno,subsubsectno+1); + else sprintf(labelchar,"%d.%d.%d",sectno,subsectno,subsubsectno+1); + } + if(secnumdepth > 2){ + sprintf(scratchstring,"\n\\stepcounter{subsubsection}\\tthenclose{\ + \\special{html:

    }\n\\thesubsubsection\ + \\special{html:  }}{\\special{html:

    }} ",labelchar); + TTH_SCAN_STRING(scratchstring); + }else{ + fprintf(tth_fdout,"\n

    "); yy_push_state(tokenarg); TTH_CCPY(argchar,"

    "); + } + } +} + YY_BREAK +case 583: +YY_RULE_SETUP +#line 3728 "tth.lex" +{ + if(secnumdepth > 3){ + TTH_TEX_FN("\\par\\stepcounter{paragraph}{\\bf\\theparagraph\ + \\special{html:\n}\ + \\special{html:  }#1\\special{html:\n}\\ }#tthdrop1",1); + }else{ + TTH_TEX_FN("\\par{\\bf#1\\ \\ }#tthdrop1",1); + } +} + YY_BREAK +case 584: +YY_RULE_SETUP +#line 3737 "tth.lex" +{ + if(secnumdepth > 4){ + TTH_TEX_FN("\\stepcounter{subparagraph}{\\special{html:
    }\ + \\quad\\bf\ + \\special{html:\n}\ + \\thesubparagraph\ + \\special{html:  }#1\\special{html:\n}\\ }#tthdrop1",1); + }else{ + TTH_TEX_FN("\\special{html:
    }{\\quad\\bf#1\\ \\ }#tthdrop1",1); + } +} + YY_BREAK +case 585: +YY_RULE_SETUP +#line 3749 "tth.lex" +{ + if(tth_debug&256)fprintf(stderr,"Caption in environment:%s\n",environment); + if(!strcmp(environment,"figure")){ + figureno++; + if(lbook) sprintf(envirchar,"%d.%d",chapno,figureno); + else sprintf(envirchar,"%d",figureno); + sprintf(scratchstring,"\n\\tthenclose{\\special{html:
    }\\figurename{ \\thefigure:} }{\\special{html:
    }} "); + }else if(!strcmp(environment,"table")){ + tableno++; + if(lbook) sprintf(envirchar,"%d.%d",chapno,tableno); + else sprintf(envirchar,"%d",tableno); + sprintf(scratchstring,"\n\\tthenclose{\\special{html:
    }\\tablename{ \\thetable:} }{\\special{html:
    }} "); + }else{*scratchstring=0; /*Partial fix of nested newenvironment*/} + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 586: +YY_RULE_SETUP +#line 3764 "tth.lex" +{ + if(horizmode) horizmode=1; + jscratch=indexkey("#1",margkeys,&margmax); + if(tth_debug&256)fprintf(stderr, + "tthnewlabel jscratch=%d, margs[jscratch]=%s\n",jscratch,margs[jscratch]); + strcpy(dupstore,margs[jscratch]); + if(tth_group(scrstring,margs[jscratch+1],TTH_CHARLEN-1)){ + fprintf(stderr,"Label end broken in newlabel:%s\n",margs[jscratch+1]); } + if(tth_splitfile){ /*sf*/ + if(lbook)strcpy(scratchstring,"chap"); /*sf*/ + else strcpy(scratchstring,"sec"); /*sf*/ + if(strlen(schar)){ /* File defined; use it.*/ /*sf*/ + strcat(scratchstring,schar); /*sf*/ + strcat(scratchstring,".html"); /*sf*/ + }else if(*(scrstring+1)=='}') strcpy(scratchstring,"index.html"); /*sf*/ + else{ /* Should not now come here. */ /*sf*/ + strcat(scratchstring,scrstring+1); /*sf*/ + *(scratchstring+strcspn(scratchstring,".}"))=0; /*sf*/ + strcat(scratchstring,".html"); /*sf*/ + fprintf(stderr, /*sf*/ + "**** Abnormal newlabel file reference:%s\n",scratchstring);/*sf*/ + } /*sf*/ + }else /*sf*/ + *scratchstring=0; + js2=nkeys; /* Just for copying the file name to optargs. */ + narg=*(scrstring+1); + if(*(scrstring+1)=='}')narg=0; + else if(narg > 64) narg=-(narg-64); /* Test for appendix */ + else sscanf(scrstring+1,"%d",&narg); + if(nkeys < NFNMAX) { + mkkey(scratchstring,optargs,&js2); + lkeys[nkeys]=0; + mkdef(dupstore,keys,scrstring,defs,&narg,nargs,&nkeys); + if(tth_debug&256){ + i=indexkey(dupstore,keys,&nkeys); + fprintf(stderr,"Defined Label %s, index %d, nargs %d, optarg %s, Def %s\n", + dupstore,i,nargs[i],optargs[i],defs[i]); + } + } + else fprintf(stderr,"Too many functions to define %s\n",dupstore); + *dupstore=0; + } + YY_BREAK +case 587: +YY_RULE_SETUP +#line 3806 "tth.lex" +{ /* Called only by \label latex builtin. */ + if(horizmode) horizmode=1; + jscratch=indexkey("#1",margkeys,&margmax); + if(tth_debug&256)fprintf(stderr,"tthlabel jscratch=%d, margs[jscratch]=%s ", + jscratch,margs[jscratch]); + strcpy(dupstore,margs[jscratch]); + narg=chapno; + if(indexkey(dupstore,keys,&nkeys) == -1) { + if(nkeys < NFNMAX) { + js2=nkeys; + mkkey(filechar,optargs,&js2); + lkeys[nkeys]=0; + if(strlen(environment)) + mkdef(dupstore,keys,envirchar,defs,&narg,nargs,&nkeys); + else + if(strlen(labelchar)) + mkdef(dupstore,keys,labelchar,defs,&narg,nargs,&nkeys); + else mkdef(dupstore,keys,"*",defs,&narg,nargs,&nkeys); + if(tth_debug&256){ + i=indexkey(dupstore,keys,&nkeys); + fprintf(stderr,"\nDefined Label %s index %d nargs %d Def %s\n", + dupstore,i,nargs[i],defs[i]); + } + } + else fprintf(stderr,"Too many functions to define %s",dupstore); + }else{ + if(tth_debug&256)fprintf(stderr,"Predefined.\n"); + } + fprintf(tth_fdout,"\n",dupstore); + *dupstore=0; + } + YY_BREAK +case 588: +#line 3838 "tth.lex" +case 589: +YY_RULE_SETUP +#line 3838 "tth.lex" +{ + if(horizmode) horizmode=1; + jscratch=indexkey("#1",margkeys,&margmax); + if(tth_debug&256) fprintf(stderr,"tthref jscratch=%d, margs[jscratch]=%s\n", + jscratch,margs[jscratch]); + strcpy(dupstore,margs[jscratch]); + ind=indexkey(dupstore,keys,&nkeys); + if(ind != -1){ + strcpy(scratchstring, "#tthdrop1\\special{html:}%s\\special{html:}",dupstore,scrstring); + TTH_SCAN_STRING(scratchstring); + }else{ + fprintf(stderr,"Unknown Latex \\ref:%s\n",dupstore); + TTH_SCAN_STRING("#tthdrop1"); + } + *dupstore=0;*argchar=0; + } + YY_BREAK +case 590: +/* rule 590 can match eol */ +YY_RULE_SETUP +#line 3868 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 591: +YY_RULE_SETUP +#line 3869 "tth.lex" +{ + /* These are purely to silence warnings. They are non-functional*/ + PUSHEDINTS[0][0]=0; + PUSHEDINTDEPTHS[0]=0; + /* end of warning silencing */ + yy_pop_state(); + yyless(0); + strcpy(dupstore2,tth_builtins); + strcat(dupstore2,"\\tthbuiltins"); + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; + } + YY_BREAK +case 592: +YY_RULE_SETUP +#line 3881 "tth.lex" +{ + yy_pop_state(); + yyless(0); + strcpy(dupstore2,tth_latex_builtins); + strcat(dupstore2,tth_latex_builtins2); + strcat(dupstore2,tth_latex_builtins3); + strcat(dupstore2,"\\tthlatexbuiltins"); + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; + tth_LaTeX=tth_debug+1; /* LaTeX initialization state. */ + if(tth_debug==1) tth_debug--; /* Don't debug builtins */ + } + YY_BREAK +case 593: +YY_RULE_SETUP +#line 3894 "tth.lex" +{ + countstart=ncounters; + if(tth_debug&512) fprintf(stderr,"Countstart= %d\n",countstart); +} + YY_BREAK +case 594: +/* rule 594 can match eol */ +YY_RULE_SETUP +#line 3899 "tth.lex" +{ + TTH_INC_MULTI; + if(indexkey("\\label",keys,&nkeys) == -1){ /* Only if not already done */ + strcpy(dupstore2,tth_latex_builtins); + strcat(dupstore2,tth_latex_builtins2); + strcat(dupstore2,tth_latex_builtins3); + tth_LaTeX=tth_debug+1; /* LaTeX initialization state. Make non-zero. */ + if(tth_debug==1) tth_debug--; /* Don't debug builtins */ + if(tth_debug&512) fprintf(stderr,"Defining built-in Latex commands\n"); + } + if(strstr(yytext,"book")||strstr(yytext,"report")) { + lbook=1; + strcat(dupstore2, + "\\renewcommand{\\thesection}{\\thechapter.\\arabic{section}}"); + strcat(dupstore2, + "\\renewcommand{\\thefigure}{\\thechapter.\\arabic{figure}}"); + strcat(dupstore2, + "\\renewcommand{\\thetable}{\\thechapter.\\arabic{table}}"); + strcat(dupstore2,"\\setcounter{secnumdepth}{2}"); + strcat(dupstore2, + "\\renewcommand{\\theequation}{\\thechapter.\\arabic{equation}}"); + } else { + lbook=0; + } + strcat(dupstore2,"\\tthlatexbuiltins"); /* signals end of builtins */ + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; +} + YY_BREAK +case 595: +/* rule 595 can match eol */ +YY_RULE_SETUP +#line 3928 "tth.lex" +{ + TTH_INC_MULTI; + if(strstr(yytext,"numbers")){TTH_SCAN_STRING("\\NAT@numberstrue ");} + TTH_SCAN_STRING("\\newif\\ifNAT@numbers\ +\\def\\tthbibform#1#2#3#4{\\ifNAT@numbers[#1\\else[#3 #2\\fi}\ +\\def\\tthciteform#1#2#3#4{\\ifNAT@numbers#1\\else\\ #3, [#2\\fi}\ +\\def\\tthciteob{\\ifNAT@numbers[\\else\\fi}\ +\\def\\tthciteib{\\ifNAT@numbers\\else]\\fi}\\def\\tthcitecb{]}\ +\\input tthntbib.sty"); +} + YY_BREAK +case 596: +YY_RULE_SETUP +#line 3938 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +/* Font faces and styles etc.*/ +case 597: +#line 3942 "tth.lex" +case 598: +YY_RULE_SETUP +#line 3942 "tth.lex" +TTH_SWAP("\\rm "); + YY_BREAK +case 599: +YY_RULE_SETUP +#line 3943 "tth.lex" +TTH_SWAP("\\bf "); + YY_BREAK +case 600: +YY_RULE_SETUP +#line 3944 "tth.lex" +TTH_SWAP("\\rm "); + YY_BREAK +case 601: +YY_RULE_SETUP +#line 3945 "tth.lex" +TTH_SWAP("\\it "); + YY_BREAK +case 602: +YY_RULE_SETUP +#line 3946 "tth.lex" +TTH_SWAP("\\it "); + YY_BREAK +case 603: +YY_RULE_SETUP +#line 3947 "tth.lex" +TTH_SWAP("\\tt "); + YY_BREAK +case 604: +YY_RULE_SETUP +#line 3948 "tth.lex" +TTH_SWAP("\\sffamily "); + YY_BREAK +case 605: +YY_RULE_SETUP +#line 3949 "tth.lex" +TTH_SWAP("\\scshape "); + YY_BREAK +/* Now using the halign brace closure */ +case 606: +YY_RULE_SETUP +#line 3951 "tth.lex" +{ + TTH_OUTPUT(TTH_SMALLCAPS_FONT1); + for(jscratch=0;jscratch"); yy_push_state(verbatim); + TTH_PUSH_CLOSING; TTH_CCPY(closing,"\n");} + YY_BREAK +case 613: +YY_RULE_SETUP +#line 3969 "tth.lex" +{ + fprintf(tth_fdout,"\n
    "); TTH_PUSH_CLOSING; TTH_CCPY(closing,"
    ");} + YY_BREAK +case 614: +YY_RULE_SETUP +#line 3971 "tth.lex" +{ + if(horizmode) horizmode=1; + fprintf(tth_fdout,"\n
    ");TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    ");} + YY_BREAK +case 615: +#line 3976 "tth.lex" +case 616: +#line 3977 "tth.lex" +case 617: +YY_RULE_SETUP +#line 3977 "tth.lex" +{ + if(horizmode) horizmode=1; + fprintf(tth_fdout,"\n
    "); + TTH_PUSH_CLOSING;TTH_CCPY(closing,"
    ");} + YY_BREAK +case 618: +YY_RULE_SETUP +#line 3981 "tth.lex" +{ + if(horizmode) horizmode=1; + TTH_SCAN_STRING("\\beginsection{\\abstractname}\\par"); + TTH_PUSH_CLOSING; /*TTH_CCPY(closing,TTH_PAR);*/ +} + YY_BREAK +case 619: +YY_RULE_SETUP +#line 3986 "tth.lex" +TTH_SCAN_STRING("\\egroup\\par"); + YY_BREAK +case 620: +YY_RULE_SETUP +#line 3988 "tth.lex" +{ + horizmode=0; + fprintf(tth_fdout,"\n
      ");yy_push_state(Litemize); + tth_eqwidth=tth_eqwidth-TTH_INDPC; + TTH_PUSH_CLOSING; +} + YY_BREAK +case 621: +/* rule 621 can match eol */ +YY_RULE_SETUP +#line 3994 "tth.lex" +{ + TTH_INC_MULTI; + yy_pop_state(); + TTH_OUTPUT(closing); + fprintf(tth_fdout,"
    "); + tth_eqwidth=tth_eqwidth+TTH_INDPC; + TTH_POP_CLOSING; + horizmode=1; +} + YY_BREAK +case 622: +YY_RULE_SETUP +#line 4004 "tth.lex" +{ + horizmode=0; + fprintf(tth_fdout,"\n
      ", + enumtype[(enumerate > 4 ? 0 : enumerate)]); + yy_push_state(Lenumerate); + enumerate++; + tth_eqwidth=tth_eqwidth-TTH_INDPC; + TTH_PUSH_CLOSING; + } + YY_BREAK +case 623: +/* rule 623 can match eol */ +YY_RULE_SETUP +#line 4013 "tth.lex" +{ + TTH_INC_MULTI; + yy_pop_state(); + TTH_OUTPUT(closing); + fprintf(tth_fdout,"
    "); + enumerate--; + tth_eqwidth=tth_eqwidth+TTH_INDPC; + TTH_POP_CLOSING; + horizmode=1; +} + YY_BREAK +case 624: +YY_RULE_SETUP +#line 4023 "tth.lex" +{ /* list like description */ + horizmode=0; + fprintf(tth_fdout,"\n
    \n");yy_push_state(Ldescription); + yy_push_state(unknown); /* dump adjacent brace groups */ + tth_eqwidth=tth_eqwidth-TTH_INDPC; + TTH_PUSH_CLOSING; + horizmode=1; + yy_push_state(removespace); +} + YY_BREAK +/* Multiple column index. */ +case 625: +YY_RULE_SETUP +#line 4033 "tth.lex" +{ + if(tth_debug&3)fprintf(stderr,"Starting the index "); + horizmode=0; + yy_push_state(Ldescription); + TTH_OUTPUT("\n

    \n
    \n"); + tth_eqwidth=tth_eqwidth-TTH_INDPC; + TTH_PUSH_CLOSING; + tth_index_face=0; + tth_index_line=0; +} + YY_BREAK +/* Multiple two-column segments broken only at indexspace.*/ +case 626: +/* rule 626 can match eol */ +YY_RULE_SETUP +#line 4045 "tth.lex" +{ + /* fprintf(stderr,"indexspace\n"); */ + TTH_INC_MULTI; + if(tth_index_line > tth_indexpage){ + TTH_OUTPUT(closing); *closing=0; + tth_index_line=0; + if((++tth_index_face)&1){ + TTH_OUTPUT("

    \n
    \n"); + }else{ + TTH_OUTPUT("

    \n
    \n"); + } + }else{ + TTH_OUTPUT("

    "); + ++tth_index_line; + } +} + YY_BREAK +case 627: +/* rule 627 can match eol */ +YY_RULE_SETUP +#line 4062 "tth.lex" +{ + TTH_INC_MULTI; + yy_pop_state(); + TTH_OUTPUT(closing); + TTH_OUTPUT("
    "); + tth_eqwidth=tth_eqwidth+TTH_INDPC; + TTH_POP_CLOSING; +} + YY_BREAK +case 628: +YY_RULE_SETUP +#line 4071 "tth.lex" +{ + /* if(horizmode) horizmode=1; */ + horizmode=0; + fprintf(tth_fdout,"\n
    \n");yy_push_state(Ldescription); + tth_eqwidth=tth_eqwidth-TTH_INDPC; + TTH_PUSH_CLOSING; + } + YY_BREAK +case 629: +/* rule 629 can match eol */ +#line 4079 "tth.lex" +case 630: +/* rule 630 can match eol */ +YY_RULE_SETUP +#line 4079 "tth.lex" +{ + TTH_INC_MULTI; + yy_pop_state(); + TTH_OUTPUT(closing); + fprintf(tth_fdout,"
    "); + tth_eqwidth=tth_eqwidth+TTH_INDPC; + TTH_POP_CLOSING; +} + YY_BREAK +case 631: +/* rule 631 can match eol */ +YY_RULE_SETUP +#line 4087 "tth.lex" +{ + TTH_INC_MULTI; + if(horizmode) horizmode=1; + strcpy(environment,"figure"); + TTH_PUSH_CLOSING;*closing=0; + if(lbook) sprintf(envirchar,"%d.%d",chapno,figureno+1); + else sprintf(envirchar,"%d",figureno+1); + {TTH_PAR_ACTION}; + fprintf(tth_fdout,"\n ",envirchar); + } + YY_BREAK +case 632: +/* rule 632 can match eol */ +YY_RULE_SETUP +#line 4097 "tth.lex" +{ + TTH_INC_MULTI; + if(horizmode) horizmode=1; + strcpy(environment,"table"); + TTH_PUSH_CLOSING;*closing=0; + if(lbook) sprintf(envirchar,"%d.%d",chapno,tableno+1); + else sprintf(envirchar,"%d",tableno+1); + {TTH_PAR_ACTION}; + fprintf(tth_fdout,"\n ",envirchar); + } + YY_BREAK +case 633: +#line 4108 "tth.lex" +case 634: +YY_RULE_SETUP +#line 4108 "tth.lex" +{ /* Special case. Remove environment label. */ + TTH_TEXCLOSE else{ + TTH_CLOSEGROUP;TTH_POP_CLOSING; + {TTH_PAR_ACTION}; + *environment=0;}} + YY_BREAK +case 635: +/* rule 635 can match eol */ +YY_RULE_SETUP +#line 4114 "tth.lex" +strcpy(unitlength,yytext); + YY_BREAK +case 636: +YY_RULE_SETUP +#line 4115 "tth.lex" +{ + if(tth_autopic){ + picno++; + if(tth_debug&32)fprintf(stderr,"Starting picture number %d\n",picno); + fprintf(tth_fdout,"
    \"Picture",picno,picno); + {TTH_PAR_ACTION}; + sprintf(scratchstring,"pic%d.gif",picno); + if((tth_picfile=fopen(scratchstring,"r"))){ + fclose(tth_picfile);tth_picfile=NULL; + fprintf(stderr,"Including existing picture %s\n",scratchstring); + yy_push_state(discardgroup); + }else{ + sprintf(scratchstring,"pic%d.tex",picno); + if ( (tth_picfile=fopen(scratchstring,"w")) != NULL){ + fprintf(tth_picfile, + "\\batchmode\\documentclass{article}\n\\usepackage{graphicx}\\usepackage{epsfig}\n\\pagestyle{empty}\n\\begin{document}%s\n%s", + unitlength,yytext); + yy_push_state(picture); + jscratch=0; + }else{ + fprintf(stderr,"Unable to open picture file for writing.\n"); + yy_push_state(discardgroup); + fprintf(tth_fdout,"
    Picture Not Created.
    \n"); + } + } + }else{ + yy_push_state(discardgroup); + fprintf(tth_fdout,"
    Picture Omitted
    "); + } +} + YY_BREAK +case 637: +YY_RULE_SETUP +#line 4145 "tth.lex" +jscratch++;fprintf(tth_picfile,"%s",yytext); + YY_BREAK +case 638: +YY_RULE_SETUP +#line 4146 "tth.lex" +{ + if(jscratch) {jscratch--; fprintf(tth_picfile,"%s",yytext);} + else{ + fprintf(tth_picfile,"%s",yytext); + fprintf(tth_picfile,"\\end{document}\n"); + fclose(tth_picfile);tth_picfile=NULL; + sprintf(scratchstring,"latex2gif pic%d",picno); + jscratch=system(scratchstring); + if(jscratch==SUCCESS){ fprintf(stderr,"Created pic%d.gif\n",picno);} + else{ + fprintf(stderr,"**** Failed to create pic%d.gif\n",picno); + fprintf(tth_fdout,"
    Picture Not Created.
    "); + } + yy_pop_state(); + } +} + YY_BREAK +case 639: +YY_RULE_SETUP +#line 4162 "tth.lex" + + YY_BREAK +case 640: +/* rule 640 can match eol */ +YY_RULE_SETUP +#line 4163 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) TTH_INC_LINE; + fprintf(tth_picfile,"%s",yytext); +} + YY_BREAK +case 641: +YY_RULE_SETUP +#line 4167 "tth.lex" +{ + yy_push_state(discardgroup); + if(tth_debug&32)fprintf(stderr,"Discarding unsupported construct:%s\n",yytext); + } + YY_BREAK +case 642: +YY_RULE_SETUP +#line 4171 "tth.lex" +{ + yy_pop_state(); + if(tth_debug&32)fprintf(stderr,"Ending discarding construct:%s\n",yytext); + } + YY_BREAK +case 643: +YY_RULE_SETUP +#line 4175 "tth.lex" + + YY_BREAK +/***********************************************************************/ +/* Latex tabular and haligns */ +case 644: +YY_RULE_SETUP +#line 4179 "tth.lex" +TTH_TEX_FN("\\begin{tabular}#tthdrop1",1); + YY_BREAK +case 645: +YY_RULE_SETUP +#line 4180 "tth.lex" +{ + TTH_TEX_FN_OPT("\\tth_tabular#tthdrop2",2,""); +} + YY_BREAK +case 646: +YY_RULE_SETUP +#line 4183 "tth.lex" +{ + TTH_HAL_PUSH; + *halstring=0; + if((jscratch=indexkey("#2",margkeys,&margmax))!=-1){ + if(tth_debug&33) fprintf(stderr,"Tabular argument:%s> ",margs[jscratch]); + yy_pop_state(); + TTH_SCAN_STRING("\\tth_endtabpre"); + TTH_SCAN_STRING(margs[jscratch]); + rmdef(margkeys,margs,&margmax); rmdef(margkeys,margs,&margmax); + }else fprintf(stderr,"**** Error: No tabular argument found.\n"); + if(tth_debug&33) fprintf(stderr,"Beginning tabular\n"); + if(!eqdepth)yy_push_state(disptab); /* Prevent $$ from being display math.*/ + yy_push_state(tabpre); /* Prescan the tabular argument.*/ + ncols=0; +} + YY_BREAK +case 647: +/* rule 647 can match eol */ +YY_RULE_SETUP +#line 4198 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 648: +YY_RULE_SETUP +#line 4199 "tth.lex" +/*remove spaces*/ + YY_BREAK +case 649: +YY_RULE_SETUP +#line 4200 "tth.lex" +TTH_CCAT(halstring,yytext); + YY_BREAK +case 650: +YY_RULE_SETUP +#line 4201 "tth.lex" +TTH_CCAT(halstring,yytext);ncols++; + YY_BREAK +/* +c|l|r { + TTH_CCAT(halstring,"&{&"); + TTH_CCAT(halstring,yytext);ncols++; + TTH_CCAT(halstring,"&}&"); +}*/ +case 651: +YY_RULE_SETUP +#line 4208 "tth.lex" +{ TTH_TEX_FN("\\tth_preat#tthdrop1",1); } + YY_BREAK +case 652: +YY_RULE_SETUP +#line 4209 "tth.lex" +{ + yy_pop_state(); + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + TTH_CCAT(halstring,"@{"); + TTH_CCAT(halstring,margs[jscratch]); + TTH_CCAT(halstring,"}"); + if(tth_debug&32) fprintf(stderr,"@string copied =%s\n",margs[jscratch]); + rmdef(margkeys,margs,&margmax); + } +} + YY_BREAK +case 653: +YY_RULE_SETUP +#line 4219 "tth.lex" +{ TTH_TEX_FN("\\tth_presp#tthdrop1",1);ncols++; } + YY_BREAK +case 654: +YY_RULE_SETUP +#line 4220 "tth.lex" +{ + yy_pop_state(); + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + if(tth_debug&32) fprintf(stderr,"p-string =%s ",margs[jscratch]); + TTH_CCPY(scratchstring,margs[jscratch]); + TTH_CCAT(scratchstring,"\\tth_pfinish"); + TTH_SCAN_STRING(scratchstring); + GET_DIMEN; + rmdef(margkeys,margs,&margmax); + } +} + YY_BREAK +case 655: +YY_RULE_SETUP +#line 4231 "tth.lex" +{ + /* sprintf(scratchstring,"&{&p{%d}&}&",thesize/SCALEDPERPIXEL);*/ + sprintf(scratchstring,"p{%d}",thesize/SCALEDPERPIXEL); + TTH_CCAT(halstring,scratchstring); + if(tth_debug&1056) fprintf(stderr,"p-string copied=%s pixels for %d sp\n", + scratchstring,thesize); +} + YY_BREAK +case 656: +YY_RULE_SETUP +#line 4238 "tth.lex" +{ TTH_TEX_FN("\\tth_tabstar#tthdrop2",2); } + YY_BREAK +case 657: +YY_RULE_SETUP +#line 4239 "tth.lex" +{ + yy_pop_state(); + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + if(tth_debug&32) fprintf(stderr,"*{%s} construct. ",margs[jscratch]); + sscanf(margs[jscratch],"%d",&js2); + if((jscratch=indexkey("#2",margkeys,&margmax))!=-1 || + js2>=1 || js2<255){ + if(tth_debug&32) fprintf(stderr,"Codes: %s\n",margs[jscratch]); + for(js2++;js2>1;js2--){TTH_CCAT(halstring,margs[jscratch]);ncols++;} + rmdef(margkeys,margs,&margmax); + }else fprintf(stderr,"**** Error in tabular argument * number:%d\n",js2); + rmdef(margkeys,margs,&margmax); + } +} + YY_BREAK +case 658: +/* rule 658 can match eol */ +YY_RULE_SETUP +#line 4253 "tth.lex" +if(strcspn(yytext,"\n")==0) TTH_INC_LINE;/* Do nothing if we don't recognize */ + YY_BREAK +case 659: +YY_RULE_SETUP +#line 4254 "tth.lex" +{ + yy_pop_state(); + TTH_PUSH_CLOSING; + TTH_CCPY(closing,TTH_TABC); + if(eqdepth) {/* equation case */ + TTH_EQA_PUSH; + eqclose++; + tophgt[eqclose]=0; + levhgt[eqclose]=1; + eqalignrow=0; + } + if(eqdepth && displaystyle) { /* only display equations.*/ + TTH_OUTPUT(TTH_CELL3);TTH_CCAT(closing,TTH_CELL3); + }else {TTH_OUTPUT("\n");} + if(*(halstring) == '|') { + TTH_OUTPUT(TTH_TABB); + }else{ + TTH_OUTPUT(TTH_TABO); + } /* Guess that if template starts '|' we want a boxed table, else not */ + *tdalign=0;*precell=0; /* Safety only; ought not to be needed */ + if(eqdepth)eqalignrow++; + yy_push_state(hendline); /* check for multicol at start */ + TTH_PUSH_BUFF(0);halbuff=yy_scan_string(halstring); /* Setup halbuff */ + yy_switch_to_buffer(include_stack[--tth_stack_ptr]); + /* But keep current*/ + if(tth_debug&32)fprintf(stderr,"Endtabpre:%s>\n",halstring); + if(!*halstring){ + fprintf(stderr,"**** Error Fatal. Null or improper alignment argument, line %d.\n",tth_num_lines); + TTH_EXIT(3); + } + } + YY_BREAK +case 660: +YY_RULE_SETUP +#line 4286 "tth.lex" +{ /* cell boundary. Scan @strings if any */ + if(tth_debug&32)fprintf(stderr,"|"); + jstal=-1; + if(*precell && !jshal && *tdalign){ + strcat(precell,"&"); + *tdalign=0; + yy_switch_to_buffer(include_stack[--tth_stack_ptr] ); + yy_pop_state(); + if(tth_debug&32){fprintf(stderr,"%s",precell);} + TTH_SCAN_STRING(precell);*precell=0; + } else if(jshal==1 || jshal==-1 ){ + TTH_HALACT; + } +} + YY_BREAK +case 661: +YY_RULE_SETUP +#line 4300 "tth.lex" +{ + /* if(tth_debug&32) fprintf(stderr,"tth_@, %d\n",margmax);*/ + TTH_TEX_FN("\\tth_atstring#tthdrop1",1); +} + YY_BREAK +case 662: +YY_RULE_SETUP +#line 4304 "tth.lex" +{ + yy_pop_state(); + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + if(jshal<1){ + TTH_CCAT(precell,"{"); + TTH_CCAT(precell,margs[jscratch]); + TTH_CCAT(precell,"}"); + /* if(tth_debug&32) fprintf(stderr,"@string=%s ",precell);*/ + } + rmdef(margkeys,margs,&margmax); + } /* Have to explicitly excape from macro + because <> not handled in talign */ + yy_delete_buffer(YY_CURRENT_BUFFER ); + yy_switch_to_buffer(include_stack[--tth_stack_ptr] ); +} + YY_BREAK +case 663: +/* rule 663 can match eol */ +YY_RULE_SETUP +#line 4320 "tth.lex" +{ + if(jshal==1||jshal==-1){yyless(0);} + if(jstal==-1)jstal=0; + TTH_HALACT; +} + YY_BREAK +case YY_STATE_EOF(talign): +#line 4325 "tth.lex" +{ /* Reset halbuff to start. Gives matrix underflows. + yy_delete_buffer(YY_CURRENT_BUFFER); + if(tth_debug&32)fprintf(stderr,"\nTemplate end rescan:%s> \n",halstring); + halbuff=yy_scan_string(halstring); + yy_switch_to_buffer(halbuff); */ + TTH_HALACT; /*Old approach */ +} + YY_BREAK +case 664: +YY_RULE_SETUP +#line 4332 "tth.lex" +yy_push_state(tempamp); + YY_BREAK +case 665: +YY_RULE_SETUP +#line 4333 "tth.lex" +{ + yy_pop_state(); + /* if(tth_debug&32)fprintf(stderr,"%dprecell=%s\n",jshal,precell);*/ + /* if(jshal>0)*precell=0; don't now throw away */ +} + YY_BREAK +case 666: +YY_RULE_SETUP +#line 4338 "tth.lex" +{TTH_CCAT(precell,yytext);} + YY_BREAK +case 667: +#line 4340 "tth.lex" +case 668: +/* rule 668 can match eol */ +YY_RULE_SETUP +#line 4340 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) TTH_INC_LINE; + if(jshal<1){TTH_CCAT(precell,yytext);} +} + YY_BREAK +case 669: +YY_RULE_SETUP +#line 4344 "tth.lex" +fprintf(stderr,"Unknown tabular format: %s\n",yytext);TTH_HALACT; + YY_BREAK +case 670: +YY_RULE_SETUP +#line 4346 "tth.lex" +TTH_SCAN_STRING("\\par"); + YY_BREAK +case 671: +YY_RULE_SETUP +#line 4347 "tth.lex" +{ + fprintf(tth_fdout,"\n
    \n",tabwidth);}/* settabs */ +} + YY_BREAK +case 674: +#line 4359 "tth.lex" +case 675: +#line 4360 "tth.lex" +case 676: +#line 4361 "tth.lex" +case 677: +/* rule 677 can match eol */ +YY_RULE_SETUP +#line 4361 "tth.lex" +{ + TTH_INC_MULTI; + if(*halstring){ /* halign and tabular */ + if(jstal==0){ + jstal=1; + jshal=-1; + yyless(0); + TTH_HALSWITCH; + }else{ + jstal=0; + TTH_OUTPUT(TTH_CELL_TAB); + TTH_OUTPUT(TTH_TRC); + if(eqdepth){ + if(tth_istyle&1)eqalignrow=eqalignrow+6*(levhgt[eqclose]-1)+TTH_HGT;else + eqalignrow=eqalignrow+levhgt[eqclose]; + if(tth_debug&2)fprintf(stderr, + "Halcr. eqalignrow=%d, eqaind=%d, levhgt=%d\n", + eqalignrow,eqaind,levhgt[eqclose]); + levhgt[eqclose]=1; + } + yy_push_state(hendline); + yy_delete_buffer(halbuff); /* Reset halbuff to start */ + if(tth_debug&32)fprintf(stderr,"\nEOL rescan:%s> \n",halstring); + TTH_PUSH_BUFF(0);halbuff=yy_scan_string(halstring); + yy_switch_to_buffer(include_stack[--tth_stack_ptr]); + } + }else{ + if(*(yytext+1)=='c'){ + TTH_OUTPUT("
    \n"); /* settabs */ + }else{ + TTH_OUTPUT("
    "); /* LaTeX Plain text line break */ + } + } +} + YY_BREAK +case 678: +/* rule 678 can match eol */ +YY_RULE_SETUP +#line 4395 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 679: +YY_RULE_SETUP +#line 4396 "tth.lex" + + YY_BREAK +case 680: +YY_RULE_SETUP +#line 4397 "tth.lex" +{ + if(tth_debug&32) fprintf(stderr,"\nInner Multicolumn(%d%d)",jshal,jstal); + if(jstal==0){ + jstal=1; + jshal=-1; + yyless(0); + yy_pop_state();TTH_SCAN_STRING("&"); + TTH_HALSWITCH; + }else /**/{ + jstal=0; + TTH_OUTPUT(TTH_CELL_TAB); + TTH_TEX_FN("\\tth_multistart#tthdrop2",2); + } +} /* See psub below. */ + YY_BREAK +case 681: +YY_RULE_SETUP +#line 4411 "tth.lex" +TTH_SCAN_STRING("\\multispan1"); + YY_BREAK +case 682: +YY_RULE_SETUP +#line 4412 "tth.lex" +{ + if(tth_debug&32) fprintf(stderr,"Inner Multispan(%d%d)",jshal,jstal); + if(jstal==0){ + jstal=1; + jshal=-1; + yyless(0); + yy_pop_state();TTH_SCAN_STRING("&"); + TTH_HALSWITCH; + }else{ + jstal=0; + yy_pop_state(); + TTH_OUTPUT(TTH_CELL_TAB); + TTH_TEX_FN("\\tth_multispan#tthdrop1",1); + } +} /* See psub below */ + YY_BREAK +case 683: +YY_RULE_SETUP +#line 4427 "tth.lex" +{ /* expand first */ + TTH_DO_MACRO + else{ + yyless(0); + strcpy(tdalign,TTH_CELL_TAB); /* Save the cell closing.*/ + yy_pop_state();jshal=0; + TTH_HALSWITCH; + } +} + YY_BREAK +case 684: +YY_RULE_SETUP +#line 4436 "tth.lex" +{ + yyless(0); + strcpy(tdalign,TTH_CELL_TAB); /* Save the cell closing.*/ + yy_pop_state(); + jshal=0; + TTH_HALSWITCH; +} + YY_BREAK +case 685: +YY_RULE_SETUP +#line 4443 "tth.lex" + + YY_BREAK +case 686: +/* rule 686 can match eol */ +YY_RULE_SETUP +#line 4444 "tth.lex" +TTH_INC_MULTI;TTH_OUTPUT(TTH_TRTD); + YY_BREAK +case 687: +YY_RULE_SETUP +#line 4445 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +case 688: +YY_RULE_SETUP +#line 4446 "tth.lex" + + YY_BREAK +case 689: +/* rule 689 can match eol */ +YY_RULE_SETUP +#line 4447 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 690: +YY_RULE_SETUP +#line 4449 "tth.lex" +{ + if(tth_debug&32) fprintf(stderr,"Multicolumn at start:"); + TTH_OUTPUT(TTH_TRO); + TTH_TEX_FN("\\tth_multiinner#tthdrop2",2); +} + YY_BREAK +/* Add an open brace for a starting multicol */ +case 691: +YY_RULE_SETUP +#line 4455 "tth.lex" +{ + /*TTH_SCAN_STRING("{"); + if(tth_debug&32){fprintf(stderr,"{");}*/ + TTH_SCAN_STRING("\\tth_multistart#tthdrop2"); +} + YY_BREAK +case 692: +YY_RULE_SETUP +#line 4460 "tth.lex" +{ + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + sscanf(margs[jscratch],"%d",&jshal); + }else{fprintf(stderr,"No argument #1 in multicol\n");} + if((jscratch=indexkey("#2",margkeys,&margmax))!=-1){ + strcpy(scrstring,margs[jscratch]); + chscratch=scrstring+strcspn(scrstring,"lrcp"); /* No @strings allowed */ + strcpy(scratchstring,TTH_HALCODE(chscratch)); + }else{*scratchstring=0;fprintf(stderr,"No argument #2 in multicol\n");} + if(tth_debug&32) fprintf(stderr,"%d,%s\n",jshal,scratchstring); + sprintf(scrstring,TTH_MULSTART,jshal,scratchstring); + TTH_OUTPUT(scrstring); + if(eqdepth){TTH_OUTPUT(TTH_EQ5);} + yy_pop_state(); yy_pop_state(); /* get out of hendline/hamper too */ + rmdef(margkeys,margs,&margmax);rmdef(margkeys,margs,&margmax); + jshal++;/* fix */ + TTH_HALSWITCH; + } + YY_BREAK +case 693: +YY_RULE_SETUP +#line 4478 "tth.lex" +{ + TTH_TEXCLOSE else{ + if(tth_debug&32) fprintf(stderr,"Ending tabular\n"); + yy_delete_buffer(halbuff); + yy_pop_state(); + TTH_HAL_POP; + if(eqdepth){ + eqclose--; + if(tth_istyle&1)jscratch=(eqalignrow+6*(levhgt[eqclose+1]-1)+TTH_HGT)/6; + else jscratch=levhgt[eqclose+1]+eqalignrow; + if(jscratch>levhgt[eqclose])levhgt[eqclose]=jscratch; + /* This was an alternative attempt when \\ was forced. Height was broken. + if(eqalignrow>levhgt[eqclose])levhgt[eqclose]=eqalignrow;*/ + if(tth_debug&2)fprintf(stderr, + "Equation Tabular Close: eqclose=%d, eqalignrow=%d, levhgt=%d\n", + eqclose,eqalignrow,levhgt[eqclose]); + TTH_EQA_POP; + } + TTH_CLOSEGROUP;TTH_POP_CLOSING; + if(!eqdepth)yy_pop_state(); /* the disptab we added */ +} +} + YY_BREAK +case 694: +YY_RULE_SETUP +#line 4500 "tth.lex" +{ + yy_pop_state(); /* out of hendline */ + TTH_TEXCLOSE else{ + if(!eqdepth){ + if(tth_push_depth==halignenter){ + TTH_HAL_POP; + } + TTH_CLOSEGROUP;TTH_POP_CLOSING; + }else{ /* This for equation state should not happen */ + eqclose--; + TTH_EQA_POP; + yy_pop_state();yyless(0); + } +}} /* end of halign. */ + YY_BREAK +case 695: +YY_RULE_SETUP +#line 4514 "tth.lex" +{ + yyless(0); TTH_OUTPUT(TTH_TRO); + yy_pop_state(); + jshal=0; + TTH_HALSWITCH; +} + YY_BREAK +case 696: +YY_RULE_SETUP +#line 4521 "tth.lex" +{/*attempt to fix*/ + if(tth_debug&33) fprintf(stderr, + "Noalign in hendline. eqdepth=%d, ncols=%d.\n",eqdepth,ncols); + sprintf(scrstring,"\\multicolumn{%d}{l}{#1}\\cr#tthdrop1",ncols); + TTH_TEX_FN(scrstring,1); +} + YY_BREAK +case 697: +YY_RULE_SETUP +#line 4528 "tth.lex" +TTH_SCAN_STRING("\\multispan1"); + YY_BREAK +case 698: +YY_RULE_SETUP +#line 4529 "tth.lex" +{ + yy_pop_state(); + if(tth_debug&32) fprintf(stderr,"Line Start Multispan\n"); + TTH_TEX_FN("\\tth_multispan#tthdrop1",1); + TTH_OUTPUT(TTH_TRO); +} + YY_BREAK +case 699: +YY_RULE_SETUP +#line 4535 "tth.lex" +{ + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1) + sscanf(margs[jscratch],"%d",&jshal); + if(tth_debug&32) fprintf(stderr," %d",jshal); + sprintf(scrstring,TTH_MULSPAN,jshal); + TTH_OUTPUT(scrstring); + yy_pop_state(); + rmdef(margkeys,margs,&margmax); + jshal++;/* fix */ + TTH_HALSWITCH; +} + YY_BREAK +case 700: +YY_RULE_SETUP +#line 4546 "tth.lex" +{ /* expand first */ + TTH_DO_MACRO + else{ + yyless(0);TTH_OUTPUT(TTH_TRO); + yy_pop_state(); + jshal=0; + TTH_HALSWITCH; + } +} + YY_BREAK +case 701: +YY_RULE_SETUP +#line 4555 "tth.lex" +yyless(0);TTH_SCAN_STRING("\\\\"); + YY_BREAK +case 702: +YY_RULE_SETUP +#line 4557 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +case 703: +YY_RULE_SETUP +#line 4558 "tth.lex" + + YY_BREAK +case 704: +/* rule 704 can match eol */ +YY_RULE_SETUP +#line 4559 "tth.lex" +TTH_INC_MULTI;TTH_OUTPUT(""); + YY_BREAK +/* End of tabular and halign code.*/ +/********************************************************************/ +case 705: +YY_RULE_SETUP +#line 4563 "tth.lex" +TTH_OUTPUT(TTH_TINY);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 706: +YY_RULE_SETUP +#line 4564 "tth.lex" +TTH_OUTPUT(TTH_SCRIPTSIZE);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 707: +YY_RULE_SETUP +#line 4565 "tth.lex" +TTH_OUTPUT(TTH_FOOTNOTESIZE);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 708: +YY_RULE_SETUP +#line 4566 "tth.lex" +TTH_OUTPUT(TTH_SMALL);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 709: +YY_RULE_SETUP +#line 4567 "tth.lex" +TTH_OUTPUT(TTH_NORMALSIZE);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 710: +YY_RULE_SETUP +#line 4568 "tth.lex" +TTH_OUTPUT(TTH_large);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 711: +YY_RULE_SETUP +#line 4569 "tth.lex" +TTH_OUTPUT(TTH_Large);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 712: +YY_RULE_SETUP +#line 4570 "tth.lex" +TTH_OUTPUT(TTH_LARGE);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 713: +YY_RULE_SETUP +#line 4571 "tth.lex" +TTH_OUTPUT(TTH_HUGE);TTH_PRECLOSE(TTH_SIZEEND); + YY_BREAK +case 714: +YY_RULE_SETUP +#line 4573 "tth.lex" +fprintf(tth_fdout,"
    ");TTH_PRECLOSE("
    "); + YY_BREAK +case 715: +YY_RULE_SETUP +#line 4574 "tth.lex" +fprintf(tth_fdout,"
    ");TTH_PRECLOSE("
    "); + YY_BREAK +/* Insert an implied hbox around the minipage(s) that terminates at the + next \par. Inside the minipages the state is not pargroup. Thus any + \par inside the minipage does not terminate the hbox group. + */ +case 716: +YY_RULE_SETUP +#line 4580 "tth.lex" +{ + yy_push_state(INITIAL); + TTH_TEX_FN_OPT("\\vbox\\bgroup\\hsize=#2#tthdrop2",2,""); +} + YY_BREAK +case 717: +YY_RULE_SETUP +#line 4584 "tth.lex" +{ + TTH_PUSH_CLOSING; /* This will be cancelled at the end of the pargroup*/ + yy_push_state(pargroup); + yy_push_state(INITIAL); + TTH_TEX_FN_OPT("\\tth_hbox\\vbox\\bgroup\\hsize=#2#tthdrop2",2,""); +} + YY_BREAK +case 718: +YY_RULE_SETUP +#line 4590 "tth.lex" +{ + TTH_SCAN_STRING("\\egroup"); + yy_pop_state(); +} + YY_BREAK +/*Default Begin and End Are at end of flex code. */ +/* colordvi-compatible commands. Expand the argument first.*/ +case 719: +YY_RULE_SETUP +#line 4598 "tth.lex" +TTH_TEX_FN("{\\textColor{#1}#2}#tthdrop2",2); + YY_BREAK +/* textColor in colordvi is global. But that's a terrible thing to do + so in TtH it is local. */ +case 720: +YY_RULE_SETUP +#line 4601 "tth.lex" +TTH_TEX_FN("\\edef\\tthexpcol{\\tthtextColor{#1}}\\tthexpcol#tthdrop1",1); + YY_BREAK +case 721: +/* rule 721 can match eol */ +#line 4603 "tth.lex" +case 722: +/* rule 722 can match eol */ +#line 4604 "tth.lex" +case 723: +/* rule 723 can match eol */ +#line 4605 "tth.lex" +case 724: +/* rule 724 can match eol */ +YY_RULE_SETUP +#line 4605 "tth.lex" +{ /* Color defined in one of four ways*/ + chscratch=yytext+strcspn(yytext,"{")+1; + *(chscratch+strcspn(chscratch,"}"))=0; + if((jscratch=sscanf(chscratch,"%f %f %f %f", + &cyanc,&magentac,&yellowc,&blackc))<=2){ + if((jscratch=sscanf(chscratch,"%f , %f , %f , %f", /*Latex comma delimits*/ + &cyanc,&magentac,&yellowc,&blackc))<=2){ + if(jscratch == 1) { /* grey */ + redc=cyanc; + greenc=cyanc; + bluec=cyanc; + }else if(jscratch==0 || jscratch==EOF){ /* Try a named color*/ + if((jscratch=indexkey(chscratch,keys,&nkeys))!=-1){ + /* Custom color.*/ /*Substitute and scan again*/ + TTH_CCPY(scratchstring,yytext); + *(scratchstring+strcspn(scratchstring,"{"))=0; + TTH_CCAT(scratchstring,defs[jscratch]); + *(scratchstring+strcspn(scratchstring,"#"))=0; /* Fix end*/ + TTH_SCAN_STRING(scratchstring); + jscratch=5; + }else{ + jscratch=tth_cmykcolor(chscratch,&cyanc,&magentac,&yellowc,&blackc); + } + }else{ + jscratch=0; + } + } + } + if(jscratch!=5){ /* For non custom colors*/ + if(jscratch==0){ + fprintf(stderr,"**** Unknown color specification %s\n",chscratch); + }else if(jscratch==4){ /* Convert to RGB from CMYK*/ + if((redc=1.-cyanc-blackc)<0.) redc=0.; + if((greenc=1.-magentac-blackc)<0.) greenc=0.; + if((bluec=1.-yellowc-blackc)<0.) bluec=0.; + }else if(jscratch==3){ /* It is RGB already */ + redc=cyanc; + greenc=magentac; + bluec=yellowc; + } + if(jscratch){ + sprintf(colorchar,"%2.2X%2.2X%2.2X", + (int)(redc*255),(int)(greenc*255),(int)(bluec*255)); + if(tth_debug&32)fprintf(stderr,"RGB=%f,%f,%f\ncolorchar=%s\n", + redc,greenc,bluec,colorchar); + if(strstr(yytext,"tthbgC")){/*Box Background color case CSS*/ + sprintf(scratchstring, + "\\special{html:\n}" + ,colorchar); + TTH_PRECLOSE(""); + }else if(strstr(yytext,"tthpageC")){ /* Page color HTML violation*/ + sprintf(scratchstring, + "\\special{html:}",colorchar); + }else{ + sprintf(scratchstring,TTH_COLOR,colorchar); + /* if(!strstr(yytext,"tthspecial")) + Not closing locally for the colordvi special case breaks stuff. */ + {TTH_PRECLOSE(TTH_COLOREND);} + } + TTH_SCAN_STRING(scratchstring); + } + } +} + YY_BREAK +/* The specials that colordvi constructs for dvips for unknown colors. */ +case 725: +/* rule 725 can match eol */ +YY_RULE_SETUP +#line 4669 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +/* TTH_OUTPUT(TTH_COLOREND); Remove because nesting gets broken */ +case 726: +/* rule 726 can match eol */ +YY_RULE_SETUP +#line 4671 "tth.lex" +{ + TTH_INC_MULTI; + TTH_CCPY(scratchstring,"\\tthspecialcolor{"); + /* if(strstr(yytext,"push")){ + TTH_CCPY(scratchstring,"\\tthtextColor{"); + } */ + TTH_CCAT(scratchstring,(strrchr(yytext,' ')+1)); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +/* Latex graphics colors (see grfguide.ps). The syntax is confusingly the + exact opposite of colordvi, in that textcolor colorizes its argument + but color is the switch. Use the preceding function anyway.*/ +case 727: +YY_RULE_SETUP +#line 4684 "tth.lex" +TTH_TEX_FN_OPT("{\\textColor{#2}#3}#tthdrop3",3,""); + YY_BREAK +case 728: +YY_RULE_SETUP +#line 4685 "tth.lex" +TTH_TEX_FN_OPT("\\edef\\tthexpcol{\\tthtextColor{#2}}\\tthexpcol#tthdrop2",2,""); + YY_BREAK +case 729: +YY_RULE_SETUP +#line 4686 "tth.lex" +TTH_TEX_FN_OPT("{\\edef\\tthexpcol{\\tthbgColor{#2}}\\tthexpcol #3}#tthdrop3",3,""); + YY_BREAK +case 730: +YY_RULE_SETUP +#line 4687 "tth.lex" +TTH_TEX_FN_OPT("\\fbox{\\colorbox[#1]{#2}{#3}}#tthdrop3",3,""); + YY_BREAK +case 731: +YY_RULE_SETUP +#line 4688 "tth.lex" +TTH_TEX_FN_OPT("{\\edef\\tthexpcol{\\tthpageColor{#2}}\\tthexpcol}#tthdrop2",2,""); + YY_BREAK +case 732: +#line 4691 "tth.lex" +case 733: +#line 4692 "tth.lex" +case 734: +#line 4693 "tth.lex" +case 735: +#line 4694 "tth.lex" +case 736: +#line 4695 "tth.lex" +case 737: +YY_RULE_SETUP +#line 4695 "tth.lex" +{ + localdef=1; + horizmode=0; /* This protection against \par should not be needed but ...*/ + yy_push_state(define); + yy_push_state(getnumargs); + yy_push_state(getdef); +} + YY_BREAK +case 738: +/* rule 738 can match eol */ +YY_RULE_SETUP +#line 4702 "tth.lex" +{ + fprintf(stderr,"**** %s: works only for non-standard environments\n",yytext); + strcpy(scratchstring,"\\newenvironment"); + strcat(scratchstring,yytext+strcspn(yytext,"{")); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 739: +/* rule 739 can match eol */ +YY_RULE_SETUP +#line 4708 "tth.lex" +{ + localdef=0; + horizmode=0; + yy_push_state(getend); /* will define the end environment, see following */ + yy_push_state(define); /* defines the begin environment */ + yy_push_state(getnumargs); + TTH_CCPY(defchar,"\\begin"); + strcat(defchar,strstr(yytext,"{")); + *dupstore=0; /*does getdef*/ + TTH_PUSH_CLOSING;TTH_CCPY(closing,strstr(yytext,"{")); /* save for getend */ +} + YY_BREAK +case 740: +/* rule 740 can match eol */ +YY_RULE_SETUP +#line 4719 "tth.lex" +{ + TTH_INC_MULTI; + /* Newtheorem with numberedlike option. Overrides macro definition.*/ + if(tth_debug&4)fprintf(stderr,"New numbered-like theorem:%s\n",yytext); + strcpy(scratchstring,strstr(yytext,"{")+1); + strcpy(dupstore,strstr(scratchstring,"{")); + *strstr(scratchstring,"}")=0; + strcpy(scrstring,strstr(yytext,"[")+1); + *strstr(scrstring,"]")=0; + sprintf(dupstore2,"\\newenvironment{%s}{\\par\\stepcounter{%s} \\textbf{%s \\arabic{%s}}\\bgroup \\em}{\\par\\egroup}", + scratchstring,scrstring,dupstore,scrstring); + TTH_SCAN_STRING(dupstore2); + *dupstore=0; + *dupstore2=0; +} + YY_BREAK +case 741: +YY_RULE_SETUP +#line 4734 "tth.lex" +{ + yyless(0);yy_pop_state(); + yy_push_state(define); + yy_push_state(getnumargs); + TTH_CCPY(defchar,"\\end");strcat(defchar,closing); + *dupstore=0; /*does getdef*/ + TTH_POP_CLOSING; +} /* end and beginning now defined. */ + YY_BREAK +case 742: +YY_RULE_SETUP +#line 4743 "tth.lex" +{ + if(indexkey("\\amslatex",keys,&nkeys)!=-1){ + TTH_SCAN_STRING("\\verb|"); + }else{ + TTH_OUTPUT(" - "); + } +} + YY_BREAK +/* url that does not use braces */ +case 743: +#line 4752 "tth.lex" +/*\\verb\*?[^ \t\na] { prior to 12 Jan 2002*/ +case 744: +YY_RULE_SETUP +#line 4753 "tth.lex" +{ /* Prevent erroneous \verbatim detection */ + if(tth_debug&8)fprintf(stderr,"Entering Verb state:%s\n",yytext); + chr1[0]=*(yytext+strlen(yytext)-1); + TTH_OUTPUT(TTH_TT1); yy_push_state(verb); + TTH_PUSH_CLOSING; TTH_CCPY(closing,TTH_TT2); + } + YY_BREAK +/* Deal with cases that are not in line.*/ +case 745: +YY_RULE_SETUP +#line 4760 "tth.lex" +TTH_TEX_FN("\\verb#1#tthdrop1",1); + YY_BREAK +/* ************* Enclosing multiple groups in stuff. ******** removed **/ +/* **************Paragraphing closures.***************/ +case 746: +/* rule 746 can match eol */ +YY_RULE_SETUP +#line 4765 "tth.lex" +{ + TTH_INC_LINE;yy_pop_state();TTH_SCAN_STRING("\\par\n");horizmode=1;} + YY_BREAK +case 747: +YY_RULE_SETUP +#line 4767 "tth.lex" +{yyless(0);yy_pop_state();horizmode=1;} + YY_BREAK +case 748: +/* rule 748 can match eol */ +YY_RULE_SETUP +#line 4769 "tth.lex" +{ + TTH_INC_LINE; + if(horizmode==1){ + horizmode=-1; + yy_push_state(parcheck); + fprintf(tth_fdout,"%s",yytext); + }else if(horizmode==-1) { + fprintf(stderr,"**** Abnormal NL in -1 horizmode, pargroup\n"); + /* TTH_SCAN_STRING("\\par"); */ + } +} + YY_BREAK +case 749: +YY_RULE_SETUP +#line 4780 "tth.lex" +{ + TTH_TEXCLOSE else{ + TTH_CLOSEGROUP;TTH_POP_CLOSING; + yy_pop_state(); + if(tth_eqwidth<100) tth_eqwidth=tth_eqwidth+TTH_INDPC; + horizmode=0;/*{TTH_PAR_ACTION} not in pargroup?*/ + } +} + YY_BREAK +case 750: +YY_RULE_SETUP +#line 4788 "tth.lex" +{ + TTH_TEXCLOSE else{ + if(!strcmp(closing,"")) { + /* Do not close the list or pop closing.*/ + fprintf(tth_fdout,"%s","\n
    \n"); + }else{ /* Have to close a different item */ + TTH_CLOSEGROUP; /* This a special case no POP_CLOSING */ + fprintf(tth_fdout,"
    "); + TTH_CCPY(closing,"
    "); + horizmode=0;/*{TTH_PAR_ACTION}*/ + } + TTH_CCPY(argchar,"
    \n
    ");yy_push_state(tokenarg); + } +} + YY_BREAK +case 751: +YY_RULE_SETUP +#line 4802 "tth.lex" +{ + TTH_TEXCLOSE else{ + if(!strcmp(closing,"
    ")) { + /* Do not close the list or pop closing.*/ + fprintf(tth_fdout,"%s","
    \n"); + }else{ /* Have to close a different item */ + TTH_CLOSEGROUP; /* This a special case no POP_CLOSING */ + fprintf(tth_fdout,"
    "); + TTH_CCPY(closing,"
    "); + horizmode=0; + } + TTH_CCPY(argchar,"
    \n");yy_push_state(tokenarg); + } +} + YY_BREAK +case 752: +#line 4818 "tth.lex" +case 753: +#line 4819 "tth.lex" +case 754: +YY_RULE_SETUP +#line 4819 "tth.lex" +{ + sprintf(scratchstring,"\\par%s",yytext); TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +/* Fix for \hang and friends end of a vbox implies a par */ +case 755: +#line 4824 "tth.lex" +case 756: +#line 4825 "tth.lex" +case 757: +YY_RULE_SETUP +#line 4825 "tth.lex" +{ + if(strstr(closing,"--vbox")){ + TTH_SCAN_STRING("\\par}"); + }else{ + TTH_SCAN_STRING("\\tthparendgroup"); + } +} + YY_BREAK +case 758: +YY_RULE_SETUP +#line 4834 "tth.lex" +{ + if(strstr(tth_texclose[tth_push_depth-1],"\\tthhbclose")){ + if(tth_debug&1024){ + fprintf(stderr,"Par in hhbc:%s\n",tth_texclose[tth_push_depth-1]);} + yyless(0);TTH_SCAN_STRING(tth_texclose[tth_push_depth-1]); + *tth_texclose[tth_push_depth-1]=0; + }else{ + if(horizmode) {TTH_PAR_ACTION} + else {fprintf(tth_fdout,"\n");} + } +} + YY_BREAK +case 759: +/* rule 759 can match eol */ +YY_RULE_SETUP +#line 4845 "tth.lex" +{ + TTH_CHECK_LENGTH; + if(bracecount) fprintf(stderr, + "**** Error. Bracecount=%d nonzero, line %d\n", + bracecount,tth_num_lines); + TTH_INC_LINE; + if(horizmode==1){ + horizmode=-1; + yy_push_state(parcheck); + TTH_OUTPUT(yytext); + }else if(horizmode==-1) { + fprintf(stderr,"**** Abnormal NL in -1 horizmode, parclose\n"); + } +} + YY_BREAK +case 760: +YY_RULE_SETUP +#line 4860 "tth.lex" +{ + if(horizmode) { + {TTH_PAR_ACTION} + } else {fprintf(tth_fdout,"\n");} + } + YY_BREAK +case 761: +/* rule 761 can match eol */ +YY_RULE_SETUP +#line 4866 "tth.lex" +{ + TTH_CHECK_LENGTH; + if(bracecount) fprintf(stderr,"**** Error. Bracecount=%d nonzero, line %d\n", + bracecount,tth_num_lines); + TTH_INC_LINE; + if(horizmode==1){ + horizmode=-1; + yy_push_state(parcheck); + TTH_OUTPUT(yytext); + }else if(horizmode==-1) { + fprintf(stderr,"**** Abnormal NL in -1 horizmode.\n"); +/* {TTH_PAR_ACTION} */ + } + } + YY_BREAK +/*************************** General Rules. *****************/ +case 762: +YY_RULE_SETUP +#line 4882 "tth.lex" +{ + TTH_PUSH_CLOSING; fprintf(tth_fdout,"\n

    "); + TTH_CCPY(closing,"

    \n"); + yy_push_state(pargroup);tth_eqwidth=tth_eqwidth-TTH_INDPC;} + YY_BREAK +case 763: +YY_RULE_SETUP +#line 4886 "tth.lex" +{ + TTH_OUTPUT("\n
    \n"); + TTH_CCPY(argchar,"
    "); + yy_push_state(tokenarg); +} + YY_BREAK +case 764: +YY_RULE_SETUP +#line 4891 "tth.lex" +{ + fprintf(tth_fdout,"\n
    ");yy_push_state(tokenarg); + TTH_CCPY(argchar,"
    ");} + YY_BREAK +case 765: +#line 4897 "tth.lex" +case 766: +#line 4898 "tth.lex" +case 767: +#line 4899 "tth.lex" +case 768: +YY_RULE_SETUP +#line 4899 "tth.lex" +TTH_SWAP("\\tth_underline "); + YY_BREAK +case 769: +YY_RULE_SETUP +#line 4900 "tth.lex" +yy_push_state(ruledim);TTH_OUTPUT("
    \n"); + YY_BREAK +case 770: +YY_RULE_SETUP +#line 4901 "tth.lex" +yy_push_state(ruledim); + YY_BREAK +case 771: +#line 4903 "tth.lex" +case 772: +YY_RULE_SETUP +#line 4903 "tth.lex" +{ + /* if(horizmode) {fprintf(tth_fdout,TTH_PAR);horizmode=0;} replaced by*/ + if(horizmode) {{TTH_PAR_ACTION}} + fprintf(tth_fdout,"

    "); +} + YY_BREAK +case 773: +#line 4909 "tth.lex" +case 774: +YY_RULE_SETUP +#line 4909 "tth.lex" +{ + if(horizmode) {{TTH_PAR_ACTION}} + fprintf(tth_fdout,"
    "); +} + YY_BREAK +case 775: +#line 4914 "tth.lex" +case 776: +#line 4915 "tth.lex" +case 777: +YY_RULE_SETUP +#line 4915 "tth.lex" +{ + if(horizmode) {{TTH_PAR_ACTION}} +} + YY_BREAK +/* Suck up prior whitespace to prevent paragraphs in lists*/ +case 778: +/* rule 778 can match eol */ +YY_RULE_SETUP +#line 4920 "tth.lex" +{ + TTH_EXTRACT_COMMENT{TTH_INC_MULTI;TTH_OUTPUT("
    ");} +} + YY_BREAK +/* Because of sucking up, this must be explicit. */ +case 779: +/* rule 779 can match eol */ +YY_RULE_SETUP +#line 4924 "tth.lex" +{ + TTH_EXTRACT_COMMENT{GET_DIMEN;} +} + YY_BREAK +/* Try a better job at sucking up whitespace before items. */ +case 780: +/* rule 780 can match eol */ +YY_RULE_SETUP +#line 4928 "tth.lex" +{ + TTH_EXTRACT_COMMENT{ /* Fix tth-comment before item bug. */ + TTH_INC_MULTI; + TTH_OUTPUT(closing); + *closing=0; + strcat(closing,"\n
    \n"); + strcat(closing,"\n"); + fprintf(tth_fdout,"\n
  • "); + } +} + YY_BREAK +/* New approach to optional item argument. Don't try to grab the whole.*/ +case 781: +/* rule 781 can match eol */ +YY_RULE_SETUP +#line 4939 "tth.lex" +{ + TTH_EXTRACT_COMMENT{ /* Fix tth-comment before item bug. */ + TTH_INC_MULTI; + if(tth_htmlstyle&2){/* Strict xhtml doesn't allow text outside
  • */ + TTH_OUTPUT(closing); + *closing=0; + strcat(closing,"\n
    \n"); + strcat(closing,"
  • \n"); + fprintf(tth_fdout,"\n
  • "); + TTH_SCAN_STRING("\\tthnooutopt["); + }else{ + fprintf(tth_fdout,"\n
    "); + TTH_SCAN_STRING("\\tthoutopt["); + } + } +} + YY_BREAK +case 782: +YY_RULE_SETUP +#line 4955 "tth.lex" +fprintf(tth_fdout,"
        "); + YY_BREAK +case 783: +YY_RULE_SETUP +#line 4956 "tth.lex" +fprintf(tth_fdout,"
            "); + YY_BREAK +case 784: +/* rule 784 can match eol */ +YY_RULE_SETUP +#line 4957 "tth.lex" +{ /* Space might not mean no opt. */ + /* If we can immediately detect absence of opt arg. Don't put dt section*/ + TTH_INC_MULTI; + jscratch=strlen(yytext)-1; /*circumlocution necessary*/ + yyless(jscratch); + TTH_OUTPUT(closing); strcpy(closing,"
  • \n"); + fprintf(tth_fdout,"\n\t
    "); + tth_index_line++; +} + YY_BREAK +case 785: +/* rule 785 can match eol */ +YY_RULE_SETUP +#line 4966 "tth.lex" +{ /* If opt arg absent just gives null dt*/ + TTH_EXTRACT_COMMENT{ /* Fix tth-comment before item bug. */ + TTH_INC_MULTI; + TTH_OUTPUT(closing); strcpy(closing,"
    \n"); + TTH_TEX_FN_OPT("\\special{html:
    }#1\\special{html:
    \n\t
    }#tthdrop1",1,""); + tth_index_line++; + } +} + YY_BREAK +case 786: +/* rule 786 can match eol */ +YY_RULE_SETUP +#line 4974 "tth.lex" +{ + TTH_EXTRACT_COMMENT{ /* Fix tth-comment before item bug. */ + TTH_INC_MULTI; + TTH_OUTPUT(closing); strcpy(closing,"
    \n"); + fprintf(tth_fdout,"
        "); + tth_index_line++; + } +} + YY_BREAK +case 787: +/* rule 787 can match eol */ +YY_RULE_SETUP +#line 4982 "tth.lex" +{ + TTH_EXTRACT_COMMENT{ /* Fix tth-comment before item bug. */ + TTH_INC_MULTI; + TTH_OUTPUT(closing); strcpy(closing,"
    \n"); + fprintf(tth_fdout,"
            "); + tth_index_line++; + } +} + YY_BREAK +case 788: +YY_RULE_SETUP +#line 4990 "tth.lex" +{ + fprintf(tth_fdout,"%s","\n
    \n
    \n");TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    "); + TTH_CCPY(argchar,"\n
    \n"); + yy_push_state(pargroup);tth_eqwidth=tth_eqwidth-TTH_INDPC; + yy_push_state(tokenarg); /* item code */ + } + YY_BREAK +case 789: +YY_RULE_SETUP +#line 4997 "tth.lex" +{ + fprintf(tth_fdout,"\n
    ");TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    "); + TTH_CCPY(argchar,"
    "); + yy_push_state(pargroup);tth_eqwidth=tth_eqwidth-TTH_INDPC; + yy_push_state(tokenarg); /* itemitem code */ +} + YY_BREAK +case 790: +YY_RULE_SETUP +#line 5004 "tth.lex" +{TTH_PUSH_CLOSING;fprintf(tth_fdout,"\n
    ");} + YY_BREAK +case 791: +YY_RULE_SETUP +#line 5005 "tth.lex" +{ + TTH_TEXCLOSE else{ + TTH_CLOSEGROUP;TTH_POP_CLOSING;fprintf(tth_fdout,"\n
    ");} +} + YY_BREAK +case 792: +YY_RULE_SETUP +#line 5010 "tth.lex" +{ /* Now using embracetok Sep 98*/ + ftntno++; + tth_encode(ftntcode,ftntno); + if(tth_LaTeX){ /* convert to plain TeX form */ + if((chscratch=strstr(yytext,"["))){ /* optional argument case */ + strcpy(scratchstring,chscratch+1); + *(scratchstring+strcspn(scratchstring,"]"))=0; + sprintf(dupstore,"{$^{%s}$}",scratchstring); + ftntno--; + sscanf(scratchstring,"%d",&js2); + tth_encode(ftntcode,js2); + }else{ + sprintf(dupstore,"{$^{%d}$}",ftntno); + } + } + if(tth_splitfile)sprintf(scratchstring,"",ftntcode,ftntcode);else /*sf*/ + sprintf(scratchstring, + "",ftntcode,ftntcode); + TTH_OUTPUT(scratchstring); + bracecount--; + TTH_CCPY(argchar,"\\tth_footnote"); + storetype=3; /* Make argchar to be rescanned */ + yy_push_state(dupgroup); /* Puts in anchors */ + yy_push_state(embracetok); +} + YY_BREAK +case 793: +YY_RULE_SETUP +#line 5036 "tth.lex" +{ /* xdef footnote with reference.*/ + if(tth_debug&4) fprintf(stderr,"tthfootnote, dupstore=%s\n",dupstore); + TTH_OUTPUT(""); /* end the anchors */ + sprintf(newcstr, + "\\xdef\\tthFtNt%s{\\tthhref{%s#tthFref%s}{#1}{#2}\\end}#tthdrop2", + ftntcode,filechar,ftntcode); + TTH_TEX_FN(newcstr,2); + } + YY_BREAK +case 794: +YY_RULE_SETUP +#line 5045 "tth.lex" +{ + yy_push_state(uppercase); + tth_push_depth--; + TTH_PRETEXCLOSE("\\tth_endupper"); + tth_push_depth++; +} + YY_BREAK +case 795: +YY_RULE_SETUP +#line 5051 "tth.lex" +{ + for(jscratch=0;jscratch\n"); + TTH_HAL_PUSH; + *halstring=0; + halignenter=tth_push_depth; + } + YY_BREAK +case 800: +YY_RULE_SETUP +#line 5076 "tth.lex" +{ + strcpy(scratchstring," border=\"1\""); + TTH_CCAT(scrstring,yytext); +} + YY_BREAK +/* Add template interpretation into && strings and alignment.*/ +case 801: +YY_RULE_SETUP +#line 5081 "tth.lex" +{ + TTH_CCAT(halstring,tdalign); + /* TTH_CCAT(scrstring,"}&|"); */ + TTH_CCAT(scrstring,"&|"); + TTH_CCAT(halstring,scrstring); + /* strcpy(scrstring,"&{");*/ + strcpy(scrstring,"&"); + /*TTH_CCAT(scrstring,"&|"); + if(strlen(scrstring)>3){ + TTH_CCAT(halstring,scrstring); + }else {TTH_CCAT(halstring,"|");} + strcpy(scrstring,"&"); Old version */ + *tdalign=0; + js2=ncols; /* signifies that we are in the first part of the cell */ +} + YY_BREAK +case 802: +YY_RULE_SETUP +#line 5096 "tth.lex" +{ + if(*tdalign==0) { + strcpy(tdalign,"r"); + } else if(ncols!=js2){ + if(*tdalign=='r') strcpy(tdalign,"c"); else strcpy(tdalign,"l"); + yy_push_state(removespace); + } +} + YY_BREAK +case 803: +YY_RULE_SETUP +#line 5104 "tth.lex" +{ + ncols++; + TTH_CCAT(scrstring,"&"); + if(strlen(scrstring)>2){TTH_CCAT(halstring,scrstring);} + strcpy(scrstring,"&"); + if(!*tdalign) strcpy(tdalign,"l"); +} + YY_BREAK +case 804: +#line 5112 "tth.lex" +case 805: +/* rule 805 can match eol */ +YY_RULE_SETUP +#line 5112 "tth.lex" +TTH_INC_LINE;TTH_CCAT(scrstring,yytext); + YY_BREAK +case 806: +YY_RULE_SETUP +#line 5113 "tth.lex" +TTH_CCAT(scrstring,yytext); + YY_BREAK +case 807: +YY_RULE_SETUP +#line 5114 "tth.lex" +{ /* New version uses the scanning of template. */ + /* + TTH_CCAT(scrstring,"&"); + TTH_CCAT(halstring,tdalign); + if(strlen(scrstring)>2) {TTH_CCAT(halstring,scrstring);} + */ + /* TTH_CCAT(scrstring,"}&"); */ + TTH_CCAT(scrstring,"&"); + TTH_CCAT(halstring,tdalign); + TTH_CCAT(halstring,scrstring); + if(tth_debug&32)fprintf(stderr,"halign format string:%s> ",halstring); + *tdalign=0;*dupstore=0; + yy_pop_state(); + yy_push_state(hendline); /* check for multicol at start */ + TTH_PUSH_BUFF(0);halbuff=yy_scan_string(halstring); /* Setup halbuff */ + yy_switch_to_buffer(include_stack[--tth_stack_ptr]); + fprintf(tth_fdout,"\n",scratchstring); +} + YY_BREAK +/* end of halign and htemplate */ +/* Hack of valign allowing only one row . */ +case 808: +/* rule 808 can match eol */ +YY_RULE_SETUP +#line 5136 "tth.lex" +{ + TTH_INC_MULTI; + yy_push_state(valign); + yy_push_state(vtemplate); + *valignstring=0; + valsec=0; + TTH_PRETEXCLOSE("\\tthexitvalign"); + TTH_PUSH_CLOSING; + TTH_CCPY(closing,"\n"); + } + YY_BREAK +case 809: +YY_RULE_SETUP +#line 5147 "tth.lex" +valsec++; + YY_BREAK +case 810: +YY_RULE_SETUP +#line 5148 "tth.lex" +{ + if(valsec){ + if(*valignstring){ + TTH_CCPY(valignstring," valign=\"middle\""); + }else{ + TTH_CCPY(valignstring," valign=\"top\""); + } + }else{ + TTH_CCPY(valignstring," valign=\"bottom\""); + } +} + YY_BREAK +case 811: +YY_RULE_SETUP +#line 5159 "tth.lex" +{ + fprintf(tth_fdout,"\n",valignstring); + yy_pop_state(); +} + YY_BREAK +case 812: +#line 5166 "tth.lex" +case 813: +YY_RULE_SETUP +#line 5166 "tth.lex" +{ + yy_pop_state(); +} + YY_BREAK +/* altered approach to input*/ +case 814: +#line 5171 "tth.lex" +case 815: +#line 5172 "tth.lex" +case 816: +YY_RULE_SETUP +#line 5172 "tth.lex" +yy_push_state(inputfile);yy_push_state(removespace); + YY_BREAK +case YY_STATE_EOF(inputfile): +#line 5173 "tth.lex" +TTH_SCAN_STRING(" \\tth_eof"); + YY_BREAK +case 817: +/* rule 817 can match eol */ +#line 5175 "tth.lex" +case 818: +/* rule 818 can match eol */ +YY_RULE_SETUP +#line 5175 "tth.lex" +TTH_INC_LINE;TTH_SCAN_STRING(" "); + YY_BREAK +case 819: +#line 5177 "tth.lex" +case 820: +YY_RULE_SETUP +#line 5177 "tth.lex" +{ + if ( tth_stack_ptr >= MAX_INCLUDE_DEPTH ) + { + fprintf(stderr, "**** Error: Fatal. Includes nested too deeply. Line %d\n",tth_num_lines); + TTH_EXIT( 1 ); + } + if(tth_allowinput){ + strcpy(scratchstring,input_filename); + if( (tth_inputfile=TTH_FILE_OPEN(scratchstring)) == NULL){ + strcat(scratchstring,".tex"); + if ( (tth_inputfile=fopen(scratchstring,"r")) == NULL){ + if(strlen(tth_texinput_path) > 0){ + chscratch=tth_texinput_path; + while(strlen(chscratch)){ + if((js2=strcspn(chscratch,PATH_SEP))){ + strcpy(scratchstring,chscratch); + strcpy(scratchstring+js2,DIR_SEP); + strcat(scratchstring,input_filename); + if(tth_debug&128) + fprintf(stderr,"Input try file:%s\n",scratchstring); + chscratch=chscratch+js2; + chscratch=chscratch+strspn(chscratch,PATH_SEP); + if ( (tth_inputfile=fopen(scratchstring,"r")) == NULL){ + strcat(scratchstring,".tex"); + tth_inputfile=fopen(scratchstring,"r"); + } + }else{++chscratch;} + if(tth_inputfile)break; + } + } + } + } + if(tth_inputfile){ + if(tth_debug&1) fprintf(stderr,"Input file: %s\n",scratchstring); + sprintf(scrstring,"\\tth_fileclose%p ",tth_inputfile); + TTH_SCAN_STRING(scrstring); + include_stack[tth_stack_ptr++] = YY_CURRENT_BUFFER; + yy_switch_to_buffer(yy_create_buffer(tth_inputfile,YY_BUF_SIZE)); + }else{ + fprintf(stderr,"Input file %s not found\n",input_filename); + } + }else{ + fprintf(stderr,"Input of file %s not allowed.\n",input_filename); + } + *input_filename=0; + yy_pop_state(); + } + YY_BREAK +case 821: +YY_RULE_SETUP +#line 5224 "tth.lex" + + YY_BREAK +case 822: +YY_RULE_SETUP +#line 5225 "tth.lex" +TTH_CCAT(input_filename,yytext); + YY_BREAK +/* Specific internal commands to expand in inputfile */ +case 823: +YY_RULE_SETUP +#line 5227 "tth.lex" +TTH_SCAN_STRING(tth_latex_file); + YY_BREAK +case 824: +YY_RULE_SETUP +#line 5228 "tth.lex" +{ + TTH_DO_MACRO + else{ + TTH_CCAT(input_filename,yytext); + } +} + YY_BREAK +case 825: +/* rule 825 can match eol */ +#line 5236 "tth.lex" +case 826: +/* rule 826 can match eol */ +YY_RULE_SETUP +#line 5236 "tth.lex" +{ +#ifdef MSDOS + /* pointer reading is broken in DJGPP */ + sscanf(yytext,"\\tth_fileclose%x ",&tth_inputfile); +#else + sscanf(yytext,"\\tth_fileclose%p ",&tth_inputfile); +#endif + if(!fclose(tth_inputfile)) { + if(tth_debug&1){ + fprintf(stderr,"Closing %s.\n",yytext); + } + }else{ + fprintf(stderr,"**** Error closing %s. ",yytext); + fprintf(stderr," Apparent file pointer:%p.\n",tth_inputfile); + } + + tth_inputfile=NULL; +} + YY_BREAK +case 827: +/* rule 827 can match eol */ +YY_RULE_SETUP +#line 5255 "tth.lex" +{ + TTH_INC_MULTI; + if(tth_fontguess){/* Try to guess what size etc is being called for. */ + strcpy(scratchstring,yytext); + jscratch=0; + js2=0; + if(tth_debug&2048)fprintf(stderr,"Font definition start:%s\n",scratchstring); + if((chscratch=strstr(scratchstring," at ")) != NULL){ /* at NNpt */ + chscratch=chscratch+4+strspn(chscratch+4," "); + if(strspn(chscratch,"0123456789")){ + *(chscratch+strspn(chscratch,"0123456789"))=0; + sscanf(chscratch,"%d",&js2); + jscratch=(js2-10)/2; + } + } + if(!js2){ /* No "at", Guess scaled */ + if((chscratch=strstr(scratchstring,"\\magstep")) != NULL){ + if(strspn(chscratch+8,"1234567890")){ + *(chscratch+8+strspn(chscratch+8,"1234567890"))=0; + sscanf(chscratch+8,"%d",&jscratch); + *chscratch=0; + } + } + if(strcspn(scratchstring,"123456789") != strlen(scratchstring)){ + sscanf(scratchstring+strcspn(scratchstring,"123456789"),"%d",&js2); + jscratch=jscratch + (js2-10)/2; /* Approx */ + *(scratchstring+strcspn(scratchstring,"123456789"))=0; + } + } + chscratch=strstr(scratchstring+1,"\\"); + chscratch=chscratch+strcspn(chscratch," ="); + if(strstr(chscratch,"mb") != NULL) strcpy(defstore,"\\rmfamily\\bf"); + else if(strstr(chscratch,"mr") != NULL) strcpy(defstore,"\\rmfamily"); + else if(strstr(chscratch,"mssb") != NULL) strcpy(defstore,"\\sffamily\\bf"); + else if(strstr(chscratch,"mssi") != NULL) strcpy(defstore,"\\sffamily\\it"); + else if(strstr(chscratch,"mss") != NULL) strcpy(defstore,"\\sffamily "); + else if(strstr(chscratch,"msl") != NULL) strcpy(defstore,"\\rmfamily\\it"); + else if(strstr(chscratch,"mi") != NULL) strcpy(defstore,"\\rmfamily\\it"); + else if(strstr(chscratch,"mtti") != NULL) strcpy(defstore,"\\ttfamily\\it"); + else if(strstr(chscratch,"mttb") != NULL) strcpy(defstore,"\\ttfamily\\bf"); + else if(strstr(chscratch,"mtt") != NULL) strcpy(defstore,"\\upshape\\ttfamily"); + else *defstore=0; + switch(jscratch){ + case 1: strcat(defstore,"\\large ");break; + case 2: strcat(defstore,"\\Large ");break; + case 3: strcat(defstore,"\\LARGE ");break; + case 4: case 5: case 6: case 7: case 8: strcat(defstore,"\\huge ");break; + case -1: strcat(defstore,"\\small ");break; + case -2: strcat(defstore,"\\footnotesize ");break; + case -3: strcat(defstore,"\\scriptsize ");break; + case -4: case -5: case -6: strcat(defstore,"\\tiny ");break; + default : strcat(defstore,"\\normalsize ");break; + } + chscratch=strstr(scratchstring+1,"\\"); + *(chscratch+strcspn(chscratch," ="))=0; + sprintf(dupstore,"\\def%s{%s}",chscratch,defstore); + if(tth_debug&2048)fprintf(stderr,"Font definition:%s\n",dupstore); + *defstore=0; + TTH_SCAN_STRING(dupstore); + *dupstore=0; + }else fprintf(tth_fdout," "); +} + YY_BREAK +/* Latex counters etc.*/ +case 828: +/* rule 828 can match eol */ +YY_RULE_SETUP +#line 5318 "tth.lex" +{ + TTH_INC_MULTI; + sprintf(newcstr,"\\tth_newcounter%s",strstr(yytext,"{")); + TTH_TEX_FN_OPT(newcstr,1,""); + /* This does not work using scratchstring. Need a permanent String*/ +} + YY_BREAK +case 829: +YY_RULE_SETUP +#line 5324 "tth.lex" +{ + if(tth_debug&4)fprintf(stderr,"Newcounter: %s\n",yytext); + strcpy(dupstore2,"\\");strcat(dupstore2,yytext+strcspn(yytext,"{")+1); + *(strstr(dupstore2,"}"))=0; + mkkey(dupstore2,countkeys,&ncounters); + if(tth_debug&4) fprintf(stderr,"Created new counter %s\n",dupstore2); + sprintf(scratchstring,"\\gdef\\the%s{\\arabic{%s}}",dupstore2+1,dupstore2+1); + strcpy(scrstring,yytext); + TTH_SCAN_STRING(scratchstring); + /* New using opt arg.*/ + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + sprintf(scratchstring,"\\%s",margs[jscratch]); + yy_pop_state(); + rmdef(margkeys,margs,&margmax); + } + if(strlen(scratchstring)>1){ + if((ind=indexkey(scratchstring,countkeys,&ncounters)) != -1){ + *scrstring=0; + i=ind; + if(countwithins[ind]){ + strcpy(scrstring,countwithins[i]); + i++; + rmkey(countwithins,&i); + } + strcat(scrstring,dupstore2+1); + strcat(scrstring,","); + mkkey(scrstring,countwithins,&i); + if(tth_debug&4)fprintf(stderr,"Added %s to withins of %s:%s\n", + dupstore2+1,scratchstring,scrstring); + }else{ + fprintf(stderr,"**** Error: No such counter for \"within\" option: %s. Line %d\n", + scratchstring,tth_num_lines); + } + } + *dupstore2=0; + if(horizmode)horizmode=1; + } + YY_BREAK +case 830: +/* rule 830 can match eol */ +YY_RULE_SETUP +#line 5361 "tth.lex" +{ + TTH_INC_MULTI; + if(tth_debug&4)fprintf(stderr,"Setcounter: %s\n",yytext); + yytext=yytext+strcspn(yytext,"{"); + TTH_CCPY(argchar,yytext);*(argchar+strcspn(argchar,"}"))=0; + *(argchar)='\\'; + if((ind=indexkey(argchar,countkeys,&ncounters)) != -1){ + yy_push_state(counterset); + if((chscratch=strstr(yytext,"\\value")) != NULL){ + strcpy(dupstore2,(chscratch+6)); + *dupstore2='\\'; + }else{ + strcpy(dupstore2,yytext+1+strcspn(yytext+1,"{")+1); + } + *(dupstore2+strcspn(dupstore2,"}"))=0; + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; + }else fprintf(stderr,"**** No counter: %s to set. Line %d\n",argchar,tth_num_lines); + *argchar=0; + } + YY_BREAK +case 831: +YY_RULE_SETUP +#line 5381 "tth.lex" +iac=-1;yy_push_state(advance); yy_push_state(removespace); + YY_BREAK +case 832: +YY_RULE_SETUP +#line 5382 "tth.lex" +{ + if(strstr(yytext,"alph")) jscratch=1; + else if(strstr(yytext,"Alph")) jscratch=2; + else if(strstr(yytext,"roman")) jscratch=3; + else if(strstr(yytext,"Roman")) jscratch=4; + else jscratch=0; + if((chscratch=strstr(yytext,"{"))!=NULL) yytext=chscratch; + else yytext=yytext+3; + if((chscratch=strstr(yytext,"}"))!=NULL) *chscratch=0; + *yytext='\\'; + TTH_SCAN_STRING(yytext); + yy_push_state(number);if(horizmode)horizmode=1; + } + YY_BREAK +case 833: +/* rule 833 can match eol */ +YY_RULE_SETUP +#line 5395 "tth.lex" +{ + TTH_INC_MULTI; + strcpy(scratchstring,yytext+strcspn(yytext,"{")); + *scratchstring='\\'; + *(scratchstring+strlen(scratchstring)-1)=0; + if((ind=indexkey(scratchstring,countkeys,&ncounters)) != -1){ + strcpy(dupstore2,"\\addtocounter"); + strcat(dupstore2,yytext+strcspn(yytext,"{")); + strcat(dupstore2,"{1}"); + if(countwithins[ind]){ + strcpy(scrstring,countwithins[ind]); + chscratch=scrstring; + while((chs2=strstr(chscratch,",")) != NULL){ + *chs2=0; + sprintf(dupstore2+strlen(dupstore2),"\\setcounter{%s}{0}",chscratch); + chscratch=chs2+1; + } + } + if(tth_debug&4) fprintf(stderr,"Stepping counter:%s\n",dupstore2); + TTH_SCAN_STRING(dupstore2); + }else{ + fprintf(stderr,"**** No counter:%s to step. Line %d\n",scratchstring,tth_num_lines); + } + *dupstore2=0;if(horizmode)horizmode=1; + } + YY_BREAK +case 834: +/* rule 834 can match eol */ +YY_RULE_SETUP +#line 5420 "tth.lex" +{ + TTH_INC_MULTI; + chscratch=yytext+strcspn(yytext,"{")+1; + chs2=chscratch+strcspn(chscratch,"{")+1; + *(chscratch+strcspn(chscratch,"}"))=0; + *(chs2+strcspn(chs2,"}"))=0; + strcpy(scratchstring,"\\"); + strcat(scratchstring,chs2); + if((ind=indexkey(scratchstring,countkeys,&ncounters)) != -1){ + *scrstring=0; + i=ind; + if(countwithins[ind]){ + strcpy(scrstring,countwithins[i]); + rmkey(countwithins,&i); + i++; + } + strcat(scrstring,chscratch); + strcat(scrstring,","); + mkkey(scrstring,countwithins,&i); + if(tth_debug&4)fprintf(stderr,"Added %s to withins of %s:%s\n", + chscratch,scratchstring,scrstring); + }else{ + fprintf(stderr,"**** Error: No such counter for \"within\" option: %s. Line %d\n", + scratchstring,tth_num_lines); + } +} + YY_BREAK +/* TeX counters */ +case 835: +YY_RULE_SETUP +#line 5448 "tth.lex" +{ + if(horizmode)horizmode=1;yy_push_state(getcount);yy_push_state(removespace);} + YY_BREAK +case 836: +YY_RULE_SETUP +#line 5450 "tth.lex" +{ + mkkey(yytext,countkeys,&ncounters);yy_pop_state(); + } + YY_BREAK +case 837: +YY_RULE_SETUP +#line 5453 "tth.lex" +fprintf(stderr,"Ill-formed newcount");yy_pop_state(); + YY_BREAK +case 838: +YY_RULE_SETUP +#line 5456 "tth.lex" +{iac=-1;yy_push_state(advance);if(horizmode)horizmode=1;} + YY_BREAK +case 839: +/* rule 839 can match eol */ +YY_RULE_SETUP +#line 5458 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +/* +\\[a-zA-Z]+((margin)|(width)|(height)|(size)|(offset)|(indent)){SP}*(by)? { + TTH_INC_MULTI; + if(tth_debug&4) fprintf(stderr,"Removing dimension advance: %s\n",yytext); + yy_pop_state(); + GET_DIMEN; + } Override the real command */ +case 840: +/* rule 840 can match eol */ +YY_RULE_SETUP +#line 5468 "tth.lex" +{ + /* Latex addtocounter. Convert into plain form. */ + TTH_INC_MULTI; + *yytext='\\'; + *(yytext+strcspn(yytext,"}"))=' '; + *(yytext+strcspn(yytext,"{"))=' '; + *(yytext+strlen(yytext)-1)=0; + if((chscratch=strstr(yytext,"\\value")) != NULL){ + strcpy(chscratch," "); + *(chscratch+6)='\\'; + *(chscratch+strcspn(chscratch,"}"))=0; + } + if(tth_debug&4)fprintf(stderr,"Latex advance string:%s\n",yytext); + TTH_SCAN_STRING(yytext); +} + YY_BREAK +case 841: +YY_RULE_SETUP +#line 5484 "tth.lex" + + YY_BREAK +case 842: +YY_RULE_SETUP +#line 5485 "tth.lex" +{/* Dimension advancing: get counter name.*/ + chscratch=yytext+strlen("\\tthdimen"); + strcpy(newcstr,chscratch+strspn(chscratch," ")); + yy_pop_state(); + yy_push_state(dimadv); /* Prepare to get second and advance. */ + dimadvstate=0; + GET_DIMEN; + if(tth_debug&1024)fprintf(stderr,"Advancing %s\n",newcstr); +} + YY_BREAK +case 843: +/* rule 843 can match eol */ +YY_RULE_SETUP +#line 5495 "tth.lex" +{ + yyless(0); + if(!dimadvstate){ /* Return of first time we have the first num,unit. */ + cnumber=anumber; + strcpy(scrstring,scratchstring); + GET_DIMEN; + dimadvstate=1; + }else{ + if(tth_debug&1024)fprintf(stderr,"Adding: %f %s, %f %s\n", + cnumber,scrstring,anumber,scratchstring); + adddimen(&cnumber,scrstring,&anumber,scratchstring); + if(*scrstring=='%')strcpy(scrstring,"\\tth_hsize"); + yy_pop_state(); + sprintf(scratchstring,"%s %f%s",newcstr,cnumber,scrstring); + if(tth_debug&1024)fprintf(stderr,"Dimension advance string:%s\n",scratchstring); + TTH_SCAN_STRING(scratchstring); + dimadvstate=0; + } +} + YY_BREAK +case 844: +YY_RULE_SETUP +#line 5516 "tth.lex" +{ + if(strcspn(yytext,"-") < strlen(yytext)) minus=-1; +} + YY_BREAK +case 845: +#line 5520 "tth.lex" +case 846: +YY_RULE_SETUP +#line 5520 "tth.lex" +{ + if(iac==-1){ /* First time we are getting the one to set */ + iac=indexkey(yytext,countkeys,&ncounters); + if(tth_debug&4) fprintf(stderr,"First advance:%s: %d, currently: %d.\n", + yytext,iac,counters[iac]); + if(iac == -1) { + TTH_DO_MACRO else{ + if(!(tth_debug&32768)) + fprintf(stderr,"**** Unknown counter to advance: %s\n",argchar); + yy_pop_state(); + GET_DIMEN; + } + } else { + strcpy(argchar,yytext); + } + }else{ + if(tth_debug&4) fprintf(stderr,"Advancing counter %d, %s by %s. " + ,iac,argchar,yytext); + if(strcspn(yytext,"0123456789") < strlen(yytext)){ + sscanf(yytext+strcspn(yytext,"+-0123456789"),"%d",&jac); + counters[iac]=counters[iac]+jac*minus; + jac=0; + } else { + TTH_CCPY(newcstr,yytext+strcspn(yytext,"\\")); + jac=indexkey(newcstr,countkeys,&ncounters); + if(jac == -1) { + TTH_DO_MACRO else{ + if(!(tth_debug&32768)) + fprintf(stderr,"**** Unknown counter: %s\n",newcstr); + jac=-2; /* Quit. Expansion is exhausted. */ + } + } else { + if(strcspn(yytext,"-") == strlen(yytext)) { + counters[iac]=counters[iac]+minus*counters[jac]; + }else{ + counters[iac]=counters[iac]-minus*counters[jac]; + } + } + } + if(jac!=-1){ + minus=1; + yy_pop_state(); + if(tth_debug&4) fprintf(stderr,"New counter value=%d\n",counters[iac]); + *argchar=0; + } + } +} + YY_BREAK +case 847: +YY_RULE_SETUP +#line 5567 "tth.lex" +{ + fprintf(stderr,"**** Error. Ill-formed \\advance statement\n"); + yy_pop_state(); +} + YY_BREAK +case 848: +/* rule 848 can match eol */ +#line 5573 "tth.lex" +case 849: +/* rule 849 can match eol */ +YY_RULE_SETUP +#line 5573 "tth.lex" +{ + chscratch=strstr(yytext,"{"); + strcpy(scratchstring,chscratch); + *(scratchstring+strcspn(scratchstring,"}"))=0; + *(scratchstring)='\\'; + TTH_SCAN_STRING(scratchstring); + } + YY_BREAK +case 850: +#line 5582 "tth.lex" +case 851: +#line 5583 "tth.lex" +case 852: +#line 5584 "tth.lex" +case 853: +YY_RULE_SETUP +#line 5584 "tth.lex" +yy_push_state(number);jscratch=0; + YY_BREAK +case 854: +YY_RULE_SETUP +#line 5585 "tth.lex" +{ + i=indexkey(yytext,countkeys,&ncounters); + if(i == -1) { + TTH_DO_MACRO else { + if(!(tth_debug&32768)) + fprintf(stderr,"**** Unknown counter for number, %s\n",yytext); + yy_pop_state(); + } + } else { + switch(jscratch){ + case 0: sprintf(dupstore2,"%d",counters[i]);break; + case 1: sprintf(dupstore2,"%c",counters[i]+96);break; + case 2: sprintf(dupstore2,"%c",counters[i]+64);break; + case 3: roman(counters[i],dupstore2);break; + case 4: roman(counters[i],dupstore2); + for(js2=0;js2 */ + if(!bracecount){ + if(tth_debug&4) fprintf(stderr,"Close brace ending let,count=%d\n", + bracecount); + yy_pop_state(); + strcpy(scratchstring,defstore+strspn(defstore," {")); + *(scratchstring+strcspn(scratchstring,"}"))=0; + if((i=indexkey(scratchstring,keys,&nkeys))==-1){ + if(tth_debug&4) fprintf(stderr,"Macro %s not found for \\let. Presuming native.\n",scratchstring); + strcat(defstore,"#tthdrop"); + sprintf((defstore+strlen(defstore)),"%d",abs(narg)); + if(nkeys < NFNMAX) { + lkeys[nkeys]=localdef; + mkdef(defchar,keys,defstore,defs,&narg,nargs,&nkeys); + if(tth_debug&4){ + i=indexkey(defchar,keys,&nkeys); + fprintf(stderr," Just Defined Key %s index %d nargs %d Def %s\n", + defchar,i,nargs[i],defs[i]); + } + } + else fprintf(stderr,"Too many functions to define %s",defchar); + }else{ + if(nkeys < NFNMAX) { + lkeys[nkeys]=localdef; + mkdef(defchar,keys,defs[i],defs,nargs+i,nargs,&nkeys); + if(tth_debug&4){ + i=indexkey(defchar,keys,&nkeys); + fprintf(stderr,"Defined Let Key %s index %d nargs %d Def %s\n", + defchar,i,nargs[i],defs[i]); + } + }else fprintf(stderr,"Too many functions to define %s",defchar); + } + *defchar=0; + *defstore=0; + } else { + if(tth_debug&4) fprintf(stderr,"Close brace in [e]def, count=%d\n", + bracecount); + strcat(defstore,yytext);bracecount--; + } +} + YY_BREAK +case 863: +YY_RULE_SETUP +#line 5694 "tth.lex" +{ + if(*(yytext+1)!='d')localdef=0; else localdef=1; + if(tth_debug&4) fprintf(stderr,"%s(localdef=%d)",yytext,localdef); + yy_push_state(define); + yy_push_state(getnumargs); + yy_push_state(getdef); + } + YY_BREAK +case 864: +YY_RULE_SETUP +#line 5701 "tth.lex" +{ + if(*(yytext+1)!='e')localdef=0; else localdef=1; + if(tth_debug&4) fprintf(stderr,"%s(localdef=%d)",yytext,localdef); + edeftype=1; + yy_push_state(define); + yy_push_state(getnumargs); /* determine no of args */ + yy_push_state(getdef); /* determine the key of definition */ + } + YY_BREAK +case 865: +/* rule 865 can match eol */ +YY_RULE_SETUP +#line 5709 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 866: +YY_RULE_SETUP +#line 5710 "tth.lex" + + YY_BREAK +case 867: +YY_RULE_SETUP +#line 5711 "tth.lex" +yy_push_state(getdefbr);strcpy(dupstore,"{"); + YY_BREAK +case 868: +YY_RULE_SETUP +#line 5712 "tth.lex" +{ /* Really ought to match braces. */ + /*fprintf(stderr,"getdefbr strings:%s:%s:",yytext,dupstore);*/ + yy_pop_state(); + TTH_CCPY(defchar,dupstore+strspn(dupstore,"{ \t\n")); + yy_pop_state();*dupstore=0; + /* If this is a true definition, terminate at space etc.*/ + if(*defchar=='\\') + *(defchar+strcspn(defchar," =}"))=0; + if(tth_debug&4) fprintf(stderr,":%s,",defchar); +} + YY_BREAK +case 869: +YY_RULE_SETUP +#line 5722 "tth.lex" +strcat(dupstore,yytext); + YY_BREAK +case 870: +YY_RULE_SETUP +#line 5723 "tth.lex" +{ + /*fprintf(stderr,"getdef string:%s:",yytext);*/ + TTH_CCPY(defchar,yytext+strspn(yytext,"{ \t\n")); + yy_pop_state();*dupstore=0; + *(defchar+strcspn(defchar," =}"))=0; + if(tth_debug&4) fprintf(stderr,":%s,",yytext); + } + YY_BREAK +case 871: +YY_RULE_SETUP +#line 5730 "tth.lex" +{ + fprintf(stderr, + "\n**** Error: incompatible syntax in macro name:%s: Line %d\n", + yytext,tth_num_lines); + yy_pop_state(); +} + YY_BREAK +/* Latex form accommodates arg number perhaps WSP is wrong. */ +case 872: +/* rule 872 can match eol */ +#line 5739 "tth.lex" +case 873: +/* rule 873 can match eol */ +YY_RULE_SETUP +#line 5739 "tth.lex" +{ /* New pattern */ + /* sscanf((yytext+strcspn(yytext,"] \t\n{")-1),"%d",&narg); */ + TTH_INC_MULTI; + sscanf((yytext+strcspn(yytext,"]{")-1),"%d",&narg); + yy_pop_state(); + if(tth_debug&4) fprintf(stderr," %d arguments.\n",narg); + } + YY_BREAK +case 874: +YY_RULE_SETUP +#line 5746 "tth.lex" +{ + narg=0; + yy_pop_state(); + if(tth_debug&4) fprintf(stderr," no arguments.\n"); + } + YY_BREAK +case 875: +/* rule 875 can match eol */ +YY_RULE_SETUP +#line 5751 "tth.lex" +{ + if(tth_delimdef){ + yy_pop_state(); + if(tth_debug&4) fprintf(stderr,"yytext=%s",yytext); + chs2=yytext-1; + while(chs2 != NULL){ + chscratch=chs2; + chs2=strstr(chscratch+1,"#"); + } + sscanf(chscratch+1,"%d",&narg); + narg=-narg; + if(tth_debug&4) fprintf(stderr, + "Delimited definition:%s\n No of args: %d\n ",defchar,narg); + if(nkeys < NFNMAX) { + whitespace=1; + horizmode=1; + yyless(0); + *dupstore=0; /* ought not to be needed */ + yy_push_state(ddcomp); + } + else fprintf(stderr,"Too many functions to define %s",defchar); + }else{ + TTH_INC_MULTI; + yy_pop_state();yy_pop_state();yy_push_state(matchbrace); + fprintf(stderr,"Discarding delimited definition:%s\n",defchar); + } +} + YY_BREAK +case 876: +/* rule 876 can match eol */ +YY_RULE_SETUP +#line 5778 "tth.lex" +{ + if(!whitespace)strcat(dupstore," "); + TTH_INC_LINE; + whitespace=1; + if(horizmode==1){ + horizmode=-1; + yy_push_state(parcheck); + }else{ + if(horizmode==-1){ + fprintf(stderr,"**** Abnormal NL in -1 ddcomp.\n"); +/* horizmode=0;strcat(dupstore,"\\par"); */ + } + } +} + YY_BREAK +case 877: +YY_RULE_SETUP +#line 5792 "tth.lex" +{if(!whitespace){strcat(dupstore," ");} whitespace=1; } + YY_BREAK +case 878: +YY_RULE_SETUP +#line 5793 "tth.lex" +{whitespace=1;strcat(dupstore,yytext);} + YY_BREAK +case 879: +YY_RULE_SETUP +#line 5794 "tth.lex" +{ + whitespace=0;strcat(dupstore,yytext);horizmode=1; + lkeys[nkeys]=0; + mkdef("",keys,dupstore,defs,&narg,nargs,&nkeys); + if(tth_debug&4){ + fprintf(stderr,"Defined Argument-Template: index %d nargs %d Def:%s\n", + nkeys-1,nargs[nkeys-1],defs[nkeys-1]); + } + *dupstore=0; + yy_pop_state(); +} + YY_BREAK +case 880: +YY_RULE_SETUP +#line 5805 "tth.lex" +{whitespace=0;strcat(dupstore,yytext+1);horizmode=1;} + YY_BREAK +case 881: +YY_RULE_SETUP +#line 5806 "tth.lex" +{whitespace=0;strcat(dupstore,yytext);horizmode=1;} + YY_BREAK +case 882: +/* rule 882 can match eol */ +YY_RULE_SETUP +#line 5808 "tth.lex" +{ + TTH_INC_MULTI; + strcpy(scratchstring,yytext); + chscratch=strstr(scratchstring+1,"[")+1; + *(chscratch+strcspn(chscratch,"]"))=0; + js2=nkeys; + mkkey(chscratch,optargs,&js2); + if(tth_debug&4){ + js2--; + fprintf(stderr,"Defined Default argument %s index %d nargs %d Def %s\n", + chscratch,js2,nargs[js2],optargs[js2]); + } + strcpy(scratchstring+3,"{"); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 883: +#line 5825 "tth.lex" +case 884: +#line 5826 "tth.lex" +case 885: +YY_RULE_SETUP +#line 5826 "tth.lex" +TTH_PUSH_CLOSING; + YY_BREAK +case 886: +#line 5828 "tth.lex" +case 887: +#line 5829 "tth.lex" +case 888: +#line 5830 "tth.lex" +case 889: +YY_RULE_SETUP +#line 5830 "tth.lex" +{ + TTH_TEXCLOSE else{ +/* if(horizmode==-1)horizmode=1; */ + TTH_CLOSEGROUP;TTH_POP_CLOSING;} +} + YY_BREAK +case 890: +YY_RULE_SETUP +#line 5835 "tth.lex" +bracecount++; + YY_BREAK +case 891: +YY_RULE_SETUP +#line 5836 "tth.lex" +{if(!bracecount){yy_pop_state();} else {bracecount--;}} + YY_BREAK +case 892: +YY_RULE_SETUP +#line 5837 "tth.lex" + + YY_BREAK +case 893: +YY_RULE_SETUP +#line 5838 "tth.lex" + + YY_BREAK +case 894: +YY_RULE_SETUP +#line 5839 "tth.lex" + + YY_BREAK +case 895: +YY_RULE_SETUP +#line 5841 "tth.lex" +if(!tth_LaTeX) fprintf(tth_fdout,"
    \n",tabwidth); + YY_BREAK +case 896: +YY_RULE_SETUP +#line 5843 "tth.lex" +{ + sscanf(yytext+8,"%d",&jscratch); + tabwidth=1000/jscratch; + } + YY_BREAK +case 897: +YY_RULE_SETUP +#line 5847 "tth.lex" +{TTH_PAR_ACTION}; + YY_BREAK +/* Standard TeX formatting switches work properly inside groups.*/ +case 898: +YY_RULE_SETUP +#line 5850 "tth.lex" +fprintf(tth_fdout,"
    ");TTH_PRECLOSE("\n
    "); + YY_BREAK +case 899: +YY_RULE_SETUP +#line 5851 "tth.lex" +{ /* underline switch. */ + if(eqdepth && strcspn(TTH_NAME,"M")>0 ){ /* In equations not Mathml */ + TTH_CCAT(tth_font_open[tth_push_depth],TTH_UNDL1); + TTH_CCAT(tth_font_close[tth_push_depth],TTH_UNDL2); + }else{ + TTH_OUTPUT(TTH_UNDL1);TTH_PRECLOSE(TTH_UNDL2); + } + } + YY_BREAK +case 900: +YY_RULE_SETUP +#line 5859 "tth.lex" +{ + if(eqdepth){ + TTH_CCAT(tth_font_open[tth_push_depth],TTH_BOLDO); + TTH_CCAT(tth_font_close[tth_push_depth],TTH_BOLDC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_BOLD1);TTH_PRECLOSE(TTH_BOLD2); + } + }else{ + TTH_OUTPUT(TTH_BOLD1);TTH_PRECLOSE(TTH_BOLD2); + } + } + YY_BREAK +case 901: +YY_RULE_SETUP +#line 5870 "tth.lex" +{ + if(eqdepth){ + TTH_CCPY(tth_font_open[tth_push_depth],TTH_BOLDO); + TTH_CCPY(tth_font_close[tth_push_depth],TTH_BOLDC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_BOLD1);TTH_PRECLOSE(TTH_BOLD2); + } + }else{ + TTH_OUTPUT(TTH_BOLD1);TTH_PRECLOSE(TTH_BOLD2); + } + } + YY_BREAK +/* Implementation of \bm from math package. Bold italic.*/ +case 902: +YY_RULE_SETUP +#line 5882 "tth.lex" +{ + if(eqdepth){ + TTH_CCPY(tth_font_open[tth_push_depth],TTH_BLDITO); + TTH_CCPY(tth_font_close[tth_push_depth],TTH_BLDITC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_BLDIT1);TTH_PRECLOSE(TTH_BLDIT2); + } + }else{ + TTH_OUTPUT(TTH_BLDIT1);TTH_PRECLOSE(TTH_BLDIT2); + } + } + YY_BREAK +case 903: +#line 5894 "tth.lex" +case 904: +YY_RULE_SETUP +#line 5894 "tth.lex" +{ + if(eqdepth){ + TTH_CCAT(tth_font_open[tth_push_depth],TTH_ITALO); + TTH_CCAT(tth_font_close[tth_push_depth],TTH_ITALC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_ITAL1);TTH_PRECLOSE(TTH_ITAL2); + } + }else{ + TTH_OUTPUT(TTH_ITAL1);TTH_PRECLOSE(TTH_ITAL2); + } + } + YY_BREAK +case 905: +#line 5906 "tth.lex" +case 906: +YY_RULE_SETUP +#line 5906 "tth.lex" +{ + if(eqdepth){ + TTH_CCPY(tth_font_open[tth_push_depth],TTH_ITALO); + TTH_CCPY(tth_font_close[tth_push_depth],TTH_ITALC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_ITAL1);TTH_PRECLOSE(TTH_ITAL2); + } + }else{ + TTH_OUTPUT(TTH_ITAL1);TTH_PRECLOSE(TTH_ITAL2); + } + } + YY_BREAK +case 907: +#line 5918 "tth.lex" +case 908: +YY_RULE_SETUP +#line 5918 "tth.lex" +{ + if(eqdepth){ + TTH_CCPY(tth_font_open[tth_push_depth],TTH_TTO); + TTH_CCPY(tth_font_close[tth_push_depth],TTH_TTC); + if(strstr(tth_texclose[tth_push_depth-1],"tth_boxclose")) { + TTH_OUTPUT(TTH_TT1);TTH_PRECLOSE(TTH_TT2); + } + }else{ + TTH_OUTPUT(TTH_TT1);TTH_PRECLOSE(TTH_TT2); + } + } + YY_BREAK +case 909: +#line 5930 "tth.lex" +case 910: +#line 5931 "tth.lex" +case 911: +#line 5932 "tth.lex" +case 912: +#line 5933 "tth.lex" +case 913: +YY_RULE_SETUP +#line 5933 "tth.lex" +{ + if(eqdepth){ + TTH_CCPY(tth_font_open[tth_push_depth],TTH_NORM1); + TTH_CCPY(tth_font_close[tth_push_depth],TTH_NORM2); + }else{ + if(!eqdepth && !(tth_istyle&1)){ + TTH_OUTPUT(TTH_FONTCANCEL); /* not in equations: avoid bug */ + }else{ + TTH_OUTPUT(TTH_NORM1);TTH_PRECLOSE(TTH_NORM2); + } + } +} + YY_BREAK +case 914: +YY_RULE_SETUP +#line 5945 "tth.lex" +{ /* new approach */ + if(tth_push_depth){ + yy_push_state(textsc); + tth_push_depth--; + TTH_PRETEXCLOSE("\\tth_endsmallcaps"); + tth_push_depth++;} +} + YY_BREAK +case 915: +YY_RULE_SETUP +#line 5952 "tth.lex" +{ + TTH_OUTPUT(TTH_HELV1); TTH_PRECLOSE(TTH_HELV2);} + YY_BREAK +case 916: +YY_RULE_SETUP +#line 5954 "tth.lex" +{ + TTH_CCAT(tth_font_open[tth_push_depth],TTH_BOLDO); + TTH_CCAT(tth_font_close[tth_push_depth],TTH_BOLDC); +} + YY_BREAK +case 917: +YY_RULE_SETUP +#line 5958 "tth.lex" +{ + TTH_CCPY(tth_font_open[tth_push_depth],tth_fonto_def); + TTH_CCPY(tth_font_close[tth_push_depth],tth_fontc_def); +} + YY_BREAK +case 918: +YY_RULE_SETUP +#line 5963 "tth.lex" +fprintf(tth_fdout,"
    ");TTH_PRECLOSE("
    "); + YY_BREAK +case 919: +YY_RULE_SETUP +#line 5965 "tth.lex" +{ + fprintf(tth_fdout,"
    "); + if(strstr(closing,"--vbox")){ + TTH_CCPY(scratchstring,""); + }else{*scratchstring=0;} + TTH_PUSH_CLOSING; + TTH_CCPY(closing,scratchstring); + TTH_CCAT(closing,"
    \n"); + yy_push_state(pargroup);tth_eqwidth=tth_eqwidth-TTH_INDPC;} + YY_BREAK +case 920: +YY_RULE_SETUP +#line 5974 "tth.lex" +{ + TTH_PUSH_CLOSING; fprintf(tth_fdout,"
    "); + TTH_CCPY(closing,"
    \n"); + yy_push_state(pargroup);tth_eqwidth=tth_eqwidth-TTH_INDPC; + GET_DIMEN } + YY_BREAK +case 921: +YY_RULE_SETUP +#line 5979 "tth.lex" +{ + fprintf(stderr,"Hangafter ignored\n");yy_push_state(lookfornum);*argchar=0; +} + YY_BREAK +/* Getting values and units, do nothing. Only treat the explicit case. + A tokenized DIMEN will treat command and dimen as unknown commands. + Removed /{NUM} also in hangindent, 1.01 (also saved 10k size)*/ +case 922: +YY_RULE_SETUP +#line 5988 "tth.lex" +GET_DIMEN + YY_BREAK +case 923: +YY_RULE_SETUP +#line 5989 "tth.lex" +GET_DIMEN + YY_BREAK +/* Setting sizes: */ +case 924: +YY_RULE_SETUP +#line 5991 "tth.lex" +GET_DIMEN + YY_BREAK +case 925: +YY_RULE_SETUP +#line 5992 "tth.lex" +GET_DIMEN + YY_BREAK +case 926: +YY_RULE_SETUP +#line 5993 "tth.lex" +GET_DIMEN + YY_BREAK +case 927: +YY_RULE_SETUP +#line 5994 "tth.lex" +GET_DIMEN + YY_BREAK +case 928: +YY_RULE_SETUP +#line 5995 "tth.lex" +GET_DIMEN + YY_BREAK +/*.|\n yyless(0);yy_pop_state(); *argchar=0; */ +case 929: +/* rule 929 can match eol */ +YY_RULE_SETUP +#line 5999 "tth.lex" +{ /* Set a dimension that was defined. */ + strcpy(newcstr,yytext+1+strcspn(yytext+1,"\\")); + *scratchstring=0; + if(tth_push_depth-tth_LaTeX>0 || strcmp(newcstr,"\\hsize")) + yy_push_state(setdimen); + GET_DIMEN;/* Get the new dimension */ + /* yy_push_state(argclear); */ + GET_DIMEN;/* Get the current dimension*/ + if(tth_debug&1024){fprintf(stderr,"Dimension to set: %s Now follow the current and the new values:\n",newcstr);} +} + YY_BREAK +/* Preexisting dimensions, skips etc. Now not preexisting. +\\hsize { + strcpy(newcstr,yytext);*scratchstring=0; + if(tth_push_depth-tth_LaTeX>0)yy_push_state(setdimen); + GET_DIMEN; +} */ +case 930: +/* rule 930 can match eol */ +YY_RULE_SETUP +#line 6015 "tth.lex" +{ + yy_pop_state();yyless(0); + if(tth_debug&1024)fprintf(stderr,"Setdimen. scratchstring=%s, closing=%s, newcstr=%s, thesize=%d\n",scratchstring,closing,newcstr,thesize); + if(thesize){ + if(*scratchstring=='%') { + sprintf(scrstring,"\\def%s{\\tthdimen%s %f%s}", + newcstr,newcstr,anumber,"\\tth_hsize"); + if(strstr(closing,"")!=NULL + && strstr(newcstr,"\\hsize")!=NULL){ + sprintf(scratchstring,"
    \n", + (thesize*DEFAULTHSIZEPIX)/100,boxalign); /*Guess at width */ + TTH_OUTPUT(scratchstring); + } + }else if(strlen(scratchstring)){ + sprintf(scrstring,"\\def%s{\\tthdimen%s %f%s}", + newcstr,newcstr,anumber,scratchstring); + if(strstr(closing,"")!=NULL + && strstr(newcstr,"\\hsize")!=NULL){ + sprintf(scratchstring,"\n", + thesize/SCALEDPERPIXEL,boxalign); + TTH_OUTPUT(scratchstring); + } + } + TTH_SCAN_STRING(scrstring); + } +} + YY_BREAK +case 931: +YY_RULE_SETUP +#line 6041 "tth.lex" +{ + TTH_DO_MACRO + else{GET_DIMEN;} +} + YY_BREAK +case 932: +YY_RULE_SETUP +#line 6045 "tth.lex" +TTH_TEX_FN("\\hskip #1{}#tthdrop1",1); + YY_BREAK +case 933: +YY_RULE_SETUP +#line 6046 "tth.lex" +TTH_TEX_FN("\\vskip #1{}#tthdrop1",1); + YY_BREAK +case 934: +YY_RULE_SETUP +#line 6047 "tth.lex" +{ + yy_push_state(hskip); + yy_push_state(glue);GET_DIMEN; +} + YY_BREAK +case 935: +/* rule 935 can match eol */ +YY_RULE_SETUP +#line 6051 "tth.lex" +{ + if(*scratchstring=='%'){ /* Size is in % of hsize. Guess 100 nbsp per line!*/ + for(js2=0;js2 is 14 pixels */ + for(js2=0;js2<(thesize/(SCALEDPERPIXEL*14));js2++){TTH_OUTPUT("
    ");} + yy_pop_state(); yyless(0); +} + YY_BREAK +case 938: +#line 6068 "tth.lex" +case 939: +YY_RULE_SETUP +#line 6068 "tth.lex" +{ + TTH_DO_MACRO + else{ + if(horizmode) horizmode=1; + if(tth_debug&1) fprintf(stderr,"Removing glue command:%s\n",yytext); + yy_push_state(glue);GET_DIMEN; + } + } + YY_BREAK +case 940: +YY_RULE_SETUP +#line 6076 "tth.lex" +{ + if(!horizmode || horizmode==3 || strstr(closing,""); + } +} + YY_BREAK +case 941: +YY_RULE_SETUP +#line 6098 "tth.lex" +{ + if(tth_debug&1024)fprintf(stderr,"tthhbclose Stack_ptr=%d. Closing=%s\n",tth_stack_ptr,closing); + yy_pop_state(); + if(tth_debug&1024)fprintf(stderr,"tthhbclose pop completed\n"); + TTH_CLOSEGROUP;TTH_POP_CLOSING; +} + YY_BREAK +case 942: +/* rule 942 can match eol */ +YY_RULE_SETUP +#line 6106 "tth.lex" +{ + if(tth_debug&1024)fprintf(stderr,"Starting vbox\n"); + yy_pop_state(); + /*If box does not start with explicit hsize manipulation, make it do so. */ + chscratch=strstr(yytext,"\\hsize"); + js2=1+strcspn(yytext+1,"\\"); + yyless(js2); + if(chscratch){ +/* fprintf(stderr,"vbox:%s\n",yytext); */ + }else{ + if((ind=indexkey("\\hsize",keys,&nkeys))!=-1){/*hsize is defined*/ + if(indexkey("\\hsize",keys,&ind)!=-1){/*hsize is currently redefined*/ + /* Must be done after the yyless */ + TTH_SCAN_STRING("\\hsize=\\hsize ");/*Set size at the start of vbox*/ + if(tth_debug&1024)fprintf(stderr,"Vbox auto hsize reset\n"); + } + } + } + *scratchstring=0; + if(strstr(closing,""); + TTH_CCAT(closing,scratchstring); + if(!horizmode || horizmode==3){ /* Pass on vert mode to next box if any*/ + TTH_CCAT(tth_texclose[tth_push_depth-1],"\\tthvertbox"); + } + horizmode=1; +} + YY_BREAK +case 943: +YY_RULE_SETUP +#line 6147 "tth.lex" +{TTH_SWAP("\\tth_hbox");} + YY_BREAK +case 944: +YY_RULE_SETUP +#line 6148 "tth.lex" +{ + if(horizmode){ + TTH_CCAT(closing,""); + }else{ + TTH_OUTPUT("
    "); + TTH_CCAT(closing,"
    "); + } +} + YY_BREAK +case 945: +YY_RULE_SETUP +#line 6156 "tth.lex" +{ + yy_push_state(hbox); + GET_DIMEN; +} + YY_BREAK +case 946: +YY_RULE_SETUP +#line 6160 "tth.lex" +TTH_SCAN_STRING("\\par\\hbox to\\hsize "); + YY_BREAK +case 947: +/* rule 947 can match eol */ +YY_RULE_SETUP +#line 6162 "tth.lex" +{ + if(strstr(yytext,"\\h")){ + strcpy(boxalign," align=\"right\""); + } + TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    \n"); + if(!horizmode){ + TTH_CCAT(closing,"
    "); + } + /*Special post-table state does not trigger broken table code */ + TTH_CCAT(tth_texclose[tth_push_depth-1],"\\tthhorizbox"); + if(horizmode&&(horizmode!=2)){TTH_OUTPUT("
    ");} + /* avoid broken table alignment*/ + if(*scratchstring == '%'){ + sprintf(scratchstring, + "\n", + boxborder,thesize,"%",boxalign); + TTH_OUTPUT(scratchstring); + }else{ + sprintf(scratchstring, + "
    \n", + boxborder,thesize/SCALEDPERPIXEL,boxalign); + TTH_OUTPUT(scratchstring); + } + horizmode=1; + *boxalign=0;boxborder=0; + yy_pop_state(); +} + YY_BREAK +case 948: +YY_RULE_SETUP +#line 6190 "tth.lex" +horizmode=2; /* fprintf(stderr,"Set Horizmode=2.\n"); */ + YY_BREAK +case 949: +YY_RULE_SETUP +#line 6191 "tth.lex" +horizmode=3; + YY_BREAK +case 950: +YY_RULE_SETUP +#line 6193 "tth.lex" +{ + fprintf(stderr, + "**** Error: Apparently unembraced h/vbox:%s, near line %d\n", + yytext,tth_num_lines); + yyless(0); + *boxalign=0; + yy_pop_state(); +} + YY_BREAK +case 951: +YY_RULE_SETUP +#line 6201 "tth.lex" +{ /* expand a possible macro */ + TTH_DO_MACRO else{ + yyless(0); + *boxalign=0; + yy_pop_state(); + horizmode=1; + } +} + YY_BREAK +case 952: +#line 6210 "tth.lex" +case 953: +YY_RULE_SETUP +#line 6210 "tth.lex" +{ + if(strstr(closing,"
    ")){ + TTH_OUTPUT(""); /* align=right a compromise. */ + } + else{if(tth_debug&1024)fprintf(stderr, + "Apparent hfill/hss outside hbox. Closing=%s\n",closing);} +} + YY_BREAK +case 954: +#line 6218 "tth.lex" +case 955: +/* rule 955 can match eol */ +YY_RULE_SETUP +#line 6218 "tth.lex" +{ + TTH_INC_MULTI; + if(*(yytext+1)=='f')boxborder=1; + if(strcspn(yytext,"[") == strlen(yytext)){ + *scrstring=0;*scratchstring=0; + }else{ + TTH_CCPY(scratchstring,yytext+strcspn(yytext,"[")+1); + if((chscratch=strstr(scratchstring,"["))!=NULL){ + strcpy(scrstring,chscratch+1);}else{*scrstring=0;} + *(scratchstring+strcspn(scratchstring,"]"))=0; + } /* Now we have the width and optional alignment. */ + switch(*scrstring){ + case 'l': strcpy(boxalign," align=\"left\"");break; + case 'r': strcpy(boxalign," align=\"right\"");break; + default : strcpy(boxalign," align=\"center\""); + } + chscratch=scrstring; + if(*(yytext+1) =='s'){ /* Setbox case, prefix definitions.*/ + TTH_CCPY(scrstring,"\\setbox"); + TTH_CCAT(scrstring,yytext+strcspn(yytext,"{")); + chscratch=(scrstring+strcspn(scrstring,"}")+1); + } + if(*scratchstring)sprintf(chscratch,"\\hbox to %s",scratchstring); + else if(boxborder)strcpy(chscratch,"\\hbox to 0pt");/*really undefined*/ + else strcpy(chscratch,"\\hbox"); + + TTH_SCAN_STRING(scrstring); +} + YY_BREAK +case 956: +YY_RULE_SETUP +#line 6247 "tth.lex" +{ + sscanf(yytext+7,"%d",&js2); + js2++; + roman(js2,scratchstring); + sprintf(scrstring,"\\setbox\\tthbox%s",scratchstring); + TTH_SCAN_STRING(scrstring); +} + YY_BREAK +case 957: +YY_RULE_SETUP +#line 6255 "tth.lex" +{ + yy_push_state(getbox); /* Get the box definition, then define */ + yy_push_state(getdef); /* Get the next cs and leave in defchar.*/ + *argchar=0; /* ensure null if no box found */ +} + YY_BREAK +case 958: +YY_RULE_SETUP +#line 6262 "tth.lex" +{ + TTH_CCPY(argchar,yytext); + TTH_CCAT(argchar," "); + if(strstr(yytext," ")){ + yy_push_state(lookforunit);yy_push_state(lookfornum); + /* GET_DIMEN, but without resetting argchar.*/ + } + if(tth_debug&4)fprintf(stderr,"Setting box as:%s\n",yytext); +} + YY_BREAK +case 959: +/* rule 959 can match eol */ +YY_RULE_SETUP +#line 6271 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 960: +YY_RULE_SETUP +#line 6272 "tth.lex" + + YY_BREAK +case 961: +/* rule 961 can match eol */ +YY_RULE_SETUP +#line 6273 "tth.lex" +{ + yyless(0); + yy_pop_state(); + sprintf(dupstore,"{%s}{%s}",defchar,argchar); + *defchar=0;*argchar=0; + TTH_SCAN_STRING(dupstore); + *dupstore=0; + TTH_TEX_FN("\\edef#1{#2{#3}}#tthdrop3",3); +} + YY_BREAK +case 962: +#line 6284 "tth.lex" +/*\\vbox{SP}+to |*/ +case 963: +#line 6286 "tth.lex" +case 964: +#line 6287 "tth.lex" +case 965: +YY_RULE_SETUP +#line 6287 "tth.lex" +GET_DIMEN + YY_BREAK +case 966: +YY_RULE_SETUP +#line 6288 "tth.lex" +TTH_TEX_FN_OPT("#tthdrop3",3,""); + YY_BREAK +/* Looking constructs */ +case 967: +YY_RULE_SETUP +#line 6291 "tth.lex" +{TTH_PUSH_CLOSING;TTH_CCPY(closing,argchar); + argchar[0]=0;yy_pop_state();} + YY_BREAK +case 968: +#line 6294 "tth.lex" +case 969: +YY_RULE_SETUP +#line 6294 "tth.lex" +{ + strcpy(dupstore,"{");strcat(dupstore,yytext);strcat(dupstore,"}"); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + } + YY_BREAK +case 970: +#line 6300 "tth.lex" +case 971: +#line 6301 "tth.lex" +case 972: +/* rule 972 can match eol */ +YY_RULE_SETUP +#line 6301 "tth.lex" +{ + /* Count braces, save text in dupstore */ + TTH_INC_MULTI; + TTH_CHECK_LENGTH; + if(tth_debug&16) + fprintf(stderr,"Open brace appending - %s - to - %s -\n",yytext,dupstore); + bracecount++;strcat(dupstore,yytext); + } + YY_BREAK +case 973: +YY_RULE_SETUP +#line 6309 "tth.lex" +yy_push_state(number);jscratch=0; + YY_BREAK +case 974: +YY_RULE_SETUP +#line 6310 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +/* Prevent an expanding state from expanding: + \hsize, natbib cites in footnotes*/ +case 975: +#line 6314 "tth.lex" +case 976: +YY_RULE_SETUP +#line 6314 "tth.lex" +{ + if(tth_debug&4)fprintf(stderr,"We don't expand:%s \n",yytext); + strcat(defstore,yytext);strcpy(xpndstring," "); +} + YY_BREAK +case 977: +YY_RULE_SETUP +#line 6318 "tth.lex" +{ + if(tth_debug&4)fprintf(stderr,"Attempt to expand:%s ",yytext); + TTH_DO_MACRO + else { + if(tth_debug&4)fprintf(stderr,"failed"); + strcat(defstore,yytext); + strcpy(xpndstring," "); + } + if(tth_debug&4)fprintf(stderr,"\n"); +} + YY_BREAK +case 978: +YY_RULE_SETUP +#line 6328 "tth.lex" +{ /* tth pseudo commands are unexpandable. */ + strcat(defstore,yytext); + /* strcpy(xpndstring," "); And no termination is needed. */ +} + YY_BREAK +case 979: +YY_RULE_SETUP +#line 6332 "tth.lex" +{ + strcat(defstore,yytext+9); strcpy(xpndstring," "); +} + YY_BREAK +case 980: +YY_RULE_SETUP +#line 6335 "tth.lex" + + YY_BREAK +case 981: +YY_RULE_SETUP +#line 6337 "tth.lex" +{ + strcat(defstore,yytext); + yy_pop_state(); + if(nkeys < NFNMAX) { + lkeys[nkeys]=localdef; + mkdef(defchar,keys,defstore,defs,&narg,nargs,&nkeys); + if(tth_debug&12){ + i=indexkey(defchar,keys,&nkeys); + fprintf(stderr,"Defined Key %s index %d nargs %d Def %s\n", + defchar,i,nargs[i],defs[i]); + } + } + else fprintf(stderr,"Too many functions to define %s",defchar); + *defstore=0;*defchar=0; /* Clean up */ +} + YY_BREAK +/* If the next thing is a brace don't put the xpndstring (possible space) + If it is not, then output the space denoting the end of previous macro*/ +case 982: +YY_RULE_SETUP +#line 6354 "tth.lex" +strcat(defstore,yytext);*xpndstring=0; + YY_BREAK +case 983: +/* rule 983 can match eol */ +YY_RULE_SETUP +#line 6355 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) TTH_INC_LINE; + strcat(defstore,xpndstring);strcat(defstore,yytext);*xpndstring=0; +} + YY_BREAK +case 984: +YY_RULE_SETUP +#line 6359 "tth.lex" +strcat(defstore,yytext); /* Ensure \\ doesn't escape. */ + YY_BREAK +case 985: +YY_RULE_SETUP +#line 6360 "tth.lex" +strcat(defstore,yytext); /* Don't count escaped { */ + YY_BREAK +case 986: +YY_RULE_SETUP +#line 6361 "tth.lex" +{ + if(tth_debug&16) fprintf(stderr,"Open brace in [e]def, count=%d\n", + bracecount); + bracecount++;strcat(defstore,yytext); + } + YY_BREAK +case 987: +YY_RULE_SETUP +#line 6366 "tth.lex" +strcat(defstore,yytext); + YY_BREAK +case 988: +YY_RULE_SETUP +#line 6367 "tth.lex" +{ + if(!bracecount){ + if(tth_debug&16) fprintf(stderr,"Close brace ending [e]def,count=%d\n", + bracecount); + yy_pop_state(); + strcat(defstore,"#tthdrop"); + sprintf((defstore+strlen(defstore)),"%d",abs(narg)); + if(edeftype){ + if(tth_debug&4) fprintf(stderr,"Expanding definition:%s\n",defstore); + edeftype=0; + yy_push_state(xpnd); + TTH_SCAN_STRING(defstore); + }else{ + if(nkeys < NFNMAX) { + lkeys[nkeys]=localdef; + mkdef(defchar,keys,defstore,defs,&narg,nargs,&nkeys); + if(tth_debug&4){ + i=indexkey(defchar,keys,&nkeys); + fprintf(stderr,"Defined Key %s index %d nargs %d Def %s\n", + defchar,i,nargs[i],defs[i]); + } + } + else fprintf(stderr,"Too many functions to define %s",defchar); + *defchar=0; + } + *defstore=0; + } else { + if(tth_debug&16) fprintf(stderr,"Close brace in [e]def, count=%d\n", + bracecount); + strcat(defstore,yytext);bracecount--; + } + } + YY_BREAK +case 989: +/* rule 989 can match eol */ +YY_RULE_SETUP +#line 6399 "tth.lex" +TTH_INC_LINE;TTH_CHECK_LENGTH;strcat(defstore,yytext); + YY_BREAK +case 990: +/* rule 990 can match eol */ +YY_RULE_SETUP +#line 6400 "tth.lex" +strcat(defstore,yytext); + YY_BREAK +case 991: +/* rule 991 can match eol */ +YY_RULE_SETUP +#line 6402 "tth.lex" +TTH_INC_MULTI; /*Necessary for roots to work etc.*/ + YY_BREAK +case 992: +YY_RULE_SETUP +#line 6403 "tth.lex" +{ + yyless(0);yy_pop_state(); + yy_push_state(macarg);yy_push_state(embracetok);yy_push_state(optag); +} + YY_BREAK +case 993: +/* rule 993 can match eol */ +YY_RULE_SETUP +#line 6407 "tth.lex" +{ + yyless(0);yy_pop_state(); + sprintf(scratchstring,"#%d",jarg); + if(margmax < NARMAX) { + jscratch=0; + { + strcpy(scrstring,chopt); /* changed Aug 15 */ + mkdef(scratchstring,margkeys,scrstring,margs,&jscratch,margn,&margmax); + if(tth_debug&8){ + i=indexkey(scratchstring,margkeys,&margmax); + fprintf(stderr,"Used Default argument %s index %d Def:%s\n", + scratchstring,i,margs[i]); + } + }/* optargs should always be defined. */ + } else fprintf(stderr,"**** Error: Too many Macro Args to define %s Line %d\n",argchar,tth_num_lines); + if( jargmax < 0){ /* Don't understand why */ + jarg++; + }else if(jarg == jargmax) { + jarg=1; + TTH_SCAN_STRING(chdef); + yy_push_state(psub); + if(tth_debug&8) fprintf(stderr, + "Using definition %s in optdetect\n",chdef); + bracecount=0; + } else { + bracecount=-1; + yy_push_state(macarg);yy_push_state(embracetok); + jarg++; + } +} + YY_BREAK +case 994: +YY_RULE_SETUP +#line 6437 "tth.lex" +{ /* Don't add space after verb */ + strcat(dupstore,yytext); + *(dupstore+strlen(dupstore)-1)=0; + unput('}'); +} + YY_BREAK +case 995: +#line 6443 "tth.lex" +case 996: +YY_RULE_SETUP +#line 6443 "tth.lex" +{ + strcat(dupstore,yytext); + strcpy(dupstore+strlen(dupstore)-1," "); + if(tth_debug&8) fprintf(stderr,"Macarg added space in:%s\n",yytext); + unput(*(yytext+strlen(yytext)-1)); + } + YY_BREAK +case 997: +#line 6450 "tth.lex" +case 998: +YY_RULE_SETUP +#line 6450 "tth.lex" +bracecount++;strcat(dupstore,yytext); + YY_BREAK +case 999: +#line 6452 "tth.lex" +case 1000: +YY_RULE_SETUP +#line 6452 "tth.lex" +{ + if(bracecount == 0){ + sprintf(argchar,"#%d",jarg); + if(margmax < NARMAX) { + jscratch=0; + mkdef(argchar,margkeys,dupstore+1,margs,&jscratch,margn,&margmax); + if(tth_debug&8){ + i=indexkey(argchar,margkeys,&margmax); + fprintf(stderr,"Argument %s index %d Def:%s:\n", + argchar,i,margs[i]); + } + } else fprintf(stderr,"**** Error: Too many Macro Args to define %s Line %d\n",argchar,tth_num_lines); + *argchar=0;*dupstore=0; + if(jarg==1 && lopt){ + if(tth_debug&8)fprintf(stderr,"Ended optional argument\n"); + yy_pop_state();yy_pop_state(); + } + if( jargmax < 0){ + yy_pop_state(); + jarg++; + }else if(jarg == jargmax) { + jarg=1; + yy_pop_state(); + TTH_SCAN_STRING(chdef); + yy_push_state(psub); + if(tth_debug&8) fprintf(stderr, + "Using definition %s in macarg\n",chdef); + } else { + bracecount=-1; + yy_push_state(embracetok); + jarg++; + } + } else { + strcat(dupstore,yytext);bracecount--; + } + } + YY_BREAK +case 1001: +#line 6489 "tth.lex" +case 1002: +#line 6490 "tth.lex" +case 1003: +/* rule 1003 can match eol */ +YY_RULE_SETUP +#line 6490 "tth.lex" +{ + /* Count down braces. Save, or complete. + storetype= + 0 Duplicate and rescan with argchar = closing of first. + 1 copy to superscript. 2 copy to subscript. + 3 Duplicate but with argchar inserted in middle and hence scanned. + 4 Rescan just one copy prefixed by argchar. + 5 Rescan one copy with argchar postfixed. + 6 Rescan two copies with argchar prefixed to first. + Else just leave in dupstore. (Caller must clean up). + */ + TTH_INC_MULTI; + if(!bracecount){ + strcat(dupstore,yytext); + if(tth_debug&16)fprintf(stderr, + "Ending dupgroup, dupstore= %s, storetype=%d\n",dupstore,storetype); + if(storetype == 0){ + strcpy(dupstore2,dupstore);strcat(dupstore2,dupstore); + TTH_PUSH_CLOSING;TTH_CCPY(closing,argchar); + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; + *dupstore=0; + } else if (storetype == 1) { /* Take the } off the end.*/ + *(dupstore+strlen(dupstore)-1)=0; + strcpy(supstore,dupstore); + *dupstore=0; + } else if (storetype == 2) { + *(dupstore+strlen(dupstore)-1)=0; + strcpy(substore,dupstore); + *dupstore=0; + } else if (storetype == 3) { + strcpy(dupstore2,dupstore);strcat(dupstore2,argchar); + strcat(dupstore2,dupstore); + *argchar=0; + if(tth_debug&16)fprintf(stderr,"Rescanning: %s\n",dupstore2); + TTH_SCAN_STRING(dupstore2);*dupstore2=0; + *dupstore=0; + } else if (storetype == 4) { + strcpy(dupstore2,argchar); *argchar=0; + strcat(dupstore2,dupstore); *dupstore=0; + if(tth_debug&16)fprintf(stderr,"Rescanning: %s\n",dupstore2); + TTH_SCAN_STRING(dupstore2);*dupstore2=0; + } else if (storetype == 5) { + strcat(dupstore,argchar); *argchar=0; + if(tth_debug&16)fprintf(stderr,"Rescanning: %s\n",dupstore); + TTH_SCAN_STRING(dupstore);*dupstore=0; + } else if (storetype == 6) { + strcpy(dupstore2,argchar); *argchar=0; + strcat(dupstore2,dupstore);strcat(dupstore2,dupstore); *dupstore=0; + if(tth_debug&16)fprintf(stderr,"Rescanning: %s\n",dupstore2); + TTH_SCAN_STRING(dupstore2);*dupstore2=0; + } + storetype=0; + yy_pop_state(); + } else { + if(tth_debug&16) + fprintf(stderr,"appending - %s - to - %s -\n",yytext,dupstore); + strcat(dupstore,yytext);bracecount--;} +} + YY_BREAK +case 1004: +YY_RULE_SETUP +#line 6549 "tth.lex" +{ + if(verbinput){ TTH_OUTPUT(yytext);} + else{ + if(tth_titlestate) tth_titlestate=99; + TTH_TEXCLOSE else{TTH_CLOSEGROUP;TTH_POP_CLOSING;yy_pop_state();} + } +} + YY_BREAK +case 1005: +YY_RULE_SETUP +#line 6557 "tth.lex" +TTH_TEX_FN("\\tth_grabverbname#tthdrop1",1); + YY_BREAK +case 1006: +YY_RULE_SETUP +#line 6558 "tth.lex" +{ /* Set the name of verb environment */ + if((jscratch=indexkey("#1",margkeys,&margmax))!=-1){ + strcpy(tth_verbenviron,margs[jscratch]); + rmdef(margkeys,margs,&margmax); + yy_pop_state(); + if(tth_debug)fprintf(stderr,"Verbenviron=%s\n",tth_verbenviron); + /* Now the rest of entering verbatim environment. */ + if(horizmode) horizmode=1; + fprintf(tth_fdout,"
    "); yy_push_state(verbatim);
    +    TTH_PUSH_CLOSING;  TTH_CCPY(closing,"
    "); + }else{ + fprintf(stderr,"Failed to grab verbatim name"); + } +} + YY_BREAK +case 1007: +YY_RULE_SETUP +#line 6572 "tth.lex" +{/* Redefinable verbatim end command */ + if(verbinput){ TTH_OUTPUT(yytext); + }else{ + TTH_CCPY(scratchstring,yytext+5); + *(scratchstring+strlen(scratchstring)-1)=0; + if(tth_debug)fprintf(stderr,"End of: %s\n",scratchstring); + if(strstr(tth_verbenviron,scratchstring)==tth_verbenviron){ + if(tth_titlestate) tth_titlestate=99; + TTH_TEXCLOSE else{TTH_CLOSEGROUP;TTH_POP_CLOSING;yy_pop_state(); + if(tth_debug)fprintf(stderr,"Popped state\n");} + /* Scan \end{....} a second time for end of environment */ + if(tth_debug)fprintf(stderr,"environment:%s\nscratchstring:%s\n" + ,environment,scratchstring); + if(!strcmp(environment,scratchstring)){TTH_SCAN_STRING(yytext);} + *scratchstring=0; + *tth_verbenviron=0; + }else{ + TTH_OUTPUT(yytext); + } + } +} + YY_BREAK +case 1008: +YY_RULE_SETUP +#line 6594 "tth.lex" +{ + verbinput=0; + TTH_TEXCLOSE else{TTH_CLOSEGROUP;TTH_POP_CLOSING;yy_pop_state();} +} + YY_BREAK +case 1009: +#line 6599 "tth.lex" +case 1010: +YY_RULE_SETUP +#line 6599 "tth.lex" +{ + TTH_TEXCLOSE else{TTH_CLOSEGROUP;TTH_POP_CLOSING;yy_pop_state();} +} + YY_BREAK +case 1011: +YY_RULE_SETUP +#line 6602 "tth.lex" +{ + TTH_OUTPUT(yytext);TTH_PUSH_CLOSING; + TTH_CCPY(closing,"}"); + yy_push_state(rawgroup);} + YY_BREAK +/* Dimensions and Numbers etc. */ +case 1012: +/* rule 1012 can match eol */ +YY_RULE_SETUP +#line 6609 "tth.lex" +{ + TTH_INC_MULTI; + yy_pop_state(); + TTH_CCAT(argchar,yytext); + strcpy(scratchstring,yytext+strlen(yytext)-2); /*unit is last 2 letters */ + if(!tthglue) { + thesize = scaledpoints(anumber,scratchstring); + } + if(tth_debug&1024) fprintf(stderr,"Dimension %d sp, from specified %f %s\n", + thesize,anumber,scratchstring); + *argchar=0; /* Don't think this is used. */ +} + YY_BREAK +case 1013: +YY_RULE_SETUP +#line 6621 "tth.lex" +{ /* The dimension is in \hsizes */ + thesize=100*anumber; + strcpy(scratchstring,"%"); + yy_pop_state(); + if(tth_debug&1024) fprintf(stderr,"Dimension tth_hsize: %d\n",thesize); + *argchar=0; /* this is used. */ +} + YY_BREAK +case 1014: +YY_RULE_SETUP +#line 6628 "tth.lex" +GET_DIMEN; /* Do nothing outside for now */ + YY_BREAK +case 1015: +YY_RULE_SETUP +#line 6629 "tth.lex" +{ /* expand a possible macro */ + TTH_DO_MACRO else { /* pop state if uninterpretable */ + if(tth_debug&1024) fprintf(stderr,"Unknown dimension %s\n",yytext); + thesize=0; + yyless(0); + yy_pop_state();} +} + YY_BREAK +case 1016: +YY_RULE_SETUP +#line 6636 "tth.lex" +/* Rip this out of the way */ + YY_BREAK +case 1017: +YY_RULE_SETUP +#line 6637 "tth.lex" +{/* We find a number. Scale instead. Shouldn't be in TeX*/ + if(! sscanf(yytext,"%f",&bnumber) ){ + fprintf(stderr,"**** Uninterpreted scaled dimension value:%s\n",yytext); + bnumber=1.; + } + anumber=anumber*bnumber; +} + YY_BREAK +case 1018: +/* rule 1018 can match eol */ +YY_RULE_SETUP +#line 6645 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 1019: +YY_RULE_SETUP +#line 6646 "tth.lex" +/* Ignore spaces */ + YY_BREAK +case 1020: +YY_RULE_SETUP +#line 6647 "tth.lex" +/* and equal signs */ + YY_BREAK +case 1021: +YY_RULE_SETUP +#line 6648 "tth.lex" +{ /* If we find a number store it.*/ + TTH_CCAT(argchar,yytext); + if(! sscanf(argchar,"%f",&anumber) ){ + if(tth_debug&4)fprintf(stderr,"Uninterpreted dimension value:%s\n",argchar); + anumber = 0; + } +/* if(tth_debug&1024)fprintf(stderr,"Got number: %f\n",anumber); */ + yy_pop_state(); +} + YY_BREAK +case 1022: +YY_RULE_SETUP +#line 6657 "tth.lex" +strcat(argchar,yytext); + YY_BREAK +/* If this is an unknown token, pop extra lookforunit state too.*/ +case 1023: +YY_RULE_SETUP +#line 6659 "tth.lex" +{ + TTH_DO_MACRO + else{ + /* was TTH_CCAT(argchar,yytext); then became yyless(0) now + presume if argchar !=0 that we need to collect it e.g. in setbox.*/ + if(strlen(argchar)){TTH_CCAT(argchar,yytext);}else yyless(0); + if(tth_debug&1024)fprintf(stderr,"Failed lookfornum:%s\n",yytext); + yy_pop_state();yy_pop_state(); + } +} + YY_BREAK +case 1024: +YY_RULE_SETUP +#line 6669 "tth.lex" +{ + fprintf(tth_fdout,"%s%s",yytext,argchar);yy_pop_state();} + YY_BREAK +case 1025: +/* rule 1025 can match eol */ +YY_RULE_SETUP +#line 6671 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 1026: +YY_RULE_SETUP +#line 6672 "tth.lex" + + YY_BREAK +case 1027: +YY_RULE_SETUP +#line 6673 "tth.lex" +{TTH_CCPY(argchar,yytext);yy_pop_state(); + if(tth_verb) fprintf(stderr,"File:%s",yytext);} + YY_BREAK +case 1028: +/* rule 1028 can match eol */ +YY_RULE_SETUP +#line 6675 "tth.lex" +TTH_INC_MULTI;tthglue=1;GET_DIMEN + YY_BREAK +/* nested glue not allowed */ +case 1029: +/* rule 1029 can match eol */ +YY_RULE_SETUP +#line 6677 "tth.lex" +tthglue=0;yyless(0);yy_pop_state(); + YY_BREAK +case 1030: +#line 6680 "tth.lex" +case 1031: +#line 6681 "tth.lex" +case 1032: +YY_RULE_SETUP +#line 6681 "tth.lex" +{ /* already embraced */ + strcat(dupstore,"{"); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + yy_pop_state(); +} + YY_BREAK +case 1033: +/* rule 1033 can match eol */ +YY_RULE_SETUP +#line 6688 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 1034: +YY_RULE_SETUP +#line 6689 "tth.lex" + + YY_BREAK +case 1035: +#line 6691 "tth.lex" +case 1036: +#line 6692 "tth.lex" +case 1037: +YY_RULE_SETUP +#line 6692 "tth.lex" +{ /* Enclose a bare token for using as argument.*/ + strcat(dupstore,"{");strcat(dupstore,yytext);strcat(dupstore,"}"); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + yy_pop_state(); + } + YY_BREAK +case 1038: +#line 6699 "tth.lex" +case 1039: +YY_RULE_SETUP +#line 6699 "tth.lex" +{ + sprintf(scratchstring,"{%s",swapchar); + TTH_SCAN_STRING(scratchstring);*swapchar=0;yy_pop_state(); +} + YY_BREAK +case 1040: +YY_RULE_SETUP +#line 6703 "tth.lex" +{ + fprintf(stderr,"**** Error: swaparg fault:%s:%s:\n",swapchar,yytext); + yy_pop_state();} + YY_BREAK +/************* count lines ****************/ +case 1041: +/* rule 1041 can match eol */ +YY_RULE_SETUP +#line 6708 "tth.lex" +TTH_INC_LINE; + YY_BREAK +case 1042: +/* rule 1042 can match eol */ +YY_RULE_SETUP +#line 6709 "tth.lex" +{ + TTH_INC_LINE; + fprintf(tth_fdout,"%s",yytext); + strcpy(scratchstring,"\n"); + if(tth_debug&8192)fprintf(stderr,"Verbatim \\n:%d, \\n code:%d Length:%d\n",(int) *yytext,(int) *scratchstring, (int) strlen(scratchstring)); +} + YY_BREAK +case 1043: +/* rule 1043 can match eol */ +YY_RULE_SETUP +#line 6715 "tth.lex" +{ /* Final route for all cases once expanded. */ + TTH_INC_MULTI; + if(strlen(expchar)){ + yyless(strcspn(yytext,"{")); + TTH_PUSH_CLOSING;TTH_CCPY(closing,expchar); + *expchar=0;yy_pop_state(); + if(tth_debug&8) { + fprintf(stderr,"Exptok Group {, eqdepth=%d, eqclose=%d, tth_flev=%d, levdelim=%s\n",eqdepth,eqclose,tth_flev,levdelim[eqclose]); + } + mkkey(eqstr,eqstrs,&eqdepth); + tth_flev=tth_flev-99; + eqclose++; + tophgt[eqclose]=0; + levhgt[eqclose]=1; + *eqstr=0; + active[eqclose]=1; + }else{ + strcat(exptex,yytext+strcspn(yytext,"{")); + TTH_SCAN_STRING(exptex); + if(tth_debug&8){ + fprintf(stderr,"Expansion completed. Rescanning %s\n",exptex); + } + *exptex=0; + yy_pop_state(); + } +} + YY_BREAK +case 1044: +YY_RULE_SETUP +#line 6742 "tth.lex" +{ + if(tth_debug&8) fprintf(stderr, + "Nothing to expand in exptok[arg]. Rescan:{%s}\n",yytext); + sprintf(scratchstring,"{%s}",yytext+strlen(yytext)-1); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +case 1045: +YY_RULE_SETUP +#line 6748 "tth.lex" +{ /* fix for _\| etc */ + if(tth_debug&8)fprintf(stderr,"Exptokarg, expanding:%s\n",yytext); + TTH_DO_MACRO + else { + strcpy(dupstore,"{");strcat(dupstore,yytext);strcat(dupstore,"}"); + TTH_SCAN_STRING(dupstore); + *dupstore=0; + } +} + YY_BREAK +case 1046: +YY_RULE_SETUP +#line 6758 "tth.lex" +{ + yyless(0);yy_pop_state(); + if(strlen(exptex)){TTH_SCAN_STRING(exptex); *exptex=0;} +} + YY_BREAK +case 1047: +YY_RULE_SETUP +#line 6762 "tth.lex" +{ /* fix for _\| etc OUT for tokexp. */ + if(tth_debug&8)fprintf(stderr,"Tokexp, expanding:%s\n",yytext); + TTH_DO_MACRO + else { + yy_pop_state(); + yyless(0); + *dupstore=0; + if(strlen(exptex)){TTH_SCAN_STRING(exptex); *exptex=0;} + } +} + YY_BREAK +case 1048: +YY_RULE_SETUP +#line 6773 "tth.lex" +{ + if(*halstring){ /* In a display table has to be a null inline*/ + }else{ + TTH_TEXCLOSE else{ + yy_pop_state(); + /* moved into closing. fprintf(tth_fdout,"");*/ + TTH_CLOSEGROUP;TTH_POP_CLOSING; + if(tth_debug&33)fprintf(stderr,"Display Table end.\n"); + } + } +} + YY_BREAK +case 1049: +#line 6786 "tth.lex" +case 1050: +#line 6787 "tth.lex" +case 1051: +YY_RULE_SETUP +#line 6787 "tth.lex" +{ + if(tth_debug&2) + fprintf(stderr,"Starting textbox equation, line %d\n",tth_num_lines); + /* TTH_OUTPUT(TTH_TEXTBOX2);*/ + if(displaystyle)displaystyle++; + mkkey(eqstr,eqstrs,&eqdepth); + TTH_PUSH_CLOSING; + yy_push_state(equation); + TTH_SCAN_STRING("{"); +} + YY_BREAK +/* $ Will be superceded by equation grab for non-null eqs */ +case 1052: +#line 6799 "tth.lex" +case 1053: +#line 6800 "tth.lex" +case 1054: +#line 6801 "tth.lex" +case 1055: +YY_RULE_SETUP +#line 6801 "tth.lex" +{ + if(displaystyle) fprintf(stderr,"Starting displaystyle incorrect.\n"); + displaystyle=0; + tophgt[eqclose]=0;levhgt[eqclose]=1; + *eqstr=0; + eqclose=0; + mkkey(eqstr,eqstrs,&eqdepth); + if((!tth_inlinefrac)^(strstr(TTH_NAME,"M")!=NULL)) tth_flev=tth_flev-89; + TTH_PUSH_CLOSING; + if(!strstr(tth_font_open[tth_push_depth],TTH_ITALO)){ + TTH_CCAT(tth_font_open[tth_push_depth],tth_font_open[0]); + TTH_CCAT(tth_font_close[tth_push_depth],tth_font_close[0]); + } + yy_push_state(equation); + TTH_SCAN_STRING("{"); + } + YY_BREAK +case 1056: +YY_RULE_SETUP +#line 6818 "tth.lex" + + YY_BREAK +case 1057: +/* rule 1057 can match eol */ +YY_RULE_SETUP +#line 6820 "tth.lex" +{ + if(strcspn(yytext,"_^")==1){ + if(tth_debug&3) fprintf(stderr,"Special In line Eq:%s\n",yytext); + /* + yyless(1); + unput(' '); This broke with pushback errors + Handle subdefer appropriately for specials. + Hence we use the following more cumbersome but safer approach. + Really I ought to find a better way to make sure that we can + accommodate constructs like $^1_2$ using msupsub in mathml. + The problem seems to be the implied { which never has subscripts. + */ + *scrstring=0; + if(strstr(TTH_NAME,"M")){ /* MathML */ strcat(scrstring," ");} + strcat(scrstring,yytext+1); + TTH_SCAN_STRING(scrstring); + *scrstring=0; + }else{ + if(tth_debug&3) fprintf(stderr,"In line Eq:%s\n",yytext); + yyless(1); + } + TTH_SCAN_STRING("$"); /* Force into other channel above.*/ + } + YY_BREAK +case 1058: +/* rule 1058 can match eol */ +#line 6845 "tth.lex" +case 1059: +/* rule 1059 can match eol */ +YY_RULE_SETUP +#line 6845 "tth.lex" +{ + if(tth_debug&33)fprintf(stderr,"Display Table:\n%s\n",yytext); + fprintf(tth_fdout,"
    "); + yyless(2); + yy_push_state(disptab); + TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    "); +} + YY_BREAK +/* Allowing the first half of a display to be recognized as equation is + problematic. Instead go to halsearch state. + Does not permit non-output commands before the halign. TeX does.*/ +case 1060: +YY_RULE_SETUP +#line 6856 "tth.lex" +{ + yy_push_state(halsearch); +} + YY_BREAK +case 1061: +/* rule 1061 can match eol */ +YY_RULE_SETUP +#line 6860 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +case 1062: +YY_RULE_SETUP +#line 6861 "tth.lex" +{ + if(tth_debug&33)fprintf(stderr,"Display Table:\n%s\n",yytext); + yyless(0); + yy_pop_state(); + yy_push_state(disptab); + fprintf(tth_fdout,"
    "); + TTH_PUSH_CLOSING; + TTH_CCPY(closing,"
    "); +} + YY_BREAK +case 1063: +/* rule 1063 can match eol */ +YY_RULE_SETUP +#line 6870 "tth.lex" +{ + yyless(0); + yy_pop_state(); + TTH_SCAN_STRING("\\tth_start_equation"); +} + YY_BREAK +/* Don't recognize display equations except in certain allowed states. */ +case 1064: +#line 6878 "tth.lex" +case 1065: +/* rule 1065 can match eol */ +YY_RULE_SETUP +#line 6878 "tth.lex" +{ + { + if(tth_debug&3) fprintf(stderr,"Display Eq:\n%s\n",yytext); + if(strstr(yytext,"\\tth_start_equation")==NULL) yyless(2); + if(strcspn(yytext,"_^")==2){ + if(strstr(TTH_NAME,"M")){ /* MathML */ unput(' ');} + } + TTH_SCAN_STRING("{"); + /* + if(tth_htmlstyle&2){ + TTH_OUTPUT(closing); strcpy(closing,""); + TTH_OUTPUT("\n
    \n");}*/ + horizmode=0; + displaystyle=1; + *eqstr=0; + eqclose=0; + tophgt[eqclose]=0; + mkkey(eqstr,eqstrs,&eqdepth); + TTH_PUSH_CLOSING; + if(!strstr(tth_font_open[tth_push_depth],TTH_ITALO)){ + TTH_CCAT(tth_font_open[tth_push_depth],tth_font_open[0]); + TTH_CCAT(tth_font_close[tth_push_depth],tth_font_close[0]); + } + yy_push_state(equation); + } + } + YY_BREAK +/* Translate single characters. */ +case 1066: +YY_RULE_SETUP +#line 6906 "tth.lex" +TTH_OUTPUTH(yytext+strlen(yytext)-1); + YY_BREAK +case 1067: +/* rule 1067 can match eol */ +YY_RULE_SETUP +#line 6908 "tth.lex" +{ + TTH_INC_MULTI; + sscanf(yytext+5,"%d",&jscratch); + sprintf(scratchstring,"%c",jscratch); + TTH_OUTPUTH(scratchstring); + yy_push_state(removespace); +} + YY_BREAK +/* Latin Characters and other non-math but output correctly in math.*/ +case 1068: +YY_RULE_SETUP +#line 6917 "tth.lex" +{ /* Circumvent spaces after accents.*/ + strcpy(scratchstring,yytext); + unput(*(scratchstring+strlen(scratchstring)-1)); + unput(*(scratchstring+1));unput(*scratchstring); +} + YY_BREAK +case 1069: +#line 6924 "tth.lex" +case 1070: +#line 6925 "tth.lex" +case 1071: +YY_RULE_SETUP +#line 6925 "tth.lex" +TTH_OUTPUTH(" "); + YY_BREAK +case 1072: +/* rule 1072 can match eol */ +YY_RULE_SETUP +#line 6926 "tth.lex" +TTH_OUTPUTH(" ");TTH_INC_LINE; + YY_BREAK +case 1073: +YY_RULE_SETUP +#line 6927 "tth.lex" +TTH_OUTPUTH("  "); + YY_BREAK +case 1074: +YY_RULE_SETUP +#line 6928 "tth.lex" +TTH_OUTPUTH("   "); + YY_BREAK +case 1075: +YY_RULE_SETUP +#line 6929 "tth.lex" +TTH_OUTPUTH("      "); + YY_BREAK +case 1076: +YY_RULE_SETUP +#line 6930 "tth.lex" +TTH_OUTPUTH("Æ"); + YY_BREAK +case 1077: +YY_RULE_SETUP +#line 6931 "tth.lex" +TTH_OUTPUTH("Á"); + YY_BREAK +case 1078: +YY_RULE_SETUP +#line 6932 "tth.lex" +TTH_OUTPUTH("Â"); + YY_BREAK +case 1079: +YY_RULE_SETUP +#line 6933 "tth.lex" +TTH_OUTPUTH("À"); + YY_BREAK +case 1080: +#line 6935 "tth.lex" +case 1081: +YY_RULE_SETUP +#line 6935 "tth.lex" +TTH_OUTPUTH("Å"); + YY_BREAK +case 1082: +YY_RULE_SETUP +#line 6936 "tth.lex" +TTH_OUTPUTH("Ã"); + YY_BREAK +case 1083: +#line 6938 "tth.lex" +case 1084: +YY_RULE_SETUP +#line 6938 "tth.lex" +TTH_OUTPUTH("Ä"); + YY_BREAK +/* \\c{SP}?C | */ +case 1085: +YY_RULE_SETUP +#line 6940 "tth.lex" +TTH_OUTPUTH("Ç"); + YY_BREAK +case 1086: +YY_RULE_SETUP +#line 6941 "tth.lex" +TTH_OUTPUTH("É"); + YY_BREAK +case 1087: +YY_RULE_SETUP +#line 6942 "tth.lex" +TTH_OUTPUTH("Ê"); + YY_BREAK +case 1088: +YY_RULE_SETUP +#line 6943 "tth.lex" +TTH_OUTPUTH("È"); + YY_BREAK +case 1089: +#line 6945 "tth.lex" +case 1090: +YY_RULE_SETUP +#line 6945 "tth.lex" +TTH_OUTPUTH("Ë"); + YY_BREAK +case 1091: +YY_RULE_SETUP +#line 6946 "tth.lex" +TTH_OUTPUTH("Ì"); + YY_BREAK +case 1092: +YY_RULE_SETUP +#line 6947 "tth.lex" +TTH_OUTPUTH("Í"); + YY_BREAK +case 1093: +YY_RULE_SETUP +#line 6948 "tth.lex" +TTH_OUTPUTH("Î"); + YY_BREAK +case 1094: +#line 6950 "tth.lex" +case 1095: +YY_RULE_SETUP +#line 6950 "tth.lex" +TTH_OUTPUTH("Ï"); + YY_BREAK +case 1096: +YY_RULE_SETUP +#line 6951 "tth.lex" +TTH_OUTPUTH("Ñ"); + YY_BREAK +case 1097: +YY_RULE_SETUP +#line 6952 "tth.lex" +TTH_OUTPUTH("Ò"); + YY_BREAK +case 1098: +YY_RULE_SETUP +#line 6953 "tth.lex" +TTH_OUTPUTH("Ó"); + YY_BREAK +case 1099: +YY_RULE_SETUP +#line 6954 "tth.lex" +TTH_OUTPUTH("Ô"); + YY_BREAK +case 1100: +YY_RULE_SETUP +#line 6955 "tth.lex" +TTH_OUTPUTH("Ø"); + YY_BREAK +case 1101: +YY_RULE_SETUP +#line 6956 "tth.lex" +TTH_OUTPUTH("Õ"); + YY_BREAK +case 1102: +#line 6958 "tth.lex" +case 1103: +YY_RULE_SETUP +#line 6958 "tth.lex" +TTH_OUTPUTH("Ö"); + YY_BREAK +case 1104: +YY_RULE_SETUP +#line 6959 "tth.lex" +TTH_OUTPUTH("¶"); + YY_BREAK +case 1105: +YY_RULE_SETUP +#line 6960 "tth.lex" +TTH_OUTPUTH("§"); + YY_BREAK +case 1106: +YY_RULE_SETUP +#line 6961 "tth.lex" +TTH_OUTPUTH("Ú"); + YY_BREAK +case 1107: +YY_RULE_SETUP +#line 6962 "tth.lex" +TTH_OUTPUTH("Û"); + YY_BREAK +case 1108: +YY_RULE_SETUP +#line 6963 "tth.lex" +TTH_OUTPUTH("Ù"); + YY_BREAK +case 1109: +#line 6965 "tth.lex" +case 1110: +YY_RULE_SETUP +#line 6965 "tth.lex" +TTH_OUTPUTH("Ü"); + YY_BREAK +case 1111: +YY_RULE_SETUP +#line 6966 "tth.lex" +TTH_OUTPUTH("Ý"); + YY_BREAK +case 1112: +YY_RULE_SETUP +#line 6967 "tth.lex" +TTH_OUTPUTH("&"); + YY_BREAK +case 1113: +YY_RULE_SETUP +#line 6968 "tth.lex" +TTH_OUTPUTH("&"); + YY_BREAK +case 1114: +YY_RULE_SETUP +#line 6969 "tth.lex" +TTH_OUTPUTH("æ"); + YY_BREAK +case 1115: +YY_RULE_SETUP +#line 6970 "tth.lex" +TTH_OUTPUTH("à"); + YY_BREAK +case 1116: +YY_RULE_SETUP +#line 6971 "tth.lex" +TTH_OUTPUTH("á"); + YY_BREAK +case 1117: +YY_RULE_SETUP +#line 6972 "tth.lex" +TTH_OUTPUTH("â"); + YY_BREAK +case 1118: +YY_RULE_SETUP +#line 6973 "tth.lex" +TTH_OUTPUTH("ã"); + YY_BREAK +case 1119: +#line 6975 "tth.lex" +case 1120: +YY_RULE_SETUP +#line 6975 "tth.lex" +TTH_OUTPUTH("ä"); + YY_BREAK +case 1121: +#line 6977 "tth.lex" +case 1122: +YY_RULE_SETUP +#line 6977 "tth.lex" +TTH_OUTPUTH("å"); + YY_BREAK +/* \\c{SP}?c | */ +case 1123: +YY_RULE_SETUP +#line 6979 "tth.lex" +TTH_OUTPUTH("ç"); + YY_BREAK +case 1124: +YY_RULE_SETUP +#line 6980 "tth.lex" +TTH_OUTPUTH("^"); + YY_BREAK +case 1125: +YY_RULE_SETUP +#line 6981 "tth.lex" +TTH_OUTPUTH("©"); + YY_BREAK +case 1126: +YY_RULE_SETUP +#line 6982 "tth.lex" +TTH_OUTPUTH("é"); + YY_BREAK +case 1127: +YY_RULE_SETUP +#line 6983 "tth.lex" +TTH_OUTPUTH("ê"); + YY_BREAK +case 1128: +YY_RULE_SETUP +#line 6984 "tth.lex" +TTH_OUTPUTH("è"); + YY_BREAK +case 1129: +YY_RULE_SETUP +#line 6985 "tth.lex" +TTH_OUTPUTH("ð"); + YY_BREAK +case 1130: +#line 6987 "tth.lex" +case 1131: +YY_RULE_SETUP +#line 6987 "tth.lex" +TTH_OUTPUTH("ë"); + YY_BREAK +case 1132: +#line 6989 "tth.lex" +case 1133: +YY_RULE_SETUP +#line 6989 "tth.lex" +TTH_OUTPUTH(">"); + YY_BREAK +case 1134: +#line 6991 "tth.lex" +case 1135: +YY_RULE_SETUP +#line 6991 "tth.lex" +TTH_OUTPUTH("<"); + YY_BREAK +case 1136: +YY_RULE_SETUP +#line 6992 "tth.lex" +TTH_OUTPUTH(" ") + YY_BREAK +case 1137: +#line 6994 "tth.lex" +case 1138: +YY_RULE_SETUP +#line 6994 "tth.lex" +TTH_OUTPUTH("ì"); + YY_BREAK +case 1139: +#line 6996 "tth.lex" +case 1140: +#line 6997 "tth.lex" +case 1141: +YY_RULE_SETUP +#line 6997 "tth.lex" +TTH_OUTPUTH("í"); + YY_BREAK +case 1142: +#line 6999 "tth.lex" +case 1143: +YY_RULE_SETUP +#line 6999 "tth.lex" +TTH_OUTPUTH("î"); + YY_BREAK +case 1144: +#line 7001 "tth.lex" +case 1145: +#line 7002 "tth.lex" +case 1146: +YY_RULE_SETUP +#line 7002 "tth.lex" +TTH_OUTPUTH("ï"); + YY_BREAK +case 1147: +YY_RULE_SETUP +#line 7003 "tth.lex" +TTH_OUTPUTH("ñ"); + YY_BREAK +case 1148: +YY_RULE_SETUP +#line 7004 "tth.lex" +TTH_OUTPUTH("ò"); + YY_BREAK +case 1149: +YY_RULE_SETUP +#line 7005 "tth.lex" +TTH_OUTPUTH("ó"); + YY_BREAK +case 1150: +YY_RULE_SETUP +#line 7006 "tth.lex" +TTH_OUTPUTH("ô"); + YY_BREAK +case 1151: +YY_RULE_SETUP +#line 7007 "tth.lex" +TTH_OUTPUTH("ø"); + YY_BREAK +case 1152: +YY_RULE_SETUP +#line 7008 "tth.lex" +TTH_OUTPUTH("õ"); + YY_BREAK +case 1153: +#line 7010 "tth.lex" +case 1154: +YY_RULE_SETUP +#line 7010 "tth.lex" +TTH_OUTPUTH("ö"); + YY_BREAK +case 1155: +YY_RULE_SETUP +#line 7011 "tth.lex" +TTH_OUTPUTH("¯"); + YY_BREAK +case 1156: +YY_RULE_SETUP +#line 7012 "tth.lex" +TTH_OUTPUTH("£"); + YY_BREAK +case 1157: +YY_RULE_SETUP +#line 7013 "tth.lex" +TTH_OUTPUTH("~"); + YY_BREAK +case 1158: +YY_RULE_SETUP +#line 7014 "tth.lex" +TTH_OUTPUTH("ú"); + YY_BREAK +case 1159: +YY_RULE_SETUP +#line 7015 "tth.lex" +TTH_OUTPUTH("û"); + YY_BREAK +case 1160: +YY_RULE_SETUP +#line 7016 "tth.lex" +TTH_OUTPUTH("ù"); + YY_BREAK +case 1161: +#line 7018 "tth.lex" +case 1162: +YY_RULE_SETUP +#line 7018 "tth.lex" +TTH_OUTPUTH("ü"); + YY_BREAK +case 1163: +YY_RULE_SETUP +#line 7019 "tth.lex" +TTH_OUTPUTH("ý"); + YY_BREAK +case 1164: +#line 7021 "tth.lex" +case 1165: +YY_RULE_SETUP +#line 7021 "tth.lex" +TTH_OUTPUTH("ÿ"); + YY_BREAK +case 1166: +YY_RULE_SETUP +#line 7022 "tth.lex" +TTH_OUTPUTH("ß"); + YY_BREAK +case 1167: +#line 7024 "tth.lex" +case 1168: +YY_RULE_SETUP +#line 7024 "tth.lex" +TTH_DO_MACRO else{ TTH_OUTPUTH("ß");} + YY_BREAK +/* Polish character macros:*/ +case 1169: +YY_RULE_SETUP +#line 7026 "tth.lex" +TTH_OUTPUTH("Ą"); + YY_BREAK +case 1170: +YY_RULE_SETUP +#line 7027 "tth.lex" +TTH_OUTPUTH("Ć"); + YY_BREAK +case 1171: +YY_RULE_SETUP +#line 7028 "tth.lex" +TTH_OUTPUTH("Ę"); + YY_BREAK +case 1172: +YY_RULE_SETUP +#line 7029 "tth.lex" +TTH_OUTPUTH("Ł"); + YY_BREAK +case 1173: +YY_RULE_SETUP +#line 7030 "tth.lex" +TTH_OUTPUTH("Ń"); + YY_BREAK +case 1174: +YY_RULE_SETUP +#line 7031 "tth.lex" +TTH_OUTPUTH("Ś"); + YY_BREAK +case 1175: +YY_RULE_SETUP +#line 7032 "tth.lex" +TTH_OUTPUTH("Ź"); + YY_BREAK +case 1176: +YY_RULE_SETUP +#line 7033 "tth.lex" +TTH_OUTPUTH("Ż"); + YY_BREAK +case 1177: +YY_RULE_SETUP +#line 7034 "tth.lex" +TTH_OUTPUTH("ą"); + YY_BREAK +case 1178: +YY_RULE_SETUP +#line 7035 "tth.lex" +TTH_OUTPUTH("ć"); + YY_BREAK +case 1179: +YY_RULE_SETUP +#line 7036 "tth.lex" +TTH_OUTPUTH("ę"); + YY_BREAK +case 1180: +YY_RULE_SETUP +#line 7037 "tth.lex" +TTH_OUTPUTH("ł"); + YY_BREAK +case 1181: +YY_RULE_SETUP +#line 7038 "tth.lex" +TTH_OUTPUTH("ń"); + YY_BREAK +case 1182: +YY_RULE_SETUP +#line 7039 "tth.lex" +TTH_OUTPUTH("ś"); + YY_BREAK +case 1183: +YY_RULE_SETUP +#line 7040 "tth.lex" +TTH_OUTPUTH("ź"); + YY_BREAK +case 1184: +YY_RULE_SETUP +#line 7041 "tth.lex" +TTH_OUTPUTH("ż"); + YY_BREAK +case 1185: +YY_RULE_SETUP +#line 7043 "tth.lex" +TTH_OUTPUTH(",,"); + YY_BREAK +case 1186: +YY_RULE_SETUP +#line 7044 "tth.lex" +TTH_OUTPUTH("''"); + YY_BREAK +case 1187: +YY_RULE_SETUP +#line 7045 "tth.lex" +TTH_OUTPUTH("«"); + YY_BREAK +case 1188: +YY_RULE_SETUP +#line 7046 "tth.lex" +TTH_OUTPUTH("»"); + YY_BREAK +case 1189: +YY_RULE_SETUP +#line 7047 "tth.lex" + + YY_BREAK +/* Convert TeX double quotes to single-character */ +case 1190: +#line 7050 "tth.lex" +case 1191: +YY_RULE_SETUP +#line 7050 "tth.lex" +TTH_OUTPUTH("\""); + YY_BREAK +case 1192: +YY_RULE_SETUP +#line 7051 "tth.lex" +{ + if(*(yytext+1)=='g') strcpy(scratchstring,"\\`"); + else strcpy(scratchstring,"\\'"); + strcat(scratchstring,yytext+strlen(yytext)-3); + TTH_SCAN_STRING(scratchstring); +} + YY_BREAK +/* Remove unwanted braces from around accented characters. */ +case 1193: +#line 7059 "tth.lex" +/* \\c{SP}*\{[cC]\} | */ +case 1194: +YY_RULE_SETUP +#line 7060 "tth.lex" +{ + if(tth_debug&8) fprintf(stderr,"Fixing accent:%s\n",yytext); + *dupstore2=0; + strncat(dupstore2,yytext,2); + strncat(dupstore2,yytext+strcspn(yytext,"{")+1, + strcspn(yytext,"}")-strcspn(yytext,"{")-1); + TTH_SCAN_STRING(dupstore2); + *dupstore2=0; + } + YY_BREAK +/* Unknown diacriticals must terminate safely. +\\noexpand\\H +\\noexpand\\b + Above are safely defined. Below need protection.*/ +case 1195: +YY_RULE_SETUP +#line 7073 "tth.lex" + + YY_BREAK +case 1196: +YY_RULE_SETUP +#line 7074 "tth.lex" + + YY_BREAK +case 1197: +YY_RULE_SETUP +#line 7075 "tth.lex" + + YY_BREAK +case 1198: +YY_RULE_SETUP +#line 7076 "tth.lex" + + YY_BREAK +case 1199: +YY_RULE_SETUP +#line 7078 "tth.lex" +TTH_OUTPUTH(TTH_BOXCODE); + YY_BREAK +case 1200: +YY_RULE_SETUP +#line 7079 "tth.lex" +TTH_OUTPUTH(TTH_HBAR); + YY_BREAK +/* Various things not being used. + \\\c TTH_OUTPUTH("¸"); + \? TTH_OUTPUTH("¿"); + \! TTH_OUTPUTH("¡"); + */ +case 1201: +YY_RULE_SETUP +#line 7086 "tth.lex" +{ + TTH_SCAN_STRING(tth_latex_file); +} + YY_BREAK +/* This needs to match all the cases of comments otherwise they will + not allow escaping of the % in that state. Not all are TTH_OUTPUT */ +case 1202: +#line 7092 "tth.lex" +case 1203: +#line 7093 "tth.lex" +case 1204: +YY_RULE_SETUP +#line 7093 "tth.lex" +TTH_OUTPUTH("%"); + YY_BREAK +case 1205: +YY_RULE_SETUP +#line 7094 "tth.lex" + + YY_BREAK +case 1206: +#line 7096 "tth.lex" +case 1207: +/* rule 1207 can match eol */ +YY_RULE_SETUP +#line 7096 "tth.lex" +{ + if(strcspn(yytext,"\n")==0) {TTH_INC_LINE;TTH_CHECK_LENGTH;} + strcat(dupstore,yytext); +} + YY_BREAK +case 1208: +YY_RULE_SETUP +#line 7100 "tth.lex" +strcat(defstore,yytext); + YY_BREAK +case 1209: +/* rule 1209 can match eol */ +YY_RULE_SETUP +#line 7101 "tth.lex" +{ + TTH_INC_LINE; +} + YY_BREAK +case 1210: +#line 7105 "tth.lex" +case 1211: +#line 7106 "tth.lex" +/* \\\\\*?({SP}*\[[^\]]*\])? | */ +case 1212: +YY_RULE_SETUP +#line 7107 "tth.lex" +TTH_SCAN_STRING("\\par"); + YY_BREAK +case 1213: +YY_RULE_SETUP +#line 7108 "tth.lex" +{ + if(horizmode) horizmode=1; + jscratch=indexkey("#1",margkeys,&margmax); + yy_pop_state(); + if(jscratch!=-1){ + strcpy(dupstore,margs[jscratch]); + rmdef(margkeys,margs,&margmax); + for(js2=0;js2<2*(strlen(dupstore));js2++)TTH_OUTPUT(" "); + }else{ + fprintf(stderr,"***** Error. No argument in \\phantom. Line %d\n",tth_num_lines); + } + *dupstore=0; + } + YY_BREAK +case 1214: +YY_RULE_SETUP +#line 7122 "tth.lex" +TTH_OUTPUTH("$"); + YY_BREAK +case 1215: +YY_RULE_SETUP +#line 7123 "tth.lex" +TTH_OUTPUTH("#"); + YY_BREAK +case 1216: +YY_RULE_SETUP +#line 7124 "tth.lex" +TTH_OUTPUTH("{"); + YY_BREAK +case 1217: +YY_RULE_SETUP +#line 7125 "tth.lex" +TTH_OUTPUTH("}"); + YY_BREAK +/* In nbsp choice above \\{SP} TTH_OUTPUTH(" "); */ +case 1218: +YY_RULE_SETUP +#line 7127 "tth.lex" +TTH_OUTPUTH("_"); + YY_BREAK +case 1219: +YY_RULE_SETUP +#line 7128 "tth.lex" + + YY_BREAK +case 1220: +YY_RULE_SETUP +#line 7129 "tth.lex" +TTH_OUTPUTH(" "); + YY_BREAK +case 1221: +YY_RULE_SETUP +#line 7130 "tth.lex" +TTH_OUTPUTH("-"); + YY_BREAK +case 1222: +YY_RULE_SETUP +#line 7131 "tth.lex" +TTH_OUTPUTH("..."); /* non-math dots */ + YY_BREAK +/* Commands to ignore in equations as well as text*/ +case 1223: +YY_RULE_SETUP +#line 7133 "tth.lex" + + YY_BREAK +case 1224: +YY_RULE_SETUP +#line 7134 "tth.lex" + + YY_BREAK +case 1225: +YY_RULE_SETUP +#line 7135 "tth.lex" + + YY_BREAK +/* Some problems in equations being confused with this, unless specific. */ +case 1226: +YY_RULE_SETUP +#line 7138 "tth.lex" +{ + fprintf(stderr,"**** Removing inappropriate parameter command %s Line %d\n",yytext,tth_num_lines); + yy_push_state(lookfornum);*argchar=0; + } + YY_BREAK +case 1227: +YY_RULE_SETUP +#line 7142 "tth.lex" +/* Overridden where necessary for defs.. */ + YY_BREAK +/* TeX Commands in equations*/ +case 1228: +YY_RULE_SETUP +#line 7145 "tth.lex" +{ + TTH_DO_MACRO + else if( (ind=indexkey(yytext,countkeys,&ncounters)) != -1) { + if(tth_debug&4) fprintf(stderr,"Setting counter %d, %s. ",ind,countkeys[ind]); + yy_push_state(counterset); + } else { + if(!(tth_debug&32768)) + fprintf(stderr,"**** Unknown command %s in equation, Line %d\n" + ,yytext,tth_num_lines); + strcat(eqstr,yytext); + } + } + YY_BREAK +/* Default equation action may no longer be needed, but not sure. 21 Mar*/ +case 1229: +YY_RULE_SETUP +#line 7158 "tth.lex" +{ + strcat(eqstr,yytext); + } + YY_BREAK +case 1230: +YY_RULE_SETUP +#line 7162 "tth.lex" +yy_scan_string("}\\end"); + YY_BREAK +/* Latex default (unknown) environment */ +case 1231: +YY_RULE_SETUP +#line 7164 "tth.lex" +{ + TTH_CCPY(environment,strstr(yytext,"{")+1); + environment[strlen(environment)-1]=0; + TTH_DO_MACRO + else{ + environment[0]=0; + fprintf(stderr,"**** Unknown or ignored environment: %s Line %d\n" + ,yytext,tth_num_lines); + } + TTH_PUSH_CLOSING; + /*This is balanced by the \egroup just below.*/ + } + YY_BREAK +case 1232: +YY_RULE_SETUP +#line 7176 "tth.lex" +{ + ind=indexkey(yytext,keys,&nkeys); + TTH_SCAN_STRING("\\egroup"); + if(ind != -1) { /* This was defined by newenvironment */ + TTH_SCAN_STRING(defs[ind]); + environment[0]=0; + yy_push_state(psub); + if(tth_debug&8) fprintf(stderr,"Using definition %d= %s in end\n" + ,ind,defs[ind]); + } + } + YY_BREAK +case 1233: +/* rule 1233 can match eol */ +YY_RULE_SETUP +#line 7187 "tth.lex" +{ + TTH_INC_MULTI; + if(strstr(yytext,"\n")){TTH_INC_LINE;} + fprintf(stderr, + "**** Warning! Bad LaTeX Style. Space after \\begin. Line %d\n",tth_num_lines); + unput('n');unput('i');unput('g');unput('e');unput('b');unput('\\'); +} + YY_BREAK +case 1234: +/* rule 1234 can match eol */ +YY_RULE_SETUP +#line 7194 "tth.lex" +{ + TTH_INC_MULTI; + if(strstr(yytext,"\n")){TTH_INC_LINE;} + fprintf(stderr, + "**** Warning! Bad LaTeX Style. Space after \\end Line %d\n",tth_num_lines); + unput('{');unput('d');unput('n');unput('e');unput('\\'); +} + YY_BREAK +case 1235: +YY_RULE_SETUP +#line 7202 "tth.lex" +{ + if(*yytext == *chr1){ + TTH_TEXCLOSE else{ + TTH_CLOSEGROUP;TTH_POP_CLOSING; + yy_pop_state(); + } + }else{ + if(*yytext == '&') {TTH_OUTPUTH("&");} + else if(*yytext == '<') {TTH_OUTPUTH("<");} + else if(*yytext == '>') {TTH_OUTPUTH(">");} + else if(*yytext == ' ') {TTH_OUTPUTH(" ");} + else {TTH_OUTPUTH(yytext);} + } + } + YY_BREAK +/* Special escape sequences in rawgroup */ +case 1236: +YY_RULE_SETUP +#line 7218 "tth.lex" +TTH_OUTPUT(yytext+1); + YY_BREAK +/* Don't set horizmode for whitespace.*/ +case 1237: +YY_RULE_SETUP +#line 7220 "tth.lex" +TTH_OUTPUT(yytext); + YY_BREAK +/* Default action */ +case 1238: +YY_RULE_SETUP +#line 7222 "tth.lex" +horizmode=1;TTH_OUTPUT(yytext); + YY_BREAK +/* Normal action. Set to horizontal mode if not space*/ +case 1239: +YY_RULE_SETUP +#line 7224 "tth.lex" +fprintf(tth_fdout,"%s",yytext); + YY_BREAK +/* Default action */ +case 1240: +YY_RULE_SETUP +#line 7226 "tth.lex" +horizmode=1;fprintf(tth_fdout,"%s",yytext); + YY_BREAK +/* Delete in certain states. */ +case 1241: +YY_RULE_SETUP +#line 7229 "tth.lex" +yyless(0);yy_pop_state(); + YY_BREAK +case 1242: +YY_RULE_SETUP +#line 7230 "tth.lex" + + YY_BREAK +case 1243: +/* rule 1243 can match eol */ +YY_RULE_SETUP +#line 7232 "tth.lex" +{ + if(tth_ercnt==0){ + fprintf(stderr,"%s",yytext); + tth_ercnt=0; + fprintf(stderr,"\n");TTH_EXIT(1); + }else if(tth_ercnt>0){ fprintf(stderr,"%s",yytext);tth_ercnt--; + }else{tth_ercnt=0;TTH_EXIT(tth_erlev);} ; +} + YY_BREAK +case 1244: +YY_RULE_SETUP +#line 7241 "tth.lex" +horizmode=1; + YY_BREAK +case 1245: +YY_RULE_SETUP +#line 7242 "tth.lex" +{TTH_PAR_ACTION} + YY_BREAK +case 1246: +YY_RULE_SETUP +#line 7243 "tth.lex" +yy_push_state(unknown); + YY_BREAK +case 1247: +YY_RULE_SETUP +#line 7244 "tth.lex" +yy_push_state(unknown); + YY_BREAK +case 1248: +YY_RULE_SETUP +#line 7245 "tth.lex" +fprintf(stderr,"**** DANGER: Catcode changes not honored. Expect abnormal behavior. Line %d\n",tth_num_lines); + YY_BREAK +/* Ignore quietly */ +case 1249: +YY_RULE_SETUP +#line 7248 "tth.lex" + + YY_BREAK +case 1250: +YY_RULE_SETUP +#line 7249 "tth.lex" + + YY_BREAK +case 1251: +YY_RULE_SETUP +#line 7250 "tth.lex" + + YY_BREAK +case 1252: +YY_RULE_SETUP +#line 7251 "tth.lex" + + YY_BREAK +case 1253: +YY_RULE_SETUP +#line 7252 "tth.lex" + + YY_BREAK +case 1254: +YY_RULE_SETUP +#line 7253 "tth.lex" + + YY_BREAK +case 1255: +YY_RULE_SETUP +#line 7254 "tth.lex" + + YY_BREAK +/*\\line | */ +case 1256: +YY_RULE_SETUP +#line 7256 "tth.lex" + + YY_BREAK +case 1257: +YY_RULE_SETUP +#line 7257 "tth.lex" + + YY_BREAK +case 1258: +YY_RULE_SETUP +#line 7258 "tth.lex" + + YY_BREAK +case 1259: +#line 7260 "tth.lex" +case 1260: +#line 7261 "tth.lex" +case 1261: +YY_RULE_SETUP +#line 7261 "tth.lex" +{ /* Dump the argument. Might be used instead of matchbrace. */ + TTH_TEX_FN("#tthdrop1",1); +} + YY_BREAK +case 1262: +#line 7265 "tth.lex" +case 1263: +#line 7266 "tth.lex" +case 1264: +YY_RULE_SETUP +#line 7266 "tth.lex" +{ + sscanf(yytext+strcspn(yytext,"0123456789"),"%d", &js2); + js2++; + roman(js2,scratchstring); + sprintf(scrstring,"\\tthbox%s",scratchstring); + TTH_SCAN_STRING(scrstring); +} + YY_BREAK +case 1265: +YY_RULE_SETUP +#line 7274 "tth.lex" +{ + fprintf(stderr,"%s","\nUnusual bibdata command; if natbib not explicit,\n\ +maybe insert the following in the preamble:\n\ +%%tth: \\usepackage{natbib} % Tells tth/m to use natbib.\n\ +%%tth: \\NAT@numberstrue % If you want number-style citations\n\n"); + TTH_INC_MULTI;yy_push_state(matchbrace); +} + YY_BREAK +case 1266: +#line 7283 "tth.lex" +case 1267: +#line 7284 "tth.lex" +case 1268: +#line 7285 "tth.lex" +case 1269: +#line 7286 "tth.lex" +case 1270: +#line 7287 "tth.lex" +case 1271: +#line 7288 "tth.lex" +case 1272: +#line 7289 "tth.lex" +case 1273: +#line 7290 "tth.lex" +case 1274: +/* rule 1274 can match eol */ +#line 7291 "tth.lex" +case 1275: +/* rule 1275 can match eol */ +#line 7292 "tth.lex" +case 1276: +/* rule 1276 can match eol */ +#line 7293 "tth.lex" +case 1277: +/* rule 1277 can match eol */ +#line 7294 "tth.lex" +case 1278: +/* rule 1278 can match eol */ +#line 7295 "tth.lex" +case 1279: +/* rule 1279 can match eol */ +#line 7296 "tth.lex" +case 1280: +/* rule 1280 can match eol */ +#line 7297 "tth.lex" +case 1281: +/* rule 1281 can match eol */ +YY_RULE_SETUP +#line 7297 "tth.lex" +if(horizmode)horizmode=1; + YY_BREAK +case 1282: +#line 7299 "tth.lex" +case 1283: +#line 7300 "tth.lex" +case 1284: +#line 7301 "tth.lex" +case 1285: +#line 7302 "tth.lex" +case 1286: +#line 7303 "tth.lex" +case 1287: +#line 7304 "tth.lex" +case 1288: +YY_RULE_SETUP +#line 7304 "tth.lex" +TTH_INC_MULTI;yy_push_state(matchbrace); + YY_BREAK +case 1289: +#line 7307 "tth.lex" +case 1290: +#line 7308 "tth.lex" +case 1291: +#line 7309 "tth.lex" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(pargroup): +case YY_STATE_EOF(parclose): +case YY_STATE_EOF(tokenarg): +case YY_STATE_EOF(exptokarg): +case YY_STATE_EOF(swaparg): +case YY_STATE_EOF(embracetok): +case YY_STATE_EOF(rawgroup): +case YY_STATE_EOF(verbatim): +case YY_STATE_EOF(verb): +case YY_STATE_EOF(notags): +case YY_STATE_EOF(dupgroup): +case YY_STATE_EOF(dupsquare): +case YY_STATE_EOF(discardgroup): +case YY_STATE_EOF(falsetext): +case YY_STATE_EOF(innerfalse): +case YY_STATE_EOF(ortext): +case YY_STATE_EOF(orbreak): +case YY_STATE_EOF(getifx): +case YY_STATE_EOF(getiftok): +case YY_STATE_EOF(getifnum): +case YY_STATE_EOF(lookfornum): +case YY_STATE_EOF(insertnum): +case YY_STATE_EOF(lookforunit): +case YY_STATE_EOF(lookforfile): +case YY_STATE_EOF(matchbrace): +case YY_STATE_EOF(getbox): +case YY_STATE_EOF(getsubp): +case YY_STATE_EOF(getdef): +case YY_STATE_EOF(getdefbr): +case YY_STATE_EOF(getnumargs): +case YY_STATE_EOF(ddcomp): +case YY_STATE_EOF(getend): +case YY_STATE_EOF(letdef): +case YY_STATE_EOF(unknown): +case YY_STATE_EOF(dimadv): +case YY_STATE_EOF(getcount): +case YY_STATE_EOF(advance): +case YY_STATE_EOF(number): +case YY_STATE_EOF(counterset): +case YY_STATE_EOF(htemplate): +case YY_STATE_EOF(halign): +case YY_STATE_EOF(hendline): +case YY_STATE_EOF(hamper): +case YY_STATE_EOF(mamper): +case YY_STATE_EOF(vtemplate): +case YY_STATE_EOF(valign): +case YY_STATE_EOF(equation): +case YY_STATE_EOF(disptab): +case YY_STATE_EOF(textbox): +case YY_STATE_EOF(Litemize): +case YY_STATE_EOF(Lenumerate): +case YY_STATE_EOF(Ldescription): +case YY_STATE_EOF(Lindex): +case YY_STATE_EOF(uppercase): +case YY_STATE_EOF(textsc): +case YY_STATE_EOF(define): +case YY_STATE_EOF(macarg): +case YY_STATE_EOF(optag): +case YY_STATE_EOF(optdetect): +case YY_STATE_EOF(psub): +case YY_STATE_EOF(xpnd): +case YY_STATE_EOF(delimint): +case YY_STATE_EOF(removespace): +case YY_STATE_EOF(titlecheck): +case YY_STATE_EOF(stricttitle): +case YY_STATE_EOF(builtins): +case YY_STATE_EOF(latexbuiltins): +case YY_STATE_EOF(glue): +case YY_STATE_EOF(ruledim): +case YY_STATE_EOF(bigdel): +case YY_STATE_EOF(picture): +case YY_STATE_EOF(csname): +case YY_STATE_EOF(tempamp): +case YY_STATE_EOF(hskip): +case YY_STATE_EOF(vskip): +case YY_STATE_EOF(hbox): +case YY_STATE_EOF(vbox): +case YY_STATE_EOF(setdimen): +case YY_STATE_EOF(tabpre): +case YY_STATE_EOF(error): +case YY_STATE_EOF(parcheck): +case YY_STATE_EOF(tokexp): +case YY_STATE_EOF(escgroup): +case YY_STATE_EOF(uncommentgroup): +case YY_STATE_EOF(urlgroup): +case YY_STATE_EOF(indexgroup): +case YY_STATE_EOF(halsearch): +#line 7309 "tth.lex" +{ + if(!strcmp(yytext,"\\end")) { + tth_stack_ptr=0; + if(!ftntno){ + TTH_INC_LINE; + if(tth_debug&1024 && !(tth_stack_ptr||ftntwrap)) fprintf(stderr,"\n"); + /*Terminate the diagnostic*/ + }/* Count the last line if it is \end */ + } + /*Function returns here*/ + if ( --tth_stack_ptr < 0){ + TTH_CLOSEGROUP;*closing=0; + if(ftntno){ + TTH_SCAN_STRING("\\special{html:

    }\\tthfootnotes:\\special{html:

    \n}"); + ftntno=0; + if(tth_splitfile){ /*sf*/ + strcpy(filenext,"footnote.html");/*sf*/ + TTH_SCAN_STRING("\\tthsplittail\\tthsplitinv\\tthsplittop\\tthfileupd"); /*sf*/ + }/*sf*/ + }else{ + if(tth_debug&4096)fprintf(stderr,"ftntwrap:%d,",ftntwrap); + if(ftntwrap < nkeys){ /* Footnote wrap-up. Search keys. */ + if(tth_debug&4096)fprintf(stderr," %s\n",keys[ftntwrap]); + yy_delete_buffer(YY_CURRENT_BUFFER );/*leakfix*/ + if(strstr(keys[ftntwrap],"tthFtNt")){ + {TTH_PAR_ACTION}; + fprintf(tth_fdout,"",keys[ftntwrap]+1); + if(tth_debug&256)fprintf(stderr,"Footnote key %d, scanning: %s\n", + ftntwrap,defs[ftntwrap]); + yy_scan_string(defs[ftntwrap]);yy_push_state(psub); + } else yy_scan_string("\\end"); + tth_stack_ptr++; + /* tth_stack_ptr=1;*/ + ftntwrap++; + }else{ + if(tth_indexfile){ + /* We no longer remove it because we use different name. + sprintf(scratchstring,"%s %s.ind%s",RMCMD,tth_latex_file,RMTERM); + system(scratchstring); + */ + tth_indexfile=NULL; + } + if(tth_splitfile)fprintf(tth_fdout,"
    %s",TTH_HEAD);/*sf*/ + if(tth_debug&4096)fprintf(stderr,"Terminating.\n"); + fflush(stdout); + yyterminate(); + } + } + }else{ + if(eofrmv[tth_stack_ptr] == 11){ /*Index ref in toc*/ + if(tth_splitfile)/*sf*/ + {fprintf(tth_fdout,"Index
    ");}else/*sf*/ + {fprintf(tth_fdout,"Index
    ");} + eofrmv[tth_stack_ptr] = 0; /* Do it only once. */ + }else{ + /*horizmode=0; for removespace caused uppercase problem*/ + if(eofrmv[tth_stack_ptr]) yy_push_state(removespace); + } + if(tth_debug&16) fprintf(stderr, + "EOF encountered: level=%d rmv=%d\n", + tth_stack_ptr, eofrmv[tth_stack_ptr]); + yy_delete_buffer(YY_CURRENT_BUFFER ); + yy_switch_to_buffer(include_stack[tth_stack_ptr] ); + } +} + YY_BREAK +case 1292: +YY_RULE_SETUP +#line 7374 "tth.lex" +{ /* Don't suppose glue command in equations */ + TTH_CCPY(argchar,yytext); + strcpy(argchar+strlen(argchar)-1,"\n="); + TTH_SCAN_STRING(argchar); + *argchar=0; +} + YY_BREAK +case 1293: +YY_RULE_SETUP +#line 7381 "tth.lex" +yy_push_state(unknown); + YY_BREAK +/* Format looks like counter or dimension setting */ +case 1294: +YY_RULE_SETUP +#line 7384 "tth.lex" +{ + TTH_CCPY(argchar,yytext); + argchar[strcspn(yytext," =")]=0; + if( (ind=indexkey(argchar,countkeys,&ncounters)) != -1 ){ + if(tth_debug&4) fprintf(stderr,"Setting counter %d, %s\n",ind,countkeys[ind]); + yy_push_state(counterset); + } else if((ind=indexkey(argchar,keys,&nkeys)) != -1 ){ /*defined command*/ + yyless(strcspn(yytext," =")); + TTH_SCAN_STRING(argchar); + *argchar=0; + } else { + if((!strstr(unknownstring,yytext)||tth_debug)&&!(tth_debug&32768)){ + fprintf(stderr,"**** Unknown parameter/dimension/glue command %s Line %d\n",yytext,tth_num_lines); + if(!strstr(unknownstring,yytext) && + strlen(unknownstring)+strlen(yytext) < TTH_UNKS_LEN) + strcat(unknownstring,yytext); + } + yy_push_state(glue); /* In case glue */ + GET_DIMEN + } + } + YY_BREAK +case 1295: +#line 7407 "tth.lex" +case 1296: +YY_RULE_SETUP +#line 7407 "tth.lex" +{ /* Not a tth native command */ + TTH_DO_MACRO + else if( (ind=indexkey(yytext,countkeys,&ncounters)) != -1) { + if(tth_debug&4) fprintf(stderr,"Setting counter %d, %s\n",ind,countkeys[ind]); + yy_push_state(counterset); + } else { + if((!strstr(unknownstring,yytext)||tth_debug)&&!(tth_debug&32768)){ + fprintf(stderr,"**** Unknown command %s, (%d user-defined) Line %d\n", + yytext,nkeys-nbuiltins,tth_num_lines); + if(!strstr(unknownstring,yytext)&& + strlen(unknownstring)+strlen(yytext) < TTH_UNKS_LEN) + strcat(unknownstring,yytext); + } + yy_push_state(unknown); + } + } + YY_BREAK +case 1297: +YY_RULE_SETUP +#line 7425 "tth.lex" +yy_push_state(matchbrace); + YY_BREAK +case 1298: +/* rule 1298 can match eol */ +YY_RULE_SETUP +#line 7426 "tth.lex" +TTH_INC_MULTI; + YY_BREAK +case 1299: +/* rule 1299 can match eol */ +YY_RULE_SETUP +#line 7427 "tth.lex" +yy_pop_state();yyless(0); + YY_BREAK +case 1300: +YY_RULE_SETUP +#line 7429 "tth.lex" +strcat(psubstore,yytext); + YY_BREAK +case 1301: +YY_RULE_SETUP +#line 7430 "tth.lex" +strcat(psubstore,yytext); + YY_BREAK +case 1302: +/* rule 1302 can match eol */ +YY_RULE_SETUP +#line 7431 "tth.lex" +TTH_INC_LINE;strcat(psubstore,yytext); + YY_BREAK +case 1303: +YY_RULE_SETUP +#line 7432 "tth.lex" +{ + strcat(psubstore,"#"); + if(tth_debug&8) fprintf(stderr,"Double # added to %s\n",psubstore); + } + YY_BREAK +/* Changed * to + here 4 Nov 07 */ +case 1304: +YY_RULE_SETUP +#line 7437 "tth.lex" +{ /* Add space after a command string, in case */ + if( (js2 = strcspn(yytext,"#")) ){ + strcpy(scratchstring,yytext); + if(!strstr(yytext,"\\verb")){/*Don't add space after \verb*/ + strcpy(scratchstring+js2," "); + }else {*(scratchstring+js2)=0;} + strcat(psubstore,scratchstring); + } + jscratch=margmax-jarg+1; + i=indexkey(yytext+js2,margkeys,&jscratch); + if(tth_debug&8)fprintf(stderr,"%s argument search starting at %d finds %d\n", + yytext,jscratch,i); + if(i != -1) { + strcat(psubstore,margs[i]); + } else { + fprintf(stderr,"Could not find argument %s on macro arg stack\n",yytext); + } + } + YY_BREAK +case 1305: +YY_RULE_SETUP +#line 7455 "tth.lex" +{ + sscanf((yytext+strlen(yytext)-1),"%d",&i); + if(tth_debug&8) fprintf(stderr,"dropping %d args\n",i); + for (jscratch=0;jscratch63 && *yytext<91) || (*yytext>96 && *yytext<123)){ + if(whitespace==1)whitespace=1; else whitespace=0; + }else{ + if(whitespace==1)whitespace=2; else whitespace=0; + } + strcat(dupstore,scratchstring); + if(*chscratch == '#' ) { /* Nondelimited argument. */ + if(tth_debug&8) fprintf(stderr,"Non-delimited argument; jarg=%d\n",jarg); + chs2=chscratch+2; + chscratch=chs2; + if(strstr(yytext,"\n")){tth_num_lines--;}/*don't count twice*/ + yyless(0); + horiztemp=horizmode; + *dupstore=0; + if(jarg){ /* Not for zeroth argument */ + bracecount=-1; + yy_push_state(macarg); + yy_push_state(embracetok); + } else jarg++; + }else if(*chscratch == '{'){ /* Last argument is nondelimited */ + jargmax=jarg; /* use standard form of macarg */ + yyless(0); + horiztemp=horizmode; + *dupstore=0; + bracecount=-1; + yy_pop_state(); + yy_push_state(macarg); + yy_push_state(embracetok); + } else if(*chscratch == *scratchstring){ /* Normal delimited case. */ + chscratch++; + if((*chscratch == '#')||(*chscratch == '{')){ /* Matched pattern seg */ + sprintf(argchar,"#%d",jarg); + if(tth_debug&8)fprintf(stderr,"Matched Pattern:%s: jarg=%d, argchar=%s\n" + ,dupstore,jarg,argchar); + jscratch=0; + /* dupstore[strlen(dupstore)-(chscratch-chs2-compression)]=0;*/ + dupstore[strlen(dupstore)-(chscratch-chs2)]=0; + if(jarg){ + mkdef(argchar,margkeys,dupstore,margs, + &jscratch,margn,&margmax); + if(tth_debug&8){ + i=indexkey(argchar,margkeys,&margmax); + fprintf(stderr,"Delimited Argument:%s: index %d Def %s\n", + argchar,i,margs[i]); + } + } + if(*chscratch == '{') { /* Completed Template */ + jarg=1; + yy_pop_state(); + TTH_SCAN_STRING(defs[ind]); + if(tth_debug&8)fprintf(stderr,"Using definition %s (%d) = %s.\n", + keys[ind],ind,defs[ind]); + yy_push_state(psub); + }else{ /* Look for next argument */ + jarg++; + chs2=chscratch+2; + chscratch=chs2; + } + *dupstore=0; + /* compression=0;*/ + } + }else{ /* Mismatch. Start over. */ + chscratch=chs2; + if(*scratchstring == '{') { /* Nested braces protect against matching. */ + bracecount=0; storetype=10; /* Was 4 till new definitions */ + yy_push_state(dupgroup); + } + } + horizmode=horiztemp; +} + YY_BREAK +case 1311: +/* rule 1311 can match eol */ +YY_RULE_SETUP +#line 7589 "tth.lex" +{ + TTH_CHECK_LENGTH; + TTH_INC_LINE; + if(horizmode==1){ + horizmode=-1; + yy_push_state(parcheck); + TTH_OUTPUT(yytext); + }else if(horizmode==-1) { + fprintf(stderr,"**** Abnormal NL, removespace. Line %d\n",tth_num_lines); + } +} + YY_BREAK +case 1312: +YY_RULE_SETUP +#line 7600 "tth.lex" + + YY_BREAK +case 1313: +/* rule 1313 can match eol */ +YY_RULE_SETUP +#line 7601 "tth.lex" +{ + if(tth_debug&16)fprintf(stderr,"End of removespace:%s\n",yytext); + yy_pop_state();yyless(0); + } + YY_BREAK +case 1314: +/* rule 1314 can match eol */ +YY_RULE_SETUP +#line 7605 "tth.lex" +TTH_INC_MULTI;GET_DIMEN; + YY_BREAK +case 1315: +/* rule 1315 can match eol */ +YY_RULE_SETUP +#line 7606 "tth.lex" +yyless(0);yy_pop_state(); + YY_BREAK +case 1316: +YY_RULE_SETUP +#line 7608 "tth.lex" +ECHO; + YY_BREAK +#line 26747 "lex.yy.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 11276 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 11276 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 11275); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 1; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + + static void yy_push_state (int new_state ) +{ + if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) + { + yy_size_t new_size; + + (yy_start_stack_depth) += YY_START_STACK_INCR; + new_size = (yy_start_stack_depth) * sizeof( int ); + + if ( ! (yy_start_stack) ) + (yy_start_stack) = (int *) yyalloc(new_size ); + + else + (yy_start_stack) = (int *) yyrealloc((void *) (yy_start_stack),new_size ); + + if ( ! (yy_start_stack) ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; + + BEGIN(new_state); +} + + static void yy_pop_state (void) +{ + if ( --(yy_start_stack_ptr) < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); +} + + static int yy_top_state (void) +{ + return (yy_start_stack)[(yy_start_stack_ptr) - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + + (yy_start_stack_ptr) = 0; + (yy_start_stack_depth) = 0; + (yy_start_stack) = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Destroy the start condition stack. */ + yyfree((yy_start_stack) ); + (yy_start_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 7608 "tth.lex" + + + /********************************** CODE ******************************/ + +int main(argc,argv) +int argc; +char *argv[]; +{ +int raw=0,httpcont=0; +int i,ilatex=0,ititle=1; +char *spoint=0; +char ttver[]=TTH_VERSION; +char ttname[20]; +time_t secs_elapsed; +time_t make_time=939087164; +char timestr[]="On 00 Jan 2000, 00:00."; +FILE *fdin=0; +int horizmode=1; /* In signoff use font tags not divs */ +char main_input[TTH_CHARLEN]; +char main_output[TTH_CHARLEN]; + tth_fdout=stdout; + if((spoint=strstr(tth_DOC,"XXXX"))){ /* Make version strings */ + strcpy(ttname,"Tt"); + strcat(ttname,TTH_NAME); + strncpy(spoint-10-strlen(ttname),ttname,strlen(ttname)); + strncpy(spoint,ttver,strlen(ttver)); + if(strstr(TTH_NAME,"M")){ /* MathML */ + tth_mathitalic=0; /* Don't use for mml */ + tth_htmlstyle=2; /* Use default XHTML style for MathML*/ +#ifdef TTM_LAPSED + time(&secs_elapsed); + /*fprintf(stderr,"Maketime=%ld, elapsed=%ld",(long)make_time, + (long)secs_elapsed); */ + if(make_time!=939087164){ + if(secs_elapsed>make_time+30*24*60*60){ + fprintf(stderr,TTM_LAPSED); + TTH_EXIT(1); + } + } +#else + secs_elapsed=make_time; +#endif + while((spoint=strstr(tth_DOC,"tth")))strncpy(spoint,"ttm",3); + while((spoint=strstr(tth_DOC,"TtH")))strncpy(spoint,"TtM",3); + while((spoint=strstr(tth_USAGE,"tth")))strncpy(spoint,"ttm",3); + while((spoint=strstr(tth_USAGE,"TtH")))strncpy(spoint,"TtM",3); + while((spoint=strstr(tth_DOC,"(TeX-to-HTML"))) + strncpy(spoint," Tex to MathML/HTML translator. ", + strlen(" Tex to MathML/HTML translator. ")); + } + } + for (i=1;i"); + strcpy(tth_font_close[0],""); + TTH_CCPY(tth_fonto_def,tth_font_open[0]); + TTH_CCPY(tth_fontc_def,tth_font_close[0]); + }else{ + /* Make all (even multi-letter) identifiers italic*/ + strcpy(tth_font_open[0],TTH_ITALO); + } + break; + case 'j': tth_indexpage=9999; + if(*(argv[i]+2)) sscanf(argv[i]+2,"%d",&tth_indexpage); + fprintf(stderr,"HTML index page length %d\n",tth_indexpage);break; + case 'k': strcpy(tth_latex_file,argv[i]+2);break; + case 'L': case 'l':{ + if(strlen(tth_latex_file)){ + fprintf(stderr, + "Do not use both -L switch and file command-line argument %s\n", + main_input); + return 1; + } + strcpy(tth_latex_file,argv[i]+2); + fprintf(stderr,"Including LaTeX commands\n"); + ilatex=1; + break; + } + case 'n': + tth_titlestate=4; + if(*(argv[i]+2)) sscanf(argv[i]+2,"%d",&tth_titlestate); + break; + /*case 'n': tth_multinum=0;break; disable 3.0*/ + case 'P': case 'p': + if(!strcmp(argv[i]+2,"NULL")){tth_allowinput=0;} + TTH_CCPY(tth_texinput_path,argv[i]+2);break; + case 'r': raw=1;if(*(argv[i]+2)) sscanf(argv[i]+2,"%d",&raw);break; + case 's': tth_splitfile=1;break; /*sf*/ + case 't': tth_inlinefrac=1;break; + case 'u': tth_unicode=1; + if(*(argv[i]+2)) sscanf(argv[i]+2,"%d",&tth_unicode); + fprintf(stderr,"HTML unicode style %d\n",tth_unicode);break; + case 'v': tth_verb=1; tth_debug=1; + if(*(argv[i]+2)=='?'){fprintf(stderr,"%s",tth_debughelp);return 1;} + else if(*(argv[i]+2)) sscanf(argv[i]+2,"%d",&tth_debug); + break; + case 'V': tth_verb=1; tth_debug=2048+256+7;break; + case 'w': sscanf(argv[i]+2,"%d",&tth_htmlstyle); + fprintf(stderr,"HTML writing style %d\n",tth_htmlstyle); + if(!tth_htmlstyle&1) ititle=0;break; + case 'x':strcpy(tth_index_cmd,argv[i]+2);break; + case 'y': sscanf(argv[i]+2,"%d",&tth_istyle); + fprintf(stderr,"Equation layout style %d\n",tth_istyle); + break; + } + if(tth_verb)fprintf(stderr,"Debug level %d\n",tth_debug); + } + } + if((spoint=getenv("TTHINPUTS"))){ + TTH_CCAT(tth_texinput_path,PATH_SEP);TTH_CCAT(tth_texinput_path,spoint);} + if(httpcont) fprintf(tth_fdout,"Content-type: text/HTML\n\n"); + if(tth_splitfile) fprintf(tth_fdout,TTH_MIME_HEAD); /*sf*/ + if(raw!=1){ + fprintf(tth_fdout,TTH_DOCTYPE); + fprintf(tth_fdout,TTH_GENERATOR,TTH_NAME,TTH_VERSION); + fprintf(tth_fdout,TTH_ENCODING); + /*if(tth_htmlstyle&2) */ + fprintf(tth_fdout,"%s",TTH_P_STYLE); + if(tth_istyle)fprintf(tth_fdout,"%s",TTH_STYLE); + if(!(tth_htmlstyle&4))fprintf(tth_fdout,"%s",TTH_SIZESTYLE); + } + if(tth_flev0) tth_flev0=tth_flev0+2; /* Increment to compensate for dummy levels. */ + if(ititle && raw!=1){ + if(tth_htmlstyle&3){ + yy_push_state(stricttitle); + }else{ + yy_push_state(titlecheck); + } + } + yy_push_state(builtins); + if(ilatex)yy_push_state(latexbuiltins); + /* if(tth_debug) + fprintf(stderr,"Starting yylex\n"); */ + yylex(); + fprintf(stderr, "Number of lines processed approximately %d\n", + tth_num_lines-1); + /* Time stamp */ + time(&secs_elapsed); + spoint=ctime(&secs_elapsed); + strncpy(timestr+3,spoint+8,2); + strncpy(timestr+6,spoint+4,3); + strncpy(timestr+10,spoint+20,4); + strncpy(timestr+16,spoint+11,5); + if(raw==2)*timestr=0; /* Not if -r2 */ + if(raw!=1 && raw != 4){ + fprintf(tth_fdout,"\n


    File translated from\n\ +T%sE%sX\nby \n\ +T%sT%s%s,\n\ +version %s.
    %s
    \n",TTH_SMALL,TTH_SIZEEND,TTH_SMALL,TTH_SIZEEND + ,TTH_NAME,TTH_VERSION,timestr); + } + if(raw!=1){ + if(tth_htmlstyle&3)fprintf(tth_fdout,"
    "); + fprintf(tth_fdout,"\n"); + } + if(tth_debug&16) fprintf(stderr, "Exit pushdepth= %d\n",tth_push_depth); + /* silence gcc warnings:*/ if(1==0){yy_top_state();input();} + return 0; +} /* end main */ + +void tth_push(arg) +char arg[]; +{ + if(tth_debug&16) fprintf(stderr,"tth_push:%s depth:%d\n",\ + arg,tth_push_depth); + if(tth_push_depth == TTH_MAXDEPTH) { + fprintf(stderr, + "**** Error Fatal: Attempt to exceed max nesting:%d\n", + tth_push_depth); + TTH_FATAL(6); + }else{ + strcpy(tth_closures[tth_push_depth],arg); + strcpy(tth_font_open[tth_push_depth+1], + tth_font_open[tth_push_depth]); + strcpy(tth_font_close[tth_push_depth+1], + tth_font_close[tth_push_depth]); + tth_push_depth++; + } + arg[0]=0; +} + +void tth_pop(arg) +char arg[]; +{ + if(tth_push_depth < 1){ + fprintf(stderr,"**** Error: Fatal. Apparently too many }s.\nCheck for TeX errors or incompatibilities before line %d,\nnext material ",tth_num_lines); + /*TTH_FATAL(1);*/ + yy_push_state(error); + tth_ercnt=40; + }else{ + tth_push_depth--; + strcpy(arg,tth_closures[tth_push_depth]); + if(tth_debug&16) fprintf(stderr,"tth_pop:%s depth:%d\n",\ + arg,tth_push_depth); + } +} + +/* ******************************************************************** + Process epsbox. If epsftype=0 put link. Arg is the file name. + epsftype=1 Convert the ps or eps file to a gif reference. + epsftype=2 Ditto but inline it. epsftype=3 inline an iconized version.*/ +void tth_epsf(arg,epsftype) +char *arg; +int epsftype; +{ +#define NCONV 2 +#define NGTYPES 4 + char *gtype[NGTYPES]={"png","gif","jpg","svg"}; + char commandstr[150]={0}; + char filestr[150]={0}; + char filestr1[150]={0}; + char filestr2[150]={0}; + FILE *giffile; + int sys=SUCCESS; + int c,i,psfound; + char *ext; + char eqstr[1]; /*dummy here for tthfunc*/ + *eqstr=0; /*silence warnings */ + ext=arg; /*silence warnings */ +if(epsftype==0){ + fprintf(tth_fdout,"Figure",arg); +}else{ + c=0; + for(i=1;i<=(strlen(arg)<4 ? strlen(arg) : 4);i++){ + ext=arg+strlen(arg)-i; + if(*ext=='.'){ + c=i; + break; + } + ext=ext+i; + } + if(c){ + if(strcmp(ext,".eps") && strcmp(ext,".EPS") + && strcmp(ext,".ps") && strcmp(ext,".PS") + && strcmp(ext,".pdf") && strcmp(ext,".PDF")) + { + fprintf(stderr,"Not a [e]ps file: %s, no conversion\n",arg); + if(epsftype==1) fprintf(tth_fdout,"Figure",arg); + if(epsftype==2) fprintf(tth_fdout,"\"%s\"",arg,arg); + return; + } + } + /* c=length of extension.*/ + strcpy(filestr,arg); + giffile=fopen(filestr,"r"); + psfound=0; + if(giffile == NULL){ /* Try possible file names */ + if(tth_debug&32)fprintf(stderr,"Graphic Input File %s not found.\n",filestr); + if(c==0){ + strcat(filestr,".eps"); + giffile=fopen(filestr,"r"); + if(giffile == NULL){ + if(tth_debug&32)fprintf(stderr,"Graphic Input File %s not found.\n",filestr); + strcpy(filestr,arg); strcat(filestr,".ps"); + giffile=fopen(filestr,"r"); + if(giffile == NULL){ + if(tth_debug&32)fprintf(stderr,"Graphic Input File %s not found.\n",filestr); + strcpy(filestr,arg); strcat(filestr,".pdf"); + giffile=fopen(filestr,"r"); + if(giffile == NULL){ + if(tth_debug&32)fprintf(stderr,"Graphic Input File %s not found.\n",filestr); + psfound=0; + strcpy(filestr,arg); /*Restore original name*/ + }else{ + fprintf(stderr,"Found %s. ",filestr); + psfound=1; + c=4; + } + }else{ + fprintf(stderr,"Found %s. ",filestr); + psfound=1; + c=3; + } + }else{ + fprintf(stderr,"Found %s. ",filestr); + psfound=1; + c=4; + } + } + }else{psfound=1;} + strcat(filestr1,filestr); /* The file we found for input if any.*/ + filestr[strlen(filestr)-c]=0; + sys=SUCCESS+1; + for(c=0;cFigure",filestr); + if(epsftype==2) fprintf(tth_fdout,"\"%s\"",filestr,filestr); + if(epsftype==3) fprintf(tth_fdout,"\"%s\"" + ,filestr,filestr1,filestr1); + }else if(psfound){ /* This can only happen if the system call occurs. */ + fprintf(stderr,"**** System call:%s failed.\n",commandstr); + fprintf(stderr, + "**** This failure is NOT in TtH; it is in an auxiliary program.\n"); + fprintf(tth_fdout,"Figure",arg); + }else { + fprintf(stderr,"**** No suitable source file for %s\n",arg); + } +} +} +/**************************************************************************/ +/* handling code for defs */ + +static int indexkey(key,keys,nkeys) +char *key; +char *keys[]; +int *nkeys; +{ + int i, j; + j=-1; + for(i = *nkeys-1; i>=0; i--) { + if(!strcmp(key,keys[i])) { + j=i; + break; + } + } + return j; +} + +static void mkkey(key,keys,nkeys) +char *key; +char *keys[]; +int *nkeys; +{ + size_t size; + size=strlen(key)+1; + keys[*nkeys]=malloc(size); + strcpy(keys[*nkeys],key); + (*nkeys)++; +} + +static void mkdef(key,keys,def,defs,narg,nargs,nkeys) +char *key; +char *keys[]; +char *def; +char *defs[]; +int *narg; +int nargs[]; +int *nkeys; +{ + size_t size; + size=strlen(key)+1; + keys[*nkeys]=malloc(size); + strcpy(keys[*nkeys],key); + size=strlen(def)+1; + defs[*nkeys]=malloc(size); + strcpy(defs[*nkeys],def); + nargs[*nkeys]=*narg; + (*nkeys)++; +} + +static void rmkey(keys,nkeys) +char *keys[]; +int *nkeys; +{ + if((*nkeys) > 0){ + (*nkeys)--; + free(keys[*nkeys]); + keys[*nkeys]=0; + } else { + fprintf(stderr,"**** Error: No keys left to remove\n"); + } +} + +static void rmdef(keys,defs,nkeys) +char *keys[]; +char *defs[]; +int *nkeys; +{ + if((*nkeys) > 0){ + (*nkeys)--; + free(keys[*nkeys]); + keys[*nkeys]=0; + free(defs[*nkeys]); + defs[*nkeys]=0; + } else { + fprintf(stderr,"**** Error: No defs left to remove\n"); + } +} + +void tth_undefine(keys,nkeys,udkey,lkeys) +char *keys[]; +int *nkeys; +int udkey; +int lkeys[]; + /* Undefine all local keys (lkeys(n)=1) from udkey to nkeys-1 */ +{ + /*static void rmkey();*/ + int i,ig; + ig=0; + for(i=(*nkeys)-1;i>=udkey;i--) { + if(lkeys[i]){ + if(tth_debug&4)fprintf(stderr, + "Undefining:Key %d, %s, %s\n",i,keys[i], + (ig ? "Trapped." : "Freed.")); + if(ig){ + *keys[i]=0; + lkeys[i]=0; + }else{ + rmkey(keys,nkeys); + } + }else{ig=1;} + } +} + +void tth_enclose(str0,str1,str2,store) /* Enclose str1 with str0, str2 */ +char *str0, *str2, *str1, *store; +{ /* Exit if string gets more than 3.5 of the 4*max */ + int lost; + strcpy(store,str1); + if((lost=strlen(str2)+strlen(store)- TTH_34DLEN) < 0){ + strcat(store,str2); + }else{ + fprintf(stderr,"**** Error: Fatal. String overflow: Lengths %d,%d\n", + (int)strlen(store),(int)strlen(str2)); + fprintf(stderr,"Line %d\n",tth_num_lines); + TTH_FATAL(2); + } + strcpy(str1,str0); + if((lost=strlen(str1)+strlen(store)- TTH_34DLEN) < 0){ + strcat(str1,store); + }else{ + fprintf(stderr,"**** Error: Fatal. String overflow: Lengths %d,%d\n", + (int)strlen(store),(int)strlen(str1)); + fprintf(stderr,"Line %d\n",tth_num_lines); + TTH_FATAL(2); + } +} + +void tth_prefix(str0,str1,store) /* Prefix str1 by str0, in str1 */ +char *str0, *str1, *store; +{ + int lost; + strcpy(store,str1); + strcpy(str1,str0); + if((lost=strlen(str1)+strlen(store)- TTH_34DLEN) < 0){ + strcat(str1,store); + }else{ + fprintf(stderr, + "**** Error: Fatal. Prefix string overflow: String %d, Prefix %d\n" + ,(int)strlen(store),(int)strlen(str1)); + fprintf(stderr,"Line %d. Check for excessive length equation.\n%s\n" + ,tth_num_lines," If necessary use switch -y0."); + TTH_FATAL(2); + } +} +/************************************************************************/ +/* start delimit */ +static void delimit(char *type, int heightin, char *codes) + /* Return codes corresponding to a delimiter of given type and height*/ +{ +#define notypes 14 + static int top[notypes]={230,246,233,249,236,252,234,243,233,249,234,250,32,32}; + static int flat[notypes]={231,247,234,250,239,239,234,244,234,250,234,250,32,32}; + static int mid[notypes]={231,247,234,250,237,253,234,244,234,250,234,250,225,241}; + static int bot[notypes]={232,248,235,251,238,254,234,245,234,250,235,251,32,32}; + int i,j; + char chr1[2]={0}; + char buff[20]; + int height; + int horizmode=1; /* In equations use font tags not divs */ + + /*tth_istyle case*/ + if(tth_istyle&1) height=0.65*heightin + 0.71; /* 2 has to yield 2*/ + else height=0.95*heightin+heightin*heightin/16 +.11; + /* Experimental size. Evenness fixed. If very large assume matrix. */ + if(tth_debug&32)fprintf(stderr,"Delimiter %s, heightin=%d, height=%d\n", + type,heightin,height); + + if (!strcmp(type,"(")) i=0 ; + else if(!strcmp(type,")")) i=1 ; + else if(!strcmp(type,"[")) i=2 ; + else if(!strcmp(type,"]")) i=3 ; + else if(!strcmp(type,"{")) {i=4 ; height=2*(height/2)+1;} + else if(!strcmp(type,"}")) {i=5 ; height=2*(height/2)+1;} + else if(!strcmp(type,"|")) i=6 ; + else if(!strcmp(type,"ò")) i=7 ; /* int */ + else if(!strcmp(type,"é")) i=8 ; /* lceil */ + else if(!strcmp(type,"ù")) i=9 ; /* rceil */ + else if(!strcmp(type,"ë")) i=10 ; /* lfloor */ + else if(!strcmp(type,"û")) i=11 ; /* rfloor */ + else if(!strcmp(type,"á")) i=12 ; /* langle */ + else if(!strcmp(type,"ñ")) i=13 ; /* rangle */ + else if(!strcmp(type,"/") || !strcmp(type,"\\")) { + /* Old version with font size=+... and bug sprintf(codes, + "%s%d%s%s%s\n", + TTH_SIZEGEN1,2*(height-1),TTH_SIZEGEN2,TTH_SIZEEND,type); + */ + sprintf(codes, + "%s%d%s%s%s\n", + TTH_SIZEGEN1,100*(height),TTH_SIZEGEN2,type,TTH_SIZEEND); + return; + } + else if(!strcmp(type,"Ö")) { /* Sqrt code */ + if(tth_root_len[tth_root_depth]){ /* An index exists */ + if(heightin<=2 ){ + if(tth_istyle&1){ + sprintf(codes,"%s%s%s%s %s%s%s%s",TTH_CELL_R,TTH_OA1, + TTH_FOOTNOTESIZE,tth_root_index[tth_root_depth], + TTH_SIZEEND,TTH_OA2,TTH_SYMBOL,TTH_large); + chr1[0]=214; + sprintf(codes+strlen(codes), + "%s%s%s%s%s",TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND,TTH_OA3,TTH_CELL3); + }else{ + chr1[0]=230; + sprintf(codes,"%s\n%s%s %s%s%s%s
    ", + TTH_CELL_R,TTH_SCRIPTSIZE,tth_root_index[tth_root_depth], + TTH_SIZEEND,TTH_SYMBOL,TTH_NORMALSIZE,TTH_SYMPT(chr1)); + chr1[0]=214; + sprintf(codes+strlen(codes),"%s
    %s%s%s", + TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND,TTH_CELL3); + } + }else{ + chr1[0]=230; + sprintf(codes,"%s%s%s%s %s%s%s%s
    ",TTH_CELL_R,TTH_OA5,TTH_SMALL, + tth_root_index[tth_root_depth],TTH_SIZEEND, + TTH_SYMBOL,TTH_Large,TTH_SYMPT(chr1)); + chr1[0]=231; + for(j=1;j<(height*.78-2.3);j++){ /* extra sqrt height */ + sprintf(codes+strlen(codes),"%s
    ",TTH_SYMPT(chr1)); + } + chr1[0]=214; + if(tth_istyle&1) sprintf(codes+strlen(codes), + "%s%s\n %s%s%s",TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND, + TTH_OA3,TTH_CELL3); + else sprintf(codes+strlen(codes),"%s%s\n %s
    \n%s", + TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND, + TTH_CELL3); + } + }else{ /* Vanilla */ + if(heightin > 2){ + chr1[0]=230; + sprintf(codes, + "%s\n%s  %s%s
    " + ,TTH_CELL_L,TTH_Large,TTH_SYMBOL,TTH_SYMPT(chr1)); + chr1[0]=250; + for(j=1;j < (0.78*height-2.3);j++){ + sprintf(codes+strlen(codes),"%s %s%s
    \n", + TTH_SYMEND,TTH_SYMBOL,TTH_SYMPT(chr1)); + }/* Accommodate Konqueror nbsp symbol bug */ + chr1[0]=214; + sprintf(codes+strlen(codes),"%s
    %s%s%s", + TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND,TTH_CELL3); + }else{ + chr1[0]=214; + sprintf(codes, + "%s
    %s%s%s%s
    %s%s%s",TTH_CELL_L,TTH_SYMBOL, + TTH_Large,TTH_SYMPT(chr1),TTH_SIZEEND,TTH_SYMEND,TTH_OA4,TTH_CELL3); + } + } + *tth_root_index[tth_root_depth]=0; + tth_root_len[tth_root_depth]=0; + tth_root_depth--; + return; + } + else if(!strcmp(type,".")) { *codes=0; return; } + else { + fprintf(stderr, "Incorrect delimiter::%s::\n",type); + i=-1; + *codes=0; + return; + } + + /* Now using 8 bit codes. */ + if(height>1){ + strcpy(codes,TTH_CELL_L); + strcat(codes,TTH_SYMBOLN); + for (j=1 ; j <= height ; j++){ + if(j == 1) {chr1[0]=top[i]; sprintf(buff,"%s
    ",TTH_SYMPT(chr1));} + else if(j == height) {chr1[0]=bot[i]; sprintf(buff,"%s\n",TTH_SYMPT(chr1));} + else if(j == (height+1)/2) { + chr1[0]=mid[i];sprintf(buff,"%s
    \n",TTH_SYMPT(chr1));} + else {chr1[0]=flat[i]; sprintf(buff,"%s
    ",TTH_SYMPT(chr1));} + strcat(codes,buff); + } + strcat(codes,TTH_SYMEND); + strcat(codes,TTH_CELL3); + if(tth_debug&512) fprintf(stderr,"codes=%s",codes); + }else{ + if(i > 6){ + strcpy(codes,TTH_SYMBOLN); + strcat(codes,TTH_SYMPT(type)); + strcat(codes,TTH_SYMEND); + }else strcpy(codes,type); + } +} + /* end delimit */ + /*start symext*/ +/**************** Construct large, possibly extended, character. */ +void tth_symext(charin,charout) +char *charin,*charout; +{ + int horizmode=1; /* In equations use font tags not divs */ + char chr1[2]={0}; + chr1[0]=242; + if(strlen(charin) == 1){ + if(charin[0]==chr1[0]) { + strcpy(charout,TTH_SYMBOL); + chr1[0]=243;strcat(charout,TTH_SYMPT(chr1)); + strcat(charout,"
    "); + chr1[0]=245;strcat(charout,TTH_SYMPT(chr1)); + strcat(charout,"
    "); + strcat(charout,TTH_SYMEND); + }else { + strcpy(charout,TTH_LARGE); + strcat(charout,TTH_SYMBOL); + strcat(charout,TTH_SYMPT(charin)); + strcat(charout,"
    \n") ; + strcat(charout,TTH_SYMEND); + strcat(charout,TTH_SIZEEND); + } + }else{ /* Longer than one: remove a leading space, quote and terminate. */ + if(*charin==' ')strcpy(charout,charin+1); else strcpy(charout,charin); + if(strstr(charout,TTH_OBR)+strlen(TTH_OBR)!=charout+strlen(charout) + && strstr(charout, /*This mess is really TTH_DIV without eqclose ref*/ + (tth_istyle&1 ? + "\n

    " + :"
    ") + )+strlen( + (tth_istyle&1 ? + "\n

    " + :"
    ") + )!=charout+strlen(charout) + && strstr(charout+strlen(charout)-9,"ble>")==NULL) + strcat(charout,"
    \n"); + } /* Don't add an extra br to a hr or table end. */ +} + /*end symext*/ +/***************** Encode 3-digit integers *************************/ +void tth_encode(code,num) +char *code; +int num; +{ +int i; +sprintf(code,"%03d",num); +for (i=0;i<3;i++) *(code+i)=*(code+i) + 17; +} + +/*******************************************************************/ +/* Find the first brace group in the string "text" and copy it to the + string group, whose maximum length is len, value returned 0 if successful.*/ +int tth_group(group,text,len) +char *text,*group; +int len; +{ + int i,j; + int brace; + i=strspn(text," \t\n"); + /* if(*(text+i)=='{') i++; remove leading brace */ + j=0; + brace=0; /* 1 if removing braces */ + while(i+j < strlen(text)){ + if(*(text+i+j)=='{')brace++; + else if(*(text+i+j)=='}')brace--; + if(brace <= 0) break; + j++; + } + strncpy(group,text+i,len); + if(i+j= 4*multiples[0]){ + strcpy(rm,"A LARGE NUMBER"); + return 1; + } + m=0; + i=num; + if(i < 0){ + i=-i; + *(rm+(m++))='-'; + } + for(j=0;j=0){ + i=i-k; + *(rm+(m++))=codes[j]; + } + if(j=k){ + i=i-(k-p); + *(rm+(m++))=codes[n]; + *(rm+(m++))=codes[j]; + } + } + } + *(rm+(m++))=0; + return 0; +} +/* start b_align */ +/************************************************************************* + Take off the Cell start and the extra bottom from single over construct. + This is used only at the completion of the top or bottom of a fraction. + If cell starts or ends with CELL3, cut off since they are redundant. + If it then ends with OA4 it is a candidate for bottom removal. + If every CELL3 appears as part of the sequence OA4 CELL3, then change + each occurrence to just CELL3. + */ +#define BMAXLEN 1000 +#define NSTS 20 +static int b_align(thestring,tth_debug) + char *thestring; + int tth_debug; +{ + char buff1[BMAXLEN]; + char *chr,*chr1,*chr2; + char *oastarts[NSTS]; + char *oa4null=" "; + int ists=0,i; + + if(tth_debug&8192)fprintf(stderr,"b_align string:%s",thestring); + if(strlen(thestring) > BMAXLEN) return 0; /*Too long*/ + strcpy(buff1,thestring); + if(strstr(thestring,TTH_CELL3) == thestring) { /*Starts with CELL3 */ + strcpy(buff1,thestring+strlen(TTH_CELL3)); + if(tth_debug&2)fprintf(stderr,"String Head cut, "); + } + if(strstr(buff1+strlen(buff1)-strlen(TTH_CELL3),TTH_CELL3)){/*end*/ + *(buff1+strlen(buff1)-strlen(TTH_CELL3))=0; + if(tth_debug&2)fprintf(stderr,"String Tail cut. "); + } + if((oastarts[0]=strstr(buff1+strlen(buff1)-strlen(TTH_OA4),TTH_OA4))){ + chr=buff1; + for (ists=0; ists=0 && i<256) { + strcpy(tth_chuni,(tth_unicode==1 ? tth_sympoint[i] : tth_sympoint2[i])); + }else {i=-1;} + } + if(i==-1){ + j=0; + *tth_chuni=0; + while(strlen(chsym+j)){ + i=(int)*(chsym+j++); + if(i<0)i=i+256; + strcat(tth_chuni,(tth_unicode==1 ? tth_sympoint[i] : tth_sympoint2[i])); + } + } + } + return tth_chuni; +} +/*************************************/ +void tagpurge(eqstr) + char *eqstr; +{ + char *position; + char eqpurge[4*TTH_DLEN]; + int len; +/* fprintf(stderr,"Title Purging %s\n",eqstr); */ + position=eqstr; + *eqpurge=0; + while(position")+1; + } + strcpy(eqstr,eqpurge); +/* fprintf(stderr,"Purged %s\n",eqstr); */ +} + +/**End of TtH**/ + diff --git a/ivoatex/tth_C/tth.gif b/ivoatex/tth_C/tth.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5ee5058b294d1e66a2cdbf1cddfb9670fc3dc5a GIT binary patch literal 7341 zcmeI1cQ{=8pT|cDqnGHSMzkPA#27@0GCCom_k`#zA&BTRV|0mLLqsnj$`}ln7=#dA z^ymyj)X_F~@9sXkclYk@@AvGp``g`n{yfh)f4yGk`+2|5M_oe=Bx7p^FazWR{{9*o zx�&FE4pch=Jrk@9*Gny5uc$_l(_qqlyWqT5oD^n=;zzRpH#Khe2w`hRC*2-`{+FkAoV3Zkt@eBo(L8!M+~? zObN(5;prt!FId~tOMbv#C<-YFMP~>p6`X|UHR*%X#Wl@O15VM=G7;a_Sq$(lvaaj~ zL>u=h2R+x`qfvRn92L!h>l@}A?5^6DF{crq%gV9yuH4NnpQ{HFlFPe-@5xHMq|+4h z(47<6^sEYt_qSa+aWUqZkKiKi$8C1UhIKq7I*pj2K|*LOjX zW3Z&|Cg~4Vs`~KI{#a3SH`>6Z*P^7wl93XhvIl0}AWc^U`m=|F`Q-0E+muRDFQw*| zn--gtzQY`EbrvZnP){M<#Tgm6bdfQgR@D`K!FT-d=!S&M+^g>WM+qUf=$yDi2>AWE z!zjfRZ9-{~j0+LuD!`ct7Bhd_$ZH!P7ogS=g1k)BDUkd?!B)eWXlj;KJJ*&@2;Iv& z)DttYOps#x_qCYV|+rKx}r63g)U>( zeZcV<1DJN4zF2zvNMgbp8iGlbE=XI(@UIg#DZU6bZBj4FPsdE+$QFP$0nr(y&TKW& zX5Rw>#D$}20};ZuNx}}9Wr`G8+_KtReVSKsQ-QcZ86~)dh-FrJQ17%WP%X_o$0}i79!;NzDU>VNTKO%vS2)$)PqEYZoF9ZHyBWj zA?-9|=GknaTEU>J{CMbHA_6@o9`9OtaAbq56&5yS9e#R z7U6c3*Wa`LG@?;>hy)E6+IOA{)3n|^lyIt!&NitR%J8&r zc6^r=g~_0M^7Xx5hOTB{?QDZc?o?MaQwb*5Uh)Ny{X@8`Q}dPh^7WFF8|%Xk`pnPd zH&^aY))-!vqhzfp<_qRbwk?S93{hFNmDM@%Tkq2szt`x6Qly09B^RnDcjj0gQvz*5 zNjPCPVdP>Mn{euTK-&mB(=WB)S@>nE9 zx~MmlW|d^ynbE_#P4`90;~180TeQk`IflTkU5Anc3TtCIo!T|6NK)TnGQV3-2BNj3 z>sfqj97fihGC$3OrE;ec{?L?mjIw7%COe#E;DbNOQeXNe|H8DP`(U!W%9kLFpHEns zkOeb?TnTPxj7o>MDyq-_z+}u%h^VdQ>|}rQTU)$B+r|0WwbRo}8k-P8YRK=5S_r%H zKRE54n|d7-O3o6RI5-R*@c{S3e@;8~E464C51hDu0`_>pzb0K~=;Q@JT+_@s0L&I@ zmQk%403fef*X#q^;zP=4zYU&D;Sn}BC8qVW7=~h5+dd%X0cmA*>;N7tqhjfvGCA|qDgCeiC>E)n$WURiX@`y)r5pv zcScSLQWrDn&nvA{(UbaiVm$4m%qlsP$ks!bgp(8Xjg3spzpKNhKXpYg>lCRbTx}k` z@2Kl|-}BCw6NZxQJpIIxYYtnES4$M$G2K`U#D9GPE;52XY4M{e>nwGEK4H+R5iyL_ zy&=c3Ia)CF)+V+ROKL0B;V`S)()W(S+~zH#f8sRW{hg9g1jYN9Z=p%%<*yz?E>u`+ z5T9+;m2)~x$Ci8f)Lg`~cic%vVg=0$(RkX8xCQ0DI8}t<7OREI{vpG<^p+G_B3>vQ z)ws9(IaBr(wLEfveWc91El$4q5Ifx*cu9Q^b-cUOm#J{8<-be>nvuy66jvfpRv6k_ z^y7p9^8UdZ6#Uqx))@HwI*Vs>)Gmx%s&AyR^sBr**Md;M)ONeyL5BE?c1OBnflmwS zYo7l3un9EC3&<^_Vfs{v)k`BiPv!+~Epku>DPwTrSqj*|z$Z6^H=YV_>XQQ}kv5sK z6yK^d#g9t>Xh6_Bg_pK=AUm7OH06wWj4%fZ{P`r%O<$*CIyS*lttQBeGqXGcGJuLp zj1##?$6j2t@a*VRVJT;A=K!IH!ob(u3EVe*&RLR>`&(QcQ6rqfBX$WXs$*Ikd#d5g zt~}__{=zqf{swmZv78$9`)?9>n*upjTZSJFvta_@*MiN*MXf()F9*cAuG6o|y**1q zUQJ16|N6+VptKW|DAZe_@|4M}5Y3fL23G> zShaZbHUBwYcdNmP?PK4E8x7bQRN(0am0Tlkp%cNb5GU94FGcXP`UC2}Rj{9-m+<2C zzgMvKw8sx)SD&MgP&vB?EFC=hJk!L)Y8H}91@d}^qcqP|A6lC}c!WQQ@YB*i!N}bl zb>fH4+(irhXgu{MSvxvwwdUIGPUUX&(_hUqZUljbj&Lv)bs)qPJ}8(tS)Cpt2q&u^ zeBsIJ1cW2SNuqlcoo&boT!f}@FCZtSrJI=Mo11V7M_IhNnG!qO)=7x@X1+zhbkHfv z0>#6j6^jm7?F*_ARgCkG<(SFd4$4Gbhz;bd=_*zB2m-x0b1Mh{;(6#$qN7oYM=^QI zVLw1u?m!CX?u7J-ND;4ij4FKzVrUZbpFo(alM?c%serKGA&;&~mRdAzTm>hRNrv(H z4zYYT7Lef|kr7_iN}bK>7t!!u9W<4e%5W&HvnwrD_EA-Yj_?eXS~%Ldk^63prKmg! z8_qa*XHvRMZd|7CXgdXWVjTN$lQev?&|V>^87W;3Z=(m^e`m)pZh0#@R+wb7LBfV2 zVGdGcU+dLkEnCp|4W0y z@A~v_xa{^NYhoah2SJ?*h=&$Dum+bNl zg{kOp#x_cpHhPqS)ske43UZB;9hf@EMYx9**hSNbGr~4nYtePpmIq_>jFMh@Df$S~ zTPAb?68n~)8r&n>L{l>uw;t`Ze7s#R(u-i}P2o;<;bRS&jB5~71-o2Og6r0X3biut z#ezR>jFy`>2UE!cT!{&szoqo!>)mJG`<>2m;2S&_a-r-;mS>H7Q$49%9@|03iG+V) z)%gF$d-HFRw;CLgxVU4%QqIF9M$N|k0qD)ixAw!WZl{N?V@SUr+gQ9bZlnoX z#pE7zXK(4Ff~3OsS<~Ly*G!kndo$FBTVD0hyV#cf1KdbMYIkre{!bPDgHQkLuUFwA zBX{XYabS_zn_izc8lHDgExJlqH;ojiF+UG@fw}QgJJwNr?NEnQjqzl#RPCEWBIL7Q zqR(+|9n!7#=T=u@qzM*U0o%`kG5I}<9kCVBJz9=E4!tRJHm%j^wMJirl?^LVQIYGa z{@e(09cC;OL-pli3~#~V0x!yA?Vc-X`%X!FBn_A4Gx79 zl|YTg=H=-4W|jwgxo-zkpS7~-EmT^1=yBY$U+3mVj=2${eYV-au1*PapqErkw}W6q zxsn&~jFqn5v|T%-8&-~g(Z6(F{msoyGD=XAWh)GaPj`@U%ht+XBQEMNm2~R0QzS+C z3MKK@spQgD@?}&A=tXI?FjhqE2^bKIGwY6;>rj$~IIIc0J{P`UWw!WBo}F0p@UFzCKr{!8NuQ!>mW# z^I$cjDQ4;F`d21}h)i1dgQYP$U4evtWDd&+UB-M)Me{G4QbfT-(gIo1^54DZ1g!_o zZtOC)DJ`;!b%5L^%=MkDoy6fWJ4i%Yo6^0;?AmpWO2;{?mDA(B@!=|u)r&wPyx0-* z`yK07r(__m5F&b(?w7|O^XEf>w6mHie{9d%Ii9K(MF0XM6gOff(pVN6iB54FXEd%6g|VfNV(cBh5kpnifI9Ly|y=cFB{Q28evq zD%XA)Q~udC<1Y>3>PEDxz@d_lkzAh0N=i zPBS&0BZ+)lm?5S?Eejk;MyRPhK^EVB0Rxh1nnUt!o1g=l8CgKl$B@@FBv(LWwS2@O zlmeen>7Vk55)bYve}L1!t<2he{$c;5;)!xhe-c*K(LKhX2$HPp1bHZU`>m1eMZq!P zW=sBQW57On{bKJsV6{^JQzk;agu_bC$Rp$L26ghoffSFh zvQk-A?V)79IJ>UyE+@ULGv1zZsZ_<}+Y9GV`pjx*MX5c1j^DVyl1{*!JX&OXH$AYP z)i7ns_D;!z77wmF*HOyJi>>FxdRC5PKUTVZ?vIOSgS)xMYaGX)TI%m)4mJB=;!bnj z#n(BnE43$ zyH4|=Cy$*LB7xp89vD|N&?btF)7B2gcj&kX2iFz9g@PDAE?*MdC1KI!p literal 0 HcmV?d00001 diff --git a/ivoatex/tth_C/tth_manual.html b/ivoatex/tth_C/tth_manual.html new file mode 100644 index 0000000..2a21d3d --- /dev/null +++ b/ivoatex/tth_C/tth_manual.html @@ -0,0 +1,3123 @@ + + + + + + + + + \TtH: a ``\TeX to HTML'' translator. + +

    TTH: a "TEX to HTML" translator.

    +
    TtH icon
    + +
    +Version 4.04
    + +

    +

    + + +
    + +

    Abstract

    +TTH translates TEX documents that use the Plain macro package or +LATEX, into HTML. + It is extremely fast and completely portable. It +produces web documents that are more compact and managable, and +faster-viewing, than those from other converters, because it really +translates the equations, instead of converting them into images. + +
    + +

    Contents

    1  Capabilities
    +    1.1  Plain TEX
    +        1.1.1  Mathematics
    +        1.1.2  Formatting and Macro Support
    +    1.2  LATEX
    +        1.2.1  Environments:
    +        1.2.2  LATEX Commands:
    +    1.3  Special TEX usage for TTH
    +    1.4  Unsupported Commands
    +2  Installation
    +3  Usage
    +4  Messages
    +5  Mathematics
    +    5.1  Equations
    + + +    5.2  In-line Equation Limitations
    +    5.3  Mathematics Layout Style Improvement using CSS
    + + +6  Features dependent on external programs.
    +    6.1  Independence of [La]TEX installation and the -L switch.
    +    6.2  BibTeX bibliographies
    +    6.3  Indexing
    + +        6.3.1  Glossaries.
    +    6.4  Graphics Inclusion: epsfbox/includegraphics
    +    6.5  Picture Environments
    +7  Tabular Environment or Halign for Tables
    +    7.1  Tabular
    +    7.2  Halign
    +    7.3  Longtables
    +8  Boxes, Dimensions, and fills
    +TEX command definitions and other extensions
    +    9.1  Delimited-parameter macros and Conditionals
    +    9.2  Macro- and Style-file inclusion
    +    9.3  Layout to include arguments of unknown commands
    +    9.4  Restrictions on redefinition of internal commands
    +        9.4.1  Footnotes
    +10  Color
    +    10.1  LATEX Color
    +    10.2  Plain Color
    +    10.3  Limitations
    +11  Producing output split into different files.
    +    11.1  Overview
    +    11.2  Navigation Controls at File Top and Tail
    +    11.3  Special Precautions when Splitting Output
    +        11.3.1  Floats such as figures or tables
    +        11.3.2  Multiple Bibliographies
    +12  HTML and output
    +    12.1  Formal HTML validation
    +    12.2  HTML Styles
    +13  Browser and Server Problems
    +    13.1  Accessing Symbol Fonts: Overview
    +    13.2  Accessing Symbol Fonts: Details
    +    13.3  Printing
    +    13.4  Netscape/Mozilla Composer
    +    13.5  Other Browser Bugs
    +    13.6  Web server problems
    +14  Code Critique
    +15  License
    +16  Acknowledgements
    +A  Appendix: Non-Standard TEX Macros
    +B  Appendix: Frequently Asked Questions
    +    B.1  Building and Running TTH
    + + + +    B.2  [La]TeX constructs TTH does not seem to recognize
    + + + + + + + + + +    B.3  HTML output that does not satisfy
    + + + + + + + + + + + + +    B.4  How to write TEX designed for Web publishing
    + + + + + + + +    B.5  Formerly Frequently Asked Now Rarely Asked
    + + + +Index
    + +
    +

    +1  Capabilities

    + +
    +

    +1.1  Plain TEX

    + +
    +

    +1.1.1  Mathematics

    + +
    +Almost all of TEX's mathematics is supported with the exception of a +few obscure symbols that are absent from the fonts normally available +to browsers. Support includes, for example, in-line equations with +subscripts and superscripts, display equations with built-up +fractions, over accents, large delimiters, operators with limits; +matrix, pmatrix, cases, [but not bordermatrix]; over/underbrace [but +using a rule, not a brace]. + +
    +

    +1.1.2  Formatting and Macro Support

    + +
    + +
      +
    • Font styles: \it, \bf, \sl, \uppercase, everywhere, +\rm in most situations +1. +
      +
    • + +
    • Accented characters written like \"o or \'{e}. +
      +
    • + +
    • Guess the intent of font definitions, i.e. \font commands +[optionally, remove contruct]. +
      +
    • + +
    • Macro definitions that are global: \gdef, \xdef, +\global\def, \global\edef; or local to the +current group: \def, \edef. +
      +
    • + +
    • Definitions with delimited arguments. +
      +
    • + +
    • Input of files [see 9.2]. +
      +
    • + +
    • Newcount, number, advance and counter setting [global counter setting +only]. + + + +
      +
    • + +
    • Conditionals: iftrue, +iffalse, +ifnum, +ifodd, +ifcase, +if [for defined commands and plain characters, not some internals] +2, ifx [only for +defined commands and counters; internals appear undefined], ifvmode, +ifmmode, newif. +
      +
    • + +
    • Centerline, beginsection, item, itemitem, obeylines; hang, hangindent, +narrower [for entire paragraphs, hangafter ignored]. + Headline is made +into a title, footnote{}{}. Comments: removed. +
      +
    • + +
    • Tables: halign [uses border style if the template contains +vrule.]. Settabs, \+. +
      +
    • + +
    • Simple uses of \hbox,\vbox and \hsize to align text and +make boxes with restricted widths, but these are discouraged. In +setting the width of a vbox, the value of hsize should be once only, +immediately at the beginning of the vbox. +
      +
    • +
    + +
    +

    +1.2  LATEX

    +LATEX support includes essentially all mathematics plus the following + +
    +

    +1.2.1  Environments:

    + em, verbatim, center, flushright, verse, quotation, quote, itemize, +enumerate, description, list [treated as if description], figure, +table, tabular[*,x], equation, displaymath, eqnarray, math, array [not +generally in in-line equations], thebibliography, [raw]html, +index [as description], minipage [ignoring optional argument], +longtable [but see 7.3]. + +
    +

    +1.2.2  LATEX Commands:

    + [re]newcommand, newenvironment, chapter, section, subsection, +subsubsection, caption, label, ref, pageref [no number], emph, textit, +texttt, textbf, centering, raggedleft, includegraphics, [e]psfig, +title, author, date [maketitle ignored: title etc inserted when +defined], lefteqn, frac, tableofcontents, input, include [as input, +includeonly ignored], textcolor, color, footnote +[ignoring optional arg], cite, bibitem, bibliography, tiny +... normalsize ... Huge, newcounter, setcounter, addtocounter, value +[inside set or addto counter], arabic, the, stepcounter, newline, +verb[*] [can't use @ as separator], bfseries, itshape, ttfamily, +textsc, ensuremath, listoftables, listoffigures, newtheorem [no +optional arguments permitted], today, printindex, boldmath, +unboldmath, newfont, thanks, makeindex, index, @addtoreset, +verbatiminput, paragraph, subparagraph, url, makebox, framebox, mbox, +fbox, parbox [ignoring optional argument], definecolor, colorbox, +fcolorbox [not in equations], pagecolor [discouraged], savebox, sbox, +usebox. + +
    + These cover most of the vital LATEX constructs. Internal hypertext +cross-references are automatically generated (e.g. by ref and +tableofcontents) provided LATEX has previously been run on the +document and the appropriate command-line switch is used. + +
    +

    +1.3  Special TEX usage for TTH

    + A few non-standard TEX commands are supported as follows +3. See +also 6.4. + +
    +\epsfbox{file.[e]ps} Puts in an anchor called "Figure" linked to 
    +    file.[e]ps (default), or alternatively calls user-supplied script 
    +    to convert the [e]ps file to a gif image and optionally inline it.  
    +\special{html:"tags"} inserts ``tags'' into the HTML e.g. for images etc.  
    +\href{reference}{anchor} highlights ``anchor'' with href=``reference''.
    +\url{URL} like \href but with URL providing both reference and anchor.
    +\begin{[raw]html} ... \end{[raw]html} environment passed direct to output.
    +\tthtensor Subscripts and superscripts immediately following, on simple
    +    characters, are stacked up in displaystyle equations, not staggered. 
    +\tthdump{...} The group is omitted by tth. Define \tthdump as a nop for TeX.
    +%%tth:... The rest of the comment line is passed to tth (not TeX) for parsing.
    +
    +
    + +
    +

    +1.4  Unsupported Commands

    + +
    + When TTH encounters TEX constructs that it cannot handle either +because there is no HTML equivalent, or because it is not clever +enough, it tries to remove the mess they would otherwise cause in the +HTML code, generally giving a warning of the action if it is not sure +what it is doing. The following are +not translated. + +
    + +
    + \magnification \magstep etc : Removes the whole construct.
    + Some boxes in equations.
    + \raisebox, \lowerbox and similar usages.
    + \accent, \mathaccent. 
    +
    +
    + +
    +

    +2  Installation

    + +
    +The source for TTH is flex code which is processed to produce a C program +tth.c which comprises the distribution. This file is compiled by + +
    +	gcc -o tth tth.c
    +
    +
    + or whatever C compiler you are using. Compilation takes +typically less than a minute on a modern PC. + +
    +The executable should then be copied to whatever directory you want +(preferably on your path of course). That's all! + +
    +Alternatively you may be able to obtain a precompiled executable from +wherever you accessed this file. The Wind@ws executable comes with a +batch file for installation. Just run it by the command "install". + +
    +

    +3  Usage

    + +
    + Command line is as +follows. The order of the parts is irrelevant. Switches (preceded by a +minus sign -) can appear anywhere on the line. Square brackets should +not be entered, they simply indicate optional parts of the command +line. + + + + +
    +Either filter style (the < and > are file redirection operators):
    +  tth [-a -c -d ... ] <file.tex [>file.html] [2>err]
    +
    +Or, specifying the input file as an argument (output is then implied):
    +  tth [-a -c -d ... ] file[.tex] [2>err]
    +
    +Switches:
    +   -a automatic picture environment conversion using latex2gif (default omit). 
    +   -c prefix header "Content-type: text/HTML" (for direct web serving).
    +   -d disable delimited definitions.
    +   -e? epsfbox handling: -e1 convert figure to gif using user-supplied ps2gif.
    +       -e2 convert and include inline. -e0 (default) no conversion, just ref. 
    +   -f? sets the depth of grouping to which fractions are constructed built-up
    +    f5 (default) allows five levels built-up, f0 none, f9 lots. 
    +   -g don't guess an HTML equivalent for font definitions, just remove.
    +   -h print help. -? print usage.
    +   -i use italic as default math font.
    +   -Lfile  tells tth the base file (no extension) for LaTeX auxiliary input, 
    +      enables LaTeX commands (e.g. \frac) without a \documentclass line.
    +   -n? HTML title format control. 0 raw. 1 expand macros. 2 expand equations.
    +   -ppath specify additional directories (path) to search for input files.
    +      -pNULL is a special switch that disables all \input or \includes.
    +   -r output raw HTML (no preamble or postlude) for inclusion in other HTML.
    +	-r2 omit just the time stamp. -r1 is equivalent to -r.
    +   -t display built-up items in textstyle equations (default in-line).
    +   -u? unicode character encoding. Default 2 (unicode 3.2). 0 (iso8859-1)
    +   -v give verbose commentary. 
    +   -w? html writing style: 0 no title construction. 1 use head/body. 2 XHTML.
    +   -y? equation style: bit 1 compress vertically; bit 2 inline overaccents.
    +   -xmakeindx  specify a non-standard makeindex command line.
    +
    +
    + + + +With no arguments other than switches starting with a "-", +the program is a filter, i.e. it reads from stdin and writes to stdout. +In addition, diagnostic messages concerning its detection of unknown +or untranslated constructs are sent to stderr. If these standard +channels are not redirected using < and >, then the +input is read from the command line, and both output and error +messages are printed on the screen. + +
    +If a non-switch argument is present, it is assumed to be the name of +the input file. The file must have extension ".tex" but the extension +may be omitted. The output file is then constructed from the argument +by removing the extension ".tex" if specified, and adding ".html". + +
    +TTH is extremely fast in default mode on any reasonable hardware. +Conversion of even large TEX files should be a matter of a second or +two. +This makes it possible to use TTH in a CGI script to output HTML +directly from TEX source if desired; (stderr may then need to be redirected.) + +
    +

    +4  Messages

    + +
    +Messages about TTH's state and its assessment of the TEX it is +translating are output always to the stderr stream, which +normally displays on the console, but under Un*x type systems can be +redirected to a file if necessary. Normally these messages are one of +three types: + +
    + +

    Error Messages

    +These start **** Error: and indicate some improper condition or +error either in TTH or in the TEX of the file being +translated. Some errors are fatal and cause TTH to stop. On others +it will continue, but the TEX file probably should be corrected in +order to get correct output. + +
    + +

    Warnings

    +These start **** but without reporting Error. They are +messages by which TTH indicates aspects of the translation process +that may not be fully satisfactory, usually because of known limitations, +but which quite likely will not prevent the translated file from +displaying correctly, and so do not necessarily require +intervention. Examples include the use of some dimensions, glue, or similar +TEX commands that have no HTML equivalent. + +
    + +

    Informational and external

    +Lines with no **** are either informational, meaning the state +of the translation is not considered abnormal, or else they may come +from external programs (e.g. makeindex), over which TTH has no +control. + +
    +The switch -v causes more verbose messages to be output, which +may be helpful for understanding why errors are reported. A higher +level of verbosity -V can be invoked, but is intended primarily +for internal debugging of TTH and will rarely be comprehensible! + +
    +The presumption that lies behind TTH message design is that the file +being translated has been debugged using TEX or LATEX to remove +syntax errors. TTH is not good at understanding or reporting TEX syntax errors and counts only the lines in the main TEX file, not +those in files read by \input. Therefore error reporting by +TTH does not reach even the low standard of clarity set by TEX and +LATEX error messages. Although TEX files can be debugged using +TTH alone, since it is very fast, the process is not recommended for +inexpert TEX users. Moreover, since TTH understands both TEX and +LATEX simultaneously, it can parse some files that TEX or LATEX  +separately cannot. + +
    +

    +5  Mathematics

    + +
    +

    +5.1  Equations

    + +
    + Equations are translated internally into HTML. TTH uses HTML tables + for layout of built-up fractions in display equations. It also uses + the HTML tag < font face="symbol" > to render Greek and large + delimiters etc. Untranslatable TEX math tokens are inserted + verbatim. + +
    +The internal approach to equation translation is a major area where +TTH departs from the philosophy of LATEX2html and its +derivatives. TTH  +does not use any images to try to represent hard-to-translate +constructs like equations. Instead it uses the native ability of HTML +to the fullest in providing a semantically correct rendering of the +equation. The aesthetic qualities obtained are in practice no worse on +average than LATEX2html's inlined images, which are generally slightly +misaligned and of uncertain scaling relative to the text. Some +limitations in the HTML code are inevitable, of course, but one ends +up with a compact representation that can be rendered directly by the +browser without the visitor having to download any additional helper +code (e.g. Java equation renderer). + +
    + +The option [-i]   to TTH makes italic the default +font within equations, and thus the style more TEX-like. The italic +font appearance in browsers is not as satisfactory as TEX's math +italic, so for many documents roman looks better. + +
    + +Spacing   in equations is handled slightly differently by TTH than +by TEX. The reason is that most browsers use fonts that will crowd the +characters horizontally too close for comfort in many cases (for +example: M||/2). Also, built-up HTML equations are more +spread out vertically than in TEX. Therefore TTH equations look better +if spaces are added between some characters. So TTH  +does not remove spaces in the original TEX file between characters in +equations. The author is thus able to control this detail of layout in +the HTML without messing up their TEX file - since TEX will ignore +any spaces inserted. Legacy TEX code that contains a lot of spurious +whitespace (ignored by TEX) may, as a result, occasionally become too +spread-out when translated. + +
    +

    +5.2  In-line Equation Limitations

    + +
    + Some TEX capabilities are +extremely difficult or impossible to translate into HTML, because of +browser limitations, and are best avoided if possible. Arrays or +matrices or built-up fractions in in-line equations cannot be +properly supported because tables cannot be placed in-line in HTML. +TTH output often will be strangely disjointed. + + + + + As an option, TTH provides switch -t to convert inline +equations that use built-up constructs into a sort of half display, +half in-line equation. Each time a new in-line equation is encountered +[$ ... $ or \( ... \)] that needs to be built up, an +HTML table that starts a new line is begun, and the text then flows on +afterwards. For example +
    1
    2 + n

    +This option gives a slightly strange layout for simple equations +but is a big improvement for some situations, e.g. in-line matrices. + + +
    +Likewise most over- and under-accents, and indeed anything that +requires specific placement on the page other than simple subscript or +superscript and underline, cannot be rendered in-line in plain +HTML, although TTH will render them well in +displaystyle. These latter constructs are nevertheless commonly +used in in-line TEX. By default TTH renders these constructs in a +relatively intuitive way. For example $\hat{a}$ is rendered +a. The result is rarely elegant but it is +unambiguous. + +
    +

    +5.3  Mathematics Layout Style Improvement using CSS

    + + + + +
    +Some of the mathematics rendering limitations just mentioned can be + overcome using Cascading Style Sheets. These are an extension of HTML + that allows finer control over the layout. Most modern browsers + support some fraction of the CSS specification, but historically its + implementation has been slow and buggy. So it used to be awkward and + dangerous to adopt CSS for authoring because of never knowing whether + one was producing HTML that would simply be broken on a particular + browser. Moreover using style sheets slows down the browser's + rendering. + +
    + +Vertical Compression   of the otherwise sometimes rather +spread-out mathematics is implemented on TTH using a simple built-in +style sheet to reduce unwanted vertical space. The implementation +works around the different idiosyncrasies of the browsers' +implementations as well as it can, and is designed to degrade +gracefully in browsers without CSS support or with the support +switched off. This compression can be controlled by the switch -y, +which permits a numeric argument, e.g. -y1. Compression is on +by default, which corresponds to the first bit of the -y switch value +being 1 (in other words the value is odd). It may be switched off by +using the switch -y with an even numeric argument (or none at +all), e.g. -y2 or -y. + +
    + +In-line over-accents   can be rendered explicitly using the +relative positioning available in CSS2. The result is visually + preferable to the the indicative base rendering. However, it does not + fall-back gracefully, and the application of over accents to + multiple-character groups produces a poorly aligned result. + Nevertheless, since TTH version 3.87 it is used as default. It can + be turned off using the -y switch with the second bit (2) zeroed + in the numeric argument. For example -y1 or -y0 turns + it off. + +
    +

    +6  Features dependent on external programs.

    + +
    +

    +6.1  Independence of [La]TEX installation and the -L switch.

    + + + A major difference +between TTH and LaTeX2HTML is that TTH does not call the LATEX or tex programs at all by default, and is not specifically dependent +upon these, or indeed any other (e.g. PERL), programs being installed +on the translating system. Its portability is therefore virtually +universal. + +
    +Forward references in LATEX are handled by multiple passes that write +auxiliary files. TTH does only a single pass through the source. If +you want TTH to use LATEX constructs (e.g. tableofcontents, +bibliographic commands, etc.) that depend on auxiliary files, then +you do need to run LATEX on the code so that these files are +generated. Alternatively, the TTH switch +-a +causes TTH automatically to attempt to run latex on the file, +if no auxiliary file .aux exists. + +
    +When run specifying a filename on the command line as a non-switch +argument, TTH constructs the name of the expected auxiliary LATEX files in the usual way and looks for them in the same directory as the +file. +If you are using TTH as a filter, you must tell TTH, using the +switch -Lfilename, the base file name of these auxiliary files +(which is the name of the original file omitting the extension). If +TTH cannot find the relevant auxiliary file because you didn't run +LATEX and generate the files or didn't include the switch, then it +will omit the construct and warn you. +Forward references via ref will not work if the .aux file is +unavailable, but backward references will. The -L switch with no +filename may be used to tell TTH that the document being translated +is to be interpreted as a LATEX file even though it lacks the usual +LATEXheader commands. This may be useful for translating single +equations that (unwisely) use the \frac command. + +
    +

    +6.2  BibTeX bibliographies +

    + +
    +TTH supports bibliographies that are created by hand using +\begin{thebibliography} etc. Such bibliographies do not require +anything beyond the .aux file. TTH also supports +bibliographies created using BibTEX from a biblography database. The +filename.bbl file is input at the correct place in the +document. However, this filename.bbl is not created +automatically by LATEX. In addition to running LATEX on the source +file to create the auxiliary file, you must also execute +bibtex filename in the same directory, to create the +filename.bbl file, and then run LATEX again to get the +references right. (This is, of course, no more than the standard +procedure for using BibTEX with LATEX but it must be done if you +want TTH to get your bibliography right). If you don't create the +.bbl file, or if you create it somewhere else that TTH does not +search, then naturally TTH won't find it. Since the BibTEX process +is relatively tortuous, TTH offers an alternative. Using the -a +switch with TTH will cause it +to attempt to generate the required .bbl file automatically using +BibTEX and LATEX. + +
    +There are many different styles for bibliographies and a large number +of different LATEX extension packages has grown up to implement +them, which TTH does not support. More recently, a significant +rationalization of the situation has been achieved by the package +natbib. TTH has rudimentary support built in for its +commands \citep and citet in the default author-date +form without a second optional argument. A style file for +natbib is distributed with TTHgold which makes it possible to +accommodate most of its more useful styles and commands and easily switch from +author-date citation to numeric citation. + +
    +

    +6.3  Indexing

    + +
    +TTH can make an extremely useful hyperlinked index using LATEX automatic indexing entries. But indexing an HTML document is different +from indexing a printed document, because a printed index refers to +page numbers, which have no meaning in HTML because there are no page +breaks. TTH indexes LATEXdocuments by section number rather +than by page; assuming, of course, that they have been prepared with +index entries in the standard LATEX fashion. + +
    + When processing a LATEX file that contains the +\makeindex command in its preamble, TTH will construct an +appropriately cross-hyperlinked index that will be input when the +command \printindex is encountered, which must be after +all the index references \index{ ... } in the document. TTH does this independently of LATEX, but not of the subsidiary program +makeindex that is normally used with LATEX to produce the +final index. TTH creates its index entries in a file with extension +.tid (Tth InDex). Unfortunately the standard form that +makeindex expects for compound numbering of its sections or +pages is "1-2", separated by a dash. TtH changes that to "1.2" +using a point, and has to output a style file filename.mst , +where filename is the base filename of the latex file being +processed, to enable makeindex to handle this form. When the +\printindex command is encountered, TTH closes the .tid file and +runs the command + +
    +makeindex -o filename.tin filename.tid
    +
    +
    +on it. This creates an output file filename.tin, and +then TTH reads that file in as its index. If, instead of creating +an index file during TTH processing, one wants to use with TTH an +index file already created, all that is needed is to remove the +\makeindex command from the top of the LATEX source and copy +the existing .ind file to a .tin file that will be input by +\printindex. No indexing files will be written or deleted +without a \makeindex command in the document. + +
    +The \makeindex command, if present, will also cause TTH to add + +a linked entry called "Index" +to the end of any table of contents. This entry is a highly desirable +feature for an HTML file, but if there is no \printindex +command at the end of the document, the index will not exist, so the +reference will be non-existent. + +
    +On some operating systems with file name length restrictions, the +makeindex program is called makeindx. Therefore a TTH switch is +provided: -xcommandline, which substitutes commandline +for the default call makeindex. Therefore, -xmakeindx +will switch to the correct program name on one of these limited +operating systems. This switch also allows additional parameters or +switches to be passed to makeindex. If the -xcommandline +contains any spaces, then it is interpreted as the complete +command-line (not just the first word of the command-line), in which +the base filename may be referenced up to 3 times as "%s". For +example +-x"makeindex -s style.sty -o %s.tin %s.tid" will handle the +index using a different style file "style.sty". +If you don't have the makeindex program, you can't create indexes with +TTH or LATEX, except by hand. + +
    +All of the index file processing naturally requires that TTH have +write permission for the directory in which the original LATEX file +(specified by the -L switch) resides. + +
    + +Layout of the index   can be controlled with the switch +-j with an immediately following argument that specifies the +minimum number of lines in a column before the column will be +terminated. Because index entries are usually short, books almost +always adopt a two-column format for the index. TTH will also do so +by default, but since an HTML document has no page breaks, the question +arises how long the individual columns are allowed to be. The default +(no switch) is equivalent to -j20. A switch -j with no +argument is equivalent to specifying a very large number of lines, +with the result that only one column is used. A switch -j1 +will cause the columns to break at every indexspace, that is generally +at every new letter, so letter lists will alternate between columns. + +
    +

    +6.3.1  Glossaries.

    LATEX has a parallel set of commands for +glossary construction, replacing "index" with "glossary". +However, there is no \printglossary command and the .glo file +that LATEX produces cannot be handled by the makeindex program +without a specific style file being defined. Therefore glossary +entries are highly specialized and rarely used. TTH does not support +a glossary separate from the index. Instead it simply defines the +command as \def\glossary{\index} with the result that glossary +entries are placed in the index. It may be necessary to add +\makeindex and \printindex commands to make TTH handle +the glossary entries for a file that has only a \makeglossary +command. + +
    +

    +6.4  Graphics Inclusion: epsfbox/includegraphics

    + + +The standard way in plain TEX to include a graphic is using the epsf +macros. The work is done by \epsfbox{file.[e]ps} which +TTH can parse. By default TTH produces a simple link to such a +postscript file, or indeed any format file. + +
    + Optionally TTH can use a more appropriate +graphics format, possibly using a user-supplied (script or) program +called ps2png or ps2gif to convert the postscript file +to a png4 or gif +file, "file.png" or "file.gif". ["file" is the name of the +original postscript file without the extension and png or gif are +interchangeable as far as matters for this +description]. When the switch -e1 or -e2 is specified, if +"file.png", "file.gif" or "file.jpg" already exists in the same +directory as implied by the reference to "file.ps" then no +conversion is done and the file found is used instead. That graphics +file is then automatically either linked (-e1) or inlined (-e2) in the +document. If no such file is found, TTH tries to find a postscript +file with extension that starts either .ps or .eps and convert it, +first using ps2png then, if unsuccessful, ps2gif. Linux +(un*x) ps2png and ps2gif scripts using Ghostscript and +the netpbm utilities for this purpose are included with the +distribution. A comparable batch program can be constructed to work +under other operating systems +5 + or else the conversion can be done by +hand. Naturally you need these utility programs or their equivalent on +your system to do the conversion. The calling command-line for +whatever ps2png (or gif) is supplied must be of the form: + +
    ps2png inputfile.ext outputfile.ext
    +
    + The program must +have permission to write the outputfile (file.png) in the directory in +which the file.ps resides. + +
    +By popular request, a third graphics option -e3 for generating icons is +now available. If no previously translated graphics file, +e.g. "file.png" exists, TTH passes to ps2gif (or png) a third +argument consisting of the name, "file_icon.gif", of an icon file. +ps2gif is expected to create it from the same postscript file. In +other words the call becomes + +
    ps2gif file.eps file.gif file_icon.gif
    +
    + This third argument is then the file that is +inlined, while the larger gif file named "file.gif" is linked such +that clicking on the icon displays the full-size gif file. The icon +will not be created if "file.gif" already exists, because +ps2gif will not then be called. + +
    +The LATEX2e command \includegraphics{...} and the older +\[e]psfig{file=...} are treated the same as \epsfbox. +Their optional arguments are ignored. + +
    +If the extension is omitted for the graphics file specification, then +.ps or .eps is tried. If the extension of the file specified is +non-null and not .ps or .eps, no conversion is done but the file +is referenced or in-lined as an image. In effect, then, TTH supports +postscript, encapsulated postscript, gif, and jpeg, plus any future +formats that become supported by common browsers. However, LATEX does +not support these other formats, so it will give an error message if +it can't find a postscript file, unless you specify the bounding box, +thus preventing LATEX interrogating the file. + +
    +

    +6.5  Picture Environments

    + + +The picture environment cannot be translated to HTML. Pictures using +the built-in LATEX commands must be converted to a graphics file such +as a gif, and then included using \includegraphics, see +6.4. The switch -a, + causes TTH to attempt automatic +picture conversion using a user-supplied routine latex2gif. +When this switch is used, TTH outputs the picture to a file picn.tex, +where n is the number of the picture (if there does not already exist +a file picn.gif). It then calls the command latex2gif picn +which must be a command (e.g. a script using LATEX, dvips, etc.) on +the system, which converts the file picn.tex to a file picn.gif. An +example linux script is included in the distribution but this +conversion script is dependent on the system and so is entirely the +user's responsibility. For viewing the results, the files picn.gif +must be accessible to the browser in the same directory as the HTML +files, then they will be included in-line. It is impossible for a +picture environment to be converted in this automatic fashion if it +contains macros defined somewhere else in the original LATEX file, +because the macros will then be undefined in the picture file that is +extracted, and LATEX will be stumped. In that case, manual +intervention is necessary. + +
    +

    +7  Tabular Environment or Halign for Tables

    + + +The tabular environment is the recommended way to construct tables in +LATEX. In plain TEX, although \settabs etc. is supported, the +\halign{ ... } command is recommended. (The LATEX tabbing +environment is not supported by TTH because it is antithetical +to the spirit of HTML document description, and because it is an +extremely complicated construct. If you are lucky, TTH will not mess +up your tabbing environment too much, but it makes no attempt to +interpret it properly.) Considerable effort has been expended to +translate the tabular environment, including interpreting the +alignment argument of the environment, into as near an equivalent in +HTML as reasonably achievable6. However, the limitations of HTML tables impose +the following limitations on the translation. + +
    +

    +7.1  Tabular

    + +
      +
    • HTML tables have either all cells bordered with rules or +none. TTH therefore decides whether to use a bordered table by +examining the first character of the alignment argument. If is it +|, then the table is bordered, otherwise not. +
      +
    • + +
    • HTML tables are not capable of simultaneously aligning part of a +cell's contents to the right and part to the left, which is +automatically done by LATEX on some occasions when @-strings are used. +For example if the alignment argument is |l@{~units}|r|, LATEX +will align "units" to the right of the first cell. TTH can't. In +some unbordered cases TTH will try for the same effect by putting the +closing @-string in the following cell. This won't always give a good +result. +
      +
    • + +
    • @-strings and *{num} code repetition are not permitted in the +alignment argument to \multicolumn, but they are in the main +tabular alignment argument. +
      +
    • +
    + +
    +

    +7.2  Halign

    + +
    + +
      +
    • TTH decides whether to use a bordered table in Plain TEX +by examining the entire halign template (i.e. the material up to the +first \cr of the halign). If it contains the command +\vrule TTH makes the table bordered, otherwise not. +
      +
    • + +
    • TTH decides on the alignment of the cell contents by looking for +\hfill or \hss commands in the cell template. The +default is to left-align the cell. If one of these spacing commands is present +in the template prior to the # for this cell, then the cell +will be right-aligned unless such a command also appears after the +#, in which case the cell is centered. Again HTML is not capable of +applying different alignments to different parts of a cell. So results may +sometimes be different from TEX. However, if most of this paragraph +sounds totally obscure to you, don't worry; TTH will probably do the +right thing. +
      +
    • + +
    • The \multispan command is supported, giving a centered +multicolumn cell, and \omit is treated as \multispan1. +However, \span is currently not supported. +
      +
    • + +
    • In TEX each cell of an halign table resides within its own + implied brace group. Because TTH does not implement this implied + group, errors can arise. Even HTML table errors that lead to parse + errors with XML parsers can arise when the cells have boxes in them. + If this happens, the fix is to put an explicit brace group round the + offending cell in the template line like this example: + +
      +  \halign{#\quad\hfil &{\vbox{\hsize\0.5\hsize #}}\cr
      +    1 & V-box material\cr
      +    }
      +
      +
      +
      +
    • +
    + +
    +

    +7.3  Longtables

    + + + +
    + +
      +
    • The longtable environment is supported, but it is always centered. It +is converted into a standard tabular inside a table environment +because there is no need to accommodate page breaks (the main point of +longtable) in HTML. +
      +
    • + +
    • The caption (including caption*) command is +translated correctly but set as part of the HTML table; so, if the +caption is longer than the longest row of the table, it will cause the +whole table width to expand, possibly up to 100% of the +line-width. +
      +
    • + +
    • The commands endhead, endfirsthead, endfoot, endlastfoot, +are ignored, but their immediately preceding commands are therefore +inserted into the table. That is probably not desirable for the foot +commands. Longtable footers are not translated into footers. +
      +
    • + +
    • The \kill command is ignored. Its text is spuriously inserted. +
      +
    • +
    + +
    +

    +8  Boxes, Dimensions, and fills

    + +
    +Boxes, dimensions, and fills are rarely appropriate for web documents +because they imply an attempt to control the fine details of +layout. Browsers make their own choices about layout of a document in +HTML. For example they make the lines fit whatever size of window +happens to be present. This dynamic formatting makes mincemeat of most +detailed TEX layout. In fact, if you want your readers to see +exactly what you see, that is impossible with HTML, and you should use +some other representation of your document. + +
    +There are nevertheless many cases when a TEX document containing +boxes, dimensions, and fills needs to be translated. Limited +translation of these constructs is supported. They are translated, +where appropriate and possible, into HTML tables with widths and +vertical skips estimated to give a reasonable result on a browser. It +must be stressed that accurate translation is inherently impossible +because browsers deal in pixel sizes and default font sizes that vary +and are out of the control of the publisher. + +
    +The types of box usage that translate quite well are when things like + +
    +\hbox to \hsize{The left \hfil the Right}
    +\vbox{\hsize=2in Matter to be set in horizontal mode to a 
    +  limited hsize}
    +\makebox[0.6\hsize][r]{Stuff to the right of the makebox.}
    +\framebox{check}
    +
    +
    +are on a line by themselves. +You get: + +
    +
    +The left the Right
    +
    + Matter to be set in horizontal mode to a limited hsize +
    +
    +
    +
    +
    +Stuff to the right of the makebox.
    +
    +check
    +Usages that translate poorly tend to be boxes within a line of +text. That is because current HTML table implementations have to start +a new line unless they happen to be adjacent to a table already. Thus +an hbox in a line will give a line break that you might not have +wanted. This behaviour is really a bug in the browsers, but we are +currently stuck with it. The behaviour of HTML tables is buggy +[see 13.5] when their alignment is specified, which means that +strange results are likely if more than one box on a line is being +set. Boxes in equations are troublesome. The only type that is +reasonably supported is \mbox which is often used in LATEX for +introducing text inside equations. + +
    +Negative skips are not supported at all. + +
    +The only important dimension parameter that is currently interpreted +is \hsize. It is what controls the width of a vbox. It can be +reset using the plain TEX format e.g. \hsize = 3in or scaled +or advanced e.g. \hsize=0.6\hsize but only within a group. It +makes no sense for the HTML file to try to specify the width of the +line at the outermost level. That is the browser's business. + +
    +New dimensions can be defined, set, advanced, scaled and used to set +other dimensions including \hsize. + +
    +TTH trys valiantly to mimic the sort of text alignment that is +obtained using glue such as \hfil and \hss, provided it +is inside a box. However, the alignment algorithm of HTML tables makes +it impossible to obtain fills with exactly equal sizes. So don't be +surprised if some results looks disagreeable. Moreover, TTH will +completely ignore the glue outside an hbox, and it doesn't know +the difference between \hfil and \hfill, etc. + +
    +

    +9  TEX command definitions and other extensions

    + +
    +

    +9.1  Delimited-parameter macros and +Conditionals

    + +
    +Delimited parameter definitions are fully supported. However, macros +in some style files are written in such a way that the recognition of +the delimited parameter depends on other TEX behaviour +(e.g. dimensions) that are not supported or handled differently by +TTH. In such cases it is all too possible for the delimited parameter +not to be matched, resulting in a runaway argument situation. +Thus, delimited parameter macros are especially dangerous when using +TTH, or indeed any process other than TEX itself. (And they are +never exactly "safe TEX"). The recognition of these definitions can +be disabled using the -d switch, in which case the definitions are +simply discarded. + +
    +Conditionals such as \if, \ifnum and so on are +supported, as listed above (1.1.2). In TTH they have one +syntax limitation. Further `if' commands are not permitted in, or as part of +a command expanded in, the tokens, characters, or numbers being +tested. Thus, an example of truly perverse usage such as
    +\ifnum 1=\if ab 1\else 2\fi  True \else False \fi
    will likely +break. Nested `if' constructs are permitted in the conditional +text, however, so
    +\ifnum 1=1 True\if ab -true\else -false\fi \else False \fi
    is fine. +Because TTH does not internally resemble TEX, whereas the result of +conditionals such as \if and \ifx may depend on internal +representations, there cannot be 100% compatibility of such tests at +the lowest level. Still, tests on externally defined commands ought +generally to give correct results. When authoring documents in TEX one +is generally well advised to avoid conditionals. + +
    +Although TTH supports a remarkably complete subset of LATEX, it does +not support all of the complicated primitive details of +TEX, partly because that would be unnecessary. +For example, practically any TEX that redefines category codes +(other than @ which TTH treats universally as a letter) will break because +TTH knows nothing about the concept of category codes. (If you don't +know much either, about this unfortunate aspect of TEX, join the vast +majority of TEX users!) A related example is that TTH expects +only letters or @ in user-defined command names, not punctuation +characters etc. + +
    +

    +9.2  Macro- and Style-file +inclusion

    + + +Macro definitions are fully supported by TTH. However, special macro +packages designed for a specific layout of journal or conference, for +example, often use unsupported constructs such as catcode changes. It +may then be inadvisable to use the macro package. TTH does not +recognize the \usepackage command by default because the +LATEX macros that are input by this command almost always contain +catcode changes or other usages incompatible with TTH. That is +another reason why TTH does not normally have directory paths +defined the same as TEX. If a macro package is on the TEXINPUTS path +it will be found by TEX but not by TTH. Thus, the macro +definitions are included when "TEX"ing the file, but not when +"TTH"ing it. It should be clear from this discussion, however, +that TTH generally does not support any of the enormous number of +extensions to LATEX unless they are mentioned in this manual, +because most extension packages are incompatible with TTH. + +
    +TTH will find an input file if + +
      +
    1. the full path is + specified relative to the directory from which TTH is run, e.g.
      + \input /home/myhome/mytexdir/mymacro.tex
      +
      +
    2. + +
    3. the -p switch specifies a path on which the file is +found, or +
      +
    4. + +
    5. the TTHINPUTS environment variable is defined to be a path on +which the file is found. +
      +
    6. +
    +Paths are searched in this order until an appropriate file is +found or all directory options are exhausted + +
    + This policy provides a mechanism +for making available the alternative package for TTH, +without alteration of the original TEX files, by placing the +(simplified) version of the macro package on the path TTH searches. + An example using the -p switch might be + +
    +tth >file.html <file.tex -p/usr/local/tthinputs:~/mytthinputs
    +
    +
    + +
    +Since it is impossible to anticipate all style file incompatibilities, +it must be the responsibility of the user (or the journal) to decide +how to translate the concepts implemented in the original complicated +macro package into simpler, TTH-compatible, TEX macros. + +
    +When TTH is used within a CGI script accepting arbitrary TEX for +translation, its ability to input any file on the system is a serious +security hole. It can be used to view all sorts of files on the system +by \inputing them. Therefore a special switch -pNULL is +provided that disables all \input or \include files. + +
    +

    +9.3  Layout to include arguments of unknown +commands +

    + +
    +Unrecognized or undefined commands of the form +\dothis{one}{two}{three}, are treated by discarding +all the following adjacent brace groups. A space between the close and +open braces will terminate the discarded arguments and cause the +following brace group(s) to be scanned as if just the text. This +makes it possible to use formatting to make TEX code come out right in +both TEX and HTML. For example if TTH encounters a command written +"\boxthis{width} {boxed material}" which might be +designed in TEX to provide a width to a defined command, written with +a space after the first argument, it will ignore the width and scan +the boxed material into the text. + +
    +

    +9.4  Restrictions on redefinition of internal +commands +

    + +
    +In TTH (unlike TEX) most internal commands can not normally be +redefined; any redefinition will simply be ignored (except inside edef +and a few other places). This prevents TTH from safely allowing use of +major packages that redefine standard TEX commands. For example amsTEX redefines footnote to have just one argument, which will cause +problems. This particular example is potentially a problem with LATEX too, which also redefines footnote. TTH handles this by keeping track +of whether the file is LATEX or TEX; therefore you should not mix the +two dialects in a single file even though there is no need to tell TTH +explicitly which type the file is. (Besides, a mixed file will play +havoc with TEX itself.) + +
    +

    +9.4.1  Footnotes

    +Footnotes are placed together at the end of the document, or, in the +case of TTHgold splitting files, in a separate file called +footnote.html. The title of this end section is determined by the +macro \tthfootnotes. By default this is "Footnotes", but can +be redefined by the user at will, e.g. by +\def\tthfootnotes{Tailnotes}. + +
    +

    +10  Color

    + +TTH supports the coloring of text using the color package macros for +LATEX, supported by dvips (but not xdvi). TTH also supports the Plain +TEX colordvi macros contained in the package colordvi.tex that do the +same thing. + +
    +

    +10.1  LATEX Color

    + +
    +The LATEX syntax is recommended because the 68 standard +named colors7 are directly supported internally by TTH using the named +model. Any numerical CMYK, RGB and Gray color can also be prescribed. For +example the following commands are enclosed in themselves: +\textcolor[named]{BrickRed}{...}, +\textcolor[rgb]{0.,.5,0.}{...}, +\textcolor[cmyk]{0.,.5,0.,0.3}{...}. +You can define custom colors in the usual way using, for example + +
    +{\definecolor{Puce}{rgb}{1.,.5,.8}
    +\color{Puce} This is my own Puce.}
    +
    +
    +Which gives " +This is my own Puce." + +
    +The command \pagecolor is supported but discouraged. It +is highly likely to give rise to an HTML file that will fail +validation because it inserts an HTML tag <body bgcolor=...> +which will not be in its correct position (immediately following the +title). The only way to be certain to produce an HTML file that passes +validation is to put the title and body commands in by hand, using +e.g. \special{html:<title>...</title><body ...>} Netscape +seems not to mind a body tag out of order, but only the first one is +able to set the page background color. + +
    +The commands \colorbox and \fcolorbox are supported via +CSS style sheet commands. They will only work to set the background +color of included text if the browser is set to use style sheets. + +"This sentence" is the result of the command +\colorbox{green}{``This sentence''}. If it is colored, then +your browser supports style sheets to this extent. If not, check your +preferences settings. + +
    +

    +10.2  Plain Color

    + +
    +The Plain TEX syntax using commands such as \Red{red text} requires +the file colordvi.tex to be input prior to their use. But +because TTH does not search the standard TEX paths, that file will +not usually be found unless the full path is explicitly +specified. If the file is not found, only the 8 standard colors + +
    +\Red, \Green, \Blue, \Cyan, \Magenta, \Yellow, \Black, and \White
    +
    +
    + are +recognized internally by TTH. You can use the user-defined CMYK numeric +style + +
    +\Color{0. .5 .5 0.}{pale red}
    +
    +
    +without the colordvi +file. It gives the result "pale red" but the +notation becomes cumbersome unless you define your color +e.g. like + +
    +\def\redcolor{0. .5 .5 0.}
    +\Color{\redcolor}{The stuff that is red.}
    +
    +
    + +
    +Another difficulty with the colordvi +command \textColor (which is the color switch - LATEX +syntax reversed that usage and changed to comma-delimited arguments +just to confuse us) is that it is a global setting. It then +becomes almost impossible to maintain proper nesting of the closure of +the font commands used for colors in HTML. As a result, use of +\textColor often gives HTML files that won't pass HTML validation. + +
    +

    +10.3  Limitations

    +Color commands do not propagate into different cells of HTML tables +because of what may be regarded as a browser bug +[13.5]. For that reason, tables and equations will not color +correctly if the color commands enclose more than one cell (for +tables) or equation element. Remember also that some computers may be +limited in their color display capability, so the subtleties of colors +will be lost in some circumstances. + +
    + +
    +

    +11  Producing output split into different files.

    + +
    +

    +11.1  Overview

    + +
    +Because the TTH program itself always produces just one output file, +the division of the output into different files takes place in two +steps. First, TTH is run on the LATEX file with the switch +-s (for "split"). This switch tells TTH to produce output +that is in multipart MIME format. Incidentally, this format is +used for sending multipart mail messages with attachments over the +internet. For present purposes it is simply a convenient standard for +TTH to use to show how to split the output and what the names of the +final files should be. If we wanted to keep this MIME file, then for +example the command + +
    +tth -s -Ltexdocument <texdocument.tex >mimedocument.html
    +
    +
    + +
    + would produce such a file called mimedocument.html from a +LATEX file called texdocument.tex. The switch -L +tells TTH to use auxiliary files that were produced when LATEX  +was previously run on it. Alternatively if you want the output file to +have the same name as the texdocument but with the extension +html, you can use just + +
    +tth -s texdocument
    +
    +
    + +
    +There are available standard tools for unpacking multipart mime files +into their individual files, notably the mpack tools available from +the "Andrew" distribution, which may be available on some +systems. However the executable tthsplit (whose source is in +the tthgold directory) is a more specific +program that will unpack MIME files produced by TTH. (tthsplit +will not handle general MIME files.) To unpack the multipart +file into its individual files requires the simple command: + +
    + +
    +tthsplit <mimedocument.html
    +
    +
    + +
    + This will inform the user of the files produced, for +example + +
    + +
    +index.html
    +chap1.html
    +chap2.html
    +refs.html
    +footnote.html
    +
    +
    + +
    + the file index.html is always the topmost file with +links to succeeding files, and cross-links from any table of contents +or list of figures, etc. + +
    +It is unnecessary to save the intermediate file. Instead, the output +of tth can be piped to tthsplit to produce the split +files directly by the command line: + +
    + +
    +tth -s -Ltexdocument <texdocument.tex | tthsplit
    +
    +
    + +
    +Since the names of the split parts of the document are predetermined, +it is strongly advisable to make a separate directory for each +different LATEX document to keep the parts of the document in. The +conversion and splitting must then be performed in that directory to +ensure the files end up there. This task is left to the user. + +
    +The Windows graphical user interface tth-gui offers an option for +the translated file to "split it here". If this button is checked, +the file will be split in the same folder as the tex file, producing +the HTML files as above. + +
    +

    +11.2  Navigation Controls at File Top and Tail

    + +
    +By default TTH places navigation links labelled "PREVIOUS" and +"NEXT" at the top and tail of the split pages, and a link "HEAD" +to the first section of the file at both places. These do not use cute +little images because images have to be in separate files, which would +defeat the principle of TTH always outputing just one file. However, +authors might want their own images or indeed far more elaborate +navigation links. The links can be customized straightforwardly by +redefining two special macros that are used for the navigation +section. By default these macros are defined as + +
    +\def\tthsplittail{
    + \special{html:\n<hr><table width=\"100\%\"><tr><td>
    + <a href=\"}\tthfilenext\special{html:\">}NEXT
    + \special{html:</a></td><td align=\"right\">
    + <a href=\"index.html\">HEAD</a></td></tr></table>\n</html>}}
    +\def\tthsplittop{
    + \special{html:<table width=\"100\%\"><tr><td>
    + <a href=\"}\tthfilechar\special{html:\">}PREVIOUS
    + \special{html:</a></td><td align=\"right\">
    + <a href=\"index.html\">HEAD</a></td></tr></table>}}
    +
    +
    + +
    +The macro \tthsplittail is called when splitting, as soon as a +chapter or section command is detected. Then after the split is +completed and the HTML header has been inserted for the next file, +\tthsplittop is called. Note that these macros use the +builtins \tthfilenext and \tthfilechar to access the +names of the next and the previous HTML files respectively. + +
    +These splitting macros can be redefined to whatever style of +navigation the author prefers. But careful attention should be paid to +the use of raw HTML output, for example using the HTML special. + +
    +

    +11.3  Special Precautions when Splitting Output

    + +
    +

    +11.3.1  Floats such as figures or tables

    +If you are splitting an article-style file that has a lot of +floating bodies (i.e. figures or tables) in it, these may be moved by +LATEX beyond the end of their corresponding section. This is a +familiar problem with LATEX. The result of this float misplacement +is that TTH may become confused and generate incorrect +cross-references to these floats in the list of figures and or list of +tables, because the only way that TTH can tell the section of float +placement is by the order of lines in the auxiliary files. If this +happens, some special precautions will prevent it. + +
    +All that is required is to add to the LATEX source file, in the +preamble between the documentclass and the begin{document} commands, +the extra command: + +
    + +
    +\input /usr/local/tth/tthprep.sty
    +
    +
    + +
    + where the path should be to wherever you unpacked or are +keeping the tth distribution file tthprep.sty. Then LATEX should +be run twice on the file to create the auxiliary files that tth will +use in its translation. Because of the extra definitions in +tthprep.sty, the auxiliary files so produced can be interpreted by +tth to give correctly linked split files. If you want to produce +dvi output from your LATEX then you should remove this extra +input command. None of this is needed unless splitting by +sections (not chapters) is to be performed or floats are +problematic. + +
    +To make it easier for the user, a script is provided called +tthprep which automates the process of producing satisfactory +auxiliary files through the single command + +
    + +
    +tthprep texdocument.tex
    +
    +
    + +
    + The script will leave the LATEX file in its original condition, +but the auxiliary files in appropriate form for TTH. + +
    +

    +11.3.2  Multiple Bibliographies

    +Multiple bibliographies in split files are a problem. All the +citations in the rest of the text link to a single file +refs.html because there is no way for TtHgold know the name of other +files to refer to. However, each time a bibliography is started, +when splitting, TtHgold starts a new file. TtHgold numbers reference +files after the first as refs1.html refs2.html +etc. + +
    +After splitting the output using tthsplit, the user has then to +concatenate the reference files into a single html file if the +cross-references are all to be correct. The utility program +tthrfcat will do this if run in the directory where the split +files reside. It destroys all the refsx.html files. But since those +were generated by TtHgold, they can always be generated again. Some +spurious file navigation buttons will remain in the resulting +refs.html file. They can be removed by hand if desired. + +
    +Things go much more smoothly if there is only one bibliography per TeX +document and it is at the end of the TeX file. + +
    +

    +12  HTML and output

    + +

    +12.1  Formal HTML validation

    + TTH takes as its standard HTML that +can be rendered by Netscape and IE browsers versions 4 and higher +(with the caveats above). The formal standard that TTH-translated +documents follow is strictly HTML4.0[1]8 +Transitional. However, TTH does +not formally validate its documents, and can be made to violate the +standard by some TEX usage. + +
    +One reason for violation +arises because HTML4.0 requires a +<title>...</title> for every document. +A title is constructed from LATEX files that contain the \title{...} +command, in which case HTML conformance is ensured by putting the +\title command before any text (i.e. in the preamble, where it +belongs). If the \title command is not desired in the TEX +file, for example because it is a plain TEX document, +a title can be provided by the author for the HTML document by putting +a line like this at the top of the TEX file. + +
    +%%tth:\begin{html}<title>Put the title here</title>\end{html}
    +
    +
    +This line will be ignored by TEX. Actually, any raw HTML output at the +start of the file is assumed by TTH to indicate that the author has +explicitly output a title. If no title indication of any of the above +types is present, TTH attempts to construct a title from the first few +plain words in the document, in much the way that the first line can +become the title of a hymn. + +
    +If commands like +\item, that output material to the HTML file occur +before the title has been constructed, the HTML title command will be +out of order and the formal standard will be violated. + +
    +In the case where the title construction fails, or if some other TEX +usage causes a violation of the formal standard, browsers will +still render the output correctly if this manual is followed. + +
    +

    +12.2  HTML Styles

    + + +There are good reasons why the <head> and <body> tags +are by default omitted by TTH. See the FAQ [B.3] for a +brief discussion. However, the evolution of HTML standards (not yet +browsers) is towards imposing more restrictions on the freedom to omit +tags. For example XHTML requires that containers have both +opening and closing tags. Therefore TTH has a switch -w? +(where the question mark denotes an optional integer) that controls +its writing style as follows. + +
    +
    Default
    +
    Construct title. Do not enter head and body tags.
    +
    -w -w0
    +
    Do not construct title or enter head/body tags.
    +
    -w1
    +
    Enter head and body tags assuming that the title is the +dividing point.
    +
    -w2
    +
    Use XHTML syntax.
    +
    -w4
    +
    Don't use block level font size commands between paragraphs.
    +
    +At present, in addition to the default style that +attempts to construct a title but does not enter head and body tags, +-w or equivalently -w0 prevents TTH from attempting to construct a +title or anything else in the way of head/body divisions. This style +is best used for documents where the author has explicitly entered the +required HTML tags. The switch -w1 invokes pedantic HTML style which +enters head and body tags under the assumption that the title +(possibly constructed automatically) is the last thing in the head +section. A style -w2 produces XHTML documents but requires +cascading style sheet (CSS) support in the browser otherwise the +rendering will not be as satisfactory as the default. + +
    +Addition of four to the writing style index (e.g. -w4) prevents + TTH employing block-level font size commands if the size is changed + immediately after a \par or implied paragraph. The additional + CSS style sheet is not inserted and, of course, the browser need not + support CSS. The (now) default writing style is to accommodate tables + and equations inside sections of larger or smaller text in a manner + that will pass standards validation. According to the standard, HTML + font changing commands like most others, are either of + inline type, in which case they are forbidden + to contain block level constructs like + tables, or block type, in which case they force a new line and so + can't be used within a paragraph. The default can't universally fix + this unnecessarily restrictive requirement of the standard (which + most browsers wisely do not honor). There are situations where + TEX usage is simply impossible to express in HTML. However, it does + fix the vast majority of sensible usages. The switch -w4 turns off + this approach, reverting to less standards-compatible style. + +
    +

    +13  Browser and Server Problems

    + +
    +TTH translates TEX into standard HTML and takes account as far as +possible of the idiosyncrasies of the major browsers. Nevertheless, +there are several problems that are associated with the browsers, and +a few that are associated with web servers. Authors and publishers +should recognize that these are not TTH bugs. Font-related +problems are complicated. If you don't need all the gory details, you +might want to read section 13.1 and then skip to +13.3. + +
    +

    +13.1  Accessing Symbol Fonts: Overview

    + + +
    +Many of the most serious difficulties of Mathematics rendering in HTML +are associated with the need for extra symbols. In addition to various +Greek letters and mathematical operators, one needs access to the +glyphs used to build up from parts the large brackets matching the +height of built-up fractions. These symbols are almost universally +present on systems with graphical browsers, which all have a +"Symbol" font, generally based on that made freely available by +Adobe. The problem lies in accessing the font because of +shortcomings in the browsers and the HTML standards that relate to +font use. + +
    +In brief, there are three ways to access the symbol fonts; these will +be described in more detail below. The following table indicates which of +these approaches to accessing the symbol fonts works with which +browser. It also outlines which of the mathematics rendering +improvements via CSS positioning are satisfactory. + +
    + + + + + + + + + + + + + + +
    Symbol Encoding CSS Positioning
    8-bit numeric Adobe Private Unicode 3.2 relative height +compress
    TTH switch -u0-u1-u2 -y2-y1
    Browser:
    MSIE 5.0 Yes No No Yes Buggy
    Mozilla 1.x X Alias/Font Buggy Buggy Yes Yes
    Firefox 1.x X Alias/Font Buggy Buggy Yes Yes
    Firefox 1.x Win Yes Buggy Buggy Yes Yes
    Konqueror 1.9.8Alias No No Yes Yes
    Firefox 3.5 X No Buggy Ugly Yes Yes
    Chrome 4.0 X No Buggy Ugly Yes Yes
    Firefox 3.5 Win Yes No Buggy Yes Yes
    MSIE 8.0 Win Yes No Ugly Yes Yes
    + +
    + +
    +This situation is painful. The 8-bit numeric style symbol access + method, which was the approach originally pioneered by TTH, used to + work with a significant number of browsers but needed additional font + settings for X-window systems. This is the approach that TTH used +to use + by default. However Mozilla and Firefox have systematically moved + towards disabling this method under linux and OSX, presumably because + they consider it not standards-compliant. They have not properly + implemented the unicode 3.2 alternative, because the glyphs they use + for built-up delimiters are incorrectly sized and leave ugly gaps. In + some cases the spacing is completely erroneous. One is left with the + choice between the traditional 8-bit approach, which works well with all + MSWindows systems up to Vista, but does not work with most recent + X-based operating systems; or Unicode 3.2 which works with most + browsers, but is badly buggy in Windows Firefox and ugly everywhere. + +
    +In the interests of an eventual rationalization of this situation, TtH + has changed to make the Unicode 3.2 coding its default from the 2010 + version 3.87 on, but this by no means universally satisfactory. + +
    +

    +13.2  Accessing Symbol Fonts: Details

    + +
    +Prior to HTML4.0, that is, during the major phase of the evolution of +HTML, the default encoding for HTML documents was ISO-8859-1 +(sometimes called ISO Latin-1). The document encoding defines a +mapping between the bytes of the file itself and characters. The +HTML4.0 standard draws a strict (but often confused) distinction +between the document "character set", sometimes referred to more +recently as the character "repertoire"(which refers to all the +characters that might be used in it) and the "document encoding" +(which encodes a subset of the character set by mapping them to +bytes). The confusion is compounded by the entrenched usage of the term +"charset" to refer to the "document encoding" (not the character +set). This usage is presumably a reflection of the prior lack of any +significant distinction between the two. + +
    +Purists since the adoption of HMTL4.0 regard the selection of a glyph +as governed by the process: (byte) code →glyph-name → font-glyph. In this view, even +though the font contains the glyphs in a well defined order, the +glyph is accessed not by its position in the font but by its name. For +example, in a document with ISO-8859-1 encoding, the byte with decimal +value 97 maps to the "latin small letter a" which is accessed from +the font on that basis. On this view, it is not possible, or rather +ought not to be possible, to access the Greek letter alpha by +specifying that the font is Symbol and the byte coding decimal value +is 97, despite the fact that the Greek alpha is indeed in the same +position in the Symbol font as the lower case a in its font. This is +because (the story goes) 97 means "latin small letter a" and the +Symbol font simply does not contain the latin small letter a. + +
    +In practice, of course, most browsers, including Internet Explorer (to +8.x), have not taken so pedantic an approach. In a document that is +encoded in the same order as the fonts on the system, as is the case +for ISO-8859 on systems other than the (old) MacIntosh, the browser maps +code to glyph directly on the basis of numeric position in the +font. Therefore it is perfectly sensible to specify eight-bit code 97 +and Symbol font to obtain alpha. In other words, the browsers treat +the Symbol font as if it were an ISO-8859 font even though, as far as +the glyph names are concerned, it is not. It can be argued, even +within the world-view of standards lawyers, that a document that does +not explicitly specify its encoding (and TTH documents do not) could +be considered to obey its own font encoding or some unspecified +encoding, in which case, bytes ought to be permitted to refer directly +to numeric font positions, in just this fashion, regardless of whether +the font is identified as ISO 8859. But such arguments are usually a +waste of breath. In any case, recent versions of Mozilla and its +derivatives on the Windows operating system will properly render +symbols provided they are told that the DOCTYPE is HTML 4.0, not HTML +4.01. This is the reason why TTH has reverted to giving its +documents this rather out of date DOCTYPE. + +
    +On the X-windows system, a distinction between fonts is provided +directly in the system via the font naming conventions. Mozilla takes +notice of this font allocation by permitting access only to fonts +whose names end 8859-1, for default encoded documents. The symbol font +is not one of those fonts unless additional steps are taken. The +enabling of the symbol font requires specification of some system font +aliases, or installation of a specially encoded Symbol font, which +then ensures that the Symbol font is treated as if it were ISO-8859-1 +encoded. Notice that this type of problem arises for any document that +wants to access more than one language of font. Thus, any document +desiring a mixture of, for example, western and cyrilic characters +would face the same problem. + +
    +To summarise, the symbol font is present on practically every computer +on the planet that runs a graphical browser. Under the MSWindows +operating system, IE to version 8.x, and Mozilla (gecko)-based +browsers treat the symbol font as if it were a numerically encoded +font and compatible with ISO 8859-1 encoding, provided the DOCTYPE is +HTML 4.0 Transitional. Treating the font as such enables the glyphs to be +accessed using either eight-bit codes in just the same way as standard +ASCII characters. This is the way that documents have accessed these +glyphs for years. + +
    +The HTML4.01 standard says that unicode (ISO 10646, also called UCS) is +the character set of HTML, and that the way characters outside the +current document encoding should be accessed is through unicode +points. Unicode is backwardly compatible with ISO 8859-1 in a way that +we need not dwell on. Unicode is supposed to fix all the font problems +that are described here, and with luck eventually it will indeed +help. The problem is that (1) Unicode is enormous, so only a tiny +fraction of it is so far supported, and (2) in its original incarnation +unicode does not even assign points to the parts of large delimiters +that are needed for mathematics. They are present in the new +version of unicode, 3.2, becoming current. However, as the +table above shows, no browser cleanly supports the new unicode +assignments. Mozilla used to support some assignments of points in +unicode's designated "private usage area" to the glyphs we +need. Apparently these assignments have become de-facto standards for +the Adobe Symbol font in typographic circles. No other browser +supports them. They are not and, according to unicode principles, +never will be part of the unicode standard, and appear to be on the +way out. + +
    +The option that mathematics web publishing currently has, then, is + either an approach that works with Windows browsers but which purists + say is not consistent with latest standards, or a representation that + is consistent with the standard but useless with some browsers. It +would be really nice if the browsers would get their act together on +mathematical symbols. + +
    +

    +13.3  Printing

    + + + +
    +In many browsers, the printing fonts are hard coded into the browser +and the font-changing commands are ignored when printing. For that +reason, visitors viewing TTH documents will often not be able to +print readable versions of documents with lots of mathematics. This +problem could, and should, be fixed in the browsers. However, if you +want your readers to be able to print a high-quality paper copy of the +file, then you probably want to make available to them either the +TEX source or a common page-description format such as Postscript or +PDF. Since HTML documents download and display so much faster and +better than these other formats on the screen, TTH's translation +provides the natural medium for people to browse, but not +necessarily the best medium for paper production. + +
    +

    +13.4  Netscape/Mozilla Composer

    + + +Netscape Composer and Mozilla Composer is +too clever for its own good. If you run an HTML document produced by TTH +through Netscape Composer, all sorts of internal translations are +performed that are detrimental to its eventual display. For example, +if you subsequently save the document with the usual encoding set +(Western), the eightbit codes that work with Macs are replaced with +HTML4.0 entities such as [&]ograve; or [&]pound;. This effectively +breaks the document for viewing on Macs because it undoes everything +just explained. Even if you use User-Defined encoding, which prevents +this particular substitution, Composer will rearrange the document in +various ways that it thinks are better, but that make the display of +the document worse. The moral is, don't run TTH documents through +Netscape Composer. + You therefore cannot use the "publish" facility +of Composer. Transfering the document to the server with plain old ftp +will keep it away from Composer's clutches. + +
    +

    +13.5  Other Browser Bugs

    + +
    + +Font changing commands do not propagate from cell to cell of HTML +tables. In rendering equations (using tables) TTH circumvents this +bug (excuse me, feature) at the cost of significant extra effort and +slightly verbose HTML. However, for tables generated by +\halign or \begin{tabular} TTH takes no special steps +to avoid this problem. A change of font face in a cell, for example by +\it will not carry over to the next cell. A document +containing this problem will not pass some HTML validations. It is +prevented if every cell of a TEX table is enclosed in braces and the +required style applied separately to every cell - a serious +annoyance. + +
    + +Tables are incapable of being properly embedded within a line of text. +They generally force a new line. This is quite a significant handicap +when translating in-line material that could use a table. It can be +argued that this behaviour is required by the HTML +standard. Specifically, the <p> element is defined as having +in-line attributes which prevent it from containing any elements +defined as being block type, of which <table> or +actually strictly <td> is one. However, even if you ensure that +text is not inside a <p>, most browsers force a new line. + +
    +

    +13.6  Web server problems

    + + +
    +The HTML files that TTH produces are encoded using the charset +ISO-8859-1, like most web files. In newer linux systems the default +file encoding on the computer is in many cases now UTF-8. For the +characters with codes above 128, this can cause problems with the web +server. The web server may wrongly assume that the HTML file is a +UTF-8-encoded file, and declare this assumption in the http content-type +header that it sends to browsers when they access the file. For +gecko-based browsers, the http content-type declaration overrides any +internal file declaration of the encoding of the file. Consequently, +the browser treats this file as if it is UTF-8 encoded, with the +result that codes higher than 128 are misinterpreted. This is an +inadequacy in the web server (apache is known to behave this way in +some situations). + +
    +There are several options to work around this problem. + +
    +It is possible to convert all files from ISO-8859-1 to UTF-8 encoding, +using a utility called iconv, present on most modern linux +installations. This is not an attractive solution because then when +the files are browsed locally (via file://...) they will display +incorrectly. Locally, the browser does not have the http content-type +declaration to guide (or misguide) it, and it thinks the files are +ISO-8859-1 encoded. But if they've been converted, they are not. + +
    +The better approach seems to be to fix the web server so that it gets +the file content-type right. This can be done on a per-directory basis +by creating a file called .htaccess in the directory. This file +should contain the line: + +
    +  AddType text/html;charset=ISO-8859-1 html
    +
    +
    +This tells the server that all files in this directory and its +subdirectories that have extension html are to be considered of +type HTML and encoded with the ISO-8859-1 charset. + +
    +Unfortunately some web servers are configured not to pay attention to +the .htaccess file. If yours is one, you have to get the web +master to edit the server configuration file +(/etc/httpd/conf/httpd.conf). The lines that read +AllowOverride None must read instead +AllowOverride FileInfo. Alternatively, get the webmaster to +change the line in that configuration file that reads +AddDefaultCharset UTF-8 to read instead + +
    +AddDefaultCharset ISO-8859-1
    +
    +
    + and once the server is restarted all your troubles will be over +without any of those pesky .htaccess files. + +
    +There are other ways of accomplishing the same thing in the web +server, if you are a guru. Information is available at +the + W3C FAQ. + +
    +

    +14  Code Critique

    + +
    +If you think you have found a bug, you can report it to +tth(at)hutchinson.belmont.ma.us (with the usual character +substituted in the email address). You are most likely to get help if +your report is accompanied by the brief section of TEX code that +causes the problem. Let me repeat, in addition to a brief description +of the problem, send the TEX code, preferably a short +section isolating the problem, in a document that can be processed +by TEX. It is the only way for me to establish +what the problem is. But please don't send LATEX2.09 files or files +that do not conform to the (1994) LATEX users' guide. And +please check this TTH manual and especially the FAQ (B) first. + +
    +The code has been compiled and run on Linux, MSDOS, Wind*ws, Open VMS, +and sundry other operating systems. See +http://hutchinson.belmont.ma.us/tth/platform.html. + +
    +

    +15  License

    + +
    +TTH is copyright © Ian Hutchinson, 1997-2011. + +
    +You are hereby freely licensed to use this software under the terms of +the GNU General Public License, version 2, published by the Free +Software Foundation, a copy of which is enclosed in the file +license.txt. + +
    +The software comes WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +
    + +

    +16  Acknowledgements

    + +
    +Many thanks for useful discussions and input to Robert Curtis, Ken +Yap, Paul Gomme, Michael Sanders, Michael Patra, Bryan Anderson, +Wolfram Gloger, Ray Mines, John Murdie, David Johnson, Jonathan +Barron, Michael Hirsch, Jon Nimmo, Alan Flavell, Ron Kumon, Magne +Rudshaug, Rick Mabry, Andrew Trevorrow, Guy Albertelli II, Steve +Schaefer and for bug +reports from others too numerous to mention. + +
    +

    +A  Appendix: Non-Standard TEX Macros

    + +
    +The following macro definitions, although not needed for TTH, will +enable a TEX file that uses the non-standard TTH commands to be +correctly parsed by Plain TEX. + +
    + +
    +\def\hyperlink#1#2{\special{html:<a href="\##1">}#2\special{html:</a>}}
    +  % Incorrect link name in \TeX\ because # can't be passed properly to a special.
    +\def\hypertarget#1#2{\special{html:<a name="#1">}#2\special{html:</a>}}
    +\long\def\tthdump#1{#1} % Do nothing. The following are not done for TtH.
    +\tthdump{%
    +\def\title#1{\bgroup\leftskip 0 pt plus1fill \rightskip 0 pt plus1fill
    +\pretolerance=100000 \lefthyphenmin=20 \righthyphenmin=20
    +\noindent #1 \par\egroup}% Centers a possibly multi-line title.
    + \let\author=\title % Actually smaller font than title in \LaTeX.
    + \input epsf     % PD package defines \epsfbox for figure inclusion
    +  % Macro for http reference inclusion, per hypertex.
    + \def\href#1#2{\special{html:<a href="#1">}#2\special{html:</a>}}
    + \def\urlend#1{#1\endgroup}
    + \def\url{\begingroup \tt 
    +  \catcode`\_=13 % Don't know why this works.
    +  \catcode`\~=11 \catcode`\#=11 \catcode`\^=11 
    +  \catcode`\$=11 \catcode`\&=11 \catcode`\%=11
    +\urlend}% \url for plain \TeX.
    +}
    +
    +
    + +
    +

    +B  Appendix: Frequently Asked Questions

    + + + +
    +

    +B.1  Building and Running TTH

    + +
    + +Why does my compiler crash when compiling TTH?   +
    TTH comes in the form of a single C source file +because it is mostly one very large function which is produced by +flex. It is completely standard C code but the size challenges +compilers' capabilities, especially if you try to optimize using the +-O switch. With gcc under linux it is possible to compile an optimized +version, but optimization hardly affects the speed and reduces the +disk size of the already modest executable only by about +20%. Therefore it is no significant loss to compile without +optimization. Under DOS, even unoptimized compilation can cause DJGPP +to crash if its stack size is less than about 1024k. The fix (using +stubedit on cc1.exe) for this DJGPP bug is described in its FAQ. + +
    + +Why does my TTH executable, which I compiled myself, crash?   +
    Assuming that this is not a problem caused by invalid +TEX, or by you poking around inside the C code, it is probably a +compiler shortcoming. Some default settings of some compilers give +TTH too little stack space and cause it to crash. Most +self-respecting compilers have switches or settings to increase that +space. Try increasing it, or get one of the binary distributions. + +
    + +Why won't TTH run from Program Manager in Wind*ws?  
    +You need a command line. Call up the DOS prompt. If you feel the need +for a drag and drop facility, get TTHgold. + +
    +

    +B.2  [La]TeX constructs TTH does not seem to recognize

    + +
    + +TTH does not recognize tableofcontents, backward +references, listoffigures, ...  
    +Yes it does, see section 6.1, and use the -L switch. + +
    + +TTH does not insert my picture environments.  
    +If picture environment pictures are to be included, conversion to a gif file +is needed. See 6.5. + +
    + +TTH messes up my tabbing environment.  
    +Tabbing is not currently supported. It is alien to the HTML document +mark-up approach. See section 7. + +
    + +Why doesn't \frac work in equations?  
    +It does, but only in LATEX documents because \frac is not a +plain TEX command. The document you are presenting to TTH doubtless +has no \documentclass command and other LATEX blurb at the top. +If you insist on having LATEX commands available in such a document, +you can use the -L switch. But note that other changes in +interpretation (e.g. in footnotes) are implied by using this switch to +tell TTH that this is a LATEX file. + +
    + +Why does TTH not recognize ... command from ... style +package?  
    +Let's be perfectly clear here. TTH does not currently recognize +\usepackage and, with the exception of commands explicitly +mentioned in this manual, does not support any of the zillions +of extensions to LATEX that exist, even if they are part of the +"standard distribution". TTH does support macro definitions, see +section 9.2, and +you might find that if you explicitly \input the style file +that you need it will recognize the macro. However, many LATEX extension packages are written in a complicated manner such that they +depend on changes in catcodes, which TTH does not +support. Therefore no guarantee can be given. This is one reason why +TTH deliberately does not recognize \usepackage. + +
    + +Why does TTH not recognize my ends of lines properly?  
    +If you transfer a file from one operating system to another as a +binary file, the line-end codes are likely to be messed up. They use +different codes on Un*x, DOS, and Mac. Usually TEX is not bothered by +this. TTH is somewhat more sensitive. Use ASCII transfer. + +
    + +Why does TTH complain about my skip, space, ... command?  
    +Dimensions are often inappropriate for HTML. TTH +tries do something sensible with dimension, space, and glue +commands. Usually it is successful. If so, you need do nothing. In +some rare cases, you might see some irrelevant left-over characters +from the dimension command that have to be removed by hand. + +
    + +Can TTH be made to support BibTEX bibliographies?  
    +It already does; see 6.2. If TTH is not finding the .bbl file +even though you used the -L switch, then you probably forgot to +generate it using LATEX and BibTEX, or perhaps it is in the +wrong place. Try using the TTH switch -a. + +
    + +Does TTH support ...?  
    Probably yes if it is part +of LATEX. But if you want a specific additional capability, and find +that it is not supported, why not write a TeX macro to support it and +translate it into suitable HTML using the functions described in this +manual. Then you will have your support and if you send it to +tth(at)hutchinson.belmont.ma.us (with the usual character +substituted in the email address), it may be possible to include it +into the standard TTH executable and you'll have helped all the +other users of TTH. + +
    +

    +B.3  HTML output that does not satisfy

    + +
    + + +Why doesn't TTH automatically generate   <head> +and <body> HTML tags?
    + First, the <head> and +<body> tags are optional in the HTML specification. There is +no need for TTH to generate them to statisfy the standard. Second, TEX +and LATEX files do not have a corresponding structural division into +separate head and body sections. It might seem as if LATEX does, with +\begin{document} being the divider, but there are many cases +where this mapping is incorrect. For example title may not be defined +until after \begin{document}, corresponding to the HTML body +section, whereas it must be in the head section. Finally, if TTH +automatically entered <head> and <body> tags, then the +thoughtful author would not be able to enter them where they ought to +be by using, for example:
    +%%tth: \begin{html} <head> \end{html}
    +Therefore, the choice not to produce these tags automatically +is a deliberate one based on a careful consideration of the advantages +and disadvantages. An author can always adjust their TEX code to +include them, if they wish to be pedantic about the division. See also +the section on HTML style [12.2]. + +
    + +Why don't TEX commands get expanded in the HTML title?  
    +In HTML, the stuff that goes in the <title>...</title> of a +page is not permitted by the specification to contain HTML tags - +things in angle brackets - and tags are not interpreted. If an +equation or some other command that TTH translates into HTML +formatting is in the title, then the title will break when +expanded. Therefore TTH deals with commands differently in the +title. By default it leaves them in the TEX form that they started +as, since that is about as easy to read as any unformatted +mathematics. Using the -n? switch enables control of the precise +behaviour. See 3. + +
    + +How do I make TTH border my tabular table?  
    +TTH looks in the format string argument of the begin{tabular} +environment and if it begins with a | (vertical bar) then the HTML +table is bordered. + +
    + +TTH inserts the title and author even without the +maketitle command  
    +True, TTH inserts them when you define them. This gives you a chance +to fine-tune the presentation if you wish. + +
    + +What is this strange result using \dot +\hat \tilde \frac +\vec ... in in-line equations?  
    +Neither over and under accents nor built-up constructs such as +fractions can be rendered in-line (i.e. in a textstyle equation +produced by $ ... $) in HTML. Therefore, TTH outputs something that is +not elegant but reasonably indicates the original +intention. Additional brackets are inserted to ensure that fractions +are unambiguous. TTH will render all these built-up constructs +correctly in a display equation. See also 5.2 and +5.3 for alternatives. + + +
    + +Why does the large square root sign look so ugly?  
    +There are some things that browser symbol fonts can't do well. + +
    + +Why does a dagger sign come out strange?  
    +Browsers don't generally have a dagger sign in their fonts. TTH uses a +kludge. + +
    + +The file I "published" using Netscape Composer looks +messed up when viewed on a Mac.  
    +Don't use Composer on TTH documents. See section 13.4. + +
    + +Why does TTH mess up my \fbox, +minipage, etc?  
    The whole concept of a "box" is not really +translatable into HTML. TTH tries to mimic the box using tables. But +in some cases, especially in equations, it can't cope. + +
    + +How do I get caligraphic fonts, {\cal E}, AMS +fonts, etc?  
    +You can't because browsers don't have access to them. TTH can only +support fonts that are available on the browsers that eventually visit +the page. By default TTH tells the browser to render caligraphic as +italic helvetica font. You may, if you wish, define \cal to be +something different, such as %%tth:\def\cal{\it\color{red}}. + +
    + +Why does TTH turn double-quotes into an accent +instead of quotes?  
    In basic TEX the double quotes character +" is not defined, and hence may do anything that the local +installation feels like. Double quotes must be inserted by using two +quote " or back-quote " characters. In German TEX implementations, +the double-quotes character is used to provide the umlaut over accent +and for some other special needs. TTH supports these German uses in +some appropriate contexts. English speakers should adopt proper TEX +quote usage. There is essentially never a situation in LATEX where +it is advisable to use a double quote to represent itself outside of a +verbatim section (where it will naturally be treated literally). In +Plain TEX you might need it. If so, \char`" is an +absolutely fool-proof way to insert it. Here it is:". +You can also just enclose it in braces thus:{"}. + +
    + +Why doesn't TtH output use < p > for paragraphs?  
    + For the first years of its existence it +did. However, standards of HTML interpretation have grown tighter to +the point where <p> is a great liability. In XHTML (the latest +HTML standard) <p> is a container element. It must have a +closing </p>; so that every paragraph must be its own +group. This compulsion is contrary to TEX usage. Therefore TtH +changed to dispense completely with any use of <p>, using an +empty <div> with an associated CSS style instead. This has the +significant benefit of ensuring that for standards-compliant browsers, +font changes propagate even into the cells of tables. (NS4 is not +compliant, Mozilla, NS7 etc are, in this respect.) + +
    +

    +B.4  How to write TEX designed for Web publishing

    + +
    + +How do I insert code that is used only by TTH, not TEX?  
    +Use %%tth: followed by the material you wish to pass to TTH. +TEX omits this line as a comment. Alternatively, insert \newif\iftth +at the top of your document, then use a conditional: +\iftth \TtH\ material \fi. TtH recognizes \iftth as a +special `if' that is always true, whereas to TEX it is simply a +new `if', which by default is false when defined. + +
    + +How do I insert HTML tags into my file without TEX knowing?  
    +Use %%tth: then on this line put +\begin{html} tags \end{html}. Do not try to continue this +html onto a second line with a second %%tth: before the +\end{html} because the html environment will output the +%%tth:, which it probably not what you want. Another way to +pass codes directly to the output is the \special{html: ... } +command. Do +not use \begin{verbatim} to pass HTML tags. It will +convert the greater than and less than signs to make them appear in +the display and not be interpreted as tags. + +
    + +How do I insert code that is used only by TEX, not TTH?  
    +Insert \newif\iftth at the top of the file and then use +the conditional constr +uction: + +
    \iftth\beginsection{The \TtH\ Header}\par\else\beginsection{The \TeX\ Header}\fi
    +
    +
    +The `else' clause may also be used with a blank first clause, of +course: \iftth\else ... \fi. +Alternatively, insert the definition \def\tthdump#1{#1} at the +top of the file and then use \tthdump{\TeX\ material} to pass +stuff only to TEX. The command \tthdump is an internal command +for TTH (which cannot be redefined) that simply discards its argument. +Thus, for example, the following will output +alternate versions from TEX and TTH. +
    +\def\tthdump#1{#1}
    +%%tth:\begin{html}<H1>The HTML Header</H1>\end{html}
    +\tthdump{\beginsection{The \TeX\ Header}\par}
    +
    +
    + +
    + +How do I include the style file ...sty for the TEX paper I prepared for... journal?  
    + If you must, put it in the same directory as your .tex file and see + if it works. If it crashes, you may have to write a simpler one. + Remove the old style file. Look at your TEX file, or the + TTH messages telling you which commands are unknown. Decide which of + the journal's specific commands or environments you used or + need. Write a little style file that defines them to do something + simple and sensible, or translates them into standard LATEX +commands. Or ask the journal to provide such a style file! If you are + a journal publisher, distribute your simplified style file to your + authors. + +
    + +In bordered tables I want an empty cell to look +empty. How do I make TTH do that?  
    +HTML tables by default "fill in" an empty cell, so that it gives the +visual impression of being absent. This is sometimes useful, so TTH +does not prevent it. If you want it to look like an empty cell, put a +non-break space in it by &~& in the TEX. + +
    + +How do I include into a macro I am defining a # sign +for an HTML reference?  
    +When you do \special{html:<a href="#reference">} +TTH just puts the html tag in the output verbatim. TEX does essentially the +same for its dvi file and the dvi processor later may or may not complain +about not understanding it; but generally it is ignored. However if you try +to define a macro like +\def\localhref{\special{html:<a href="#reference">}} then TEX +will complain as follows: +
    +! Illegal parameter number in definition of \localref.
    +<to be read again> 
    +                   r
    +l.3 \def\localref{\special{html:<a href="#r
    +                                            eference">}}
    +?
    +
    This problem is caused by TEX's syntax analysis of +the contents of the definition. One solution is to hide the +definition from TEX using %%tth:. An alternative definition +that avoids this problem must also be included for TEX's benefit, for +example thus: +
    +\def\tthdump#1{#1}
    +\tthdump{\edef\localref{[a hyperreference]}}
    +%%tth:\def\localhref{\special{html:<a href="#reference">}}
    +
    +
    +Alternatively, use \# in place of # in the hypertex +reference. TTH specifically recognizes this as a literal and does +appropriate translation. For example + +
    +\def\localhref#1#2{\special{html:<a href="\##1">}#2\special{html:</a>}}
    +
    +
    +will use its first parameter as a local anchor reference, preceded by #, +and its second as the text of the anchor. The sequences \% and +\\ are also treated as escaped literals, inserting their second +character, inside a raw html section. + +
    + +How do I construct a macro to take as a single +argument a URL, which may contain special TEX characters like   +_ ~ @ & +etc, that makes TTH construct a hyperreference but TEX just enter it in the +text?
    Use the built-in command \url{...}. This behaves in +essentially the same way as the command defined in LATEX's +url.sty. The reference will appear verbatim in the text (in teletype +font). + +
    +

    +B.5  Formerly Frequently Asked Now Rarely Asked

    + +
    + +Why does TTH only manage to input a limited number +of files, perhaps 15 or so, then report "file not found" after +that?  
    +This is a limitation of the operating system. It has only a limited +number of file handles available. In MSDOS this number is set by a command +FILES=... in the operating system configuration file +config.sys. It needs to be set to a number large enough to +accommodate all the input or include files that your TEX document +uses, plus whatever other file overhead the operating system is +using. Under OS/2 a similar limitation exists and is avoided by +increasing the number of allowable file handles in the emx run-time +system (e.g. SET EMXOPT=-c -h400 in config.sys). + +
    + +TTH seems not to work on WinNT when converting +included PostScript   files, even though my ps2gif program works fine +from the command line. What is the problem?
    +The problem is not TTH. It appears to be an operating system +problem. The batch program ps2gif is breaking for some strange reason +when called from TTH. See footnote 5. + +
    + +TTH does not recognize evironment ... even though it +claims to.  
    +Probably you left a spurious space, e.g. \begin {enumerate} +between the \begin and the following brace. TTH occasionally won't +accept that, even though LATEX does. It is bad style. + +
    + + +

    Index (showing section)

    + +

    +
    +
    +
    -a switch, 6.1, 6.2, + 6.5, B.2
    +
    +
    auxiliary files, 6.1

    +
    +
    BibTEX, 6.2
    +
    +
    bibtex, B.2
    +
    +
    block level elements, 12.2
    +
    +
    <body>, B.3
    +
    +
    bugs, 14.0

    +
    +
    calligraphic, B.3
    +
    +
    catcodes, 9.1
    +
    +
    CGI script, 3.0
    +
    +
    character set, 13.2
    +
    +
    color, 10.0
    +
    +
    colordvi, 10.0
    +
    +
    commands
    +
         LATEX supported, + 1.2
    +
         alternative files, + 9.2
    +
         handling unsupported, + 1.4
    +
         redefining, 9.4
    +
         renaming, 9.4
    +
         unknown, 9.3
    +
         unsupported, 1.4
    +
    +
    compile, 2.0
    +
    +
    Composer, B.3
    +
    +
    compression
    +
         vertical, 5.3
    +
    +
    conditionals, see \if
    +
    +
    CSS, 5.3
    +

    +
    +
    +
    dagger, B.3
    +
    +
    definitions
    +
         delimited, 9.1
    +
    +
    double-quotes, B.3

    +
    +
    encoding, 13.2
    +
    +
    environment
    +
         not recognized, + B.5
    +
    +
    environments, 1.2
    +
    +
    equations
    +
         textstyle, see in-line equations, overaccents
    +
    +
    Error, 4.0
    +
    +
    extensions to LATEX, B.2

    +
    +
    fbox, B.3
    +
    +
    file not found, B.5
    +
    +
    FILES, B.5
    +
    +
    flex, 2.0
    +
    +
    font
    +
         face="symbol", 5.1
    +
    +
    fonts, 1.1
    +
         accessing, 13.0
    +
         details, 13.2
    +
    +
    footnotes, 9.4
    +
    +
    frac command
    +
         see switch -L, + B.2
    +

    +
    +
    +
    gif, 6.4
    +
    +
    glossary, 6.3
    +
    +
    graphics files, 6.4

    +
    +
    \halign, 7.2
    +
    +
    hash sign, B.4
    +
    +
    <head>, B.3
    +
    +
    \headline, 1.1
    +
    +
    HTML
    +
         3.2, 5.1
    +
         4.0, 5.1
    +
         insertion, 1.3
    +
         tags, B.4

    +
    +
    icons, 6.4
    +
    +
    \if, 1.1, 9.1
    +
    +
    iftth, B.4
    +
    +
    in-line equations
    +
         arrays, 5.2
    +
         built-up display, + 5.2
    +
         fractions, 5.2
    +
         overaccents, + 5.2
    +
    +
    \includegraphics, 6.4
    +
    +
    index
    +
         layout in one or two columns and the equivalent page length, + 6.3
    +
    +
    indexing, 6.3
    +
    +
    inline elements, 12.2
    +
    +
    \input
    +
         "file not found" error, B.5
    +
         disabling, 9.2
    +
         TEXINPUTS, 9.2
    +
         TTHINPUTS, 9.2
    +
    +
    italic
    +
         equation style, 5.1
    +

    +
    +
    +
    jpeg, 6.4

    +
    +
    LATEX extension packages, B.2
    +
    +
    LaTeX2HTML
    +
         differences, 5.1, + 6.1
    +
    +
    license, 15.0
    +
    +
    limitations, 5.2
    +
    +
    line-ends, B.2
    +
    +
    longtable, 7.3

    +
    +
    macro files, 9.2
    +
    +
    macros
    +
         alternate, 9.2
    +
         special use, A.0
    +
    +
    makeindex, 6.3
    +
    +
    mathematics, 1.1
    +
         layout style, 5.3
    +
    +
    messages, 4.0

    +
    +
    Netscape/Mozilla Composer, + 13.4

    +
    +
    <p>, B.3
    +
    +
    picture environment, 6.5
    +
    +
    portability, 6.1
    +
    +
    postscript, 6.4
    +
    +
    printing, 13.3
    +
    +
    ps2gif, 6.4
    +
    +
    ps2png, 6.4
    +
    +
    publish
    +
         through composer disallowed, + 13.4
    +

    +
    +
    +
    references
    +
         forward, 6.1
    +
    +
    \rm, 1.1

    +
    +
    skip space and dimension commands, + B.2
    +
    +
    spacing, 5.1
    +
    +
    square root, B.3
    +
    +
    stderr, 3.0
    +
    +
    stdin, 3.0
    +
    +
    stdout, 3.0
    +
    +
    Style Sheets, 5.3
    +
    +
    styles, B.4
    +
    +
    support, B.2
    +
    +
    switches, 6.2, B.2
    +
         -L, 3.0, + 6.1, + B.2
    +
         -a, 6.1, + 6.5
    +
         -j, 6.3
    +
         -u, 13.1
    +
         -y1, 5.3, + 13.1
    +
         -y2, 5.3, + 13.1
    +
         TTH, 3.0
    +
    +
    symbol font
    +
         accessing, 13.0
    +

    +
    +
    +
    Table of Contents
    +
         Index entry, + 6.3
    +
    +
    tables
    +
         bordered cells filled in, + B.4
    +
    +
    TEX-only code, B.4
    +
    +
    texinputs path, 9.2
    +
    +
    title
    +
         HTML construction, + 12.1
    +
         TeX commands not expanded in, + B.3
    +
    +
    TTH-only code, B.4

    +
    +
    unknown commands, see commands, unknown
    +
    +
    URL, B.4
    +
    +
    \usepackage, B.2
    +
    +
    UTF-8, 13.6

    +
    +
    warning, 4.0
    +
    +
    web-server, 13.6
    +
    +
    WinNT, B.5
    +
    + + +
    +

    Footnotes:

    + +
    +1The problem with \rm in text is that HTML +has no < rm > tag, and relies on cancelling all previous (e.g.) + < i > or < b > tags. By default (using style -y1) +TTH uses Cascading Style Sheets to solve this problem. However not +all older browsers support CSS and even in those that do, the user can +turn off the CSS support. The best solution is to avoid +\rm by using proper grouping of non-roman text. (In +equations \rm is essential, but TTH has a +work-around in equations.) +
    +2Conditionals \if + and \ifx are not 100% TEX compatible for cases +where they refer to internal TEX commands because TTH internals are +not identical. Catcodes are also unknown to TTH. +
    +3See appendix for TEX macros supporting these commands +
    +4The PNG graphics file format is an improved +replacement for the GIF standard. Netscape has built in rendering for +PNG. The GIF standard is plagued with legal problems related to a +ridiculous patent on the type of file compression it uses. +
    +5May 1999 reports indicated that there is a +batch program in circulation bearing the comment ":#batchified by +cschenk@snafu.de" that tries to implement the functionality of ps2gif +and gives errors on WinNT when called by TTH but not when called from +the command line. I have not had recent reports of problems, so I +think this problem has been fixed. +
    +6The alignment argument of the +math array environment was ignored in TTH versions earlier than 2.20 +but is now honored. +
    +7See the file colordvi.tex for a list of +the named colors. +
    +8It proves to be + better to specify 4.0 as the HTML Doctype because on some operating + systems symbol font rendering is not honored for 4.01 documents. +


    File translated from +TEX +by +TTH, +version 4.04.
    On 22 Jun 2014, 18:00.
    + diff --git a/ivoatex/tth_C/tthsplit.c b/ivoatex/tth_C/tthsplit.c new file mode 100644 index 0000000..72d590f --- /dev/null +++ b/ivoatex/tth_C/tthsplit.c @@ -0,0 +1,60 @@ +/* +Split a tth-produced MIME file into its consituent files. +Copyright 1997 I.H.Hutchinson. +*/ + +#define LINELEN 256 +#include +#include +main(argc,argv) +int argc; +char *argv[]; +{ +int slen; +char *ch,*ch2; +char bound[LINELEN]={0}; +char buff[LINELEN]={0}; +FILE *file; +if(argc > 1){ + printf( "Usage: tthsplit +\end{html} + + +\definecolor{ivoacolor}{rgb}{0.0,0.318,0.612} + +%%%%%%%%%%%%%%%%%%% ivoatex features + +\renewcommand{\author}[2][0]{\def\@tmp{#1} + \if 0\@tmp + {\begin{html}
  • \end{html}#2\begin{html}
  • \end{html}}\else + {\begin{html}
  • \end{html}#2\begin{html}
  • \end{html}}\fi} +\renewcommand{\previousversion}[2][0]{\def\@tmp{#1} + \if 0\@tmp + {\begin{html}
  • #2
  • \end{html}}\else + {\begin{html}
  • + #2
  • \end{html}}\fi} +\renewcommand{\ivoagroup}[2][WG] + {\begin{html}
    #2
    \end{html}} +\renewcommand{\editor}[2][0]{\def\@tmp{#1} + \if 0\@tmp + {\begin{html}
  • \end{html}#2\begin{html}
  • \end{html}}\else + {\begin{html}
  • \end{html}#2\begin{html}
  • \end{html}}\fi} + +\newcommand{\includeMeta}{% + \special{html:}\ivoaDocversion\special{html: + }\ivoaDoctype\special{html: + }\ivoaDocname\special{html: + }\ivoaDocdate\special{html:}} + +% this is for SVN-provided VCS info (and will be picked up by +% tth-ivoa.xslt. +\def\SVN$#1: #2 ${% + \special{html:}#2\special{html:}} + +% this is for VCS info put in by git +\def\vcsrevision#1{% + \special{html:}#1\special{html:}} +\def\vcsdate#1{% + \special{html:}#1\special{html:}} +\def\vcsurl#1{% + \special{html:}#1\special{html:}} + + +\newenvironment{abstract}{% + \includeMeta + \begin{html} + +

    Abstract

    + \end{html} + }{% + \special{html:
    +

    Status of this Document

    +
    }\ivoaDoctype\special{html:
    } + \tableofcontents + } + +\newenvironment{generated}{% + \begin{html} +
    + \end{html} + }{% + \begin{html} +
    + \end{html} + } + +\newenvironment{admonition}[1]{% + \begin{html} +
    +

    #1

    + \end{html} + }{% + \begin{html} +
    + \end{html} + } + +\newcommand{\lstinputlisting}[2][plain]{ + \special{html:
    } + \verbatiminput{#2} + \special{html:
    } +} +\newcommand{\lstinline}[1]{\special{html:}#1\special{html:}} +\newcommand{\lstloadlanguages}[1]{} +\newcommand{\lstset}[1]{} + +\newenvironment{lstlisting}[1][plain] + {\special{html:
    }\tthverbatim{lstlisting}} + {\special{html:
    }} + +\def\nolinkurl#1{\special{html:}% + \verb|#1|% + \special{html:}} + +\newenvironment{bigdescription}{% + \begin{html}
    \end{html} + \begin{description}\let\term\item + }{\end{description}\begin{html}
    \end{html}} +\newenvironment{longtermsdescription}{% + \begin{html}
    \end{html} + \begin{description} + }{\end{description}\begin{html}
    \end{html}} + +% declare additional css to be included; only effective in the preamble +\renewcommand{\customcss}[1]{% + \begin{html}\end{html}} + +\newcommand{\specialterm}[2]{% + \begin{html}\end{html}#2\begin{html}\end{html}} +\newcommand{\xmlel}[1]{\specialterm{xmlel}{#1}} +\newcommand{\vorent}[1]{\specialterm{vorent}{#1}} +\newcommand{\ucd}[1]{{\sl #1}} + +%don't do table rules, these come in through CSS +\newcommand{\sptablerule}{} + +\def\dquote{"} + +\newcommand{\todo}[2][None]{% + \begin{html}#2\end{html}} + +\newenvironment{SCfigure}{\begin{figure}}{\end{figure}} + +\newcommand{\ivoatex}{% + \special{html:IVOATEX}} + +\newcommand{\auxiliaryurl}[1]{% + \href{https://www.ivoa.net/documents/\ivoaDocname/\ivoaDocdatecode/#1} + {https://www.ivoa.net/documents/\ivoaDocname/\ivoaDocdatecode/#1}} + +\newenvironment{inlinetable}{}{} + +% TODO: support some common styles +\newenvironment{compactenum}[1][None] + {\begin{html}
    \end{html}\begin{enumerate}} + {\end{enumerate}\begin{html}
    \end{html}} + +\newenvironment{compactitem}[1][None] + {\begin{html}
    \end{html}\begin{itemize}} + {\end{itemize}\begin{html}
    \end{html}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%% Simplified support for Harvard citation style + +\newcommand{\harvarditem}[4][0]{% + \special{html:} + \if 0#1 \item[#2 (#3)] + \else \item[#1 (#3)]\fi} +\newcommand{\harvardurl}[1]{\url{#1}} +\newcommand{\harvardand}{\&} +\newcommand{\harvardyearleft}{(} +\newcommand{\harvardyearright}{)} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hacks +% shut up harmless error due to some package we're actually using +\def\AtBeginDocument#1{\relax} +\def\pgfsyspdfmark#1#2#3{\relax} +\def\spacefactor{\relax} +\newbox\voidb@x +\def\@m{\relax} + +% The default rendering of the captions is really ugly, and so I need to +% fiddle in some HTML to let me style it. I frankly cannot quite +% say what tth things the first argument to caption would be in +% the following definition; let's consider it an implementation detail. +\newcommand\caption[2][]{\special{html:
    }% + \tthcaption{#2}\special{html:
    }} + +%%%%%%%%%%%%%%%%%%%% support prettyref +% The following is the effective content of the prettyref package, +% minus the default \newrefformat declarations, which are included as examples. +% (required changes: `\@namedef` doesn't work in tth, +% and we need an extra space in `\prettyref`). +% +% Prettyref is by Kevin Ruland kevin@rodin.wustl.edu (1995, 1998) +% and is released to the public domain. +\def\newrefformat#1#2{\expandafter\def\csname pr@#1\endcsname##1{#2}} +\def\prettyref#1{\@prettyref #1:} +\def\@prettyref#1:#2:{\csname pr@#1\endcsname{#1:#2}} +%\newrefformat{eq}{\textup{(\ref{#1})}} +%\newrefformat{lem}{Lemma \ref{#1}} +%\newrefformat{thm}{Theorem \ref{#1}} +%\newrefformat{cha}{Chapter \ref{#1}} +%\newrefformat{sec}{Section \ref{#1}} +%\newrefformat{tab}{Table \ref{#1} on page \pageref{#1}} +%\newrefformat{fig}{Figure \ref{#1} on page \pageref{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Now open up titlepage metadata +\begin{html} +
    +\end{html} + +\fi diff --git a/ivoatex/tthntbib.sty b/ivoatex/tthntbib.sty new file mode 100644 index 0000000..1a2195d --- /dev/null +++ b/ivoatex/tthntbib.sty @@ -0,0 +1,24 @@ +% Very simplified natbib macros for ivoatex and tth. +% +% This is for use with tth exclusively. +% +% We do not support multiple citations in one cite, any customisation, +% etc -- just plain author (year) and (author, year); also the +% three-argument forms are not supported. Contributions are welcome. +% +% Since the tth braces don't work for us at all, we just turn them off +% entirely and manage them ourselves. +% +% This file is in the public domain + +\def\tthciteob{}\def\tthcitecb{} + +\newcommand{\citet}[2][]{ + \def\tthciteform##1##2##3##4{ + ##3 (##2)} + \cite[#1]{#2}} + +\newcommand{\citep}[2][]{ +\def\tthciteform##1##2##3##4{ + (##3, ##2)} + \cite[#1]{#2}} diff --git a/ivoatex/update_generated.py b/ivoatex/update_generated.py new file mode 100644 index 0000000..4a7048b --- /dev/null +++ b/ivoatex/update_generated.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python +# Update all generated sections in a text file. +# +# This is part of ivoatex. See COPYING for the license. +# +# Generarated sections are between % GENERATED: +# and % /GENERATED. They are supposed to contain the output of +# . get shell-expanded, but since it gets executed +# anyway, it's not even worth doing shell injection. +# +# When this script finishes, it either has updated all sections or +# stopped with an error message of a failed command, in which case the +# original file is unchanged. + +from io import StringIO +import csv +import os +import re +import subprocess +import sys + +try: + import requests +except ImportError: + # silently fail for now; !taptable will not work without requests, though + pass + +class ExecError(Exception): + def __init__(self, command, stderr): + Exception.__init__(self, "Failed command %s"%repr(command)) + if isinstance(stderr, bytes): + stderr = stderr.decode("utf-8", "ignore") + self.command, self.stderr = command, stderr + + +def escape_for_TeX(tx): + """returns tx with TeX's standard active (and other magic) characters + escaped. + """ + return tx.replace("\\", "$\\backslash$" + ).replace("&", "\\&" + ).replace("#", "\\#" + ).replace("%", "\\%" + ).replace("_", "\\_" + ).replace("}", "\\}" + ).replace("{", "\\{" + ).replace('"', '{"}') + + +def cmd_taptable(table_name): + """returns an ivoatex-formatted table describing table_name in the + TAP sevice at $TAPURL. + + This needs the requests module installed, and TAPURL must be defined + in the makefile. + """ + tap_url = os.environ["TAPURL"] + reply = requests.get(tap_url+"/sync", params={ + "LANG": "ADQL", + "REQUEST": "doQuery", + "QUERY": 'SELECT column_name, datatype, "size", description' + ' FROM TAP_SCHEMA.columns WHERE table_name=\'%s\''%table_name, + "FORMAT": "csv"}) + + res = ["\\begin{inlinetable}\n\\small" + r"\begin{tabular}{p{0.28\textwidth}p{0.2\textwidth}p{0.66\textwidth}}" + r"\sptablerule" + r"\multicolumn{3}{l}{\textit{Column names, ADQL types,", + r"and descriptions for the \texttt{%s} table}}\\"%table_name, + r"\sptablerule"] + + for row in csv.DictReader(StringIO(reply.text)): + row = dict((key, escape_for_TeX(value)) + for key, value in row.iteritems()) + if row["size"]=="": + row["size"] = '(*)' + elif row["size"]=='1': + row["size"] = '' + else: + row["size"] = "(%s)"%row["size"] + + res.append(r""" + \makebox[0pt][l]{\scriptsize\ttfamily %(column_name)s}& + \footnotesize %(datatype)s%(size)s& + %(description)s\\"""%row) + + res.extend([ + "\\sptablerule\n\\end{tabular}\n\\end{inlinetable}"]) + + return "\n".join(res) + + +def cmd_schemadoc(schema_name, dest_type): + """returns TeX source for the generated documentation of dest_type within + schema_name. + + We cannot just use the output of the stylesheet, as TeX escapes in + XSLT1 are an inefficient nightmare. + """ + output = subprocess.check_output(["xsltproc", + "--stringparam", "destType", dest_type, + "ivoatex/schemadoc.xslt", schema_name]).decode("utf-8") + # for the TeX escaping, we simply assume there's no nesting + # of escaped sections, and no annotation uses our magic strings. + return "\\begin{generated}\n%s\n\\end{generated}\n"%( + re.sub("(?s)escape-for-TeX{{{(.*?)}}}", + lambda mat: escape_for_TeX(mat.group(1)), output)) + + +def process_one_builtin(command): + """processes a GENERATED block containing a call to a builtin function. + + In the GENERATED opening line, an internal call is signified with a + leading bang (which process_one already removes). + + What's left is a command spec and blank-separated arguments. The command + spec is prepended with cmd_ and then used as a function name to call. + The remaining material is split and passed to the function as positional + arguments. + + The function returns the return value of function, which must be a + string for this to work. + """ + try: + parts = command.split() + print("Calling %s(%s)"%("cmd_"+parts[0], ", ".join(parts[1:]))) + return globals()["cmd_"+parts[0]](*parts[1:]) + except Exception as ex: + ex.command = command + raise + + +def process_one_exec(command): + """processes a GENERATED block containing a shell command. + + command is the shell command as specified in the GENERATED's opening + line. + + The output of the command is returned; in case of failures, an ExecError + is raised. + """ + print("Executing %s"%command) + f = subprocess.Popen(command, shell=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + close_fds=True, bufsize=-1) + stdout, stderr = f.communicate() + + if f.returncode!=0: + raise ExecError(command, stderr) + return stdout.decode("utf-8") + + +def process_one(match_obj): + """processes one GENERATED block, executing the specified command and + returning its output. + + This is intended to be used as a callback within re.sub as executed + by process_all. + """ + command = match_obj.group("command") + if command.startswith("!"): + result = process_one_builtin(command[1:]) + else: + result = process_one_exec(command) + + return ("%% GENERATED: %s\n"%(command.strip()) + +result + +"\n% /GENERATED") + + +def process_all(content): + """replaces all GENERATED blocks within content. + + Exceptions from within one of the recipes are propagated out. + """ + return re.sub(r"(?sm)^%\s+GENERATED:\s+(?P.*?)$" + ".*?" + r"%\s+/GENERATED", + process_one, + content) + + +def parse_command_line(): + import argparse + parser = argparse.ArgumentParser(description="Update generated content" + " in a text file") + parser.add_argument("filename", action="store", type=str, + help="File to process (will be overwritten).") + return parser.parse_args() + + +def main(): + args = parse_command_line() + with open(args.filename, "rb") as f: + content = f.read().decode("utf-8") + + try: + content = process_all(content) + except ExecError as ex: + sys.stderr.write("Command %s failed. Message below. Aborting.\n"% + ex.command) + sys.stderr.write(ex.stderr+"\n") + sys.exit(1) + + content = content.encode("utf-8") + with open(args.filename, "wb") as f: + f.write(content) + + +if __name__=="__main__": + main() diff --git a/ivoatex/vo-dml2ivoatex.xslt b/ivoatex/vo-dml2ivoatex.xslt new file mode 100644 index 0000000..90f2cc4 --- /dev/null +++ b/ivoatex/vo-dml2ivoatex.xslt @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + +% ------------------------------------------- +% Items to substitute into the ivoatex document template. +% +%\ivoagroup{Data Model Working Group} + +%\title{} + + + + + + + + + +%\previousversion[]{} + + +%\previousversion{} + + + +% ------------------------------------------- + + + + +\pagebreak +\section{Model: } + : + % INSERT FIGURE HERE + %\begin{figure}[h] + %\begin{center} + % \includegraphics[width=\textwidth]{????.png} + % \caption{???}\label{fig:????} + %\end{center} + %\end{figure} + + + + + + + + + + + + + + + + +\pagebreak +\section{Package: } + + % INSERT FIGURE HERE + %\begin{figure}[h] + %\begin{center} + % \includegraphics[width=\textwidth]{????.png} + % \caption{???}\label{fig:????} + %\end{center} + %\end{figure} + + + + + + + + + + + + + + + + + + + + + \subsection{} + \label{sect:} + + + + + + + + + + + + + + + + + \subsection{} + \label{sect:} + + + + + + \subsection{} + \label{sect:} + + + + \noindent \underline{Enumeration Literals} + \vspace{-\parsep} + \small + \begin{itemize} + + + + + + + + + + + + \item[\textbf{}]: \textbf{vodml-id:} \newline + \textbf{description:} + + \end{itemize} + \normalsize + + + + + + + + + + + + + + + \hyperref[sect:ivoa]{} + \hyperref[sect:]{} + + + + + + + + \subsubsection{.} + \textbf{vodml-id: } \newline + \textbf{type: } \newline + \textbf{vocabulary: } \newline + \textbf{multiplicity: } \newline + + + + \subsubsection{.} + \textbf{vodml-id: } \newline + \textbf{type: } \newline + \textbf{multiplicity: (ordered)} \newline + + + + + + + + + + +%\author{} + + + + + + + + + + + + + + + + + + + + + + + + + + + + [TODO add description!] + + + + + + + \noindent \textbf{subset} \newline + \indent \textbf{role: } \newline + \indent \textbf{type: } \newline + + + + + + \noindent \textbf{constraint} \newline + \indent \textbf{detail: . }\newline + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + (Abstract) + + + + + + + + + + + + + + + & + \& + + + + + + + + + + + + + + + + + ^ + \^ + + + + + + + + + + + + + + + + + _ + \_ + + + + + + + + + + + + + + + + From da71a07756d93cb30b28d06b4db544c45fb6065e Mon Sep 17 00:00:00 2001 From: BONNAREL FRANCOIS Date: Fri, 8 Dec 2023 16:38:47 +0100 Subject: [PATCH 02/10] Add/Update GH-Workflows for PDF Preview --- .github/workflows/build.yml | 45 ++++++++++++++++++++++++ .github/workflows/preview.yml | 66 +++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/preview.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..56eb33b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,45 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Check the IVOA document + +env: + doc_name: DataLinkImp + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + + - name: Build the document + run: make + + - name: Check the output + run: | + test -f ${{ env.doc_name }}.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Keep the PDF artefact + uses: actions/upload-artifact@v1 + with: + name: PDF Preview + path: ${{ env.doc_name }}.pdf diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000..0be7e00 --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,66 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Update PDF Preview + +env: + doc_name: DataLinkImp + +on: + push: + branches: + - master + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + sudo snap install pdftk + + - name: Build the document + run: make ${{ env.doc_name }}-draft.pdf + + - name: Check the output + run: | + test -f ${{ env.doc_name }}-draft.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Move the auto-pdf-preview tag + uses: weareyipyip/walking-tag-action@v2 + with: + tag-name: auto-pdf-preview + tag-message: | + Last commit taken into account for the automatically updated PDF preview of this IVOA document. + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Update the PDF preview + uses: Xotl/cool-github-releases@v1 + with: + mode: update + isPrerelease: true + tag_name: auto-pdf-preview + release_name: "Auto PDF Preview" + body_mrkdwn: | + This release aims to provide a PDF preview of the last commit applied on this repository. + It will be updated automatically after each merge of a PullRequest. + **DO NOT PUBLISH THIS PRE-RELEASE!**" + _Corresponding commit: ${{ github.sha }}_ + assets: ${{ env.doc_name }}-draft.pdf + replace_assets: true + github_token: ${{ secrets.GITHUB_TOKEN }} From 01d1e1ba33b34214a419c4f08a547744f0295691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bonnarel?= <52417996+Bonnarel@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:40:37 +0100 Subject: [PATCH 03/10] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 16883e1..804b63c 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# DataLinkRecImplNote \ No newline at end of file +# DataLinkRecImplNote + + From f52653a3ab1375a7ed3b35d11afc7b92d1e6264d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bonnarel?= <52417996+Bonnarel@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:43:19 +0100 Subject: [PATCH 04/10] Create main.yml --- .github/workflows/main.yml | 64 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..7a80d83 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,64 @@ +name: Update PDF Preview + +env: + doc_name: DataLinkImp + +on: + push: + branches: + - master + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo add-apt-repository ppa:inkscape.dev/stable + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk ghostscript cm-super librsvg2-bin inkscape openjdk-8-jre-headless + sudo snap install pdftk + + - name: Build the document + run: | + inkscape --version + make + make role_diagram.pdf biblio forcetex ${{ env.doc_name }}-draft.pdf + + - name: Check the output + run: | + test -f ${{ env.doc_name }}-draft.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Move the auto-pdf-preview tag + uses: weareyipyip/walking-tag-action@v2 + with: + tag-name: auto-pdf-preview + tag-message: | + Last commit taken into account for the automatically updated PDF preview of this IVOA document. + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Update the PDF preview + uses: Xotl/cool-github-releases@v1 + with: + mode: update + isPrerelease: true + tag_name: auto-pdf-preview + release_name: "Auto PDF Preview" + body_mrkdwn: | + This release aims to provide a PDF preview of the last commit applied on this repository. + It will be updated automatically after each merge of a PullRequest. + **DO NOT PUBLISH THIS PRE-RELEASE!**" + _Corresponding commit: ${{ github.sha }}_ + assets: ${{ env.doc_name }}-draft.pdf + replace_assets: true + github_token: ${{ secrets.GITHUB_TOKEN }} From 2dc8907f994bf668b6ec474c9aff0a4461bdc9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bonnarel?= <52417996+Bonnarel@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:43:40 +0100 Subject: [PATCH 05/10] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 804b63c..f05a18a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ # DataLinkRecImplNote - - From ca1d7ae169c20c0e0977fe3d526961dca7908575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bonnarel?= <52417996+Bonnarel@users.noreply.github.com> Date: Fri, 8 Dec 2023 22:40:35 +0100 Subject: [PATCH 06/10] Update build.yml --- .github/workflows/main.yml | 59 +++++++++++++------------------------- 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7a80d83..56eb33b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,16 +1,21 @@ -name: Update PDF Preview +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Check the IVOA document env: doc_name: DataLinkImp on: - push: - branches: - - master + pull_request: + types: [opened, synchronize, reopened] jobs: build: - + runs-on: ubuntu-latest steps: @@ -22,43 +27,19 @@ jobs: - name: Setup dependencies run: | - sudo add-apt-repository ppa:inkscape.dev/stable sudo apt update - sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk ghostscript cm-super librsvg2-bin inkscape openjdk-8-jre-headless - sudo snap install pdftk - + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + - name: Build the document - run: | - inkscape --version - make - make role_diagram.pdf biblio forcetex ${{ env.doc_name }}-draft.pdf - + run: make + - name: Check the output run: | - test -f ${{ env.doc_name }}-draft.pdf + test -f ${{ env.doc_name }}.pdf test -f ${{ env.doc_name }}.bbl - - - name: Move the auto-pdf-preview tag - uses: weareyipyip/walking-tag-action@v2 - with: - tag-name: auto-pdf-preview - tag-message: | - Last commit taken into account for the automatically updated PDF preview of this IVOA document. - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Update the PDF preview - uses: Xotl/cool-github-releases@v1 + + - name: Keep the PDF artefact + uses: actions/upload-artifact@v1 with: - mode: update - isPrerelease: true - tag_name: auto-pdf-preview - release_name: "Auto PDF Preview" - body_mrkdwn: | - This release aims to provide a PDF preview of the last commit applied on this repository. - It will be updated automatically after each merge of a PullRequest. - **DO NOT PUBLISH THIS PRE-RELEASE!**" - _Corresponding commit: ${{ github.sha }}_ - assets: ${{ env.doc_name }}-draft.pdf - replace_assets: true - github_token: ${{ secrets.GITHUB_TOKEN }} + name: PDF Preview + path: ${{ env.doc_name }}.pdf From 3824fb920a07214df4a057feb4eafedda775bc47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bonnarel?= <52417996+Bonnarel@users.noreply.github.com> Date: Fri, 8 Dec 2023 22:45:40 +0100 Subject: [PATCH 07/10] Add files via upload --- .github/workflows/build.yml | 45 ++++++++++++++++++++++++ .github/workflows/preview.yml | 66 +++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/preview.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..56eb33b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,45 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Check the IVOA document + +env: + doc_name: DataLinkImp + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + + - name: Build the document + run: make + + - name: Check the output + run: | + test -f ${{ env.doc_name }}.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Keep the PDF artefact + uses: actions/upload-artifact@v1 + with: + name: PDF Preview + path: ${{ env.doc_name }}.pdf diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000..0be7e00 --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,66 @@ +# This file generated from a template file maintained in the ivoatex repository. +# To create and install it into a project repository, do: +# make github-preview +# git commit +# git push +# +name: Update PDF Preview + +env: + doc_name: DataLinkImp + +on: + push: + branches: + - master + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - name: Checkout the repository + uses: actions/checkout@v1 + with: + submodules: true + + - name: Setup dependencies + run: | + sudo apt update + sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super + sudo snap install pdftk + + - name: Build the document + run: make ${{ env.doc_name }}-draft.pdf + + - name: Check the output + run: | + test -f ${{ env.doc_name }}-draft.pdf + test -f ${{ env.doc_name }}.bbl + + - name: Move the auto-pdf-preview tag + uses: weareyipyip/walking-tag-action@v2 + with: + tag-name: auto-pdf-preview + tag-message: | + Last commit taken into account for the automatically updated PDF preview of this IVOA document. + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Update the PDF preview + uses: Xotl/cool-github-releases@v1 + with: + mode: update + isPrerelease: true + tag_name: auto-pdf-preview + release_name: "Auto PDF Preview" + body_mrkdwn: | + This release aims to provide a PDF preview of the last commit applied on this repository. + It will be updated automatically after each merge of a PullRequest. + **DO NOT PUBLISH THIS PRE-RELEASE!**" + _Corresponding commit: ${{ github.sha }}_ + assets: ${{ env.doc_name }}-draft.pdf + replace_assets: true + github_token: ${{ secrets.GITHUB_TOKEN }} From 6de9344bd7ee2bc1d0e9a4f6f1b00625116c2ea1 Mon Sep 17 00:00:00 2001 From: BONNAREL FRANCOIS Date: Fri, 8 Dec 2023 22:47:09 +0100 Subject: [PATCH 08/10] Actions update --- DataLinkImp.tex | 10 +++++----- Makefile | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DataLinkImp.tex b/DataLinkImp.tex index 322130a..b3fe5fe 100644 --- a/DataLinkImp.tex +++ b/DataLinkImp.tex @@ -6,18 +6,18 @@ % see ivoatexDoc for what group names to use here \ivoagroup{DAL} -\author[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler] - {Patrick Dowler} \author[http://www.ivoa.net/twiki/bin/view/IVOA/FrancoisBonnarel] {Fran\c{c}ois Bonnarel} -\author[http://www.ivoa.net/twiki/bin/view/IVOA/LaurentMichel] - {Laurent Michel} \author[http://www.ivoa.net/twiki/bin/view/IVOA/MarkusDemleitner] {Markus Demleitner} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler] + {Patrick Dowler} +\author[http://www.ivoa.net/twiki/bin/view/IVOA/LaurentMichel] + {Laurent Michel} \author[http://www.ivoa.net/twiki/bin/view/IVOA/MarkTaylor] {Mark Taylor} \editor[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler] - {Patrick Dowler} + {Fran\c{c}ois Bonnarel} % \previousversion[????URL????]{????Concise Document Label????} \previousversion{This is the first public release} diff --git a/Makefile b/Makefile index 739313a..8c92733 100644 --- a/Makefile +++ b/Makefile @@ -7,14 +7,14 @@ DOCNAME = DataLinkImp DOCVERSION = 1.0 # Publication date, ISO format; update manually for "releases" -DOCDATE = 2020-02-16 +DOCDATE = 2023-12-08 # What is it you're writing: NOTE, WD, PR, REC, PEN, or EN DOCTYPE = NOTE # An e-mail address of the person doing the submission to the document # repository (can be empty until a make upload is being made) -AUTHOR_EMAIL= +AUTHOR_EMAILi = francois.bonnarel@astro.unistra.fr # Source files for the TeX document (but the main file must always # be called $(DOCNAME).tex From c3bd04cdb9641ed8a7842a27c97280cd26791655 Mon Sep 17 00:00:00 2001 From: BONNAREL FRANCOIS Date: Fri, 8 Dec 2023 23:03:36 +0100 Subject: [PATCH 09/10] suppress main action --- .github/workflows/main.yml | 45 -------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 56eb33b..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,45 +0,0 @@ -# This file generated from a template file maintained in the ivoatex repository. -# To create and install it into a project repository, do: -# make github-preview -# git commit -# git push -# -name: Check the IVOA document - -env: - doc_name: DataLinkImp - -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - - name: Checkout the repository - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup dependencies - run: | - sudo apt update - sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended xsltproc latexmk cm-super - - - name: Build the document - run: make - - - name: Check the output - run: | - test -f ${{ env.doc_name }}.pdf - test -f ${{ env.doc_name }}.bbl - - - name: Keep the PDF artefact - uses: actions/upload-artifact@v1 - with: - name: PDF Preview - path: ${{ env.doc_name }}.pdf From bbdc9ee8cba25048a181d685aeb5894e900ff1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Mantelet?= Date: Fri, 5 Jan 2024 11:19:27 +0100 Subject: [PATCH 10/10] Fix typos --- DataLinkImp.tex | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/DataLinkImp.tex b/DataLinkImp.tex index b3fe5fe..4afbfff 100644 --- a/DataLinkImp.tex +++ b/DataLinkImp.tex @@ -64,11 +64,11 @@ \section{Introduction} via one service to related data products, and web services that can act upon the data. -The {\em links\/} web service capability is a web service capability +The \blinks web service capability is a web service capability for drilling -down from a discovered data item such as a dataset identifier, a source in a cata- -log or any other data item. In the first case (typically an IVOA publisher -dataset identifier) iit allows to find details about the data files that can be +down from a discovered data item such as a dataset identifier, a source in a +catalog or any other data item. In the first case (typically an IVOA publisher +dataset identifier) it allows to find details about the data files that can be downloaded, alternate representations of the data that are available, and services that can act upon the data (usually without having to download the entire dataset). In the latter cases it allows to associate metadata, images, @@ -83,37 +83,38 @@ \section{Introduction} The current document is an implementation note for \blinks endpoint recognition in various contexts. -We reviewing three methods by which DataLink documents can be associated to resource entries in service responses and suggest possible choices according to the context. +We are reviewing three methods by which DataLink documents can be associated to resource entries in service responses and suggest possible choices according to the context. \section{DataLink and SIAP-2.0 or ObsTAP services} SIAP-2.0 \citep{2015ivoa.spec.1223D} services are queriable by setting contraints on the four "axes" of the data (2D-space, spectral, time and polarization) and their properties. Other archive metadata or data details are also queriable (target, collection, facilities, etc...). ObsTAP services are TAP services delivering the ivoa.Obscore table queriable via ADQL. The successfull response is a VOTable containing a mandatory result TABLE and optional service descriptor resource(s). \subsection{DataLink discovery via format and reference columns} -The result table describes the dataset characterization on the different axes and give additional operative features. The various columns are mapped from the ObsCore-1.1 data model (reference). The accessReference and AccessFormat fields give different solutions to reach the dataset for download or access. This can be done in two ways: +The result table describes the dataset characterization on the different axes and give additional operative features. The various columns are mapped from the ObsCore-1.1 data model (reference). The \verb|accessReference| and \verb|AccessFormat| fields give different solutions to reach the dataset for download or access. This can be done in two ways: \begin{itemize} -\item The data discovery step has yielded a result with the AccessFormat value (media type) : application/x-votable+xml;content=datalink - To the client, this indicates that what is given in the access reference (e.g., the access\_url column in ObsTAP or SIAP-2.0) is a datalink document (see below for DataLink functionalities). +\item The data discovery step has yielded a result with the \verb|AccessFormat| value (media type) : +\verb|application/x-votable+xml;content=datalink| + To the client, this indicates that what is given in the access reference (e.g. the \verb|access_url| column in ObsTAP or SIAP-2.0) is a DataLink document (see below for DataLink functionalities). \item In case the media type is different, the access reference is a direct link to the dataset download. \end{itemize} \subsection{SIAP-2.0, ObsTAP and service descriptors} -To enable additional Datalink functionalities, SIAP-2.0 or ObsTAP services can then add a service descriptor in the query response that indicates the availability of a Datalink service accompanying the DAL service. It references one (or more) field(s) from the DAL response. +To enable additional DataLink functionalities, SIAP-2.0 or ObsTAP services can then add a service descriptor in the query response that indicates the availability of a DataLink service accompanying the DAL service. It references one (or more) field(s) from the DAL response. -This is explained in detail in DataLink specification, section 4.2. The net result is that DataLink-enabled clients can find ancillary data and use associated services for data access or processing by virtue of being able to retrieve Datalink documents. +This is explained in detail in DataLink specification, section 4.2. The net result is that DataLink-enabled clients can find ancillary data and use associated services for data access or processing by virtue of being able to retrieve DataLink documents. The service descriptor embedded in an ObsTAP query response is allowed because ObsTAP is a peculiar TAP service and TAP allows the TAP response to contain additional resources in addition to the "results" one (See section 2.9 of TAP-1.0 specification). Hence the inclusion of a service descriptor service is valid. \section{DataLink in the context of other dataset discovery methods} -Datasets can also be discovered in various other ways. Dataset "discovery" is defined as the discovery of the ivoa publisher\_did of a dataset in standard services or by the ad hoc discovery of "obsids" in combination with the a priori knowledge of a DataLink service "aware" of these obsids. +Datasets can also be discovered in various other ways. Dataset "discovery" is defined as the discovery of the IVOA \verb|publisher_did| of a dataset in standard services or by the ad hoc discovery of "obsids" in combination with the a priori knowledge of a DataLink service "aware" of these obsids. Beside the most standard and modern discovery path via ObsTAP/SIAP-2.0, the following alternative scenarii are possible: \begin{itemize} -\item The discovery can be done via an SIAP-1.0 or an SSA service. A DataLink service descriptor should have been added to the Service query response to allow further guiding to additional resources -\item The discovery can be done via a paper in a journal implementing publication of datasets associated with articles. The editor should describe or implement a DataLink service (eg via a service descriptor valid for the journal) for further usage and access to download, DataAcces, metadata resources. +\item The discovery can be done via an SIAP-1.0 or an SSA service. A DataLink service descriptor should have been added to the service query response to allow further guiding to additional resources +\item The discovery can be done via a paper in a journal implementing publication of datasets associated with articles. The editor should describe or implement a DataLink service (eg via a service descriptor valid for the journal) for further usage and access to download DataAccess metadata resources. \item Logs of observations are dataset descriptions belonging to the catalog category. They can be exposed in the VO using ConeSearch or TAP. They are in general not consistent with the ObsCore model. However they allow some kind of "dataset discovery". A Service descriptor can be added to the VOTable containing the log file. -\item HiPS is an IVOA standard for a global and hierarchical allsky access to pixel and catalogue data (reference HIPS). HiPS cells contain ids for original dataset which have been processed to build the Healpix maps. HiPS metadata file allows to generate a specific VOTable record for each cell of the HiPS collection including a "progenitor" url. This can be a new way to discover datasets and start a DataLink session to find out additional associated resources. +\item HiPS is an IVOA standard for a global and hierarchical allsky access to pixel and catalogue data (reference HIPS). HiPS cells contain ids for original dataset which have been processed to build the Healpix maps. HiPS metadata file allows to generate a specific VOTable record for each cell of the HiPS collection including a "progenitor" URL. This can be a new way to discover datasets and start a DataLink session to find out additional associated resources. \end{itemize} \section{DataLink outside Data discovery context} @@ -134,13 +135,13 @@ \section{DataLink outside Data discovery context} \end{itemize} We could also attach links to entities in an IVOA provenance metadata service response. \section{Various recognition solutions for use cases introduced in section 3 and 4} - In such contexts, the links ressource URL attached to a record may be given in various ways: + In such contexts, the \blinks resource URL attached to a record may be given in various ways: \begin{itemize} \item It may be deduced from an "identifier" given by one of the main table FIELD. In that case it is easy to attach a service descriptor to the main VOTable containing the measurements. \item It may be given directly in one of the FIELD of the table (let's say the name of this FIELD is "bla"). In that case we may still have two different situations. \begin{itemize} -\item If the FIELD "bla" contains URL driving different contents from row to row, it is a good idea to use an "Obscore"-like solution, consisting in addding the utype "Access.reference" to FIELD bla, and to add a "foo" column with utype "Access.format" to tell the client what is the nature of the retrieved resource (\{links\} resource or whatever other media type). -\item If the FIELD "bla" contains always an URL to the \{links\} resource (or whatever media type) without any change from row to row, it is recommendedd to use a LINK element inside the FIELD "bla" to qualify the url as described in DataLink specification, section 5. +\item If the FIELD "bla" contains URL driving different contents from row to row, it is a good idea to use an "Obscore"-like solution, consisting in addding the utype \verb|Access.reference| to FIELD "bla", and to add a "foo" column with utype \verb|Access.format| to tell the client what is the nature of the retrieved resource (\{links\} resource or whatever other media type). +\item If the FIELD "bla" contains always an URL to the \{links\} resource (or whatever media type) without any change from row to row, it is recommended to use a LINK element inside the FIELD "bla" to qualify the URL as described in DataLink specification, section 5. \end{itemize} \end{itemize}